EC2 インスタンスのネットワークの最大送信単位 (MTU) - Amazon Elastic Compute Cloud

EC2 インスタンスのネットワークの最大送信単位 (MTU)

ネットワーク接続の最大送信単位 (MTU) とは、接続を介して渡すことができる最大許容パケットサイズ (バイト単位) です。接続の MTU が大きいほど、より多くのデータを単一のパケットで渡すことができます。イーサネットフレームは、パケット (送信している実際のデータ) とそれを囲むネットワークオーバーヘッド情報で構成されています。

イーサネットフレームの形式はさまざまで、最も一般的な形式は、標準イーサネット v2 フレーム形式です。これはインターネットのほとんどでサポートされている最大のイーサネットパケットサイズである 1500 MTU をサポートします。インスタンスでサポートされている最大 MTU は、インスタンスタイプによって異なります。

Wavelength Zone にあるインスタンスには、次のルールが適用されます。

  • 同じ Wavelength Zone 内の VPC で、あるインスタンスから別のインスタンスへ送られるトラフィックの MTU は 1300 です。

  • Wavelength Zone 内のキャリア IP を使用し、あるインスタンスから別のインスタンスへ送られるトラフィックの MTU は 1500 です。

  • Wavelength Zone とパブリック IP アドレスを使用するリージョン間で、あるインスタンスから別のインスタンスへ送られるトラフィックの MTU は 1500 です。

  • Wavelength Zone とプライベート IP アドレスを使用するリージョン間で、あるインスタンスから別のインスタンスへ送られるトラフィックの MTU は 1300 です。

Outposts にあるインスタンスには、次のルールが適用されます。

  • Outposts のインスタンスからリージョンのインスタンスへ送られるトラフィックの MTU は 1300 です。

ジャンボフレーム (9001 MTU)

ジャンボフレームでは、パケットあたりのペイロードサイズを拡張し、パケットオーバーヘッド以外のパケットの割合を高めることによって、1500 バイトを超えるデータを送信できます。同じ量の使用可能なデータを少ないパケットで送信することができます。ただし次の場合には、トラフィックの MTU は最大 1500 に制限されます。

  • インターネットゲートウェイ経由のトラフィック

  • リージョン間 VPC ピアリング接続経由のトラフィック

  • VPN 接続経由のトラフィック

  • 特定の AWS リージョン外のトラフィック

パケットが 1500 バイト以上ある場合は、フラグメント化されます。または、Don't Fragment フラグが IP ヘッダーに設定されている場合は削除されます。

ジャンボフレームを、インターネットバウンドトラフィックや VPC を出るトラフィックに使用する場合には慎重に行ってください。パケットは中間システムによってフラグメント化されるため、このトラフィックの速度が低下します。VPC 外に向かうトラフィックの速度を低下させずに VPC 内のジャンボ フレームを使用するには、ルートごとに MTU サイズを設定するか、または MTU サイズやルートの異なる複数の Elastic ネットワークインターフェイスを使用します。

クラスタープレイスメントグループ内にコロケーションされたインスタンスでは、考えられる最大のネットワークスループットの実現するうえでジャンボフレームが役立ちます。この場合は、ジャンボフレームを使用することが推奨されています。詳細については、「プレイスメントグループ」を参照してください。

AWS Direct Connect を経由した VPC とオンプレミスのネットワーク間のトラフィックにはジャンボフレームを使用できます。詳細や、Jumbo Frame 機能を確認する方法については、AWS Direct Connect ユーザーガイドネットワーク MTU 設定を参照してください。

すべての Amazon EC2 インスタンスタイプは 1500 MTU をサポートしており、すべての現行世代のインスタンスタイプはジャンボフレームをサポートしています。以下の旧世代のインスタンスタイプは、A1、C3、I2、M3、R3 のジャンボフレームをサポートしています。

