文章目录
TCP数据格式
握手通讯过程
握手通讯,完成事宜:
- 建立通讯;
- 确认双方消息发送的sequence number;
- 确认window size;
握手-抓包分析
TCP握手的三个报
包1,发送方请求建立连接
包括信息:
请求建立连接(SYN = 1, ACK = 0)
发送方Sequence Number:189215271
Window Size(协商值): 64240 * 2^8。 (window * 2 ^ Window scale)
包2,服务方同意建立连接
包括信息:
- 同意建立连接(SYN = 1, ACK = 1)
- 服务方Sequence Number:240050740
- Window Size(协商值):29200 * 2^7
包3,发送方确认建立连接
包含信息:
- 连接建立确认(ACK=1)
- 确认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.youkuaiyun.com/s493197604/article/details/104823943
附*系列文章索引
整理起因
报文分析
报文格式解读
握手+挥手过程状态变化分析
滑动窗口介绍
可靠数据传输原理
拥塞控制
网络异常案例(1、2、3、4、5、6)
结束语