网络最大传输单元(MTU)

2024-12-04   访问量:1006


网络最大传输单元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

查看Linux实例的MTU

示例操作系统:Windows Server 2022。

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

  1. 远程连接ECS实例。

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

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

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

     

    netsh interface ipv4 show subinterfaces

    开启巨型帧之前

    开启巨型帧之后

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

    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实例

Linux实例

示例操作系统:Windows Server 2022。

  1. 远程连接Windows实例。

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

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

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

     

    netsh interface ipv4 show subinterfaces

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

    image

    netsh interface ipv4 show subinterfaces命令详情

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

     

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

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

    image

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

    image

    netsh interface ipv4 set subinterface命令详情

实际应用中MTU的限制

ECS互访链路MTU限制

云网络产品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的设置可以提高网络效率和性能,减少分片和重组数据包的需求,从而降低网络延迟和提高吞吐量。以下是一些关于MTU设置的最佳实践:

  • 确定合理的MTU

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

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

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

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


热门文章
更多>