2

よく知られているように、UDP は再送信をサポートしていません。

また、基本的に次のように機能する MTU のようなものも認識しています。送信元ポイントと宛先ポイントの間のパス上のネットワーク デバイスの 1 つが特定のサイズのパケットをサポートしていない場合、それはドロップされます。

TCP の場合、それは問題ではありません。ハンドシェイク後の MSS は常に MTU よりも小さいことがわかっているため (そうですか?)、MTU よりも大きいサイズのパケットを送信する可能性はありません。

しかし、UDP の場合はどのように機能するのだろうか。すでに述べたように、このプロトコルには再送信はなく、MSS のようなものもありません。では、MTU を超えたためにパケットがドロップされた場合はどうなるでしょうか?

それとも、MTU の性質 (UDP や TCP などのトランスポート層プロトコルではなく、実際には IP 層に属します) のために機能するのでしょうか? では、IP 層はドロップされたパケットをより小さな単位で再構築し、再送信するのですか?

4

1 に答える 1

-1

まず、ローカル リンクの MTU にすぎないローカル MTU と、ローカル リンクの最小 MTU であるパス MTU (PMTU) を区別する必要があります。次のトポロジを検討してください。

    1500       1480       1500
A -------- B -------- C -------- D

A のローカル MTU は 1500 ですが、PMTU はちょうど 1480 です。

ルーター B が転送する必要があるサイズ 1500 のパケットを受信し、DF ビットが設定されている場合、次のホップの MTU (この場合は 1480) で ICMP パケットを送信者に送り返します。その後、送信者はパケット サイズを小さくすることができます。

TCP では、これはネットワーク スタックによって透過的に行われます。UDP では、アプリケーションがそれを処理する必要があります。これを行うには、次の 3 つの方法があります。

  1. 十分に小さいパケットを常に送信します。1024 は IPv6 では常に安全であり、512 は通常 (常にではありませんが) IPv4 で安全です。

  2. 接続された UDP ソケットを使用しEMSGSIZE、パケット サイズを小さくしてエラーに対応します。また

  3. 任意の種類の UDP ソケットを使用し、PMTU 補助データを要求し、提供されたデータを使用します。

手法 (3) が最も効率的です。IPv6 については、RFC 3542 のセクション 11.3 で説明されています。

于 2016-08-07T23:41:42.720 に答える