2009-06-04 57 views
1

我有專有的應用程序向網絡發送組播數據包。它運行在帶有NIC MTU 1500的linux上。RecvFrom()返回大於發送方NIC的數據包MTU

然後我編寫一個簡單的java程序來使用MulticastSocket類來接收消息。我發現它是DatagramPacket大小是~7900。接收器程序在linux上運行,並使用NIC MTU 1500.

我用C重寫了程序並使用recvfrom()調用,但結果相同。

我不明白爲什麼?數據包大小是否受NIC MTU限制?或者它可以被程序覆蓋嗎?

回答

2

碎片和重新組裝發生在UDP協議下面的IP層,所以它基本上被隱藏起來了。您可以通過在不同的數據包大小上設置「不分段」標誌來測試分段。

2

我想你正在運行專有服務的機器上測試。在這種情況下,Linux機器將允許它們通過本地環回設備進行通信,該環回設備具有64k的MTU。

+0

接收器是另一臺Linux服務器上運行,不能在同一服務器與發件人程序 – 2009-06-04 04:54:17

+0

忘了補充答案:這一過程將需要調用setuid或setgid能夠改變MTU,但它是可能的。 – soulmerge 2009-06-04 04:59:38