MSS 的计算公式为 MSS = MTU - IP 报头长度 - TCP 报头长度。
一个例子是以太网中的 MSS=1500-20-20=1460。
此计算忽略了 TCP 和 IP 标头中的选项,这会导致标头长度可变。
据我了解,当 TCP 组装段时,它知道 TCP 标头中的选项,并且它可以将数据截断为“正确”的大小以满足 MSS,因为它认为 IP 标头为 20 个字节。
但是,TCP 不知道 IP 选项,因为它位于 IP 层之上,那么它如何正确组装分段呢?
例如,一个 TCP 段有 1460 字节,IP 决定需要一些选项,这使得它的报头长于 20 字节。
在这种情况下,IP 是否需要拆分 TCP 段以满足 MTU(这似乎降低了传输效率,因为第二个数据包的有效载荷中可能只有几个字节)?
TCP 和 IP 在实现中是否有任何协商以避免这种 IP 分裂?