如果数据包大小小于 MTU,是否可能碎片化?

网络工程 转变 碎片化
2021-07-28 05:41:03

我正在编写一个在 Linux 上运行的套接字应用程序。我的服务器机器连接到连接到网络的交换机。还有其他服务器连接到交换机。

我的客户端应用程序发送 10 条消息,每条消息是 105 字节。我构建了整个数据包并将其写入套接字。由于 105*10=1050 < MTU,我假设它在到达目标时不会碎片化。

我错了吗?路径上的网络设备是否可以出于某种原因对我的数据包进行分段?

谢谢

2个回答

是的。如果路径上某处的 MTU 小于您的数据包大小,它将被分段。

这可能不适用于您的简单网络,但在现实世界中是可能的。

从您的描述中不清楚一件事:套接字是面向流的。堆栈将为您处理碎片/碎片整理。我不知道你为什么担心。

路径上的网络设备是否可以出于某种原因对我的数据包进行分段?

如果是 IPv4,并且 DF 位清零,那么是的,您的数据包可以在路径中分段。碎片化和重组对您的应用程序是透明的。数据包可能会在路径中分段,然后目标主机将在将数据包传递给传输协议之前在 IPv4 中重新组合它们。

如果设置了 DF 位并且数据包需要分段,则该数据包将被丢弃。应该发回一条 ICMP 消息,告诉您数据包太大。


IPv6 消除了路径分片,要求路径中的每条链路至少具有 1280 的 MTU,并且它使用 PMTUD。