全部产品
Search
文档中心

云服务器 ECS:网络最大传输单元(MTU)

更新时间:Nov 13, 2024

网络最大传输单元MTU(Maximum Transmission Unit)是指在特定网络协议下,通过网络能够传输的最大数据包大小。在网络传输中,当遇到大包传输效率低或频繁发生分片重组问题的场景时,可能需要调整MTU以确保数据包能更高效、无损地通过网络中的路由器和链路层限制,从而提升网络传输速度和稳定性。

MTU的分类

根据不同的网络层和应用场景,MTU有几种不同的分类,包括:

  • 链路层MTU

    链路层能够传输的最大数据载荷(Payload)的大小。在以太网中,MTU通常为1500字节,不包含以太网头部。标准以太网帧大小 (1518字节)= 目的MAC地址(6字节) + 源MAC地址(6字节) + 类型/长度字段(2字节) + 数据载荷(1500字节) + 帧校验序列(4字节)。

  • IP MTU

    网络层可以处理的最大数据包的大小,包括IP头部和数据负载,不包括以太网帧的头部和尾部。在阿里云环境中,当我们提到MTU,通常指的是IP MTU。

    如果考虑到IP头部和TCP头部的最小尺寸(可能会因为选项的存在而更长),IP MTU (1500字节)= IP头部(20字节)+ TCP头部(20字节)+ 数据载荷(1460字节)。

  • 巨型帧MTU

    巨型帧(Jumbo Frames)是一些厂商提出的概念,它将标准以太网帧的大小扩展到了9K字节。巨型帧包括二层以太帧头及CRC部分,而IP MTU通常不包括这些部分。合理使用巨型帧可以减少网络中数据包的数量,提高网络效率。阿里云支持8500字节的巨型帧,详细信息,请参见巨型帧(Jumbo Frames)

  • 路径最大传输单元PMTU

    路径最大传输单元PMTU(Path Maximum Transmission Unit)是指在两个网络节点之间,不包括分片的情况下,能够传输的最大数据包大小。这个路径包括了从源节点到目的节点之间的所有网络设备和链路,如路由器、交换机和通信链路。

    路径最大传输单元发现PMTUD(Path MTU Discovery)是一种TCP/IP协议栈功能,用于动态发现路径上允许的最大传输单元PMTU,以避免数据包在传输过程中被分片。详细信息,请参见路径MTU发现机制(PMTUD)

影响MTU大小的因素

MTU的大小可以由多种因素决定,包括:

  • 网络设备:不同网络设备如路由器、交换机在设计时会规定其支持的最大的MTU值,这是由硬件能力决定的。如果网络中的某个设备的MTU小于其他设备,那么整个网络通信过程中的MTU大小将被该设备所限制。

  • 网络类型:不同类型的网络连接,如以太网、无线网络等,对MTU的要求也不尽相同。例如,无线网络的MTU往往较小,因为无线信号传输的稳定性相对较差,较大的MTU容易导致数据包的丢失和重传。

  • 传输介质:不同类型的网络介质(如双绞线、光纤、无线等)可能有不同的MTU限制。

  • 网络协议:不同的网络协议可能会对MTU有不同的要求,例如,以太网的标准MTU大小是1500字节。

  • 应用需求:某些特定应用可能对MTU有特殊要求,这也会间接影响整体网络的MTU。

MTU对网络性能的影响

正确地设置MTU对于网络通信的性能和效率至关重要,通常体现在:

  • 分片与重组

    当一个数据包从一个网络传到另一个具有不同MTU值的网络时,如果原始数据包的大小超过目的网络的MTU限制,数据包就需要被分割成多个小的数据包(分片)。这些分片在到达目的地后需要重新组装起来(重组)。这个过程会增加网络延迟,降低传输效率,并可能增加网络设备的处理负担,因为分片和重组都需要额外的计算资源。

  • 传输效率降低

    由于分片和重组带来的额外开销,数据包在需要通过MTU较小的链路时,可能会导致整体的网络传输速率下降。此外,分片还可能导致某些协议或应用的性能问题,例如TCP的重传机制可能会因分片丢失而被不当触发,进一步降低效率。

  • 网络拥塞

    如果MTU设置得过小,会导致数据被分割为过多的小分片进行传输,增加了网络拥塞的可能性。而较大的MTU可以减少分组的数量,降低了网络的拥塞程度,提高了网络的吞吐量。

