如何根据 MTU 和 MSS 对数据进行分片?

网络工程 ip tcp mtu 碎片化
2022-02-18 09:36:17

只是要清楚.. 如果发送者想要发送 1800 字节的数据(假设 MTU 为 1500 字节

所以 MSS = 1500-40(采用最小 ip 和 tcp 标头)= 1460bytes)

然后会有三个段 750 + 750 + 300(3 个 tcp 段)。

不取 1500 + 300 因为 MSS 是 1460 字节,因此将被丢弃。

我在这里正确吗?

1个回答

我真的认为您将 IP 分段与 TCP 分段混淆了。这是两个非常不同的事情。

假设您的意思是 TCP 从应用程序中获得了 1800 个八位字节的数据,那么您根本不会有任何碎片。TCP 会将数据分成两个 TCP 段,这些段适合 1500 八位字节的 MTU,没有分段。一个段将有 1460 个八位字节的应用程序数据(20 个八位位组的 TCP 标头和 20 个八位位组的 IPv4 标头,总共 1500 个八位位组来满足 MTU),另一个段具有 340 个八位位组的应用程序数据。

当路径中的 MTU 缩小并且 IP 数据包大于 MTU 时,就会发生分段。在上述场景中,如果一跳的 MTU 为 1400 个八位字节,则第一个 IPv4 数据包必须被分片或丢弃。1500 个八位字节的数据包将被分成两个数据包,一个是 1396 个八位字节的有效负载为 1376 个八位字节(20 个八位字节的 TCP 标头加上 1356 个八位字节的应用程序数据),另一个是 124 个八位字节的有效负载为 104 个八位字节的应用程序数据。另一个原始 IP 数据包适合新的 MTU,因此它不会被分段。

当在目的地接收到分段时,在 IPv4 将分段传递给 TCP 之前,数据包分段会重新组合,因此 TCP 不知道数据包已分段。TCP处理数据分段。


IPv6 消除了路径内碎片,因为它是资源密集型的,并且会减慢数据包的传递速度。此外,智能企业会在防火墙处丢弃 IPv4 数据包碎片,以防止碎片攻击。今天,我们有 PMTUD(路径 MTU 发现),用于确定路径中的最小 MTU,以便可以适当地调整数据包的大小,以防止路径中需要分段。