

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 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 限制，會將其切割為片段，若其 IP 標頭設有 `Don't Fragment` 標記，則會將其捨棄。

巨型訊框應謹慎用於進出網路的流量，或任何離開 VPC 的流量。封包由中介系統切割，因此拖累流量速度。欲在 VPC 中使用巨型訊框但不減緩流出 VPC 的流量，您可依據路由設定 MTU 大小，或使用多個具備不同 MTU 大小與路由的彈性網絡介面。

以配置於集群放置群組內的執行個體而言，巨型訊框有助實現最大網路傳輸量，此情況建議使用巨型訊框。如需詳細資訊，請參閱[Amazon EC2 執行個體的置放群組](placement-groups.md)。

您可以針對透過 Direct Connect的 VPC 和現場部署網路之間的流量，使用 Jumbo Frame。如需詳細資訊並了解如何驗證巨型訊框功能，請參閱《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 傳輸閘道使用者指南」**中的 [MTU](https://docs.aws.amazon.com/vpc/latest/tgw/transit-gateway-quotas.html#mtu-quotas)。
+ 如需 Local Zones 相關資訊，請參閱「AWS Local Zones 使用者指南」**中的[考量](https://docs.aws.amazon.com/local-zones/latest/ug/how-local-zones-work.html#considerations)。
+ 如需 AWS Wavelength，請參閱*AWS Wavelength 《 使用者指南*》中的[最大傳輸單位](https://docs.aws.amazon.com/wavelength/latest/developerguide/how-wavelengths-work.html#mtu)。
+ 對於 Outpost，請參閱 *AWS Outposts 使用者指南*中的[服務連結最大傳輸單位需求](https://docs.aws.amazon.com/outposts/latest/userguide/region-connectivity.html#sl-max-mtu-requirements)。

## 路徑 MTU 探索
<a name="path_mtu_discovery"></a>

路徑 MTU 探索 (PMTUD) 可用於確認兩個裝置間的路徑 MTU。路徑 MTU 是原始主機和接收主機之間的路徑上支援的最大封包尺寸。在兩個主機之間的網路中，當 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 位元組的封包。網際網路流量建議使用 1500 MTU 封包。

如需透過 NAT 閘道的 MTU 規則，請參閱「*Amazon VPC 使用者指南*」中的[最大傳輸單位 (MTU)](https://docs.aws.amazon.com/vpc/latest/userguide/amazon-vpc-limits.html#ngw-mtus)。如需透過傳輸閘道的 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**
+ [檢查兩個主機間的路徑 MTU](#check_path_mtu)
+ [檢查執行個體的 MTU](#check_mtu)
+ [為您的執行個體設定 MTU](#set_mtu)

## 檢查兩個主機間的路徑 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.exe 檢查路徑 MTU**

1. 從 [https://elifulkerson.com/projects/mturoute.php](https://elifulkerson.com/projects/mturoute.php)：// 下載**mturoute.exe**到您的 EC2 執行個體。

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 文件中的[聯網服務](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)。