TCP 报文分析

文章目录

    • TCP数据格式
    • 握手通讯过程
      • 握手-抓包分析
        • 包1,发送方请求建立连接
        • 包2,服务方同意建立连接
        • 包3,发送方确认建立连接
    • 挥手通讯过程
      • 挥手--抓包分析
        • 包1-- 发起方请求断开连接
        • 包2 -- 接收方接收确认
        • 包3 -- 接收方确认断开连接
        • 包4 -- 请求方断开确认
    • header格式分析
      • 源端口和目的端口
      • 序列号和确认号
      • 数据偏移字段
      • 保留字段
      • 标志位字段
      • 窗口大小字段
      • TCP校验和字段
      • 紧急指针字段
      • 可选项字段
    • 协商过程理解
  • 参考资料

TCP数据格式

TCP 报文分析_第1张图片

握手通讯过程

TCP 报文分析_第2张图片

握手通讯,完成事宜:

  1. 建立通讯;
  2. 确认双方消息发送的sequence number;
  3. 确认window size;

握手-抓包分析

TCP握手的三个报
在这里插入图片描述

包1,发送方请求建立连接

包括信息:
请求建立连接(SYN = 1, ACK = 0)
发送方Sequence Number:189215271
Window Size(协商值): 64240 * 2^8。 (window * 2 ^ Window scale)

TCP 报文分析_第3张图片

包2,服务方同意建立连接

包括信息:

  1. 同意建立连接(SYN = 1, ACK = 1)
  2. 服务方Sequence Number:240050740
  3. Window Size(协商值):29200 * 2^7
    TCP 报文分析_第4张图片
包3,发送方确认建立连接

包含信息:

  1. 连接建立确认(ACK=1)
  2. 确认Window Size:1029 * 256

TCP 报文分析_第5张图片

挥手通讯过程

TCP 报文分析_第6张图片

挥手–抓包分析

在这里插入图片描述

包1-- 发起方请求断开连接

TCP 报文分析_第7张图片

包2 – 接收方接收确认

TCP 报文分析_第8张图片

包3 – 接收方确认断开连接

TCP 报文分析_第9张图片

包4 – 请求方断开确认

TCP 报文分析_第10张图片

header格式分析

感受:这个协议设计的很巧妙,接收双方在数据传输过程中自动完成了协商的过程。借助TCP头部信息完成整个协商过程。
包括接收方数据接收能力、接收进度、是否丢包、网络是否拥塞等。
已保证网络整体的传输效率(防止轻载或者过载)最优。

源端口和目的端口

  • Source port:源端口;
  • Destination port:目标端口。

序列号和确认号

  • Sequence Number:序列号字段。用于标识本报文段中所发送数据的第一个字节的编号。TCP传输中,每个字节都会按顺序编号。如果SYN标记为1时(表示发送方请求建立连接),这个序列号是初始序列值;如果SYN标记不为1,表示是当前数据分段的第一个字母的序列号;
  • Acknowledgment Number (Ack Number):TCP确认号。表示接收方期望接收的下一个报文段的第一个字节数据的编号。即编号为ack-1以及之前的字节均已收到。

数据偏移字段

  • Header Length:TCP首部长度;数据偏移指数据段中“数据”部分起始处距离TCP数据段起始处的字节偏移量。

保留字段

  • Reserved:保留字段

标志位字段

  • CWR (Congestion Window Reduce):拥塞窗口减少标志,用来表明它接收到了设置ECE标志的TCP包。并且,发送方接收到消息之后,通过减少发送窗口的大小来降低发送速率;
  • ECE(ECN Echo):用来在TCP三次握手时表明一个TCP端是具备ECN功能的;
  • URG (Urgent):表示本报文段中发送的数据是否包含紧急数据;
  • ACK:表示前面的确认号字段是否有效。ACK=1时表示有效;
  • PSH (Push) : 告诉对方接收到该报文后是否立即把数据推送给上层;
  • RST:表示是否重置连接。如果RST=1,说明TCP连接出现了严重错误(如主机崩溃),必须释放连接,然后再重新建立连接;
  • SYN:在建立连接时使用,用来同步序号。当SYN=1,ACK=0时,表示这是一个请求建立连接的报文段;当SYN=1,ACK=1时,表示对方同意建立连接。SYNC=1时,说明这是一个请求建立连接或者同意建立连接的报文,只有前两次握手中SYN才为1;
  • FIN:标记数据是否发送完成。如果FIN=1,表示数据已经发送完成,可以断开连接;

窗口大小字段

  • Window Size:表示从Ack Number开始还可以接收多少字节,也表示当前接收端的接收窗口还有多少剩余空间。该字段可以用于TCP的流量控制。

TCP校验和字段

  • 校验位(TCP Checksum):用于确认传输的数据是否损坏。

紧急指针字段

  • 紧急指针(Urgent Pointer):仅当前面的URG控制位为1时才有意义。它指出本数据段中为紧急数据的字节数。

可选项字段

  • 选型(Option):长度不定,当必须是32bits的整数倍。

协商过程理解

基于header,yy下通讯中的协商过程
TCP 报文分析_第11张图片

参考资料

https://coolshell.cn/articles/11564.html
https://coolshell.cn/category/netsecurity
window scale参数说明: https://blog.csdn.net/s493197604/article/details/104823943

你可能感兴趣的:(道(方法,理论),网络,网络协议,TCP)