

# EC2 インスタンスのネットワークの最大送信単位 (MTU)
<a name="network_mtu"></a>

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

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

EC2 インスタンスタイプはすべて 1500 MTU をサポートしています。

**Topics**
+ [ジャンボフレーム (9001 MTU)](#jumbo_frame_instances)
+ [パス MTU 検出](#path_mtu_discovery)
+ [Amazon EC2 インスタンスの MTU を設定する](ec2-instance-mtu.md)
+ [トラブルシューティング](#mtu-troubleshooting)

## ジャンボフレーム (9001 MTU)
<a name="jumbo_frame_instances"></a>

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

**MTU 制限 1500 バイト**
+ インターネットゲートウェイ経由のトラフィック
+ VPN 接続経由のトラフィック
+ AWS リージョン間のトラフィック (トランジットゲートウェイが使用されている場合を除く)

**MTU 制限 8500 バイト**
+ リージョン間 VPC ピアリング接続経由のトラフィック

パケットが MTU 制限を超える場合は、フラグメント化されます。また、`Don't Fragment` フラグが IP ヘッダーに設定されている場合は削除されます。

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

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

Direct Connect を経由した VPC とオンプレミスのネットワーク間のトラフィックにはジャンボフレームを使用できます。詳細と、ジャンボフレーム機能の検証方法については、*Direct Connect ユーザーガイド*の[「プライベート仮想インターフェイスまたはトランジット仮想インターフェイスの MTU」](https://docs.aws.amazon.com/directconnect/latest/UserGuide/WorkingWithVirtualInterfaces.html#set-jumbo-frames-vif.html)を参照してください。

[現行世代](https://docs.aws.amazon.com/ec2/latest/instancetypes/instance-types.html#current-gen-instances)のインスタンスはすべて、ジャンボフレームをサポートしています。以下の[旧世代](https://docs.aws.amazon.com/ec2/latest/instancetypes/instance-types.html#previous-gen-instances)のインスタンスタイプは、A1、C3、I2、M3、R3 のジャンボフレームをサポートしています。

**関連リソース**
+ NAT ゲートウェイについては「Amazon VPC ユーザーガイド」の「[NAT ゲートウェイの基本](https://docs.aws.amazon.com/vpc/latest/userguide/nat-gateway-basics.html)」を参照してください。
+ トランジットゲートウェイの詳細については「*Amazon VPC Transit Gateway ユーザーガイド*」の「[Maximum transmission unit](https://docs.aws.amazon.com/vpc/latest/tgw/transit-gateway-quotas.html#mtu-quotas)」を参照してください。
+ ローカルゾーンについては「AWS ローカルゾーンユーザーガイド」の「[考慮事項](https://docs.aws.amazon.com/local-zones/latest/ug/how-local-zones-work.html#considerations)」を参照してください。
+ AWS Wavelength については「*AWS Wavelength ユーザーガイド*」の「[Maximum transmission unit](https://docs.aws.amazon.com/wavelength/latest/developerguide/how-wavelengths-work.html#mtu)」を参照してください。
+ Outposts については「*AWS Outposts ユーザーガイド*」の「[Service link maximum transmission unit requirements](https://docs.aws.amazon.com/outposts/latest/userguide/region-connectivity.html#sl-max-mtu-requirements)」を参照してください。

## パス MTU 検出
<a name="path_mtu_discovery"></a>

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 ゲートウェイやロードバランサーなどの一部のコンポーネントを介して行われる接続は[自動追跡](security-group-connection-tracking.md#automatic-tracking)されます。つまり、[セキュリティグループの追跡](security-group-connection-tracking.md)はアウトバウンド接続を試みると自動的に有効になります。接続が自動追跡されるか、セキュリティグループのルールでインバウンド ICMP トラフィックが許可されている場合はPMTUD 応答を受信できます。

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

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

NAT ゲートウェイの MTU ルールについては「Amazon VPC ユーザーガイド」の「[最大送信単位 (MTU)](https://docs.aws.amazon.com/vpc/latest/userguide/amazon-vpc-limits.html#ngw-mtus)」を参照してください。Transit Gateway の MTU ルールについては「AWS Transit Gateway ユーザーガイド」の「[最大送信単位 (MTU)](https://docs.aws.amazon.com/vpc/latest/tgw/transit-gateway-quotas.html#mtu-quotas)」を参照してください。

# Amazon EC2 インスタンスの MTU を設定する
<a name="ec2-instance-mtu"></a>

ネットワーク接続の最大送信単位 (MTU) とは接続を介して渡すことができる最大許容パケットサイズ (バイト単位) です。すべての Amazon EC2 インスタンスで標準フレーム (1500 MTU) がサポートされており、すべての現行世代のインスタンスタイプでジャンボフレーム (9001 MTU) がサポートされています。

Amazon EC2 インスタンスの MTU を表示したり、インスタンスと別のホストの間のパス MTU を表示したり、標準フレームまたはジャンボフレームを使用するようにインスタンスを設定したりできます。

**Topics**
+ [2 つのホスト間のパス MTU の確認](#check_path_mtu)
+ [インスタンスの MTU を確認する](#check_mtu)
+ [インスタンスの MTU を設定する](#set_mtu)

## 2 つのホスト間のパス MTU の確認
<a name="check_path_mtu"></a>

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

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

### Linux インスタンス
<a name="check-path-mtu-linux"></a>

インスタンスで **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
```

### Windows インスタンス
<a name="check-path-mtu-windows"></a>

**mturoute を使用してパス MTU を確認するには**

1. [https://elifulkerson.com/projects/mturoute.php](https://elifulkerson.com/projects/mturoute.php) から EC2 インスタンスに **mturoute.exe** をダウンロードします。

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

1. 次のコマンドを使用して、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 を確認する
<a name="check_mtu"></a>

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

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

### Linux インスタンス
<a name="check-mtu-linux"></a>

**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
```

### Windows インスタンス
<a name="check-mtu-windows"></a>

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

------
#### [ 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 を設定する
<a name="set_mtu"></a>

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

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

### Linux インスタンス
<a name="set-mtu-linux"></a>

**Linux インスタンス上の MTU 値を設定するには**

1. インスタンスで次の **ip** コマンドを実行します。このコマンドで目的の MTU 値が 1500 に設定されますが、代わりに 9001 を使用することができます。プライマリネットワークインターフェイスが `eth0` でない場合は `eth0` を実際のネットワークインターフェイスに置き換えます。

   ```
   [ec2-user ~]$ sudo ip link set dev eth0 mtu 1500
   ```

1. (オプション) 再起動後もネットワーク MTU 設定を維持するにはオペレーティングシステムのタイプに基づいて、次の設定ファイルを変更します。
   + **Amazon Linux 2023** – 設定ファイルの `[Link]` セクションを変更します。デフォルトの設定ファイルは `/usr/lib/systemd/network/80-ec2.network` です。または、/run/systemd/network/ で作成された任意のカスタム設定ファイルを更新できます。ファイル名は *priority*-*interface*.network です。詳細については、Amazon Linux ドキュメントの「[Networking service](https://docs.aws.amazon.com/linux/al2023/ug/networking-service.html)」を参照してください。

     ```
     MTUBytes=1500
     ```
   + **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;
     ```
   + **その他の Linux ディストリビューション** – それぞれに固有のドキュメントを参照してください。

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

### Windows インスタンス
<a name="set-mtu-windows"></a>

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

------
#### [ 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
```

------

## トラブルシューティング
<a name="mtu-troubleshooting"></a>

ジャンボフレームを使用したときに EC2 インスタンスと Amazon Redshift クラスターとの間で接続の問題が発生した場合は「Amazon Redshift 管理ガイド」の「[クエリがハングしたようになる](https://docs.aws.amazon.com/redshift/latest/mgmt/troubleshooting-connections.html#connecting-drop-issues)」を参照してください。**