为什么 TCP MSS(最大段大小)是 1460 字节?

为什么 TCP MSS(最大段大小)是 1460 字节?

我想知道为什么 TCP 标头中的 MSS 值是 1460 字节。

我知道以太网的 MTU 是 1500 字节,IP 头是 20 字节,TCP 头是 20 字节。

但为什么是 1460 字节?难道不能低于或高于这个数字吗?

答案1

1460 是不是最大 MSS。MSS 的计算方式为 MTU 减去 IP 和 TCP 报头大小。在路径 MTU 高于 1500 的网络上(例如:使用非标准 6k 或 9k 巨型以太网帧的数据中心网络),MSS 将更大。在路径 MTU 低于 1500 的网络上(例如:DSL 上常见的 PPPoE,对于 1492 的 MTU 有 8 个额外字节的开销),MSS 将更低。MSS 的目的是通过最大化每个数据包中可以发送的数据量来优化性能,从而最大限度地减少协议报头和强制性链路层数据包间间隙的开销。避免发送过大的段还可以避免让路由器进行碎片化,这也是一种很好的优化,因为碎片化会带来延迟和其他开销。

值 1460 只是在 20 世纪后期才变得常见,因为以太网很常见,以太网帧具有标准的 1500 字节有效载荷容量(成为 IP MTU),当时 IP 和 TCP 报头都是 20 字节长。然而,在 21 世纪初,网络速度已经足够快,TCP 需要添加 12 字节 TCP 时间戳选项来防止 TCP 序列号换行,因此典型的 TCP 报头现在长 32 字节,导致标准 1500 字节 MTU 以太网网络上的典型 TCP MSS 为 1448 字节。所以在 21 世纪,1448 是比 1460 更常见的 TCP MSS。您在后续评论中链接到的 Cloudflare 图表有点误导,因为虽然在技术上仍然可以禁用 TCP 堆栈中的 TCP 时间戳并让自己面临 TCP 序列号换行的风险,但这并不是人们常做的事情。

IPv4 的最大数据报大小(它可以填充的最大 MTU)为 2^16 字节(即 64KiB 或 65535 字节)。因此,按照当今标准,最大 TCP MSS 为 65,483 字节(启用 TCP 时间戳),或 65,495 字节(禁用)。

但是,具有以太网标准 1500 字节 MTU 的以太网和类似以太网的网络非常常见,因此很少看到公共互联网上的路径 MTU 大于 1500 字节,因此很少看到大于 1448 字节的 TCP MSS。

相关内容