通过MCP连接 →

输入计算

数学公式

广告

结果

最大分段大小(MSS)
1,460
每个分段可承载的 TCP 有效载荷字节数
MTU 1,500 bytes
IP 头部 20 bytes
TCP 头部 20 bytes
开销合计 40 bytes

MTU 与 MSS 计算器是什么?

这个工具可以把网络的最大传输单元(MTU)换算成 TCP 使用的最大分段大小(MSS)。MTU 是某条链路一次能承载的最大数据包(以字节为单位);而 MSS 则是在扣除 IP 和 TCP 头部之后,这个数据包里真正能装下的 TCP 有效载荷大小。正确设置 MSS,可以避免分片、重传,以及那个让人头疼、会导致连接卡死的"PMTUD 黑洞"问题。

如何使用

填入链路的 MTU 值(以太网默认值为 1500),选择 IPv4(基础头部 20 字节)或 IPv6(基础头部 40 字节),如有需要,还可以为 IP 选项或 TCP 选项(如时间戳、SACK,常见为 12 字节)额外补充字节数。计算器会扣除全部头部开销,并以字节为单位返回 MSS 结果。

公式详解

它们之间的关系非常简单:$$\text{MSS} = \text{MTU} - \text{IP 头部} - \text{TCP 头部}$$标准 TCP 头部为 20 字节,标准 IPv4 头部同样为 20 字节,因此最经典的速算方式就是 \(\text{MSS} = \text{MTU} - 40\)。IPv6 采用 40 字节的固定头部,于是 \(\text{MSS} = \text{MTU} - 60\)。任何协商出来的选项都会叠加到相应的头部上,进一步压缩有效载荷。

Advertisement
展示 MTU 中 IP 头部、TCP 头部和 MSS 负载的 IP 数据包示意图
MTU 是整个数据包;MSS 是减去 IP 和 TCP 头部后剩下的数据。

实例演算

在标准以太网中,MTU 为 1500 字节。以 IPv4 为例:IP 头部 = 20,TCP 头部 = 20,开销合计 = 40,因此 $$\text{MSS} = 1500 - 40 = 1460 \text{ 字节}$$如果启用了 TCP 时间戳,会额外占用 12 字节选项,TCP 头部就变成 32 字节,MSS 随之降为 $$\text{MSS} = 1500 - 20 - 32 = 1448 \text{ 字节}$$

常见问题

为什么我的 MSS 经常是 1460?因为大多数链路使用 1500 字节的 MTU,再减去 IPv4 + TCP 标准的 40 字节头部,正好剩下 1460 字节留给数据。

MSS 包含头部吗?不包含。MSS 严格指 TCP 有效载荷的大小;IP 和 TCP 头部是在它之上再加上去,才构成完整的数据包。

PPPoE 或隧道又该怎么算?各种封装都会降低实际可用的 MTU(例如 PPPoE 会增加 8 字节,使 MTU 降为 1492;VPN 占用的更多)。这时只需把降低后的 MTU 填进来,就能得到正确的 MSS。

最后更新: