Skip to content

3.2. 特定选项定义

TCP 的必备选项集合包括:选项列表结束选项、无操作选项和最大报文段大小选项。

选项列表结束(EOL)

选项列表结束选项的格式如下:

text
        0
        0 1 2 3 4 5 6 7
       +-+-+-+-+-+-+-+-+
       |       0       |
       +-+-+-+-+-+-+-+-+

其中:

  • Kind: 1 字节;Kind == 0
  • 该选项代码表示选项列表的结束,其位置不一定与数据偏移字段所指示的 TCP 首部末尾重合。它位于整个选项列表的末尾,而非每个选项的末尾;仅当选项末尾无法自然落在 TCP 首部末尾时,才需要使用它。

无操作(NOP)

无操作选项的格式如下:

text
        0
        0 1 2 3 4 5 6 7
       +-+-+-+-+-+-+-+-+
       |       1       |
       +-+-+-+-+-+-+-+-+

其中:

  • Kind: 1 字节;Kind == 1
  • 该选项代码可置于其他选项之间,例如将后续选项的起始位置对齐到字边界。发送方并不保证一定会使用该选项,因此接收方必须做好准备,处理并非从字边界开始的选项(MUST-64)。

最大报文段大小(MSS)

最大报文段大小选项的格式如下:

text
        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
       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
       |       2       |     Length    |   Maximum Segment Size (MSS)  |
       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

其中:

  • Kind: 1 字节;Kind == 2。该选项若存在,则用于通告发送该报文段的 TCP 端点所能接收的最大报文段大小。该数值受 IP 重组上限的约束。该字段可以在初始连接请求中发送(即出现在设置了 SYN 控制位的报文段中),绝不能出现在其他报文段中(MUST-65)。若不使用该选项,则允许任意大小的报文段。该选项的完整描述见第 3.7.1 节
  • Length: 1 字节;Length == 4,表示选项的字节长度。
  • Maximum Segment Size(MSS): 2 字节,表示发送该报文段的 TCP 端点的最大接收报文段大小。

3.2.1. 其他常见选项

其他一些 RFC 定义了若干常用选项。为获得高性能,建议实现这些选项,但基本的 TCP 互操作性并不要求它们。它们包括:TCP 选择确认(SACK)选项(RFC 2018RFC 2883)、TCP 时间戳(TS)选项和 TCP 窗口缩放(WS)选项(RFC 7323)。

3.2.2. 实验性 TCP 选项

实验性 TCP 选项值在 RFC 4727 中定义,RFC 6994 说明了这些实验值当前推荐的使用方式。

Licensed under CC BY-NC-SA 4.0.