3. 功能规范 (Functional Specification)
本章描述 TCP 的功能规范, 包括首部格式, 选项定义, 序列号管理, 连接管理, 以及数据传输机制.
3.1. 首部格式 (Header Format)
TCP 段 (TCP segment) 作为互联网数据报发送. Internet Protocol (IP) 首部携带若干信息字段, 包括源主机地址和目的主机地址. TCP 首部跟在 IP 首部之后, 提供 TCP 专用的信息.
TCP 首部结构 (TCP Header Structure)
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 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Data | |C|E|U|A|P|R|S|F| |
| Offset| Rsrvd |W|C|R|C|S|S|Y|I| Window |
| | |R|E|G|K|H|T|N|N| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Checksum | Urgent Pointer |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| [Options] |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| |
/ Data /
/ /
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
字段说明 (Field Descriptions)
Source Port: 16 bits
- 源端口号.
Destination Port: 16 bits
- 目的端口号.
Sequence Number: 32 bits
- 本段中第一个数据八位组的序列号 (SYN 标志置位时除外).
- 如果 SYN 置位, 则序列号是初始序列号 (Initial Sequence Number, ISN), 第一个数据八位组为 ISN+1.
Acknowledgment Number: 32 bits
- 如果 ACK 控制位已置位, 此字段包含段发送方期望接收的下一个序列号的值.
- 一旦连接建立, 此字段始终会被发送.
Data Offset: 4 bits
- TCP 首部中的 32-bit 字数量.
- 指示数据从何处开始.
- TCP 首部 (即使包含选项) 的长度是 32 bits 的整数倍.
Reserved: 4 bits
- 为未来使用保留的一组控制位.
- 在生成的段中必须为零.
- 如果发送主机或接收主机未实现相应的未来特性, 则接收段中的这些位必须被忽略.
Control Bits: 控制位也称为 "flags". 其分配由 IANA 通过 "TCP Header Flags" 注册表管理. 当前已分配的控制位为 CWR, ECE, URG, ACK, PSH, RST, SYN, 和 FIN.
-
CWR (Congestion Window Reduced): 1 bit
- 参见 RFC 3168.
-
ECE (ECN-Echo): 1 bit
- 参见 RFC 3168.
-
URG (Urgent): 1 bit
- Urgent Pointer 字段有效.
-
ACK (Acknowledgment): 1 bit
- Acknowledgment Number 字段有效.
-
PSH (Push): 1 bit
- Push 功能.
-
RST (Reset): 1 bit
- 重置连接.
-
SYN (Synchronize): 1 bit
- 同步序列号.
-
FIN (Finish): 1 bit
- 发送方没有更多数据.
Window: 16 bits
- 从确认字段所指示的八位组开始, 本段发送方愿意接受的数据八位组数量.
- 使用窗口缩放扩展时, 此值会被移位.
- 窗口大小 MUST (MUST-1) 作为无符号数处理, 否则大窗口大小会表现为负窗口, TCP 将无法工作.
Checksum: 16 bits
- 首部和文本中所有 16-bit 字的一补和的一补, 宽度为 16 bits.
- TCP checksum 从不是可选项.
- 发送方 MUST (MUST-2) 生成它, 接收方 MUST (MUST-3) 检查它.
Urgent Pointer: 16 bits
- 以相对于本段序列号的正偏移量传达当前 urgent pointer 值.
- urgent pointer 指向紧急数据之后那个八位组的序列号.
- 只有在 URG 控制位置位的段中才解释此字段.
Options: Variable length
- 选项可以占用 TCP 首部末尾的空间, 其长度为 8 bits 的倍数.
- 所有选项都包含在 checksum 中.
注: 本章内容范围很广. 功能规范涵盖选项定义, 术语概述, 序列号管理, 连接建立, 连接关闭, 分段, 数据通信, 接口, 以及事件处理.
3.2. 强制选项 (Mandatory Options)
TCP 实现 MUST (MUST-4) 支持以下选项:
| Kind | Length | Meaning |
|---|---|---|
| 0 | - | End of Option List |
| 1 | - | No-Operation |
| 2 | 4 | Maximum Segment Size |
3.3. 连接状态 (Connection States)
TCP 连接在其生命周期中会经历一系列状态:
- CLOSED - 表示完全没有连接状态.
- LISTEN - 等待来自任意远端 TCP 和端口的连接请求.
- SYN-SENT - 发送连接请求后, 等待匹配的连接请求.
- SYN-RECEIVED - 在已接收并发送连接请求后, 等待确认连接请求的确认.
- ESTABLISHED - 表示打开的连接, 接收到的数据可以交付给用户.
- FIN-WAIT-1 - 等待来自远端 TCP 的连接终止请求, 或等待先前发送的连接终止请求的确认.
- FIN-WAIT-2 - 等待来自远端 TCP 的连接终止请求.
- CLOSE-WAIT - 等待来自本地用户的连接终止请求.
- CLOSING - 等待来自远端 TCP 的连接终止请求确认.
- LAST-ACK - 等待先前发送给远端 TCP 的连接终止请求的确认.
- TIME-WAIT - 等待足够时间过去, 以确保远端 TCP 已收到其连接终止请求的确认.
第 3 章涵盖的功能领域包括:
- 选项定义和处理.
- 序列号机制.
- 用于连接建立的三次握手.
- 用于连接关闭的四次握手.
- 数据分段和重组.
- 流量控制和拥塞控制.
- 重传机制.
- 用户接口规范.
- 事件处理逻辑.