tcp报文
TCP 报文详解_测试开发-海励的博客-CSDN博客_tcp报文
1、介绍
tcp,transmission control protocol传输控制协议是一种传输层协议,向上为http/https等服务,向下由ip协议支持。
2、数据格式
(1)源端口,2字节
(2)目的端口,2字节
(3)序列号,4字节,表示本报文数据部分第一个字节的编号。在tcp连接中,传送的每个字节都会进行顺序编号
- SYN为1时,该值为初始化序列值,用于对序列号同步,使用时对其+1
- SYN不为1时,表示当前数据的第一个字节编号
(4)确认号,4字节。表示接收方期望收到发送方下一个报文段的第一个字节数据的编号。其值是接收计算机即将接收到的下一个序列号,也就是下一个接收到的字节的序列号加1。
(5)数据偏移,4位,表示数据部分开始的字节,由tcp首部(包括选项)除以4得到,也可以理解为首部总长度
(6)保留4位,默认为0
(7)标志位,8位
(8)缓冲区,2字节,用来告诉TCP连接对端自己能够接收的最大数据长度。
它表示从 Ack Number 开始还可以接收多少字节的数据量,也表示当前接收端的接收窗口还有多少剩余空间。该字段可以用于 TCP 的流量控制。
(9)校验和,2字节,根据伪头部+tcp头部+tcp数据三部分计算
(10)紧急指针,2字节。urg为1时有意义,指出本数据段中未紧急数据的字节数。
(11)可选字段,必须是4字节的整倍数
3、标志位
(1)CWR
Congestion Window Reduce,拥塞窗口减少标志
用来表明它接收到了设置 ECE 标志的 TCP 包。并且,发送方收到消息之后,通过减小发送窗口的大小来降低发送速率
- 理解:告知发送方,我方拥堵,你降低一下窗口发送速率
(2)ECE
用来在 TCP 三次握手时表明一个 TCP 端是具备 ECN (显式拥塞通告)功能的。在数据传输过程中,它也用来表明接收到的 TCP 包的 IP 头部的 ECN 被设置为 11,即网络线路拥堵。
理解:数据传输过程中,TCP包头部的ECN字段设置为11,表示网络线路拥堵
(3)URG
表示本报文段中发送的数据是否包含紧急数据。URG=1 时表示有紧急数据。当 URG=1 时,后面的紧急指针字段才有效
(4)ACK
表示前面的确认号字段是否有效。ACK=1 时表示有效。只有当 ACK=1 时,前面的确认号字段才有效。TCP 规定,连接建立后,ACK 必须为 1
(5)PSH
告诉对方收到该报文段后是否立即把数据推送给上层。如果值为 1,表示应当立即把数据提交给上层,而不是缓存起来
(6)RST
表示是否重置连接。如果 RST=1,说明 TCP 连接出现了严重错误(如主机崩溃),必须释放连接,然后再重新建立连接。
(7)SYN
在建立连接时使用,用来同步序号。
- 当 SYN=1,ACK=0 时,表示这是一个请求建立连接的报文段;
- 当 SYN=1,ACK=1 时,表示对方同意建立连接。
- SYN=1 时,说明这是一个请求建立连接或同意建立连接的报文。只有在前两次握手中 SYN 才为 1。
(8)FIN
标记数据是否发送完毕。如果 FIN=1,表示数据已经发送完成,可以释放连接。
4、wireshark