摘要

  • Data Offset 按 32 位字计算整个 TCP 首部,并指出数据开始的位置。
  • EOL 结束选项解析,但其后的填充仍属于首部。
  • NOP 可以帮助对齐,却不构成发送方必须遵守的对齐承诺。

TCP 基础首部长五个 32 位字,即二十个字节。选项会使首部变长,因此接收方不能只依赖自己是否理解某个选项。四位的 Data Offset 表示完整首部包含多少个 32 位字;该数乘以四,就是数据开始的字节位置。值为五表示基础首部,更大的值还包括选项和必要的填充。四位字段直接描述的上限是十五个字,即六十个字节。

当 Data Offset 大于五时,RFC 9293 将选项区域表示为 (DOffset-5)*32 位;这个总量也包括实际选项之后的填充。

EOL 表示选项列表结束,但不一定到达 Data Offset 指定的首部末端。剩余字节必须是零首部填充。NOP 只有一个字节,可以用于排列后续选项;不过选项可以从任意字节边界开始。其他选项带有长度字段,所以接收方能够越过格式正确但不认识的选项。

Data Offset 是解析范围的外部上限。选项和填充都参与 TCP 校验和,但它们不是应用数据。非法长度必须被处理;RFC 9293 提到重置连接并记录原因这一建议做法,同时没有规定唯一的具体响应。

来源