TCP 报文头结构如下所示:
- 源端口、目的端口:指定连接双方的端口
- 序号:本报文段第一个字节的编号,通过序号确认有序性
- 确认号:ack,指明下一个想要收到的字节序号,发送 ACK 说明当前序号之前的所有数据已正常接收
- 首部长度(偏移量):指定 TCP 报文头的长度
- 保留:为将来做准备
- URG、ACK…FIN:标志位,标志当前数据段的类型
- 接收窗口:用于流量控制,告诉发送方当前缓冲区可用大小,控制流量
- 校验和:用于验证 TCP 报文数据是否中途被修改
- 紧急数据指针:指向紧急数据的位置,URG 标志为 1 时才有效
- 选项:一般为空,可以用来确认最大报文长度、窗口扩大因子,提供更精准 RTT(从发送方发送到收到 ACK 一轮的时间)
- 数据:上层应用数据,TCP 三握和四挥的过程中可以为空