MTU大小问题、碎片和巨帧

协议的最大传输单元(MTU)设置了数据包大小的最高限制,但它们通过的网络设备、封装和其他因素会使事情复杂化。

ip网络设备
上面/ Funtap

最大传输单元(MTU)是单个数据报可以拥有的最大字节数,它既不会被分割成更小的数据报,也不会在源和目的之间的路径上被丢弃。

对于以太网帧(和许多其他类型的包),这个数字是1500字节,它通常能满足完整通过公共互联网的流量的要求。

因此,如果2000字节的以太网数据包到达路由器,它将把它们的有效负载分成两部分,并将它们重新打包成两个小于1500字节的数据包,从而满足MTU。

另一种方法是路由器丢弃数据包,但向源设备发送一个internet控制消息协议(ICMP)数据包过大的消息。目的是为了源设备在更小的数据包中重发负载,但它可能没有被配置为支持这一点。

当一个帧要从源端到达目的地时,它可能需要跨越使用与源端和目的地网络不同的协议的网络时,MTU大小也会发挥作用。例如,以太网LAN上的设备可能想要向另一个城市的以太网LAN上的设备发送有效负载,并且在途中必须跨越MPLS连接。

在这种情况下,必须考虑以太网帧的大小。如果以太网在MPLS中的封装使MPLS帧的大小超过了MPLS边缘交换机的MTU,则交换机将丢弃以太网帧。

MTU大小

MTU的大小由通信介质的物理属性决定。从历史上看,网络媒体速度较慢,更容易出错,因此MTU的大小设置得相对较小。对于大多数以太网网络,这是1500字节,这个大小在接入网络中几乎普遍使用。以太网II网络有一个标准帧大小1518字节,包括14字节Ethernet II报头和4字节帧检查序列(FCS)。其他通信媒体有不同的MTU大小。

封装开销

当一个协议的包或帧被封装到另一个协议中时,它增加了整体的帧大小。封装增加了一个协议头,因此任何以1500字节创建并封装的数据包都将超过网络可以处理的MTU。封装增加的字节数因协议类型而异:

  • IP协议47 (RFC 2784)增加24字节(IPv4头20字节,GRE头4字节)
  • 6in4封装(IP协议41,RFC 4213)增加20个字节
  • 4英寸封装(如DS-LiteRFC 6333)增加40字节
  • 任何时候你添加另一个外部IPv4头添加20字节
  • 通过DMVPN进行IPsec加密,ESP-AES-256和ESP-SHA-HMAC开销增加73字节(开销取决于传输或隧道模式、加密/认证算法和HMAC)
  • MPLS为堆栈中的每个标签添加4个字节
  • IEEE802.1问tag增加4字节(Q-in-Q将增加8字节)
  • VXLAN增加了50个字节
  • OTV增加了42个字节
  • 口齿不清增加了36字节的IPv4封装和56字节的IPv6封装
  • NVGRE增加了42个字节
  • STT增加了54个字节

还有许多其他情况会发生协议封装,因此您必须知道何时会发生这种情况,并采取步骤来适应它。一个数据包可能起源于一个指定MTU为1500字节的标准IPv4数据包,但取决于它的目的地,它可能通过封装,将其大小推过MTU。

PMTUD (PMTUD)发现路径

路由器可以对数据包进行分片,以适应更小的mtu,但这不是最优的。进入网络设备的报文可能小于MTU,但如果经过设备封装后,新的报文总大小超过出接口的MTU,设备可能会将该报文分成两个更小的报文进行转发。

例如,IPv4路由器会分片并转发超过MTU的数据包,但也会发送回ICMP消息——太大的错误消息,告诉源设备应该使用较小的MTU。另一方面,IPv6路由器不代表源对超大报文进行分片;他们只是丢弃它们,并返回一个ICMPv6包太大的错误消息。

通过网络减少MTU大小的主要问题是,某些应用程序在这种环境中可能不能很好地工作。

更复杂的是,一些路由器忽略包太大的消息,继续发送超过MTU的包。他们没有遵循一种称为路径MTU发现的标准化技术,这种技术可以避免网络上的碎片。

