📜  如何确定最佳 MTU 和 MSS 大小?

📅  最后修改于: 2022-05-13 01:57:01.613000             🧑  作者: Mango

如何确定最佳 MTU 和 MSS 大小?

传输控制协议(TCP)是互联网协议套件中最重要的协议。 TCP基本上是一种面向连接的协议,它关注网络中的错误控制、流量控制和拥塞控制,以保持数据的完整性并使数据传输更容易。 TCP 在传输数据时使用 MTU(最大传输单元)来识别任何数据包的最大大小。

MTU:

最大传输单元 (MTU) 是可以通过网络进行通信而不将其分成更小的片段的最大可能的数据包/帧大小。它们以八位字节声明,可以在基于帧/数据包的网络中传输。如果任何数据包大于指定的 MTU 设置,则它将原始数据包分解或分段为更小的子数据包。现在,如果这些数据包的数量很少,则可以,当碎片数据包的数量很大时,就会出现问题,在这种情况下,它会显着降低数据在网络上的传输速度。

质谱:

最大段大小 (MSS) 用于限制通过网络传输的数据包的大小,基本上,它是设备可以在单个数据包中接收的最大可能数据,而不会产生任何碎片。通过网络传输的所有数据都被分解为小片段或数据包,并且各种标头附加到这些数据包上,这些数据包用于携带有关其来源、目的地和内容的信息。 MSS 评估数据包的一部分(非标头部分),称为有效负载。所以,如果它的尺寸太大,它不会让它通过。 MSS 将段描述为有效载荷的大小,没有附加任何标头,并且它的公告通过 SYN 数据包发送。

MTU 和 MSS 大小:

要找到最佳 MTU 大小,请转到搜索栏并输入“cmd”打开 cmd。

使用任何 URL 和数据包大小输入以下命令。

ping www.abc.com -f -l 1465

ping cmd 后会给出一些输出,可能如下图所示。

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 值,要找到它,我们必须为标头添加 28 个字节。因此, MTU 的值 = 1472 + 28即 1500 字节,这是最佳 MTU 值。 MTU 由有效载荷和 TCP 和 IP 头组成,每个 20 字节,总共 40 字节,它们对于每个数据包都是强制性的,这给我们留下了 1500 – 40 = 1460 字节的数据。

虽然如果使用其他协议,大小可能会改变。例如,如果网络中使用了 GRE,那么它将进一步为其头部添加 24 字节,这意味着现在该数据包的总大小将变为 1460 + 40 + 24 = 1524 字节,超过了 MTU 的 1500 字节限制;因此,在这里我们必须将 MSS 的值降低到 1436 左右或更低,使其不超过总 MTU 值,这将是 MTS 的最佳值。