为了优化网络性能,通常建议将网络路径中的所有环节的MTU设置为一致,且尽可能地大,但又不超过路径中任何一环节的MTU限制。这样可以减少分片和重组的需求,提高传输效率。对于特定的应用场景,如视频会议、大文件传输等高带宽需求的应用,适当调整MTU大小可以提升传输效率和质量。

查看ECS网络接口的MTU

MTU限定了网卡一次最多传输数据的字节数。当前所有ECS实例都默认支持1500 MTU(网络接口遵循以太网标准封装和传输数据)。如果您的ECS实例支持并开启了巨型帧(Jumbo Frames),则支持8500的MTU。您可以远程连接实例,通过操作系统命令查看目前网卡的MTU的值。

查看Windows实例的MTU

示例操作系统:Windows Server 2022。

示例实例规格族:ecs.g8i.large。

  1. 远程连接ECS实例。

    具体操作,请参见通过密码或密钥认证登录Windows实例

  2. 打开命令提示符或Windows PowerShell工具。

  3. 执行以下命令,查看当前网络接口的MTU。

    netsh interface ipv4 show subinterfaces

    开启巨型帧之前

    可以看到主网卡以太网和辅助弹性网卡以太网2的MTU均为默认支持的1500:

    image

    开启巨型帧之后

    可以看到主网卡以太网和辅助弹性网卡以太网2的MTU均变成8500:

    image

查看Linux实例的MTU

示例操作系统:Alibaba Cloud Linux 3.2。

示例实例规格族:ecs.g8i.large。

  1. 远程连接ECS实例。

    具体操作,请参见通过密码或密钥认证登录Linux实例

  2. 执行以下命令,查看当前网络接口的MTU。

    ip a
    开启巨型帧之前

    可以看到主网卡eth0和辅助弹性网卡eth1的MTU均为默认支持的1500:

    image

    开启巨型帧之后

    可以看到主网卡eth0和辅助弹性网卡eth1的MTU均为8500:

    image

使用ping命令手动探测PMTU

作为手动测试方式,您也可以通过ping命令,手动探测PMTU。详细方法如下:

警告

