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

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

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

以太网帧有不同的格式,最常见的格式是标准以太网 v2 帧格式。它支持 1500 MTU,这是大部分 Internet 上支持的最大以太网数据包大小。实例支持的最大 MTU 取决于其实例类型。

以下规则适用于 Wavelength 区域中的实例:

  • 在同一个 Wavelength 区域中的 VPC 内,从一个实例到另一个实例的流量的 MTU 为 1300。

  • 在 Wavelength 区域内,从一个实例到另一个使用运营商 IP 的实例的流量的 MTU 为 1500。

  • 在 Wavelength 区域和使用公有 IP 地址的区域之间从一个实例到另一个实例的流量的 MTU 为 1500。

  • 在 Wavelength 区域和使用私有 IP 地址的区域之间从一个实例到另一个实例的流量的 MTU 为 1300。

以下规则适用于 Outposts 中的实例:

  • 从 Outposts 中实例到该区域中实例的流量 MTU 为 1300。

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

巨型帧 (9001 MTU)

巨型帧通过增加每个数据包的负载大小,从而增加数据包中不属于数据包开销的百分比来支持 1500 个字节以上的数据。发送等量的可用数据所需要的数据包更少。但是,在以下情况下,流量限制为最大 MTU 为 1500:

  • 互联网网关流量

  • 区域间 VPC 对等连接中的流量

  • VPN 连接的流量

  • EC2-Classic 给定 Amazon 区域外的流量

如果数据包大于 1500 字节,则对数据包进行分段;如果在 IP 标头中设置了 Don't Fragment 标记,则丢弃数据包。

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

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

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

所有 Amazon EC2 实例类型都支持 1500 MTU,所有当前一代实例类型都支持巨型帧。下列前一代实例类型支持巨型帧:A1、C3、G2、I2、M3 和 R3。

有关支持的 MTU 大小的更多信息:

  • 对于 NAT 网关,请参阅《Amazon VPC 用户指南》中的 NAT 网关基础知识

  • 对于中转网关,请参阅《Amazon VPC 中转网关用户指南》中的 MTU

  • 对于 Local Zones,请参阅《Amazon Local Zones User Guide》中的 Considerations

路径 MTU 发现

路径 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 网关和负载均衡器)建立的连接会自动跟踪。这意味着将为您的出站连接尝试自动启用安全组跟踪。如果自动跟踪连接或者您的安全组规则允许入站 ICMP 流量,您可能会收到 PMTUD 响应。

请注意,即使在安全组级别允许流量,也可能会阻止 ICMP 流量;例如您的网络访问控制列表条目拒绝 ICMP 流量进入子网时。

重要

路径 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

Amazon 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 Management 指南》中的查询挂起