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 ~]$
tracepathamazon.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 を確認するには
-
http://www.elifulkerson.com/projects/mturoute.php
から EC2 インスタンスに mturoute.exe をダウンロードします。 -
コマンドプロンプトウィンドウを開いて、mturoute.exe をダウンロードしたディレクトリに移動します。
-
次のコマンドを使用して、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 showeth0
この出力例で、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
使用する手順は、インスタンスのドライバーによって異なります。
インスタンスの MTU を設定する
VPC 内のネットワークトラフィックにジャンボフレームを使用したり、インターネットトラフィックに標準フレームを使用したりする場合があるでしょう。どのようなユースケースでも、インスタンスが想定どおりに動作することを確認することをお勧めします。
使用する手順は、インスタンスのオペレーティングシステムによって異なります。
Linux インスタンス上の MTU 値を設定するには
-
インスタンスで次の ip コマンドを実行します。このコマンドで目的の MTU 値が 1500 に設定されますが、代わりに 9001 を使用することができます。
[ec2-user ~]$
sudo ip link set deveth0
mtu1500
-
(オプション) 再起動後もネットワーク 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 ディストリビューションの場合は、特定のドキュメントを参照してください。
-
-
(オプション) インスタンスを再起動し、MTU 設定が正しいことを確認します。
使用する手順は、インスタンスのドライバーによって異なります。
トラブルシューティング
ジャンボフレームを使用したときに EC2 インスタンスと Amazon Redshift クラスターとの間で接続の問題が発生した場合は、「Amazon Redshift 管理ガイド」の「クエリがハングしたようになる」を参照してください。