进行此类测试可能会影响网络通信,请在非高峰时段进行。

  • 测试方法:通过发送一个包含“不分片”标志的数据包,并逐渐增加数据包的大小,直到收到“需要分片但设置了不分片标志”的ICMP错误消息,表明前一个大小就是PMTU减去IP头部(20字节)和ICMP头部(8字节)的大小。

  • 测试命令:执行以下命令,测试网络链路上的MTU大小。

    ping -c 1 -M do -s [包大小] 目标地址

    命令解释:

    • -c 1:表示只发送一个数据包。

    • -M do:表示设置DF(Don't Fragment)不分片标志。

    • -s [包大小]:指定数据包的大小(ICMP的PDU),初始值可以从一个常见的值开始(例如1472)。

      说明

      ping 使用的是ICMP协议,ICMP的下层协议是IP协议,ICMP头部共8字节,IP头部共20字节,ICMP的IP数据包 = IP头部大小 + ICMP头部大小 + ICMP的PDU,所以 -s 1472 表示整个IP数据包的长度等于20+8+1472 = 1500 字节。

  • 测试示例

    • 两端主机MTU信息:

      FROM:172.17.0.127 ,为方便测试对比,启用ECS巨型帧,MTU为8500字节。关于启用巨型帧,请参见开启/关闭巨型帧

      TO:172.17.0.128 MTU为1500。

    • 测试:执行以下命令,尝试发送8472字节的数据包(不包括IP和ICMP头部大小)。

      ping -c 1 -M do -s 8472 172.17.0.128

    • 测试结果:收到了一个ICMP错误消息,显示"Frag needed and DF set(mtu=1500)",表示数据包因为超过了MTU(1500字节)而需要分片,但是由于DF标志位被设置,数据包不能被网络路径上的转发设备分片,因此被丢弃。

      image

手动修改网络接口的MTU

在阿里云上,一些通信场景或网络产品(例如VPN网关、流量镜像)对ECS发出的数据包大小有着更加严格的要求,需要您主动缩小数据包尺寸,以保证网络连通性或更好的用户体验。您需要修改ECS网络接口的MTU值,以满足这些产品的要求。

警告
  • 在修改MTU之前,请确保了解降低或提高MTU可能对网络性能产生的影响。不恰当的MTU值可能导致某些类型的数据包需要分片,从而影响网络效率。

    • Linux操作系统的MTU会通过DHCP服务器自动获取,如果您没有主动禁用DHCP或者不是在VPN网关等隧道场景中,一般情况下无需手动修改网卡MTU。

    • 如果您是在巨型帧等特定场景下,请参考相关的最佳实践来解决,而不是手动修改MTU。关于巨型帧,请参见开启/关闭巨型帧

  • 修改ECS网卡MTU时,注意不要超过ECS实例支持的MTU上限(开启巨型帧时为8500,关闭或不支持巨型帧时为1500),否则可能导致网络不通。

在本示例中,我们演示不同操作系统下手动修改ECS网卡MTU到1399字节。

Windows实例

示例操作系统:Windows Server 2022。

  1. 远程连接Windows实例。

    具体操作,请参见通过密码或密钥认证登录Windows实例

  2. 打开命令提示符或Windows PowerShell工具。

  3. 执行以下命令,查看以太网网卡的MTU。

    netsh interface ipv4 show subinterfaces

    返回信息如下所示,表示以太网网卡当前的MTU值为1500。

    image

    netsh interface ipv4 show subinterfaces命令详情

    您可以执行以下命令,查看接口信息查询命令参数详情

    netsh interface ipv4 show subinterfaces ?

    参数解释如下:

    image

  4. 执行以下命令,设置以太网网络接口的MTU为1399,且设置永久生效。

    netsh interface ipv4 set subinterface "以太网" mtu=1399 store=persistent

    返回“确定”表示命令执行成功。如果返回有错误信息,根据错误信息提示修改即可。

    image

    再次查看以太网网卡的MTU,可以看到变更已经生效。

    image

    netsh interface ipv4 set subinterface命令详情

    您可以执行以下命令查看修改子接口命令配置参数详情:

    netsh interface ipv4 set subinterface ?

    参数解释如下:

    image

Linux实例

示例操作系统:Alibaba Cloud Linux 3.2。

ip 命令临时修改
重要

此方式为临时修改网卡接口的MTU值,如果重启网络服务或重启实例,修改会失效。

  1. 远程连接Linux实例。

    具体操作,请参见通过密码或密钥认证登录Linux实例

  2. 执行以下命令,查看当前网卡的MTU。

    ip a

    可以看到,当前实例主网卡eth0和辅助弹性网卡eth1的MTU均为1500。

    image

  3. 执行以下命令,临时修改网络接口eth1的MTU为1399。

    sudo ip link set dev eth1 mtu 1399

    再次查看网卡信息,可以看到eth1的MTU已经变为1399:

    image

编辑网络配置文件(永久生效)
重要
  • 您可以通过编辑网络配置文件的方式修改网络接口的MTU,并且重启网络接口服务或者重启实例,使修改永久生效。

  • 不同Linux发行版及版本不同,网络配置文件不同,本文以RHEL/CentOS系的Alibaba Cloud Linux 3.2为例说明具体配置。

  • 如果您绑定了辅助弹性网卡(如eth1),且需要修改辅助弹性网卡的MTU,请您确保辅助弹性网卡已经正确配置。具体操作,请参见配置辅助弹性网卡

  1. 远程连接Linux实例。

    具体操作,请参见通过密码或密钥认证登录Linux实例

  2. 执行以下命令,查看当前网卡的MTU。

    ip a

    可以看到,当前实例主网卡eth0和辅助弹性网卡eth1的MTU均为1500。

    image

  3. 执行以下命令,查看网络接口的配置文件信息。

    ls /etc/sysconfig/network-scripts

    以下为当前实例的网络接口eth0和eth1的主网络配置文件

    image

  4. 执行以下命令,禁用cloud-init的网络配置功能。

    sudo vim /etc/cloud/cloud.cfg.d/99-disable-network-config.cfg

    添加如下配置项:

    network: {config: disabled}
  5. 执行以下命令,编辑eth1的网络配置文件,增加MTU配置。

    sudo vi /etc/sysconfig/network-scripts/ifcfg-eth1

    image

  6. 执行以下命令,重启网络服务,使配置生效。

    sudo systemctl restart NetworkManager

    执行成功后,再次查看网络接口信息,可以看到当前网络接口eth1的MTU值已经是1399:

    image

实际应用中MTU的限制

ECS互访链路MTU限制

支持巨型帧(Jumbo Frames)的ECS实例作为源主机时,目的主机在不同通信场景下的链路最大MTU限制如下表所示:

目的主机

允许的最大MTU

“同VPC内” 或 “同region对等连接的VPC内” 开启巨型帧的ECS实例

8500

“同VPC内” 或 “同region对等连接的VPC内” 未开启巨型帧的ECS实例

1500

“通过CEN实现互通的VPC内”任意ECS实例

“通过高速通道连接的线下IDC内”的主机

“通过EIP、PIP访问”的外部主机

更多信息,请参见VPC对等连接概述VPC连接

云网络产品MTU限制

当您处于以下场景时,需要关注网络产品自身的MTU限制:

  • 在阿里云网络内,链路默认支持1500 MTU,对于不支持巨型帧的ECS实例通信时,需要关注VPN网关等网络组件自身的MTU限制。

  • 在使用非TCP协议(UDP、ICMP)访问特定网络产品时,需要注意不同网络产品自身的MTU限制。

当前阿里云云产品普遍不支持巨型帧,部分网络产品的最大MTU限制如下表所示:

网络产品

支持的最大MTU

说明

NAT网关

1500

负载均衡(包括ALB、NLB、CLB)

ALB和CLB不支持分片报文的转发,因此使用UDP/ICMP进行通信时,需要严格控制源ECS实例发出的数据包的整包大小不超过1500。

云服务(OSS,RDS等)

由于流量会经过负载均衡产品,需注意负载均衡产品的限制。

全球加速

云防火墙

私网连接PrivateLink

VPN网关

1399

更多信息,请参见IPsec-VPN连接中MTU配置说明

如何合理设置MTU

优化MTU的设置可以提高网络效率和性能,减少分片和重组数据包的需求,从而降低网络延迟和提高吞吐量。以下是一些关于MTU设置的最佳实践:

  • 确定合理的MTU

  • 启用和适配PMTUD:确保操作系统或网络设备支持并启用PMTUD,这样可以通过动态的方式发现和适应网络路径上允许的PMTU,应用程序通过适配感知并响应ICMP消息,对数据包进行处理(缩小数据包长度),避免分片。详细信息,请参见PMTUD工作原理

  • 考虑网络设备的限制:确保路由器、交换机等网络设备的MTU设置与操作系统的MTU设置一致,以避免数据包在传输过程中被分片或丢弃。

  • 适应特定应用:某些应用程序或协议有其推荐的MTU大小。VoIP、视频会议等实时应用可能从较小的MTU中受益,减少延迟和提高包传输效率。

  • 定期监测网络性能:应定期监视网络性能和MTU大小的变化,以便及时调整以适应网络条件的变化,包括但不限于网络吞吐量测试、延迟测试以及特定应用性能的评估。