TCP 报文分析

TCP数据格式

在这里插入图片描述

握手通讯过程

在这里插入图片描述

握手通讯,完成事宜:

  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)

在这里插入图片描述

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

包括信息:

  1. 同意建立连接(SYN = 1, ACK = 1)
  2. 服务方Sequence Number:240050740
  3. Window Size(协商值):29200 * 2^7
    在这里插入图片描述
包3,发送方确认建立连接

包含信息:

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

在这里插入图片描述

挥手通讯过程

在这里插入图片描述

挥手–抓包分析

在这里插入图片描述

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

在这里插入图片描述

包2 – 接收方接收确认

在这里插入图片描述

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

在这里插入图片描述

包4 – 请求方断开确认

在这里插入图片描述

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下通讯中的协商过程
在这里插入图片描述

参考资料

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

附*系列文章索引

整理起因
报文分析
报文格式解读
握手+挥手过程状态变化分析
滑动窗口介绍
可靠数据传输原理
拥塞控制
网络异常案例(123456
结束语

  • 17
    点赞
  • 88
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
TCP报文头部(首段)包含了TCP协议的一些基本信息,如源端口号、目的端口号、序列号、确认号、标志位等,具体如下: 1. 源端口号(Source Port Number):占用两个字节,指明发送端口号。 2. 目的端口号(Destination Port Number):占用两个字节,指明接收端口号。 3. 序列号(Sequence Number):占用四个字节,用于标识本报文段的数据在数据流中的序号,以便接收方按照序列号进行重组。 4. 确认号(Acknowledgment Number):占用四个字节,用于标识接收方期望接收的下一字节的序号。 5. 数据偏移量(Data Offset):占用四个比特,表示TCP头部的长度,以4字节为单位,最大值为15,即最大长度为60字节。 6. 保留(Reserved):占用6个比特,保留字段,必须置0。 7. 标志位(Flags):占用6个比特,共有6个标志位,如下所示: - URG:紧急指针是否有效。 - ACK:确认序号是否有效。 - PSH:接收方是否应该立即将数据交给应用层处理。 - RST:重置连接。 - SYN:同步序号用于建立连接。 - FIN:结束连接。 8. 窗口大小(Window Size):占用两个字节,表示接收方的窗口大小,即接收方还能接收多少字节的数据。 9. 校验和(Checksum):占用两个字节,用于检验TCP头部和数据的完整性。 10. 紧急指针(Urgent Pointer):占用两个字节,如果URG标志位被置位,则该字段表示紧急数据的字节数。 以上就是TCP报文头部(首段)的各个字段的解释。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值