パス MTU 検出 (PMTUD) は、TCP/IP スタックの機能であり、ネットワークパス上のパス最大伝送単位 (PMTU) を動的に検出します。パケットがそのパス上のリンクの MTU を超えた場合、ルーターはそのパケットを破棄し、ICMP エラーメッセージを返信します。このメッセージは、送信元にパケットサイズを小さくするよう指示し、IP フラグメンテーションを防ぎます。PMTUD は、ネットワークパフォーマンスを最適化し、大きすぎるパケットによるパケット損失を回避するのに役立ちます。
PMTUD がネットワークパフォーマンスに与える影響
PMTUD は、ネットワークデバイスからのフィードバックに基づいて、ネットワークパスの PMTU を動的に検出して適応することで、ネットワークの効率と信頼性を向上させます。
-
IP フラグメンテーションの回避:PMTUD は、パケットサイズがパス上の最小 MTU を超えないようにすることで、IP フラグメンテーションを防ぎます。フラグメンテーションは、ネットワークデバイスの処理負荷を増加させ、パケット損失やレイテンシを引き起こす可能性があります。TCP 接続での IP フラグメンテーションを回避する方法の詳細については、「TCP 接続での IP フラグメンテーションを回避する方法」をご参照ください。
-
ネットワーク効率の向上:適切なパケットサイズを使用することで、PMTUD はネットワークの輻輳を軽減し、データ転送効率を向上させるのに役立ちます。パス上のすべてのリンクがそのようなパケットサイズをサポートしている限り、より大きなパケットはヘッダーのオーバーヘッドを削減し、スループットを向上させます。
-
パケット損失とレイテンシの削減:フラグメンテーションを回避することで、PMTUD はそれに伴うパケット損失とレイテンシを削減します。パケットのいずれかのフラグメントが失われた場合、元のパケット全体を再送する必要があります。
-
パケットサイズの自動調整:PMTUD により、送信元はネットワーク設定の事前の知識がなくても、ネットワークパスの実際の MTU に基づいてパケットサイズを動的に調整できます。
-
ネットワークの堅牢性の向上:パス上の MTU を動的に検出することで、PMTUD はネットワークがさまざまなリンクタイプや設定に適応するのに役立ち、堅牢性と柔軟性を向上させます。
PMTUD をサポートするコンポーネントとシステム
-
オペレーティングシステム:Linux や Windows など、最新のオペレーティングシステムの多くは PMTUD をサポートしています。
重要ジャンボフレームをサポートしていない第 6 世代以前のインスタンスファミリーの Alibaba Cloud Elastic Compute Service (ECS) インスタンスは、PMTUD をサポートしていません。送信するパケットのサイズが 1,500 バイト以下 であることを確認してください。
-
ネットワークデバイス:ルーターやスイッチなど、一部の高度なネットワークデバイスには、パケットを自動的に処理するための PMTUD 機能が組み込まれている場合があります。ただし、すべてのデバイスが PMTUD をサポートしているわけではありません。PMTUD をサポートしていないデバイスは、DF フラグが設定された大きすぎるパケットを破棄するものの、返信する ICMP エラーメッセージにその MTU 値を含めない可能性があります。
-
ミドルウェアまたはライブラリ:一部のプログラミング環境では、PMTUD を処理するための専用のライブラリやミドルウェアが提供されています。
-
アプリケーション:一部のネットワークアプリケーションでは、データ送信時にパケットサイズを動的に調整するために、独自の PMTUD ロジックを実装している場合があります。
-
ネットワークプロトコル:PMTUD は、TCP、UDP、ICMP など、IPv4 および IPv6 に基づくトランスポート層プロトコルに一般的に適用されます。
-
クラウドサービスプロバイダー:Alibaba Cloud のネットワーク転送コンポーネントは、RFC 標準に従って PMTUD を実行し、ネットワーク接続性を確保します。詳細については、「PMTUD の仕組み」をご参照ください。
PMTUD の仕組み
PMTUD は、IP パケットに DF (Don't Fragment) フラグ (DF=1) を設定し、ICMP メッセージを使用して、2 つのネットワークホスト間の PMTU を動的に検出して適応します。このプロセスにより、伝送中にパケットがフラグメント化されるのを防ぎます。プロセスは次のとおりです。
-
送信元による DF フラグの設定:ホストが IP パケットを送信するとき、IP ヘッダーの DF フラグを 1 に設定します。これにより、ルーターにパケットをフラグメント化しないように指示します。
-
MTU 制限の発生:DF フラグが 1 に設定されたパケットが、より小さい MTU を持つネットワークデバイスまたはリンクに到達し、パケットサイズがその MTU を超える場合、デバイスはそのパケットを破棄します。
-
IPv4 の場合:DF フラグに基づいて PMTUD を実行するかどうかを選択できます。DF フラグが 0 に設定されており、ネットワークデバイスがフラグメンテーションをサポートしている場合、デバイスは大きすぎるパケットを破棄する代わりにフラグメント化することがあります。
説明専用線やドメイン間トラフィックを含む通信シナリオにおけるエッジゲートウェイなど、一部の Alibaba Cloud 転送デバイスはフラグメンテーションをサポートしていません。これらのデバイスは、DF フラグが 0 に設定されていても、大きすぎるパケットを破棄し、ICMP エラーメッセージを送信します。
-
IPv6 の場合:PMTUD は必須です。すべてのホストとルーターは PMTUD をサポートする必要があります。したがって、DF フラグはすべての IPv6 パケットに暗黙的に設定され、DF フラグが 1 に設定されているかのように扱われます。
-
-
ICMP エラーメッセージの送信:パケットを破棄したデバイスが PMTUD をサポートしている場合、MTU の問題を報告するために送信元ホストに ICMP エラーメッセージを返信します。このメッセージには、そのデバイスの MTU が含まれており、これがその時点までにパス上で検出された PMTU です。
-
IPv4 の場合、デバイスは ICMP "Fragmentation Needed and DF set" (タイプ 3、コード 4) エラーメッセージを送信元に返信します。
-
IPv6 の場合、デバイスは "Packet Too Big" (タイプ 2、コード 0) ICMPv6 メッセージを送信元に送信します。
-
-
PMTU の検出とメッセージ処理:送信元ホストが ICMP エラーメッセージを受信した後、PMTU を解析してキャッシュし、ICMP メッセージで提供された MTU 値に基づいて次のように処理します。
-
デフォルトでは、送信元ホストのオペレーティングシステムカーネルは、ICMP メッセージの MTU 値を使用して宛先への PMTU を更新します。これにより、後続のパケットは、この新しい、より小さい MTU を超えないように調整されます。
-
アプリケーションによる ICMP メッセージへの適応と処理:PMTUD を認識するアプリケーションがこのタイプの ICMP メッセージを受信すると、メッセージ内の MTU に基づいてパケットサイズを調整し、調整されたパケットを再送できます。このアプローチは、IP フラグメンテーションを回避することでネットワークパフォーマンスが向上しますが、通常はアプリケーションの変更が必要です。
説明TCP 接続の場合、PMTUD の結果は TCP 層の MSS 値に影響します。TCP 層は、検出された PMTU に基づいて MSS を調整し、新しい MSS を使用して後続のパケットを送信します。これにより、TCP セグメントがネットワーク層でフラグメント化される必要がなくなります。詳細については、「PMTUD を使用した MSS の調整」をご参照ください。
-
-
PMTU 値のキャッシュ:送信元ホストは、オペレーティングシステムのルーティングテーブルにルートキャッシュエントリを作成します。このエントリには、宛先 IP アドレスの MTU 値が含まれ、同じ宛先に送信される後続のパケットに適用されることで、ネットワークパス上でのフラグメンテーションが回避されます。
-
PMTU の定期的更新:PMTU 値は永続的なものではありません。ネットワークパスが変更されたり、オペレーティングシステムのルートキャッシュが期限切れになったりすると、ホストは PMTUD プロセスを再開して PMTU 値を更新します。
PMTUD の使用方法
PMTUD の有効化
ネットワーク上のすべてのデバイスが PMTUD をサポートしており、有効になっていることを確認する必要があります。たとえば、Linux システムでは、/proc/sys/net/ipv4/ip_no_pmtu_disc ファイルの値が 0 である必要があります。
-
古いカーネルバージョンや特定の種類のオペレーティングシステムは、PMTUD をサポートしていない場合があります。その結果、PMTUD プロセス中に ICMP メッセージを正しく処理できず、パスの PMTU を動的に検出できません。
-
ジャンボフレームをサポートしていない第 6 世代以前のインスタンスファミリーの Alibaba Cloud Elastic Compute Service (ECS) インスタンスは、PMTUD をサポートしていません。送信するパケットのサイズが 1,500 バイト以下 であることを確認してください。
-
デバイスが PMTUD をサポートしていない場合は、「ping コマンドを使用した PMTU の手動検出」などで MTU を手動で特定し、「ネットワークインターフェイスの MTU の手動変更」などで送信元のパケットサイズやネットワークデバイスの MTU を調整する必要がある場合があります。
ICMP エラーメッセージの許可
-
ファイアウォールとセキュリティデバイスの確認と設定:必要な ICMP メッセージが通過できるように、ファイアウォールやその他のセキュリティデバイスを確認して設定する必要があります。一部のネットワーク環境では、ファイアウォールやその他のセキュリティデバイスが ICMP メッセージ、特に PMTUD プロセスをブロックする ICMP "Fragmentation Needed and DF set" (タイプ 3、コード 4) メッセージをフィルタリングする可能性があります。
-
セキュリティグループでの ICMP トラフィックの許可:PMTUD が機能するためには、ECS インスタンスのセキュリティグループが受信 ICMP トラフィックを許可する必要があります。詳細については、「セキュリティグループのユースケース:特定のプロトコルによるアクセス」をご参照ください。
-
レート制限の確認:ネットワークトラフィックが多いと、ICMP メッセージが破棄される原因となる可能性があります。ネットワークトラフィックがレート制限されているかどうかを確認してください。
-
Linux インスタンスの場合、「Linux インスタンスでの高いネットワーク帯域幅使用率のトラブルシューティング」をご参照ください。
-
Windows インスタンスの場合、[タスクマネージャー] を使用してネットワーク使用状況を表示できます。
-
ICMP メッセージへのアプリケーションの適応
PMTUD からの ICMP エラーメッセージに応答し、PMTU に基づいてパケットサイズを調整するようにアプリケーションを変更します。
-
アプリケーションが PMTUD メカニズムに対応しておらず、ICMP メッセージ受信後もパケットサイズを調整しない場合、大きすぎるパケット (DF=1) は引き続きネットワークパス上で破棄され、結果として伝送が失敗します。
-
PMTUD に対応するためにアプリケーションがパケットサイズを動的に調整するように変更できない場合は、PMTU に対応するためにアプリケーション内で手動でより小さい MSS 値を設定できます。
TCP での IP フラグメンテーションの回避
TCP は、データの完全性と順序を保証するように設計された、コネクション型の信頼性の高いトランスポート層プロトコルです。IP フラグメンテーションは、フラグメントの損失や再構成エラーにつながる可能性があり、TCP 伝送の信頼性に影響します。MSS ネゴシエーションと PMTUD メカニズムを使用することで、TCP 接続はほとんどの場合 IP フラグメンテーションを回避でき、ネットワークのパフォーマンスと信頼性が向上します。
MSS ネゴシエーションによるフラグメンテーションの回避
最大セグメントサイズ (MSS) は、TCP ヘッダーを除いて、単一の TCP セグメントで送信できるデータの最大量を指定する、伝送制御プロトコル (TCP) のパラメーターです。
MSS ネゴシエーションは TCP/IP スタック内で自動的に処理され、ユーザーやアプリケーションからの直接的な介入は必要ありません。このプロセスにより、データセグメントのサイズが両方のエンドポイントのネットワーク環境に適したものとなり、大きすぎるパケットによるフラグメンテーションや、小さすぎるパケットによる非効率性を回避します。
TCP 接続の確立中に、両者は TCP 3 ウェイハンドシェイクを通じて MSS をネゴシエートします。SYN パケットで、送信元は MSS オプションを含めます。この値は通常、エンドポイントの MTU から IP ヘッダーと TCP ヘッダーの固定オーバーヘッドを差し引いて計算されます。SYN パケットを受信した後、受信側は自身の MTU に基づいて適切な MSS 値を決定し、SYN+ACK パケットで返信します。このようにして、両者は接続に使用する最大セグメントサイズに合意し、IP フラグメンテーションによって引き起こされるパフォーマンスの低下や再送の問題を回避するのに役立ちます。
PMTUD を使用した MSS の調整
MSS ネゴシエーションは、伝送パス上のすべてのネットワークデバイス (ルーターなど) が、ネゴシエートされた MSS 値以上の MTU を持つことを保証するものではありません。パス上のネットワークデバイスの MTU が TCP パケットサイズよりも小さい場合、MSS がネゴシエートされた後でも IP フラグメンテーションが発生する可能性があります。さらに、UDP や ICMP などのコネクションレス型プロトコルには MSS ネゴシエーションのメカニズムがありません。これらの場合、PMTUD が不可欠です。PMTUD を使用すると、通信の両端は伝送パス全体の PMTU を動的に検出できます。アプリケーションは ICMP エラーメッセージに応答し、それに応じて MSS 値を調整してフラグメンテーションを防ぐことで適応できます。