文章目录
TCP数据格式

握手通讯过程

握手通讯,完成事宜:
- 建立通讯;
- 确认双方消息发送的sequence number;
- 确认window size;
握手-抓包分析
包1,发送方请求建立连接

包2,服务方同意建立连接
包括信息:
- 同意建立连接(SYN = 1, ACK = 1)
- 服务方Sequence Number:
- Window Size(协商值):29200 * 2^7

包3,发送方确认建立连接
包含信息:
- 连接建立确认(ACK=1)
- 确认Window Size:1029 * 256

挥手通讯过程

挥手–抓包分析

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

包2 – 接收方接收确认

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

包4 – 请求方断开确认

header格式分析
源端口和目的端口
- 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的整数倍。
协商过程理解
参考资料
发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/217978.html原文链接:https://javaforall.net
