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。

要查看 Windows 实例的网络 MTU 信息,请转到 Amazon EC2 用户指南(适用于 Windows 实例)指南中的此页面: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

您可使用 tracepath 命令查看两个主机之间的路径 MTU,此命令是很多 Linux 发行版默认情况下提供的 iputils 程序包的一部分,包括 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 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;
    • 对于 Amazon Linux,将以下几行添加到 /etc/dhcp/dhclient-eth0.conf 文件。

      interface "eth0" { supersede interface-mtu 1500; }
    • 对于其他 Linux 发行版,请参阅其具体文档。

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

故障排除

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