2009-06-04 5 views
1

私はネットワークにマルチキャストパケットを送信する独自​​のアプリケーションを持っています。 NIC MTU 1500でLinux上で動作しています。RecvFrom()は送信者より大きいパケットを返しますNIC MTU

そして、メッセージを受け取るためにMulticastSocketクラスを使って簡単なJavaプログラムを書いています。私はDatagramPacketのサイズが〜7900であることを発見しました。レシーバプログラムは、NIC MTU 1500でLinux上で動作しています。

Cでプログラムを書き換え、recvfrom()コールを使用しても結果は同じです。

なぜわかりませんか? NIC MTUによってパケットサイズが制限されていますか?またはプログラムによってオーバーライドすることはできますか?

答えて

2

フラグメンテーションと再構成は、UDPプロトコルの下にあるIPレイヤーで行われるため、基本的には表示されません。さまざまなパケットサイズで '断片化しない'フラグを設定することによって、断片化をテストできます。

2

プロプライエタリサービスが実行されているマシンでテストしていると思います。その場合、Linuxボックスは64KのMTUを持つローカルループバックデバイス上で通信できるようにします。

+0

受信者は、送信者プログラムと同じサーバーではなく、別のLinuxサーバーで実行されています –

+0

回答に追加するのを忘れた:プロセスはsetuidまたはsetgidを呼び出してMTUを変更する必要があります。 – soulmerge

0

カーネルがパケットを断片化して受信側に組み込むことは可能でしょうか?

How to find the largest UDP packet I can send without fragmenting?

はしかし、それはとにかく、パケットが断片化されて知っているのですか?

+0

追加情報を回答として投稿しないでください。元の質問を変更することができます。 – JimB

+0

JimBに感謝して、私は次回そのことをします。 –

関連する問題