パスMTU発見 (PMTUD) は、2つのホスト間のパス最大伝送単位 (PMTU) を動的に発見するためにTCP/IPスタックによって提供される機能である。 ネットワーク経路のPMTUは、経路に沿った最小のMTUであり、経路上のどこでも断片化を必要としない最大のパケットサイズである。 ルータがネットワークパスに沿ったリンクのMTUよりも大きいパケットを受信した場合、ルータはパケットを破棄し、送信ホストにパケットサイズを縮小するように指示するインターネット制御メッセージプロトコル (ICMP) エラーメッセージを送信します。 これは、送信中のパケット断片化の回避に役立つ。 PMTUDは、ネットワークパフォーマンスを大幅に向上させ、パケットが大きすぎる場合に発生するパケットドロップを回避します。
PMTUDのネットワークパフォーマンスへの影響
PMTUDは、送信ホストとネットワークデバイスとの間の対話に基づいて、ネットワークパス上のPMTUを動的に発見し、ネットワークパスに沿ってPMTUに送信されるパケットのサイズを制限する。 このプロセスは、ネットワークの効率と信頼性を向上させ、パケットの断片化による潜在的な問題を軽減します。 PMTUDには次の利点があります。
IPフラグメンテーションの回避: PMTUDは、ネットワークパスに沿って送信される各パケットのサイズが、パス上の任意のホップのMTUよりも大きくないことを保証する。 これは、IP断片化を回避する。 IPフラグメンテーションは、ネットワークデバイスに追加の処理負担を課し、パケット損失を引き起こし、レイテンシを増加させ得る。 TCP接続でのIP断片化を回避する方法については、このトピックの「TCP接続でのIP断片化の回避」を参照してください。
ネットワーク効率の向上: PMTUDは、最適なパケットサイズを決定して、ネットワークの輻輳を軽減し、データ伝送効率を向上させます。 より大きいパケットサイズは、パケットサイズがネットワーク経路上のすべてのデバイスによってサポートされる最大パケットサイズを超えない限り、ヘッダオーバーヘッドを低減し、スループットを増加させることができる。
低減されたパケット損失および待ち時間: IPフラグメンテーションは、パケットを、後で再アセンブルすることができるいくつかのフラグメントに分割することを含む。 単一のフラグメントが失われた場合、すべてのフラグメントを再送信しなければならない。 PMTUDは、IP断片化を回避してパケット損失とレイテンシを削減します。
パケットサイズの自動調整: PMTUDは、パケットを送信するホストが、ネットワーク構成について事前に知る必要なく、ホストと受信ホストとの間のPMTUに基づいてパケットを動的にサイズ変更することを可能にする。
ネットワークの堅牢性の向上: PMTUDにより、ネットワークはさまざまなリンクタイプと構成に適応でき、ネットワークの堅牢性と柔軟性が向上します。
PMTUDをサポートするコンポーネントとシステム
オペレーティングシステム: LinuxおよびWindowsオペレーティングシステムを含むがこれらに限定されない多くの最新のオペレーティングシステムは、PMTUDをサポートしています。
重要Jumbo Frames機能をサポートしていない、第6世代以上のインスタンスファミリーのAlibaba Cloud Elastic Compute Service (ECS) インスタンスは、PMTUDをサポートしていません。 ECSインスタンスを通過するパケットのサイズが1,500バイトを超えないようにしてください。
ネットワークデバイス: ルータやスイッチなどの特定の高度なネットワークデバイスには、PMTUD機能が組み込まれており、パケットが通過するとPMTUDを実行できます。 すべてのネットワークデバイスがPMTUDをサポートしていません。 PMTUDをサポートしないネットワークデバイスがホストからIPパケットを受信すると、ネットワークデバイスは、パケットがネットワークデバイスのMTUよりも大きく、パケット内のDo n't Fragment (DF) フラグが1に設定されている場合、ネットワークデバイスのMTUを含まない可能性のあるICMPメッセージをホストに返す。
ミドルウェアまたはライブラリ: 特定のプログラミング環境では、PMTUDを実行するために特殊なライブラリまたはミドルウェアが提供され得る。
アプリケーション: 特定のネットワークアプリケーションは、アプリケーションがパケットを送信するときにパケットを動的にサイズ変更するために、独自のPMTUDロジックを実装し得る。
ネットワークプロトコル: PMTUDは、TCP、UDP、およびICMPを含むがこれらに限定されないIPv4およびIPv6トランスポート層プロトコルに適している。
クラウドサービスプロバイダー: Alibaba Cloudネットワーク転送コンポーネントは、RFC標準に準拠してPMTUDを実行し、ネットワーク接続を確保します。 詳細については、このトピックの「PMTUDの仕組み」をご参照ください。
PMTUDの仕組み
IPパケット内のDFフラグは、PMTUDにおいて重要な役割を果たす。 DFフラグを1に設定して、IPパケットを断片化してはならないことを示すことができる。 PMTUDは、ICMPメッセージに依存して、2つのホスト間のネットワークパスのPMTUを動的に発見し、PMTUへのネットワークパス上のパケットサイズを制限する。 これは、送信中のパケット断片化を回避する。 PMTUDには以下のステップが含まれます。
送信ホストにDFフラグが設定されています。 ホストがIPパケットを送信すると、ホストはパケットのIPヘッダ内のDFフラグを1に設定します。これは、パケットがネットワークパス上で断片化されることを許可されていないことを指定します。
MTU制限にヒットします。 DFフラグが1に設定されたパケットがネットワークデバイスに到着すると、ネットワークデバイスは、パケットサイズがネットワークデバイスまたはリンクのMTUを超えると、パケットを破棄する。
IPv4では、ネットワークデバイスは、DFフラグに基づいてPMTUDを実行するかどうかを判断できます。 DFフラグが0に設定されたパケットが、フラグメンテーションをサポートするネットワークデバイスに到着し、パケットサイズがネットワークデバイスのMTUを超える場合、ネットワークデバイスは、パケットを廃棄する代わりに、パケットをフラグメント化することができる。
説明Alibaba Cloudの特定の転送コンポーネントは、クロスドメインまたはクロスリージョンの通信シナリオでのエッジゲートウェイなど、断片化をサポートしていません。 転送コンポーネントは、サイズの大きいパケットを断片化せずにドロップし、パケット内のDFフラグが0に設定されていてもICMPエラーメッセージを送信します。
IPv6では、PMTUDは必須であり、すべてのホストとルータはPMTUDをサポートする必要があります。 IPv6パケットのDFフラグは暗黙的に設定されます。 すべてのIPv6パケットは、1に設定されたDFフラグを有すると見なされる。
ICMPエラーメッセージが送信されます。 パケットをドロップしたネットワークデバイスがPMTUDをサポートしている場合、ネットワークデバイスはICMPエラーメッセージを送信して、MTUの問題を送信ホストに通知します。 ICMPエラーメッセージは、送信ホストとネットワークデバイスとの間のPMTUである、ネットワークデバイスのMTUを含む。
IPv4では、ネットワークデバイスは、次のICMPエラーメッセージを送信ホストに送信する。宛先到達不能: 断片化が必要であり、断片化が設定されていない (タイプ3、コード4) 。
IPv6では、ネットワークデバイスは、以下のICMPエラーメッセージを送信ホストに送信する。ICMPv6パケットが大きすぎる (PTB) (タイプ2、コード0) 。
PMTUDが実行され、ICMPエラーメッセージが処理されます。 送信ホストがICMPエラーメッセージを受信した後、ホストはメッセージからPMTUを解析してキャッシュします。 次に、PMTUに基づいて次の操作が実行されます。
デフォルトでは、送信ホストのオペレーティングシステムカーネルは、PMTUに基づいてパケットを断片化し、パケットフラグメントを再送信する。
アプリケーションはパケットのサイズを変更し、ICMPエラーメッセージを処理します。 PMTUDをサポートするアプリケーションがICMPエラーメッセージを受信すると、アプリケーションはICMPエラーメッセージに含まれるMTUに基づいてパケットをサイズ変更し、サイズ変更されたパケットを再送信します。 このアプローチは、断片化を回避することによってより良いネットワーク性能を達成するが、ほとんどの場合、アプリケーションへの修正を必要とする。
説明TCP接続の場合、PMTUDの結果は、TCPレイヤにおける最大セグメントサイズ (MSS) に影響を及ぼす可能性がある。 TCPレイヤは、PMTUDによって発見されたPMTUに基づいてMSSを調整し、新しいMSSを使用して後続のパケットを送信します。これにより、TCPセグメントの断片化が回避されます。 詳細については、このトピックの「データ送信中にMSSをPMTUに動的に適応させる」をご参照ください。
PMTUがキャッシュされている。 送信ホストは、そのオペレーティング・システムのルート・テーブル内に、パケットが宛先となる宛先IPアドレスのPMTUを含むルート・キャッシュ・エントリを生成する。 送信ホストは、パケットがネットワーク経路上で断片化されないことを保証するために、PMTUへの同じIPアドレスを宛先とする各後続パケットのサイズを制限する。
PMTUは定期的に更新される。 ネットワークパスのPMTUは永続的ではありません。 ネットワークパスが変更されるか、または送信ホストのオペレーティングシステム内のルートキャッシュが古くなると、ホストはPMTUDを再実行し、ネットワークパスのPMTUを更新します。
PMTUDの使用
PMTUDの有効化
ネットワーク内のすべてのデバイスがPMTUDをサポートし、PMTUDがデバイスに対して有効になっていることを確認します。 たとえば、/proc/sys/net/ipv4/ip_no_pmtu_discファイルにゼロを書き込むことで、LinuxデバイスのPMTUDを有効にできます。
古いカーネルバージョンまたは特定の種類のオペレーティングシステムは、PMTUDをサポートしない場合があります。 ネットワークパス上のデバイスがPMTUDをサポートしていないカーネルバージョンまたはオペレーティングシステムを実行している場合、デバイスはPMTUDプロセス中にICMPメッセージを適切に処理できません。 その結果、PMTUDは、ネットワークパスのPMTUを動的に発見することができない。
Jumbo Frames機能をサポートしていない、第6世代以上のインスタンスファミリーのAlibaba Cloud Elastic Compute Service (ECS) インスタンスは、PMTUDをサポートしていません。 ECSインスタンスを通過するパケットのサイズが1,500バイトを超えないようにしてください。
ネットワークパス上のネットワークデバイスがPMTUDをサポートしていない場合は、ネットワークパスのPMTUを手動で決定する必要があります。 たとえば、pingコマンドを実行してPMTUを検出できます。 ネットワークパスのPMTUを検出したら、PMTUに基づいて送信ホストのパケットサイズを調整したり、ネットワークデバイスのMTUを変更したりできます。 たとえば、ネットワークインターフェイス (NIC) のMTUを変更できます。
受信側ホストがICMPエラーメッセージを受信できることを確認する
ファイアウォールやその他のセキュリティデバイスをチェックして設定し、必要なICMPメッセージを通過させます。 特定のネットワーク環境では、ファイアウォールまたは他のセキュリティデバイスは、ICMPメッセージ、特に以下のICMPメッセージを除外することができる。宛先到達不能: 断片化が必要であり、断片化が設定されていない (タイプ3、コード4) 。 その結果、PMTUDプロセスがブロックされる可能性がある。
ICMPトラフィックを許可するようにセキュリティグループを設定します。 ECSインスタンスは、インスタンスが属するセキュリティグループがICMPトラフィックを許可している場合にのみ、PMTUDプロセス中に異なる転送コンポーネントによって送信されたICMPネゴシエーションパケットを受信できます。 詳細については、「さまざまなユースケースのセキュリティグループ」トピックの「特定のプロトコルを使用してECSインスタンスへのアクセスを制御するためのセキュリティグループルール」セクションをご参照ください。
ネットワークトラフィックがスロットリングしきい値に達したかどうかを確認します。 ネットワークトラフィックがスロットリングしきい値に達すると、ICMPメッセージがドロップされる可能性があります。 ネットワークトラフィックがスロットリングしきい値に達しているかどうかを確認します。
Linuxインスタンスの場合は、Linuxインスタンスのネットワークトラフィック負荷を照会および分析するにはどうすればよいですか。
Windowsインスタンスの場合は、タスクマネージャーを使用してネットワークの使用状況を確認します。
ICMPメッセージに応答するアプリケーションの変更
PMTUDプロセス中にICMPエラーメッセージに応答するようにアプリケーションを変更し、PMTUに基づいてパケットサイズを縮小します。
アプリケーションがPMTUDに適合していない場合、またはアプリケーションがPMTUDプロセス中にICMPエラーメッセージを受信した後に、アプリケーションがそのパケットサイズを発見されたPMTUに適合させない場合、オペレーティングシステムカーネルは、アプリケーションによって送信されたパケットを断片化する可能性があり、パケット送信失敗をもたらす可能性がある。
この問題を解決するには、アプリケーションでより小さなMSSを指定して、PMTUに適応させることができます。
TCP接続でのIP断片化の回避
TCPは、データの完全性と順序を保証するように設計された、コネクション指向の信頼性の高いトランスポート層プロトコルです。 IP断片化は、断片損失または再組み立てエラーにつながり、TCP送信の信頼性に影響を及ぼす可能性がある。 ほとんどの場合、MSSネゴシエーションとPMTUDは、TCP接続がIP断片化を回避し、ネットワークパフォーマンスと信頼性を向上させるのに役立ちます。
接続確立中にMSSネゴシエーションメカニズムを使用してIP断片化を回避する
MSSは、TCPヘッダを除く、TCPセグメントで送信できるデータの最大量を指定するTCPパラメータである。
MSSネゴシエーションは、TCP/IPスタックで行われ、ユーザまたはアプリケーションからの直接的な介入を必要としない。 MSSネゴシエーションは、データセグメントのサイズが送信ホストおよび受信ホスト上のネットワーク環境に許容可能であることを保証し、これは、過度に大きいパケットによって引き起こされる断片化、または過度に小さいパケットによって引き起こされる非効率性を回避する。
MSSは、TCP接続が2つのホスト間で確立されるとき、TCP 3ウェイハンドシェイク中にネゴシエートされる。 送信ホストは、MSSオプションをSYNパケットで受信ホストに送信します。 MSSオプションの値は、送信ホストのMTUからTCPヘッダー長を差し引いて計算されます。 受信ホストがSYNパケットを受信した後、受信ホストは、受信ホストのMTUに基づいて適切なMSS値を決定し、SYN-ACKパケットでMSSを送信ホストに返す。 このように、ホストは、TCP接続に使用されるMSS値に同意して、IP断片化によって引き起こされる非効率性および再送信を排除する。
データ伝送中にMSSをPMTUに動的に適応させる
MSSネゴシエーションは、ネットワーク経路に沿ったルータなどのすべてのネットワークデバイスのMTUが、ネゴシエートされたMSS値以上であることを保証しない。 ネットワークパス上のネットワークデバイスのMTUがTCPパケットのサイズよりも小さい場合、MSSがネゴシエートされても、IPフラグメンテーションが依然として発生する可能性がある。 UDPおよびICMPなどのコネクションレス型プロトコルは、MSSネゴシエーション機構を有していない。 この場合、PMTUDは重要です。 PMTUDは、ネットワークパスの両端がネットワークパスのPMTUを動的に発見することを可能にする。 アプリケーションは、ICMPエラーメッセージに応答し、発見されたPMTUに基づいてMSSを調整して断片化を回避するように適合され得る。