一些节点向DMVPN发送1500字节的数据包,随后从路由器接收到ICMPv4包太大的消息,这些节点可能会选择忽略这一点。这些节点没有执行MTU发现之路(PMTUD),由IETF规定RFC 1191RFC 1981,因此依赖于IPv4路由器来代表源主机执行这个分段。RFC 2923还涵盖了“路径MTU发现中的TCP问题”的主题。如果应用程序不能在此环境中正常运行,可能会对最终用户造成影响。此外,如果在通信路径的某个地方有一个防火墙,它阻止了ICMP错误消息,那么这肯定会阻止PMTUD正常运行。

一种测试和检测减小的MTU大小的方法是使用具有较大数据包大小的ping。下面是一些如何做到这一点的例子。

C:\Users\ScottHogg> ping -l 1500 192.168.10.1

在Windows主机上,您还可以通过-f ping参数将DF位设置为1。

C:\Users\ScottHogg> ping 192.168.10.1 -l 1500 -f

在Linux上,命令是:

RedHat# ping -s 1500 -M do 192.168.10.1

在Cisco IOS设备上,命令是:

Router1# ping 192.168.10.1 size 1500 df-bit

在Cisco NX-OS设备上,命令是:

Switch7K# ping 192.168.10.1 packet-size 9216 c

在Cisco IOS XR设备上,命令是:

RP/0/RP0/CPU0:Router1#ping 192.168.10.1 size 1500

在JUNOS设备上,命令如下所示:

root@J4350-1#运行ping 192.168.10.1 size 1500 do-not-fragment rapid

碎片

IPv4路由器代表发送超大报文的源节点分片。除非IPv4报文头DF (Do-Not-Fragment)位为1,否则路由器可以对IPv4报文进行分片。如果DF位设置为0(缺省值),则当报文过大而无法装入出接口时,路由器将一分为二,向目的端发送两个报文。当目的端收到这两个分片报文时,目的端协议栈必须将分片报文重新组装,然后再对协议数据单元PDU进行处理。但是,如果应用程序在发送DF设置为1的数据包时,不注意ICMP“包太大”的消息,并且不执行PMTUD,则存在危险。

所有IPv6网络必须支持1280字节或更大的MTU (RFC 2460).这是因为IPv6路由器不代表源对IPv6报文进行分片。IPv6路由器会丢弃该报文,并将ICMPv6 Type 4报文(超过大小)发送到指定MTU大小的源。然后由源执行碎片本身,并为该目的地缓存新的减少的MTU大小,以便将来的数据包使用正确的MTU大小。

当路由器代表源执行分段时,会增加路由器的CPU处理开销。如果使用IPsec,则隧道两端的路由器都需要处理报文的分片和重组。如果路由器代表源节点执行分片,则最好在加密之前执行分片,这样目的隧道路由器就不必重新组装分片然后进行解密。

以下两个Cisco IOS全局配置命令可以控制这种行为。

路由器(config-if)# crypto ipsec先分片后加密

路由器(config-if)# crypto加密后的ipsec分片

思科有一份很好的关于7600交换机以及如何解决这些问题的文档,标题为配置IPSec VPN分片和MTU”。

MTU和海量存储系统(MSS)中

处理由于封装和由此产生的碎片而导致的MTU大小增加的另一种方法是利用TCP最大段大小(MSS)参数。MSS是一个TCP报文中可以发送的最大有效载荷字节数。换句话说,MSS是最大数量的TCP数据(字节),可以通过计算机网络传输。这是在SYN报文的TCP 3-way握手过程中协商的。MSS定义在RFC 879对于IPv4和inRFC 2460IPv6。MSS不包括TCP报头(20字节)或IPv4报头(20字节;IPv6头是40字节)。

在使用IPsec时,习惯将tunnel接口的MTU设置为1400字节,TCP-MSS-adjust设置为1360字节。这可以在Cisco IOS设备中使用这些命令进行配置。

路由器(配置)# tunnel接口

路由器(config-if)# ip tcp adjust-mss 1360

路由器(config-if)# ip mtu 1400

对于使能IPv6的接口,我们可以使用相同类型的功能,但IPv6头是40字节,而不是IPv4的~20字节头。我们还必须考虑20字节的TCP报头,这在IPv4和IPv6中是相同的大小。

Router(config)# interface tunnel 6 .使用实例

路由器(config-if)# ipv6 tcp调整-mss 1340

路由器(config-if)# ipv6 mtu 1400

