-2

PDP/11 でソケット プログラミングを行って以来、IP データグラム (UDP データグラムなど) がセグメントに許可されている MTU よりも大きい場合、IP フラグメンテーションが処理されるようになっています。

したがって、サイズ 30 kB の UDP データグラムを送信できます。これは、イーサネット上で 1.5 kB の 20 セグメントにフラグメント化され、その後、特定のワイヤレス リンク用にそれぞれが 576 バイト未満の 3 つのセグメントにフラグメント化されます。フラグメントは相手側に到達し、UDP データグラムは相手側に到達します。

次に、node.js の UDP ソケットに関するドキュメントに出くわしました。このドキュメントでは、次のセグメントの MTU に適合しないデータグラムをルーターがドロップすると主張しています。これは、ヘッダーに「フラグメント化しない」ビットが設定されたデータグラムの場合だけだと思っていましたが、node.js がネットワーク サークルで一定の信頼性を備えた高品質の製品であると想定されていることを考えると、何かを逃したため、多くのルーターはすべてのデータグラムを「フラグメント化しない」かのように扱うようになりました。

リンクは次のとおりです。 http://nodejs.org/api/dgram.html#dgram_socket_send_buf_offset_length_port_address_callback

引用は次のとおりです。

generally sending a datagram greater than the (receiver) MTU 
won't work (the packet gets silently dropped, without informing 
the source that the data did not reach its intended recipient).

それで、私は何かを見逃していましたか、それとも node.js のドキュメントを更新する必要がありますか?

4

2 に答える 2

4

IPv4に関しては、あなたの理解は正しいです。ここでは、レシーバー MTU について話している可能性があります。リンクの受信側の MTU。MTU はポートごとに設定できます。リンクは、2 つのポート間の接続です。たとえば。イーサネットでは、このように誤って構成されたLANを持つことができます

ポート A(mtu 1000) <----------> ポート B(mtu 800)

この場合、送信者 (ポート A) は、リンクの MTU が設定された MTU と一致する必要があると判断し、サイズ 1000 バイトのパケットを送信します。ポート B がパケットを受信すると、そのポートに設定された MTU よりも大きいため、パケットをドロップする可能性が高くなります。

于 2014-01-11T00:34:11.777 に答える
0

したがって、答えはもう少し微妙であることがわかります。フラグメンテーションはまだ IPv4 の一部であり、インターネット全体で主にサポートされています。IPv6 はフラグメンテーションを取り除き、代わりに MTU 検出をアプリケーションに委ねます。したがって、私の仮定に疑問を投げかけたドキュメンテーション ノートは、「どういうわけか、ほとんどの人が IPv6 に切り替えた未来に住んでいる」ので、それほど「間違っている」わけではありません。

于 2014-01-15T20:49:00.330 に答える