本文中含有需要您注意的重要提示信息,忽略该信息可能对您的业务造成影响,请务必仔细阅读。
网络最大传输单元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。
远程连接ECS实例。
具体操作,请参见通过密码或密钥认证登录Windows实例。
打开命令提示符或Windows PowerShell工具。
执行以下命令,查看当前网络接口的MTU。
netsh interface ipv4 show subinterfaces
开启巨型帧之前
可以看到主网卡以太网和辅助弹性网卡以太网2的MTU均为默认支持的1500:
开启巨型帧之后
可以看到主网卡以太网和辅助弹性网卡以太网2的MTU均变成8500:
查看Linux实例的MTU
示例操作系统:Alibaba Cloud Linux 3.2。
示例实例规格族:ecs.g8i.large。
远程连接ECS实例。
具体操作,请参见通过密码或密钥认证登录Linux实例。
执行以下命令,查看当前网络接口的MTU。
ip a
开启巨型帧之前
可以看到主网卡eth0和辅助弹性网卡eth1的MTU均为默认支持的1500:
开启巨型帧之后
可以看到主网卡eth0和辅助弹性网卡eth1的MTU均为8500:
使用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标志位被设置,数据包不能被网络路径上的转发设备分片,因此被丢弃。
手动修改网络接口的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。
远程连接Windows实例。
具体操作,请参见通过密码或密钥认证登录Windows实例。
打开命令提示符或Windows PowerShell工具。
执行以下命令,查看以太网网卡的MTU。
netsh interface ipv4 show subinterfaces
返回信息如下所示,表示以太网网卡当前的MTU值为1500。
执行以下命令,设置以太网网络接口的MTU为1399,且设置永久生效。
netsh interface ipv4 set subinterface "以太网" mtu=1399 store=persistent
返回“确定”表示命令执行成功。如果返回有错误信息,根据错误信息提示修改即可。
再次查看以太网网卡的MTU,可以看到变更已经生效。
Linux实例
示例操作系统:Alibaba Cloud Linux 3.2。
ip 命令临时修改
此方式为临时修改网卡接口的MTU值,如果重启网络服务或重启实例,修改会失效。
远程连接Linux实例。
具体操作,请参见通过密码或密钥认证登录Linux实例。
执行以下命令,查看当前网卡的MTU。
ip a
可以看到,当前实例主网卡eth0和辅助弹性网卡eth1的MTU均为1500。
执行以下命令,临时修改网络接口eth1的MTU为1399。
sudo ip link set dev eth1 mtu 1399
再次查看网卡信息,可以看到eth1的MTU已经变为1399:
编辑网络配置文件(永久生效)
您可以通过编辑网络配置文件的方式修改网络接口的MTU,并且重启网络接口服务或者重启实例,使修改永久生效。
不同Linux发行版及版本不同,网络配置文件不同,本文以RHEL/CentOS系的Alibaba Cloud Linux 3.2为例说明具体配置。
如果您绑定了辅助弹性网卡(如eth1),且需要修改辅助弹性网卡的MTU,请您确保辅助弹性网卡已经正确配置。具体操作,请参见配置辅助弹性网卡。
远程连接Linux实例。
具体操作,请参见通过密码或密钥认证登录Linux实例。
执行以下命令,查看当前网卡的MTU。
ip a
可以看到,当前实例主网卡eth0和辅助弹性网卡eth1的MTU均为1500。
执行以下命令,查看网络接口的配置文件信息。
ls /etc/sysconfig/network-scripts
以下为当前实例的网络接口eth0和eth1的主网络配置文件
执行以下命令,禁用cloud-init的网络配置功能。
sudo vim /etc/cloud/cloud.cfg.d/99-disable-network-config.cfg
添加如下配置项:
network: {config: disabled}
执行以下命令,编辑eth1的网络配置文件,增加MTU配置。
sudo vi /etc/sysconfig/network-scripts/ifcfg-eth1
执行以下命令,重启网络服务,使配置生效。
sudo systemctl restart NetworkManager
执行成功后,再次查看网络接口信息,可以看到当前网络接口eth1的MTU值已经是1399:
实际应用中MTU的限制
ECS互访链路MTU限制
支持巨型帧(Jumbo Frames)的ECS实例作为源主机时,目的主机在不同通信场景下的链路最大MTU限制如下表所示:
目的主机 | 允许的最大MTU |
“同VPC内” 或 “同region对等连接的VPC内” 开启巨型帧的ECS实例 | 8500 |
“同VPC内” 或 “同region对等连接的VPC内” 未开启巨型帧的ECS实例 | 1500 |
“通过CEN实现互通的VPC内”任意ECS实例 | |
“通过高速通道连接的线下IDC内”的主机 | |
“通过EIP、PIP访问”的外部主机 |
云网络产品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:
了解实际网络环境的标准MTU值:以太网默认MTU通常是1500字节。详细信息,请参见MTU的分类。
可以通过ping命令探测PMTU。详细信息,请参见使用ping命令手动探测PMTU。
启用和适配PMTUD:确保操作系统或网络设备支持并启用PMTUD,这样可以通过动态的方式发现和适应网络路径上允许的PMTU,应用程序通过适配感知并响应ICMP消息,对数据包进行处理(缩小数据包长度),避免分片。详细信息,请参见PMTUD工作原理。
考虑网络设备的限制:确保路由器、交换机等网络设备的MTU设置与操作系统的MTU设置一致,以避免数据包在传输过程中被分片或丢弃。
适应特定应用:某些应用程序或协议有其推荐的MTU大小。VoIP、视频会议等实时应用可能从较小的MTU中受益,减少延迟和提高包传输效率。
定期监测网络性能:应定期监视网络性能和MTU大小的变化,以便及时调整以适应网络条件的变化,包括但不限于网络吞吐量测试、延迟测试以及特定应用性能的评估。