网工干货知识

超全学习笔记
当前位置:首页 > 干货知识

如何确定最优的MTU和MSS大小?

更新时间:2026年03月27日   作者:spoto   标签(Tag):

传输控制协议(TCP)是互联网协议套件中最重要的协议之一。TCP本质上是一种面向连接的协议,它主要负责网络中的错误控制、流量控制和拥塞控制,从而确保数据的完整性,并简化数据传输过程。TCP利用最大传输单元的概念来确定数据在传输过程中所能承载的最大数据量。

MTU:

最大传输单元(Maximum Transmission Unit, MTU)指的是在网络中进行数据传输时,能够传输的最大数据包或帧的大小。这个大小是网络能够承受的最大传输规模,超过这个大小的话,数据包会被分割成更小的片段进行传输。 它们以八位字节的形式被表示出来,这些八位字节可以在基于帧/数据包的网络中传输。 如果某个数据包的大小超过了指定的MTU值,那么该数据包会被分割成多个较小的子数据包。 现在,如果这些数据包的数量较少的话,那倒没问题。但是,当碎片化的数据包数量较多时,问题就出现了。在这种情况下,网络上的数据传输速度会显著下降。

MSS:

最大段大小(Maximum Segment Size, MSS)用于限制通过网络传输的数据包的大小。简单来说,它指的是设备在单个数据包中能够接收到的、且不会因数据分割而减少的最大数据量。 通过网络传输的所有数据都会被分解成多个较小的片段或数据包。这些数据包上还会附加着各种头部信息,这些信息用于记录数据的来源、目的地以及内容等相关信息。 MSS会评估数据包的一部分内容,这部分内容被称为“有效载荷”。 所以,如果它的尺寸太大,那么它就无法通过。 MSS指的是数据包中的有效载荷大小,不包括任何头部信息。这些消息是通过SYN数据包来发送的。

MTU和MSS的大小:

MTU = MSS + TCP/IP头部

MSS = MTU – (TCP头部的大小 + IP头部的大小 + 如果启用了IP安全功能,则还需要加上IP安全头的大小)

要找到最优的MTU大小,可以打开命令提示符窗口,然后在搜索框中输入“cmd”。

请输入以下命令,其中URL和数据包大小可以自行选择。

ping www.abc.com -f -l 1465

在发送ping命令后,会得到一些输出结果。这些输出结果的样子可能如下所示。

C:\Users\mkcbt>ping www.abc.com -f -l 1465
Pinging www.abc.com [144.248.91.9] with 1465 bytes of data:
Reply from 144.248.91.9: bytes=68 (sent 1465) time=54ms TTL=60
Reply from 144.248.91.9: bytes=68 (sent 1465) time=48ms TTL=60
Reply from 144.248.91.9: bytes=68 (sent 1465) time=43ms TTL=60
Reply from 144.248.91.9: bytes=68 (sent 1465) time=47ms TTL=60
Ping statistics for 144.248.91.9:
 Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
 Minimum = 43ms, Maximum = 54ms, Average = 48ms

如上所述,这些数据包并没有被分割。因此,我们继续尝试通过增加数据包的大小来解决这个问题。

C:\Users\mkcbt>ping www.abc.com -f -l 1472
Pinging www.abc.com [144.248.91.9] with 1472 bytes of data:
Reply from 144.248.91.9: bytes=68 (sent 1472) time=56ms TTL=60
Reply from 144.248.91.9: bytes=68 (sent 1472) time=41ms TTL=60
Reply from 144.248.91.9: bytes=68 (sent 1472) time=41ms TTL=60
Reply from 144.248.91.9: bytes=68 (sent 1472) time=42ms TTL=60
Ping statistics for 144.248.91.9:
 Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
 Minimum = 41ms, Maximum = 56ms, Average = 45ms

同样,我们仍然没有看到任何碎片化的现象,因此我们将再次增加数据包的大小。

C:\Users\mkcbt>ping www.abc.com -f -l 1473
Pinging www.abc.com [144.248.91.9] with 1473 bytes of data:
Packet needs to be fragmented but DF set.
Packet needs to be fragmented but DF set.
Packet needs to be fragmented but DF set.
Packet needs to be fragmented but DF set.
Ping statistics for 144.248.91.9:
 Packets: Sent = 4, Received = 0, Lost = 4 (100% loss),

在这里,我们发现当数据包的大小达到1473字节时,数据包会被分割。这意味着,如果没有任何分割的话,最大可能的数据包大小应该是1472字节。不过,这并不是MTU值。要得到真正的MTU值,我们需要再加上28字节作为头部的大小。所以,实际的值应该是……MTU = 1472 + 28也就是说,最优的MTU值为1500字节。MTU包括一个有效载荷,以及分别大小为20字节的TCP和IP头部,总共为40字节。这些部分是每个数据包都必须包含的组成部分。因此,剩下的可用数据量为1500 - 40 = 1460字节。

不过,如果网络中还使用了其他协议的话,那么数据包的大小可能会发生变化。例如,如果网络中使用了GRE协议,那么数据包的头部大小将会增加24字节。这样一来,整个数据包的大小就会变成1460 + 40 + 24 = 1524字节,这已经超过了MTU的1500字节限制。因此,我们需要把MSS的值降低到大约1436字节或更低,这样就能确保数据包的大小不会超过MTU的限制。而这样的数值就是MSS的最佳值了。

              马上抢免费试听资格
意向课程:*必选
姓名:*必填
联系方式:*必填
QQ:
思博SPOTO在线咨询

相关资讯

即刻预约

免费试听-咨询课程-获取免费资料