我有专有的应用程序向网络发送组播数据包。它使用NIC MTU 1500在Linux上运行。
然后我编写了一个简单的java程序来使用MulticastSocket类来接收消息。我发现DatagramPacket的大小是~7900。接收器程序在带有NIC MTU 1500的Linux上运行。
我在C中重写程序并使用recvfrom()调用,但结果是一样的。
我不明白为什么?是否由NIC MTU限制数据包大小?或者它可以被程序覆盖吗?
答案 0 :(得分:2)
我猜你正在测试运行专有服务的机器。在这种情况下,linux框将让他们通过本地环回设备进行通信,该设备的MTU为64k。
答案 1 :(得分:2)
碎片和重组发生在UDP协议下面的IP层,因此它基本上是从视图中隐藏的。您可以通过在不同的数据包大小上设置'do not fragment'标志来测试碎片。
答案 2 :(得分:0)
是否有可能内核将数据包分段并组装到接收端?
How to find the largest UDP packet I can send without fragmenting?
但是,无论如何知道数据包是否碎片?