什么是 MSS(最大分段大小)?

MSS(最大分段大小)是一个设备从网络连接中接受的最大数据有效负载。

学习目标

阅读本文后,您将能够:

  • 了解什么是数据包以及什么是数据包标头
  • 定义“有效负载”
  • 了解如何根据 MTU 来计算 MSS

相关内容


想要继续学习吗?

订阅 TheNET,这是 Cloudflare 每月对互联网上最流行见解的总结!

参阅 Cloudflare 的隐私政策,了解我们如何收集和处理您的个人数据。

复制文章链接

什么是最大分段大小 (MSS)?

MSS(最大分段大小)限制通过网络(例如互联网)传输的数据包或小数据块的大小。通过网络传输的所有数据都被分解成数据包。数据包附有几个标头,其中包含有关其内容和目的地的信息。MSS 测量数据包的非标头部分,称为有效负载。

如果将数据包比作运输卡车,标头是卡车本身,有效负载是拖车和货物,那么 MSS 就像只测量拖车的秤。如果拖车过重,则不允许卡车继续前往目的地。

更具体地说,MSS 是联网设备可以接收的最大 TCP(传输控制协议)段大小。MSS 将“段”定义为仅有效负载的长度,而不是任何附加的标头。MSS 以字节为单位。

数据包标头和有效载荷 - TCP 段和 MSS

MSS 由另一个与数据包大小有关的指标决定:MTU(最大传输单位),它包括 TCP 和 IP(互联网协议)标头。继续类比,MTU 测量的是卡车及其拖车和货物的总重量,而不仅仅是拖车和货物。

本质上,MSS 等于 MTU 减去 TCP 标头和 IP 标头的大小:

MTU - (TCP 标头 + IP 标头) = MSS

MTU 和 MSS 之间的主要区别之一是,如果数据包超过设备的 MTU,则会分解为更小的部分,或“分段”。相反,如果一个数据包超过 MSS,它就会被丢弃并且不会被传递。

什么是 TCP?什么是 TCP 标头?

传输控制协议 (TCP) 是一种确保数据包按顺序传送和接收的协议,不会丢弃数据包。想象一下,如果包裹递送服务提前打电话给所有包裹收件人,以确保他们在递送包裹之前的某个时间到家,然后将消息发回给发件人以确认他们已经送达。TCP 的工作方式有点像这样,数据包就像是被递送的“包裹”。

TCP 通过打开两个设备之间的连接来工作,这两个设备通过称为 TCP 握手的过程进行通信。MSS 在 TCP 握手期间达成一致:两个设备通信它们能够接收的数据包的大小(这可以称为“MSS 限制”;见下文)。TCP 为所有数据包添加一个标头,以指示每个数据包属于哪个打开的连接以及数据包进入的顺序。

TCP 和 IP 标头有多长?

TCP 标头几乎始终是 20 字节*长。IP 标头包括源和目的地 IP 地址之类的信息,它们也是 20 字节长。TCP 和 IP 数据包都包括可选的标头字段,可以使标头更长,但这些字段几乎从未被使用。

*在计算机科学中,一个字节是一个内存大小的单位,代表八个二进制数字;换句话说,是八个一和零的组合。

TCP MSS 示例

假设一个网络路由器拥有一个 1500 的 MTU,也就是说它只接受最长 1500 字节的数据包。(更长的数据包将被分段。)该路由器的 MSS 应该设置为多少?

MTU - (TCP 标头 + IP 标头) = MSS

1,500 - (20 + 20) = 1,460

路由器的 MSS 应设置为 1,460 字节。有效负载大小大于 1,460 字节的数据包将被丢弃。(如果一个设备不知道它和另一个设备之间的路由器的 MTU 和 MSS 设置,它可能会错误地发送这样一个过大的数据包。称为“路径 MTU 发现”的过程有助于避免此类事件。)

IPsec 的使用对 MSS 有什么影响?

IPsec(互联网协议安全)是 IP 的加密版本。使用 IPsec 发送的数据包被加扰,以便只有两个连接的设备能够解释它们,从而确保其有效负载内容不受任何数据包拦截者的影响。IPsec 通常用于设置虚拟专用网络 (VPN)

IPsec 将几个字节添加到数据包的长度。在使用此加密的连接上,MSS 还必须考虑 IPsec:

MTU - (TCP 标头 + IP 标头 + IPsec) = MSS

MSS 是网络层还是传输层指标?

MSS 是第 4 层(传输层)指标。它与传输层协议 TCP 一起使用。但是,它与 MTU 密切相关,后者适用于第 3层 网络层)。

什么是 MSS 限制?

有时,网络路径上的路由器设置的 MTU 值低于典型的 1,500 字节。这可能会导致数据包丢失并且很难被发现。

为了确保数据包在这种情况下仍能到达目的地,一种选择是减少传入数据包有效负载的大小。这可以通过配置服务器以应用 MSS 限制来实现:在 TCP 握手期间,服务器可以向 MSS 发送它愿意接收的数据包的信号,“限制”来自其他服务器的最大有效负载大小。例如,如果服务器 A 和 B 正在建立 TCP 连接,并且服务器 B 通信的 MSS 为 1,436 字节,则服务器 A 将在连接期间发送最大有效负载大小为 1,436 字节的数据包。

MSS 限制的另一个应用是在 GRE 隧道的情况下,将 24 字节的标头添加到原始数据包中,以便将其发送到新的目的地。如果原始数据包大于 1,476 字节,这可能会使新数据包超过典型的 1,500 字节 MTU;即使在应用了 GRE 标头之后,也可以应用 MSS 限制来要求传入数据包小于 1,500 字节。

若要进一步了解 MTU 和 MSS,请参阅什么是 MTU?