WireShark抓包分析TCP三次握手过程,TCP报文解析

WireShark抓包分析TCP三次握手过程,TCP报文解析

使用WireShark工具抓取TCP协议三次握手的数据包,分析TCP三次握手过程,分析TCP报文中各个字段的作用。

拿到 目标网络的IP地址

以百度为例

  • 打开wireshark,开启抓包,然后打开浏览器访问百度,触发TCP三次握手。

  • 打开cmd,ping www.baidu.com 拿到百度的IP地址。

img.png


过滤TCP协议的数据包

显示过滤器输入:tcp and ip.addr== 39.156.66.10,过滤出TCP协议的数据包。

img.png


数据包分析

看第一个数据包

img.png

Source字段:源地址

Detintion字段: 目的地址

Info字段,是请求的描述,可以看到里面有一个 SYN

SYN:(Synchronize Sequence Numbers):第一次握手的标志

客户端向服务器发送一个SYN报文,其中包含客户端的初始序列号(ISN)。这个报文表明客户端希望与服务器建立连接,并通知服务器客户端的初始序列号。

第二个数据包

img.png

百度的服务器(收到我的链接请求以后)向我的电脑发送了一个TCP请求,SYN+ACK表示这是一个应答的请求,这是第二次握手。

SYN-ACK(Synchronize-Acknowledge):服务器收到客户端的SYN报文后,会发送一个SYN-ACK报文作为响应。这个报文包含服务器的初始序列号(不同于客户端的),以及对客户端初始序列号的确认(ACK)。

第三个数据包

img.png

我的电脑(收到百度服务器的响应请求后)向百度的服务器发送了一个TCP请求,ACK表示这是一个确认请求,这是第三次握手

ACK(Acknowledge):客户端收到服务器的SYN-ACK报文后,会发送一个ACK报文作为最后的确认。这个ACK报文确认了服务器的初始序列号。至此,三次握手完成,TCP连接建立成功,双方可以开始数据传输。


数据报文分析

TCP协议数据报文格式如下图
wireshark_tcp01_06.png

点开TCP协议的数据包

第四行 Transmission Control Protocol 就是TCP协议的数据了。按照首字母区分协议。

  • Source Port字段是源端口,客户端会使用一个随机端口向服务器发起TCP连接
  • Destination Port字段是目的端口,因为我们是用https协议访问百度,所以这里是向服务器的443端口发起TCP连接

序号和确认号用来按顺序重组数据

  • Sequence Number:表示本次传输数据的起始字节在整个数据流中的位置,是相对序号
  • Sequence Number (Raw):原始序号
  • Next Sequence Numvber:下一个包的序号
  • Acknowledgment Number:期望收到下一个包的序号,相对序号
  • Acknowledgment Number(Raw):原始序号

数据偏移表示数据到开始位置的距离,用来计算TCP报文的首部长度

img.png

标志位用来确认请求的作用,三次握手中需要注意的两个标志位是:Acknowledgment (ack)和 syn

  • Reserved:保留位
  • Nonce:显式拥塞通知,标明阻塞即将发生,让发送方降低传输速率
  • CWR:减少拥塞窗口
  • ECN-Echo:有两种意思,取决于SYN的值
  • 紧急 URG(Urgent):为1表示高优先级数据包
  • 确认 ACK(Acknowledgment ):为1表示确认号字段有效
  • 推送 PSH(Push):为1表示接收方尽快将这个报文交给应用层而不用等待缓冲区装满
  • 复位 RST(Reset):为1表示出现严重错误,需要重新建立连接
  • 复位 SYN:建立连接时同步序号;SYN=1和ACK=0表示连接的请求,SYN=1和ACK=1表示接收连接的请求
  • 终止 FIN:为1表示传输完成,请求释放链接

注意看第一次握手的数据包,因为标志位里只有Syn的值为1,所以Flags显示的是SYN,请求的Info字段也就显示 SYN
img.png

再看第二次请求的数据包,因为标志位里Syn和Acknowledgment的值都是1,所以Flags显示的是 SYN,ACK,请求的Info字段也就显示 SYN,ACK
img_1.png

最后就是窗口大小、校验和、紧急指针、选项、填充这几个字段

  • window字段表示窗口大小,告诉对方自己所能接收的最大字节是多少,用于流量控制
  • Checksum字段表示校验和,用来检验数据包的完整性
  • Urgent Poiter字段表示紧急指针,在标志位URG为1的时候有效,代表一个偏移量,和序号字段值相加
  • Options字段表示选项,长度可变
  • Timestamps字段表示填充

WireShark抓包分析TCP三次握手过程,TCP报文解析

http://jenkina.cn/2024/01/03/net/net_01_sanciwoshou/

作者

Jenkin Liu

发布时间

2024-01-03

更新时间

2024-04-16

许可协议

评论