TCP首部字段详解

Warning
This article was last updated on 2021-10-31, the content may be out of date.

Code

 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|          Source Port          |       Destination Port        |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                        Sequence Number                        |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                    Acknowledgment Number                      |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|       |     |  Control Bits   |                               |
|  Data | Rese|N|C|E|U|A|P|R|S|F|                               |
| Offset| rved|S|W|C|R|C|S|S|Y|I|            Window             |
|       |     | |R|E|G|K|H|T|N|N|                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|           Checksum            |         Urgent Pointer        |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                    Options                    |    Padding    |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                             data                              |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

指示发送该TCP报文的主机端口,以网络字节序(大端)表示

用于多路复用和多路分解

指示在目标主机上接收该TCP报文的的端口,以网络字节序(大端)表示

用于多路复用和多路分解

TCP报文的编号,用于标记TCP报文,详见 TCP可靠传输机制

TCP报文的确认号,用于确认指定TCP报文,详见 TCP可靠传输机制

数据相对于TCP报文开头的偏移量,以4字节为单位(32-bit words)。 最小为5(Options字段为空),最大为15。也可看作首部字段的长度。

保留字段,供未来和非标准用途

NS(Nonces): 实验性特性,用于隐蔽保护, 详见RFC 3540

CWR(Congestion Window Reduced): 用于响应ECE标志位, 详见RFC 3168

ECE(ECN-Echo): ECE标志位根据SYN位不同有两种用途

  • SYN(1): 表示连接方支持ECN
  • SYN(0): 在正常传输期间接收到IP报文首部字段中含有ECN=11字段,表示发送方发生或即将发生网络拥塞

URG(Urgent): 指示存在紧急数据,使用Urgent Pointer字段指示紧急数据的位置

ACK(Acknowledgment): 指示报文为确认报文

PSH(Push): 要求推送(push)缓冲区数据给上层应用

RST(Reset): 重置连接状态为CLOSED

SYN(Synchronize): 同步Sequence Numbers,只在建立TCP连接时使用

FIN(Final): 指示断开TCP连接,在TCP连接断开时使用

表示发送该TCP报文一方的接收窗口大小,用于流量控制的滑动窗口协议, 接收该报文的一方在下一次向对方发送数据时数据长度(不包含首部字段)不应超过接收窗口。详见 [TCP流量控制]

储存TCP报文的校验和,用于TCP的错误检测。详见 TCP可靠传输机制

URG标志位置1时,表示紧急数据的最后一个字节相对SEG.SEQ的偏移量,可以跨多个TCP报文

其他可选项,每个选项长度均为32bits,最多含有10个选项

所有TCP实现均应能处理全部的选项

TCP所携带的数据,长度不超过MSS(Max Segment Size)。通常MSS的默认值为536, 在创建TCP连接时双方会通过SYN报文中的MSS选项进行MSS协商来确定本次连接的MSS值。


[RFC 793]

[RFC 3168]

[RFC 3540]

[Wikipedia]Transmission Control Protocol