Amazon Elastic Compute Cloud
Windows 实例用户指南
AWS 服务或AWS文档中描述的功能,可能因地区/位置而异。请点击 Amazon AWS 入门,可查看中国地区的具体差异

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

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

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

极大帧 (9001 MTU)

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

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

对于在一个置放群组中并置的实例,极大帧可帮助达到可能的最大网络吞吐量,因此建议在这种情况下使用。有关更多信息,请参阅 置放群组

以下实例支持极大帧:

  • 通用型:M3、M4、T2

  • 计算优化型:C3、C4、C5、CC2

  • 加速计算型:CG1、F1、G2、G3、P2、P3

  • 内存优化型:CR1、R3、R4、X1

  • 存储优化型:D2、HS1、I2、I3

路径 MTU 发现

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

默认情况下,安全组不允许任何入站 ICMP 流量。要确保您的实例可以收到此消息并且数据包不会丢失,您必须将具有无法访问目标协议的自定义 ICMP 规则添加到您实例的入站安全组规则。有关更多信息,请参阅 路径 MTU 发现

重要

将您实例的安全组修改为允许路径 MTU 发现不能保证极大帧不会被某些路由器忽略。您 VPC 中的 Internet 网关仅将转发最多 1500 字节的数据包。建议对 Internet 流量使用 1500 MTU 数据包。

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

您可使用 mturoute.exe 命令查看两台主机之间的路径 MTU,

使用 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。

    Copy
    .\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 流量。无论是哪种情况,我们都建议您验证实例是否如预期那样运行。

ENA 驱动程序

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

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

Copy
Get-NetAdapterAdvancedProperty -Name "Ethernet"

启用巨型帧,如下所示:

Copy
Set-NetAdapterAdvancedProperty -Name "Ethernet" -RegistryKeyword "MTU" -RegistryValue 9000

禁用巨型帧,如下所示:

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

Intel SRIOV 82599 驱动程序

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

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

Copy
Get-NetAdapterAdvancedProperty -Name "Ethernet"

启用巨型帧,如下所示:

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

禁用巨型帧,如下所示:

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

AWS 半虚拟化驱动程序

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

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

Copy
netsh interface ipv4 show subinterface

启用巨型帧,如下所示:

Copy
netsh interface ipv4 set subinterface "Ethernet" mtu=9000

禁用巨型帧,如下所示:

Copy
netsh interface ipv4 set subinterface "Ethernet" mtu=1500

故障排除

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