这个MSS选项对UDP应用程序不起作用:UDP是无连接协议,所以在握手期间没有办法协商。对于不执行PMTUD并将DF位设置为1的UDP应用程序,一个选项可能是配置一个将DF位设置为零的策略。

想了解更多关于这个话题的信息,请阅读“解决GRE和IPSEC的IP分片、MTU、MSS和PMTUD问题“从思科。

通过增加MTU大小进行补偿

正如我们所看到的,当封装发生时,当站点之间的链接只支持1500字节的MTU时,MTU大小的主要问题就出现了。企业路由器与上游ISP路由器之间、CE路由器与PE路由器之间的链路经常出现这种情况。

能够在WAN上增加MTU大小将是非常理想的。如果MTU的大小可以通过WAN的路径增加,那么增加的封装开销可以通过路由器的WAN接口来补偿。这将消除减少隧道接口上的MTU大小的需要,调整MSS,并减轻路由器执行任何碎片。这就是巨型帧进来

巨型帧

巨型帧是网络层pdu,其大小远远大于典型的1500字节以太网MTU。在某些情况下,如果网络硬件能够实现这种配置,可以使用巨帧来允许更大的帧大小。大多数现代路由器和交换机,以及大多数数据中心网络硬件,都可以支持巨型帧。

较大的帧也可以提高速度。有了更大的帧大小——以及更大的有效载荷大小——你就可以有更少的协议开销并能够实现较高的协议效率.换句话说,你的goodput“改进较大的帧尺寸。您还可以减少网络硬件上的网络带宽和CPU周期。

要在Cisco IOS设备上配置超大帧MTU大小,只需在接口配置上输入MTU命令,如下所示:

路由器(config)# interface GigabitEthernet 4/1

路由器(config-if) # mtu 9216

show interface命令将验证接口新的MTU大小。

对于其他制造商的设备,您只需要在物理或虚拟接口中查找允许您设置大于1,500字节的MTU大小的配置命令。

要记住的关键概念是所有通信路径上的网络设备必须支持巨帧。在端到端传输路径上,需要配置巨帧在各设备的入接口和出接口上工作。此外,拓扑中的所有设备也必须在最大jumbo帧大小上达成一致。如果传输路径上的设备有不同的帧大小,那么您可能会遇到碎片问题。同样,如果沿着路径的一个设备不支持巨型帧而它接收到一个,它将丢弃它。

Jumbograms

巨帧不应与jumbograms.在讨论通信协议时,是OSI模型的第2层(数据链路层)使用的PDU,为第三层(网络层)使用的PDU。jumbogram是一个超过链路MTU大小的更大的三层包。IPv4能够生成高达65,535字节的有效载荷,而IPv6能够生成32位的有效载荷。大型有效载荷长度"一跳一跳选项头部的大小。因此,IPv6可以支持一个可笑的4.2GB有效载荷。很明显,这个数据包不能在任何类型的普通网络接口上传输——试想一下重传的后果。

巨型帧支持

大多数网络设备支持9216字节的巨帧大小。不过,这并不像以太网的1500字节MTU那样标准化,所以您需要与特定的制造商确认他们的设备支持的最大帧大小以及如何配置更改。即使在单个制造商的网络产品系列中,MTU功能也可能相差很大,因此对通信路径中的所有设备进行彻底的调查并验证它们的设置是很重要的。例如,一些Intel千兆适配器支持巨帧,但是很多人不

建议

由于隧道、IPsec加密和覆盖协议而导致的MTU大小减少问题会降低网络性能。如果您正在使用封装技术,那么您应该考虑增加MTU的大小,特别是在网络或广域网的核心,以避免碎片和PMTUD问题。询问你的服务提供商是否支持在他们的网络中以及在他们的PE和你的CE路由器之间的链路上使用更大的帧。

了解巨型帧的好处可能有助于您的网络性能。但是,在启用此特性之前,务必了解您的网络设备是否支持巨型帧以及如何支持巨型帧。使用巨型帧的一些最大好处可以在数据中心内部和数据中心之间实现。2020欧洲杯预赛但是,您应该认识到,如果那些大帧试图跨越一个MTU较小的链路,可能会出现碎片。

加入网络世界社区足球竞猜app软件脸谱网LinkedIn对自己最关心的话题发表评论。

版权所有©2021 IDG Com足球竞彩网下载munications, Inc.

SD-WAN买家指南:向供应商(和您自己)提出的关键问题