Amazon Elastic Compute Cloud
Linux 实例用户指南
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、M5、T2

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

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

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

  • 存储优化型:D2、H1、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

您可使用 tracepath 命令查看两台主机之间的路径 MTU,该命令是许多 Linux 分发默认情况下提供的 iputils 数据包的一部分,包括您可从 http://www.elifulkerson.com/projects/mturoute.php 下载并安装的 Amazon Linux

使用 tracepath 检查路径 MTU

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

[ec2-user ~]$ tracepath amazon.com 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

在此示例中,路径 MTU 为 1500。

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

一些实例配置为使用极大帧,另一些则配置为使用标准帧大小。您可能希望将极大帧用于您的 VPC 内的网络流量,或希望将标准帧用于 Internet 流量。无论您的使用案例如何,我们建议验证您的实例是否会按您的预期运行。您可以使用本部分中的过程查看您的网络接口的 MTU 设置并按需对其进行修改。

查看 Linux 实例上的 MTU 设置

您可使用以下 ip 命令检查当前 MTU 值。请注意,在示例输出中,mtu 9001 指示此实例使用了极大帧。

[ec2-user ~]$ ip link show eth0 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

在 Linux 实例上设置 MTU 值

  1. 可以使用 ip 命令设置 MTU 值。以下命令将预期 MTU 值设置为 1500,但是您可以使用 9001 代替。

    [ec2-user ~]$ sudo ip link set dev eth0 mtu 1500
  2. (可选) 要在重启后保留您的网络 MTU 设置,请根据您的操作系统类型修改配置文件。

    对于 Amazon Linux,将以下行添加到 /etc/dhcp/dhclient-eth0.conf 文件中。

    interface "eth0" { supersede interface-mtu 1500; }

    对于 Ubuntu,将以下行添加到 /etc/network/interfaces.d/eth0.cfg

    post-up /sbin/ifconfig eth0 mtu 1500

    对于其他 Linux 发行版,请参阅其具体文档。

  3. (可选) 重启实例并验证 MTU 设置是否正确。

故障排除

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