サポート対象の MTU サイズの詳細については、次を参照してください。

  • NAT ゲートウェイについては、「Amazon VPC ユーザーガイド」の「NAT ゲートウェイの基本」を参照してください。

  • Transit Gateway の詳細については、「Amazon VPC Transit Gateway ユーザーガイド」の「MTU」を参照してください。

  • ローカルゾーンについては、「AWS ローカルゾーンユーザーガイド」の「考慮事項」を参照してください。

パス MTU 検出

2 つのデバイス間のパス MTU を判断するために、パス MTU 検出 (PMTUD) が使用されます。パス MTU は、送信側ホストと受信側ホスト間のパスでサポートされている最大のパケットサイズです。2 つのホスト間のネットワークで MTU サイズに違いがある場合、PMTUD は、受信側ホストが ICMP メッセージで送信側ホストに応答するのを可能にします。この ICMP メッセージは、送信側ホストがネットワークパスに沿って最低の MTU サイズを使用し、リクエストを再送信するように指示します。このネゴシエーションがないと、リクエストが大きすぎて受信側ホストが受け取れないため、パケットドロップが発生する可能性があります。

IPv4 の場合、ホストがパスに沿って送信するパケットが、受信側ホストの MTU、あるいはデバイスの MTU よりも大きな場合、受信側ホストまたはデバイスはそのパケットをドロップし、次のような ICMP メッセージ Destination Unreachable: Fragmentation Needed and Don't Fragment was Set (タイプ 3、コード 4) を返します。このメッセージは送信側ホストに対し、ペイロードを複数の小さなパケットに分割し再送信することを指示します。

IPv6 プロトコルは、ネットワークのフラグメンテーションをサポートしていません。ホストがパスに沿って送信するパケットが、受信側ホストの MTU、あるいはデバイスの MTU よりも大きな場合、受信側ホストまたはデバイスはそのパケットをドロップし、次のような ICMP メッセージ ICMPv6 Packet Too Big (PTB) (タイプ 2) を返します。このメッセージは送信側ホストに対し、ペイロードを複数の小さなパケットに分割し再送信することを指示します。

NAT ゲートウェイやロードバランサーなどの一部のコンポーネントを介して行われる接続は、自動追跡されます。つまり、セキュリティグループの追跡は、アウトバウンド接続を試みると自動的に有効になります。接続が自動追跡されるか、セキュリティグループのルールでインバウンド ICMP トラフィックが許可されている場合は、PMTUD 応答を受信できます。

サブネットへの ICMP トラフィックを拒否するネットワークアクセスコントロールリストのエントリがある場合など、セキュリティグループレベルでトラフィックが許可されている場合でも、ICMP トラフィックはブロックされる可能性があることに注意してください。

重要

パス MTU 検出は、ジャンボフレームが一部のルーターによって破棄されないことを保証するものではありません。VPC のインターネットゲートウェイでは、最大 1500 バイトのパケットだけが転送されます。インターネットトラフィックでは、MTU が 1500 のパケットが推奨されています。

2 つのホスト間のパス MTU の確認

EC2 インスタンスと別のホストとの間のパス MTU を確認できます。宛先として DNS 名または IP アドレスを指定できます。宛先が別の EC2 インスタンスの場合、そのセキュリティグループによりインバウンド UDP トラフィックが許可されていることを確認します。

使用する手順は、インスタンスのオペレーティングシステムによって異なります。

インスタンスで tracepath コマンドを実行して、EC2 インスタンスと指定された宛先の間のパス MTU を確認します。このコマンドは iputils パッケージの一部であり、多くの Linux ディストリビューションでデフォルトで使用できます。

次の例では、EC2 インスタンスと amazon.com との間のパス MTU を確認しています。

[ec2-user ~]$ tracepath amazon.com

この出力例では、パス MTU は 1500 となっています。

