59

別のコンピューターに送信できる UDP パケットの最大サイズを断片化なしで知る必要があります。

このサイズは一般に MTU (Maximum Transmission Unit) として知られています。おそらく、2 台のコンピューターの間には、異なる MTU を持つ可能性のある多くのルーターとモデムがあります。

Windows の TCP 実装では、パス内の最大 MTU が自動的に検出されると読みました。

私も実験していましたが、私のコンピューターからサーバーへの最大 MTU は 57712 バイト + ヘッダーであることがわかりました。それ以上のものは破棄されました。私のコンピュータは LAN 上にありますが、MTU は 1500 バイト程度ではないでしょうか?

4

6 に答える 6

28

以下はあなたの質問に直接答えるものではありませんが、興味深いと思うかもしれません。IP パケットは逆アセンブル/再アセンブルできるため、基盤となるメディア (1500 バイトのイーサネットなど) の制限を超えていることが示されています


このトピックの詳細:

  • Re: UDP フラグメンテーションは、MTU を検出するために UDP の代わりに ICMP を使用する必要があると言っています
  • Path MTU Discoveryは、TCP 接続に ICMP を介した暗黙の MTU ネゴシエーションが含まれる可能性があることを示しています

Windows で API を介して ICMP を生成することについては知りません。かつて、そのような API が提案され、物議を醸しました。 ICMP メッセージ。

いいえ、実装されているようです。たとえば、Winsock Programmer's FAQ Examples: Ping: Raw Sockets Methodを参照してください。

したがって、MTU を検出するには、「フラグメント化しない」フラグを指定して ping パケットを生成します。

これよりも簡単な API があるかもしれませんが、わかりません。しかし、基礎となるプロトコルを理解していただければ幸いです。

于 2009-05-23T02:37:38.290 に答える
14

以前のすべての回答に加えて、クラシックを引用します:

IPv4 と IPv6 は、最小再構成バッファー サイズを定義します。これは、実装がサポートする必要があることが保証されている最小データグラム サイズです。IPv4 の場合、これは 576 バイトです。IPv6 では、これが 1,280 バイトに引き上げられます。


これは、公共のインターネットを介して作業し、交換の片側のみを制御する場合、データグラムのサイズを 576 未満に制限する必要があることを意味します。これは、標準の UDP ベースのプロトコルのほとんどが行うことです。

また、PMTU はパスの動的プロパティであることにも注意してください。これは、TCP が処理することの 1 つです。多くのシーケンス、タイミング、および再送信ロジックを再実装する準備ができていない限り、重要なネットワークには TCP を使用してください。ベンチマーク、テスト、プロファイル、つまりTCP がボトルネックであることを証明してから、UDP を検討してください。

于 2009-05-24T00:55:50.447 に答える
2

独自の MTU はレジストリで使用できますが、実際の MTU は、マシンと宛先の間のパスで最小の MTU になります。それは変数であり、経験的にのみ決定できます。 それを決定する方法を示す多くのRFCがあります。

LAN は内部的に非常に大きな MTU 値を持つことができます。これは、ネットワーク ハードウェアが一般的に同種であるか、少なくとも中央で管理されているためです。

于 2009-05-23T02:19:48.543 に答える