EC2 实例的网络最大传输单位 (MTU) - Amazon Elastic Compute Cloud
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

EC2 实例的网络最大传输单位 (MTU)

网络连接的最大传输单位 (MTU) 是能够通过该连接传递的最大可允许数据包的大小 (以字节为单位)。连接的 MTU 越大,可在单个数据包中传递的数据越多。以太网数据包由帧 (或您发送的实际数据) 和围绕它的网络开销信息组成。

以太网帧有不同的格式,最常见的格式是标准以太网 v2 帧格式。它支持 1500 MTU,这是大部分 Internet 上支持的最大以太网数据包大小。实例支持的最大 MTU 取决于其实例类型。所有 Amazon EC2 实例类型都支持 1500 MTU,并且当前很多实例大小都支持 9001 MTU 或巨型帧。

如果您的实例在 Wavelength 区域中运行,则最大 MTU 值为 1300。

要查看 Linux 实例的网络 MTU 信息,请转到 Amazon EC2 用户指南(适用于 Linux 实例)指南中的此页面:EC2 实例的网络最大传输单位 (MTU)

巨型帧 (9001 MTU)

巨型帧通过增加每个数据包的负载大小,从而增加数据包中不属于数据包开销的百分比来支持 1500 个字节以上的数据。发送等量的可用数据所需要的数据包更少。但是,在给定 AWS 区域 (EC2-Classic)、单一 VPC 或 VPC 对等连接的外部,您将遇到的最大路径为 1500 MTU。VPN 连接和通过互联网网关发送的流量限制为 1500 MTU。如果数据包大于 1500 字节,则对数据包进行分段;如果在 IP 标头中设置了 Don't Fragment 标记,则丢弃数据包。

对于面向 Internet 的流量或离开 VPC 的任何流量,应谨慎使用巨型帧。中间系统会对数据包进行分段,从而减缓此流量。要使用 VPC 中的巨型帧而不减慢 VPC 外部的绑定流量的速度,您可按路由配置 MTU 大小,或者将弹性网络接口与不同 MTU 大小和不同路由结合使用。

对于在集群置放群组中并置的实例,巨型帧有助于实现可能的最大网络吞吐量,建议在这种情况下使用这些帧。有关更多信息,请参阅置放群组

您可以通过 AWS Direct Connect 使用巨型帧在 VPC 与本地网络之间进行通信。有关更多信息以及如何验证巨型帧功能,请参阅 AWS Direct Connect 用户指南 中的设置网络 MTU

所有当前一代实例都支持巨型帧。以下前一代实例支持巨型帧:C3、G2、I2、M3 和 R3。

有关中转网关支持的 MTU 大小的更多信息,请参阅 Amazon VPC 中转网关 中的 MTU

路径 MTU 发现

路径 MTU 发现 (PMTUD) 用于确定网络路径的最大传输单位 (MTU)。路径 MTU 是原始主机和接收主机之间的最大数据包大小。如果主机发送一个大于接收主机的 MTU 或大于路径上某台设备的 MTU 的数据包,则接收主机或设备将返回以下 ICMP 消息:Destination Unreachable: Fragmentation Needed and Don't Fragment was Set (类型 3,代码 4)。这指示原始主机调整 MTU,直到可以传输数据包。

默认情况下,安全组不允许任何入站 ICMP 流量。但是,安全组是有状态的,因此,无论安全组规则如何,都允许流入 ICMP 对出站请求的响应。这样,您不需要明确添加入站 ICMP 规则来确保实例可以接收 ICMP 消息响应。有关在网络 ACL 中配置 ICMP 规则的更多信息,请参阅 Amazon VPC 用户指南 中的路径 MTU 发现

重要

路径 MTU 发现不能保证某些路由器不丢弃巨型帧。您 VPC 中的互联网网关仅将转发最多 1500 字节的数据包。建议对 Internet 流量使用 1500 MTU 数据包。

查看两个主机之间的路径 MTU

