TCP协议报文格式
TCP首部详解
源端口号 & 目的端口号
- 16 位
- 原地址端口号 & 目的地址端口号
序号 & 确认序号
-
序号(seq)
- 32位
- 用来标识从TCP源端向目的端发送的字节流
- 序列号不会从0或1开始, 而是计算机生成的随机数
- 发送方发送数据时对此进行标记
-
确认序号(ack)
- 32位
- 只有ACK标志位为1时,确认序号字段才有效
- 表示下一次应该收到的数据的序列号
- ack = seq+1
控制位
SYN
- 用于请求建立连接
- 连接请求: SYN = 1, ACK = 0
- 连接应答: SYN = 1, ACK = 1
ACK
- 确认序号标识
- 为 1 时, ack 才有效
- 为 0 时, 表示忽略 ack
- ack 为确认序号, ACK 为标识位
FIN
- finish 标识, 用于释放连接
- 为 1 时表示发送方已经没有数据要发送了
PSH
- push标志,为1表示是带有push标志的数据,指示接收方在接收到该报文段以后,应尽快将这个报文段交给应用程序,而不是在缓冲区排队
RST
- 重置连接标志
- 用于重置由于主机崩溃或其他原因而出现错误的连接, 或者用于拒绝非法的报文段和拒绝连接请求
URG
- 紧急指针标志
- 为 1 表示有效, 为 0 表示无效
首部长度
- 因为 TCP 报文内容含有可选项, 所以 TCP 报头的长度不固定
- 实际指示了数据区在报文段中的起始偏移值
校验和
- 对整个 TCP 报文段(包括报头和数据)进行奇偶校验
- 由发送方进行计算和存储, 由接收端进行验证
保留
- 暂时无用, 通常置为 0
- 留作后用
窗口指针
- 用来告知发送端接受端的缓存大小,以此控制发送端发送数据的速率,从而达到流量控制
- 窗口大小是一个16bit字段,因而窗口大小最大为65535。
紧急指针
- 配合标识位的 URG 使用, 只有 URG 为 1 时, 这个才有效
- 是发送紧急数据的一种方式