1?: [LOCALHOST] pmtu 9001 1: ip-172-31-16-1.us-west-1.compute.internal (172.31.16.1) 0.187ms pmtu 1500 1: no reply 2: no reply 3: no reply 4: 100.64.16.241 (100.64.16.241) 0.574ms 5: 72.21.222.221 (72.21.222.221) 84.447ms asymm 21 6: 205.251.229.97 (205.251.229.97) 79.970ms asymm 19 7: 72.21.222.194 (72.21.222.194) 96.546ms asymm 16 8: 72.21.222.239 (72.21.222.239) 79.244ms asymm 15 9: 205.251.225.73 (205.251.225.73) 91.867ms asymm 16 ... 31: no reply Too many hops: pmtu 1500 Resume: pmtu 1500
mturoute を使用してパス MTU を確認するには
  1. http://www.elifulkerson.com/projects/mturoute.php から EC2 インスタンスに mturoute.exe をダウンロードします。

  2. コマンドプロンプトウィンドウを開いて、mturoute.exe をダウンロードしたディレクトリに移動します。

  3. 次のコマンドを使用して、EC2 インスタンスと指定した宛先との間のパス MTU を確認します。次の例では、EC2 インスタンスと www.elifulkerson.com との間のパス MTU を確認しています。

    .\mturoute.exe www.elifulkerson.com

    この出力例では、パス MTU は 1500 となっています。

    * ICMP Fragmentation is not permitted. * * Speed optimization is enabled. * * Maximum payload is 10000 bytes. * + ICMP payload of 1472 bytes succeeded. - ICMP payload of 1473 bytes is too big. Path MTU: 1500 bytes.

インスタンスの MTU を確認する

インスタンスの MTU 値を確認できます。一部のインスタンスでは、ジャンボフレームを使用し、それ以外のドライバには標準フレームサイズを使用するように設定されています。

使用する手順は、インスタンスのオペレーティングシステムによって異なります。

Linux インスタンス上の MTU 設定を確認するには

EC2 インスタンスで次の ip コマンドを実行します。プライマリネットワークインターフェイスが eth0 でない場合は、eth0 を使用しているネットワークインターフェイスに置き換えます。

[ec2-user ~]$ ip link show eth0

この出力例で、mtu 9001 はこのインスタンスにジャンボフレームが使用されていることを示しています。

2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 9001 qdisc pfifo_fast state UP mode DEFAULT group default qlen 1000 link/ether 02:90:c0:b7:9e:d1 brd ff:ff:ff:ff:ff:ff

使用する手順は、インスタンスのドライバーによって異なります。

ENA driver
バージョン 2.1.0 以降

MTU 値を取得するには、EC2 インスタンスで次の Get-NetAdapterAdvancedProperty コマンドを使用します。ワイルドカード (アスタリスク) を使用して、すべてのイーサネット名を取得します。インターフェイス名 *JumboPacket の出力を確認します。値 9015 は、ジャンボフレームが有効であることを示します。ジャンボフレームはデフォルトで無効化されています。

Get-NetAdapterAdvancedProperty -Name "Ethernet*"
バージョン 1.5 以前

MTU 値を取得するには、EC2 インスタンスで次の Get-NetAdapterAdvancedProperty コマンドを使用します。インターフェイス名 MTU の出力を確認します。値 9001 は、ジャンボフレームが有効であることを示します。ジャンボフレームはデフォルトで無効化されています。

Get-NetAdapterAdvancedProperty -Name "Ethernet"
Intel SRIOV 82599 driver

MTU 値を取得するには、EC2 インスタンスで次の Get-NetAdapterAdvancedProperty コマンドを使用します。インターフェイス名 *JumboPacket のエントリを確認します。値 9014 は、ジャンボフレームが有効であることを示します。(MTU のサイズには、ヘッダーとペイロードが含まれる点に注意してください)。ジャンボフレームはデフォルトで無効化されています。

Get-NetAdapterAdvancedProperty -Name "Ethernet"
AWS PV driver

MTU 値を取得するには、EC2 インスタンスで次のコマンドを使用します。インターフェイスの名前は異なる場合があります。出力では、「Ethernet」、「Ethernet 2」、または 「Local Area Connection」 という名前のエントリを探してください。ジャンボフレームを有効または無効にするには、インターフェイス名が必要です。値 9001 は、ジャンボフレームが有効であることを示します。