您可使用 mturoute.exe 命令(您可从 http://www.elifulkerson.com/projects/mturoute.php 下载和安装)。

使用 mturoute.exe 检查路径 MTU

  1. http://www.elifulkerson.com/projects/mturoute.php 下载 mturoute.exe

  2. 打开命令提示符窗口并将当前目录更改为 mturoute.exe 的下载目录。

  3. 使用以下命令检查您的 EC2 实例与另一个主机之间的路径 MTU。可以使用 DNS 名称或 IP 地址作为目的地。如果目的地是另一个 EC2 实例,则验证安全组是否允许入站 UDP 流量。本例检查 EC2 实例和 www.elifulkerson.com 之间的路径 MTU。

    .\mturoute.exe www.elifulkerson.com * 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 为 1500。

在您的 Windows 实例上检查并设置 MTU

一些驱动程序配置为使用巨型帧,另一些则配置为使用标准帧大小。您可能希望将巨型帧用于 VPC 内的网络流量,或将标准帧用于 Internet 流量。无论是哪种情况,我们都建议您验证实例是否如预期那样运行。

如果您的实例在 Wavelength 区域中运行,则最大 MTU 值为 1300。

ENA 驱动程序

对于驱动程序版本 1.5 及更低版本

您可以使用设备管理器或 Set-NetAdapterAdvancedProperty 命令更改 MTU 设置。

要使用 Get-NetAdapterAdvancedProperty 命令获取当前 MTU 设置,请使用以下命令。检查接口名称 MTU 的条目。值为 9001 表示已启用巨型帧。默认情况下禁用巨型帧。

Get-NetAdapterAdvancedProperty -Name "Ethernet"

启用巨型帧,如下所示:

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

禁用巨型帧,如下所示:

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

对于驱动程序版本 2.1.0 及更高版本

您可以使用设备管理器或 Set-NetAdapterAdvancedProperty 命令更改 MTU 设置。

要使用 Get-NetAdapterAdvancedProperty 命令获取当前 MTU 设置,请使用以下命令。检查接口名称 *JumboPacket 的条目。值为 9015 表示已启用巨型帧。默认情况下禁用巨型帧。

运行 Get-NetAdapterAdvancedProperty 或使用通配符(星号)来检测所有相应的以太网名称。

Get-NetAdapterAdvancedProperty -Name "Ethernet*"

运行以下命令并包含要查询的以太网名称。

Get-NetAdapterAdvancedProperty -Name "Ethernet"

启用巨型帧,如下所示。

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

禁用巨型帧,如下所示:

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

Intel SRIOV 82599 驱动程序

您可以使用设备管理器或 Set-NetAdapterAdvancedProperty 命令更改 MTU 设置。

要使用 Get-NetAdapterAdvancedProperty 命令获取当前 MTU 设置,请使用以下命令。检查接口名称 *JumboPacket 的条目。值为 9014 表示已启用巨型帧。(注意,MTU 的大小中包括标头和负载。) 默认情况下禁用巨型帧。

Get-NetAdapterAdvancedProperty -Name "Ethernet"

启用巨型帧,如下所示:

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

禁用巨型帧,如下所示:

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

AWS PV 驱动程序

不能使用设备管理器更改 MTU 设置,但可以使用 netsh 命令更改。

使用以下命令获取当前 MTU 设置。接口的名称可能会有所不同。在输出中,查找名为“Ethernet”、“Ethernet 2”或“Local Area Connection”的条目。您需要接口名称来启用或禁用巨型帧。值为 9001 表示已启用巨型帧。

netsh interface ipv4 show subinterface

启用巨型帧,如下所示:

netsh interface ipv4 set subinterface "Ethernet" mtu=9001

禁用巨型帧,如下所示:

netsh interface ipv4 set subinterface "Ethernet" mtu=1500

故障排除

如果在使用巨型帧时您的 EC2 实例和 Amazon Redshift 集群之间出现连接问题,请参阅 Amazon Redshift Cluster Management Guide 中的查询挂起