RecvFrom()返回大于发送方NIC的数据包MTU
问题描述:
我有专有的应用程序向网络发送组播数据包。它运行在带有NIC MTU 1500的linux上。RecvFrom()返回大于发送方NIC的数据包MTU
然后我编写一个简单的java程序来使用MulticastSocket类来接收消息。我发现它是DatagramPacket大小是~7900。接收器程序在linux上运行,并使用NIC MTU 1500.
我用C重写了程序并使用recvfrom()调用,但结果相同。
我不明白为什么?数据包大小是否受NIC MTU限制?或者它可以被程序覆盖吗?
答
碎片和重新组装发生在UDP协议下面的IP层,所以它基本上被隐藏起来了。您可以通过在不同的数据包大小上设置“不分段”标志来测试分段。
答
我想你正在运行专有服务的机器上测试。在这种情况下,Linux机器将允许它们通过本地环回设备进行通信,该环回设备具有64k的MTU。
答
是否有可能内核碎片的数据包和组装接收端?
How to find the largest UDP packet I can send without fragmenting?
然而,是它无论如何要知道包是支离破碎?
接收器是另一台Linux服务器上运行,不能在同一服务器与发件人程序 – 2009-06-04 04:54:17
忘了补充答案:这一过程将需要调用setuid或setgid能够改变MTU,但它是可能的。 – soulmerge 2009-06-04 04:59:38