netsh interface ipv4 show subinterface

インスタンスの MTU を設定する

VPC 内のネットワークトラフィックにジャンボフレームを使用したり、インターネットトラフィックに標準フレームを使用したりする場合があるでしょう。どのようなユースケースでも、インスタンスが想定どおりに動作することを確認することをお勧めします。

使用する手順は、インスタンスのオペレーティングシステムによって異なります。

Linux インスタンス上の MTU 値を設定するには
  1. インスタンスで次の ip コマンドを実行します。このコマンドで目的の MTU 値が 1500 に設定されますが、代わりに 9001 を使用することができます。

    [ec2-user ~]$ sudo ip link set dev eth0 mtu 1500
  2. (オプション) 再起動後もネットワーク MTU 設定を維持するには、オペレーティングシステムのタイプに基づいて、次の設定ファイルを変更します。

    • Amazon Linux 2 の場合、次の行を /etc/sysconfig/network-scripts/ifcfg-eth0 ファイルに追加します。

      MTU=1500

      次の行を /etc/dhcp/dhclient.conf ファイルに追加します。

      request subnet-mask, broadcast-address, time-offset, routers, domain-name, domain-search, domain-name-servers, host-name, nis-domain, nis-servers, ntp-servers;
    • Amazon Linux AMI の場合は、以下の行を /etc/dhcp/dhclient-eth0.conf ファイルに追加します。

      interface "eth0" { supersede interface-mtu 1500; }
    • その他の Linux ディストリビューションの場合は、特定のドキュメントを参照してください。

  3. (オプション) インスタンスを再起動し、MTU 設定が正しいことを確認します。

使用する手順は、インスタンスのドライバーによって異なります。

ENA driver

インスタンスでデバイスマネージャーまたは Set-NetAdapterAdvancedProperty コマンドを使用して、MTU を変更できます。

バージョン 2.1.0 以降

ジャンボフレームを有効にするには、次のコマンドを使用します。

Set-NetAdapterAdvancedProperty -Name "Ethernet" -RegistryKeyword "*JumboPacket" -RegistryValue 9015

ジャンボフレームを無効にするには、次のコマンドを使用します。

Set-NetAdapterAdvancedProperty -Name "Ethernet" -RegistryKeyword "*JumboPacket" -RegistryValue 1514
バージョン 1.5 以前

ジャンボフレームを有効にするには、次のコマンドを使用します。

Set-NetAdapterAdvancedProperty -Name "Ethernet" -RegistryKeyword "MTU" -RegistryValue 9001

ジャンボフレームを無効にするには、次のコマンドを使用します。

Set-NetAdapterAdvancedProperty -Name "Ethernet" -RegistryKeyword "MTU" -RegistryValue 1500
Intel SRIOV 82599 driver

インスタンスでデバイスマネージャーまたは Set-NetAdapterAdvancedProperty コマンドを使用して、MTU を変更できます。

ジャンボフレームを有効にするには、次のコマンドを使用します。

Set-NetAdapterAdvancedProperty -Name "Ethernet" -RegistryKeyword "*JumboPacket" -RegistryValue 9014

ジャンボフレームを無効にするには、次のコマンドを使用します。

Set-NetAdapterAdvancedProperty -Name "Ethernet" -RegistryKeyword "*JumboPacket" -RegistryValue 1514
AWS PV driver

インスタンスで netsh コマンドを使用することで MTU を変更できます。デバイスマネージャーでは MTU を変更できません。

ジャンボフレームを有効にするには、次のコマンドを使用します。

netsh interface ipv4 set subinterface "Ethernet" mtu=9001

ジャンボフレームを無効にするには、次のコマンドを使用します。

netsh interface ipv4 set subinterface "Ethernet" mtu=1500

トラブルシューティング

ジャンボフレームを使用したときに EC2 インスタンスと Amazon Redshift クラスターとの間で接続の問題が発生した場合は、「Amazon Redshift 管理ガイド」の「クエリがハングしたようになる」を参照してください。