利用wireshark对TCP抓包分析

抓包结果已上传可免费下载对应观看:
wireshark抓包结果

一、流程梳理

我的机子192.168.1.131简称A与服务端机子223.166.138.30简称B先三次握手建立TCP连接,再进行HTTP请求,最后四次挥手断开TCP连接
1.三次握手:
在这里插入图片描述
A先给B发出一个SYN包请求建立连接
B给A发回一个ACK SYN包针对上一个SYN请求且发出请求建立连接
A再给B发回一个ACK包针对上一个SYN请求

2.PSH
在这里插入图片描述
TCP segment of a reassembled PDU,字面意思是要重组的协议数据单元(PDU:Protocol Data Unit)的TCP段。比如由多个数据包组成的HTTP协议的应答包,如下

这里的分段是指:上层协议HTTP的应答由多个分段组成,每个分段都是TCP协议的。TCP本身没有分段的概念,它的sequence number和acknowledge number 是使TCP是基于流的协议的支撑,TCP segment of a reassembled PDU的出现是因为Wireshark分析了其上层的HTTP协议而给出的摘要,如果配置Wireshark不支持HTTP协议解析

参考:https://blog.csdn.net/weixin_30439067/article/details/97999147?spm=1001.2101.3001.6650.1&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7Edefault-1-97999147-blog-103210932.pc_relevant_multi_platform_whitelistv3&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7Edefault-1-97999147-blog-103210932.pc_relevant_multi_platform_whitelistv3&utm_relevant_index=2

PSH(Push):告诉对方收到该报文段后是否立即把数据推送给上层。如果值为 1,表示应当立即把数据提交给上层,而不是缓存起来。

3.HTTP的请求与相应
在这里插入图片描述
HTTP的工作方式是先由客户端向服务器发起一个请求,再由服务器回复一个相应,根据不同需要,客服端发送的请求会用到不同的方法,有GET、POST、PUT等,
这里使用了POST方法,多用于网站上登录账号,用来传输实体的主体
/cloudquery.php表示请求URI
HTTP/1.1表示协议版本
对于POST方法的相应是服务端接收主体的处理结果
200OK表示从客服端发来的请求在服务器端被正常处理了

4.TCP的四次挥手
在这里插入图片描述
由于TCP是全双工连接,需要双方互相通知断开连接,然后对端应答这个通知
这里和书上的例子顺序会有所不同
A主机先发送断开连接请求
B主机紧接着发送断开连接请求
B主机相应A主机的断开连接请求
A主机响应B主机的断开连接请求

二、读网络包

现在打开B主机响应A主机建立连接请求的第80号包:
在这里插入图片描述
最下方的为整个数据包的16进制形式,由于是对于建立连接请求的相应包,所以并没有携带要传输的信息,只有各个层的数据头

第一行:因为这个包是在主机上抓的,所以最外层的是通过数据链路层封装的,数据链路层会将数据包封装陈帧(Frame),帧的序号就是这个包的序号,该包共64字节
第二行:数据链路层,从中可以看到相邻两个设备的MAC地址,源MAC地址还能看到路由器的型号捏,因此该网络包才能以接力的方式送达目的地址
第三行:网络层,在该数据包中本层主要任务是把TCP层传下来的数据加上目的地址和源地址
第四行:传输层,指明使用了TCP协议及原端口号和目的端口号,以及TCP连接中的一些信息
第五行:填充的意思。
因为在以太网中,规定最小的数据包为64个字节,如果数据包不足64字节,则会由网卡填充。
在sniffer中显示padding,而wiershark则显示trailer。

点开网络层,再点开其中的源IP地址:
在这里插入图片描述
223对应df,166对应a6,138对应8a,30对应1e
1e:16+14=30
再点开传输层:
在这里插入图片描述
可以看到源端口号为80,目标端口号为55469
序列号为11769945
确认应答号为1205542292
数据偏移,保留,控制位一起记录在flags中:
在这里插入图片描述
16进制70转为二进制:0111 1110
首部长度0111转为十进制为7,TCP首部长度单位为4字节,即28字节
保留位1110,主要是为了以后扩展使用,暂时忽略
16进制12转为二进制:0001 0010
对应图上只有SYN与ACK置1,确实符合
在这里插入图片描述
窗口大小14600
校验和0x0376
紧急指针0
选项:选项字段主要用于提高TCP的传输性能
在这里插入图片描述
对TCP首部一个更直观的展示:
在这里插入图片描述

三、关于TCP的三次握手与四次挥手

在这里插入图片描述
A与B单独维护其发送法术网络包的序列号
A发送表示建立连接的网络包序列号为1205542291
B也发送表示建立连接的网络包,其序列号为117691945,其中确认号为1205542292,在建立和断开连接时发送的SYN包和FIN包虽然并不携带数据,但是也会作为一个字节增加对应的序列号,否则其序列号就是上一个数据包的序列号加上其长度,这个确认号既表示收到了上一个数据包,又表示对方下次发数据包的起始序列号应该是多少
A针对B发送的建立连接请求发出一个确认,其序列号为1205542292,确认号为117691946
在这里插入图片描述

大部分与握手时相似,注意的点:
TCP连接断开前进行是HTTP的响应,该响应的序列号117691946,长度为482,加起来为117692428,也就是B下次再发数据包的序列号
倒数第二个包既不是syn包也不是fin包,其中也没有数据,因此B端的syn计数不会加1

四、关于窗口大小的变化

MSS:maximum segment size最大消息长度

MSS (Maximum Segment Size)是 TCP Layer (L4) 的属性, MSS 指的是 TCP payload 的长度. 当在 MTU 1500 的网络上传输时, MSS 为 1460 (即 1500 减去 20 字节 IP 头, 20 字节 TCP 头).
发送窗口决定了一口气能发送多少字节,而MSS决定了这些字节要分成多少个段发送
如发送窗口是16000字节时,MSS是1000字节,就要分成16个段进行发送

在建立TCP连接时,两端互相发送MSS然后取最小的MSS投入使用
在这里插入图片描述
这里两个MSS一样

流控制:TCP提供一种机制可以让发送端根据接收端的实际接收能力控制发送的数据量,具体操作:接收端主机向发送端主机通知主机可以接收数据的大小,于是发送端会发送不超过这个限度的数据,当接收端的缓冲区溢出时,窗口大小的 值也会随之设置成一个更小的值通知发给发送端,从而控制数据发送量。
注意window size不是指发送窗口,而是告诉对方自己的接受窗口,也就是自己的缓冲区大小

猜你喜欢

转载自blog.csdn.net/qq_42567607/article/details/125940614