MTU技术白皮书
Copyright © 2024 新华三技术有限公司 版权所有,保留一切权利。
非经本公司书面许可,任何单位和个人不得擅自摘抄、复制本文档内容的部分或全部,并不得以任何形式传播。
除新华三技术有限公司的商标外,本手册中出现的其它公司的商标、产品标识及商品名称,由各自权利人拥有。
本文中的内容为通用性技术信息,某些信息可能不适用于您所购买的产品。
MTU(Maximum Transmission Unit,最大传输单元)是计算机网络中的一个重要概念,指的是网络中发送端可发送的单个报文最大字节数。MTU的大小对网络性能有直接影响,过大的MTU值会导致报文分片或被丢弃,增加报文处理开销;过小的MTU会导致报文的有效载荷减少,导致传输效率低下。
在不同的网络技术与运行协议中,报文的最优大小是变化的,这就要求MTU值的灵活设置。合理调整MTU值至关重要,因为这直接影响到网络的数据传输效率和稳定性。一个适宜的MTU值能够减少数据包的分片需求,提高带宽利用率,同时降低延迟和丢包的风险。因此,在设计和维护网络时,根据具体的网络环境和应用场景找到最适宜的MTU设置,是优化网络性能的关键步骤之一。
如图1所示,MTU根据表达的范围不同,主要分为两类。
· IP MTU:指在不包含链路层头部和尾部的情况下,IP层报文的最大尺寸,这个概念主要应用于IP网络层。
· MPLS MTU:指MPLS报文的最大尺寸,这个概念主要应用于MPLS网络。与IP MTU类似,MPLS MTU也是指除去链路层头部信息的报文大小,但它额外包括了MPLS标签的大小。在MPLS网络中,报文会被封装上一个或多个MPLS标签,这导致MPLS MTU要比传统的IP MTU大。
图1 IP MTU与MPLS MTU示意图
分片是为了避免单个报文超过链路的承载极限,IP协议在传输报文时,将一个完整的报文分为若干个分片进行分别传输的机制。MTU就规定了这个“承载极限”,超过MTU长度的报文通常会被分片或者丢弃,下面将分别介绍IP MTU和MPLS MTU的分片机制。
如图2所示,设备在发送IP报文时,判断报文是否分片、以及报文分片的过程为:
(1) 如果IP报文的长度未超过设定的IP MTU,则直接发送报文;如果IP报文的长度大于设定的IP MTU,则进行后续判断。
(2) 如果报文允许分片,则对报文按照IP MTU长度进行分片处理;如果不允许分片,则丢弃报文,如果设备是报文转发过程中的中间设备,则还会向报文的源端发送ICMP/ICMPv6协议消息,以通知对方报文太大且无法分片导致报文被丢弃。
在不同的协议栈中,报文是否允许分片的情况存在差异。
¡ 对于IPv4报文,IP头中的“片偏移”字段中存在一个DF(Don’t Fragment,不允许分片)标记位。该标记位置位(即取值为1)时,表明报文在传输过程中,设备不得对该报文进行分片;该标记位未置位(即取值为0)时,表明报文可以被分片。DF通常在使用Path MTU或为了安全性考虑需要确保数据完整性等场景被设置为1。
¡ 对于IPv6报文,没有DF标记位,但IPv6天然要求报文只能在报文发送的源端被分片,在转发过程中,中间设备不能对报文分片。
(3) 每一个分片都会携带原报文的IP头,设备发送分片后,这些分片将在目的设备中进行重组,恢复出完整的原报文。
图2 IP MTU分片机制
MPLS标签栈位于链路层帧头和网络层报文头之间。在MPLS转发过程中,即使原始IP报文的长度没有超过设定的IP MTU,一旦添加了MPLS标签,报文的总长度可能会超过链路层允许的范围,从而导致报文无法正常转发。为了防止这种情况,设备上定义了MPLS MTU,在进行MPLS转发时将增加标签后的报文长度与MPLS MTU比较。
如图3所示,设备在封装MPLS报文前,判断报文是否分片、以及报文分片的过程为:
(1) 如果IP报文加MPLS标签栈的长度未超过设定的MPLS MTU,则直接发送报文;如果IP报文加MPLS标签栈的长度大于设定的MPLS MTU,则进行后续判断。
(2) 如果报文允许分片,则对报文除了MPLS标签栈的部分按照通过MPLS MTU换算而来的IP MTU(MPLS MTU减去标签长度)进行分片处理;如果不允许分片,则为IP报文添加MPLS封装后直接发送报文。
在不同的协议栈中,报文是否允许分片的情况存在差异。
¡ 对于IPv4报文,IP头中的“片偏移”字段中存在一个DF(Don’t Fragment,不允许分片)标记位。该标记位置位(即取值为1)时,表明报文在传输过程中,设备不得对该报文进行分片;该标记位未置位(即取值为0)时,表明报文可以被分片。DF通常在使用Path MTU或为了安全性考虑需要确保数据完整性等场景被设置为1。
¡ 对于IPv6报文,没有DF标记位,但IPv6天然要求报文只能在报文发送的源端被分片,在转发过程中,中间设备不能对报文分片。
(3) 每一个分片都会携带原报文的IP头,设备对IP报文分片后,为每一个分片封装相同的MPLS标签,然后发送这些分片。这些分片将在目的设备中进行重组,恢复出完整的原报文。
图3 MPLS MTU的分片机制
目前,网络管理员可以在各类型的接口下,通过mtu size、ip mtu size或ipv6 mtu size命令,配置它们发送报文时的IP MTU。其中mtu size命令对接口发送的IPv4报文和IPv6均生效,ip mtu size命令仅对接口发送的IPv4报文生效,ipv6 mtu size命令仅对接口发送的IPv6报文生效。
在接口下配置的IP MTU,仅影响该接口发送IP报文的大小。
在接口视图下可以通过mpls mtu命令配置接口的MPLS MTU。MPLS MTU会影响所有本地转发出去的MPLS报文,包括IP入MPLS出的报文和MPLS入MPLS出的报文。
如果没有通过mpls mtu命令配置接口的MPLS MTU,则根据ip mtu命令配置的IP MTU对MPLS报文进行分片;如果没有配置ip mtu命令,则根据mtu命令配置的接口MTU对MPLS报文进行分片。根据IP MTU和接口MTU对MPLS报文进行分片的方法为:移除MPLS报文的标签栈,按照IP MTU或接口MTU对IP报文进行分片,分片后将被移除的标签栈添加到每个分片上。
配置接口的MPLS MTU时,需要注意:
· 不建议将接口MPLS MTU值设置过小,否则容易导致报文分片从而影响性能,严重时甚至出现丢包现象。
· 同一个接口上,配置的MPLS MTU值不能大于生效的IP MTU值,否则有可能导致数据转发失败。
· 如果MPLS报文内封装的是L2VPN报文或IPv6报文,则即使报文长度大于MPLS MTU,也会不分片直接发送该报文,报文能否发送成功由接口的实际情况决定。
MPLS L2VPN分为VPLS和VPWS,VPLS为点到多点L2VPN业务,VPWS为点到点L2VPN业务。VPLS业务和VPWS业务均支持单独配置MTU值,其MTU值表示PW所能够承载的最大带标签报文长度。VPLS支持在VSI视图下通过mtu命令配置VSI下所有PW的MTU值,即VSI下所有PW所承载的报文均需要满足MTU限制。VPWS支持在交叉连接和交叉连接组自动发现视图下通过mtu命令配置MTU值,该MTU值对交叉连接和交叉连接组自动发现视图下建立的所有PW所承载的报文进行MTU限制。
配置VPLS和VPWS的MTU时,需要注意:
· 建立PW的两端PE设备上需要为PW配置相同的MTU值,否则PW将无法UP。
· 建议合理配置PW的MTU值,若进入PW的报文长度大于配置的MTU值,PW将会对该报文进行丢弃处理。
· 建议配置的MTU值不能大于网络中间设备的接口MTU值,否则有可能会导致数据转发失败。
RSVP(Resource Reservation Protocol,资源预留协议)用于在网络中预留资源以满足服务质量(QoS)的要求。在RSVP-TE(RSVP Traffic Engineering)的环境下,它还支持通过协商PMTU(Path MTU,路径最大传输单元)来优化数据传输。协商出来的PMTU用来确保在RSVP-TE建立的CRLSP(Constraint-based Routed Label Switched Paths,基于约束路由的LSP)上传输的数据包,不会因为超过任何一台网络设备的处理能力而被丢弃或被分片。
如图4所示,RSVP-TE协商Path MTU的过程为:
(1) Ingress节点在Path消息中携带接口的MTU:MPLS TE隧道的Ingress节点向下游发送Path消息时,在Path消息的Adspec对象中携带隧道对应的物理出接口的MTU值。该MTU值为物理出接口下通过mtu命令配置的接口MTU。
(2) 中间节点协商MTU:MPLS TE隧道途经的各个节点接收到Path消息后,它们会检查Adspec对象中的MTU值,将这个值与隧道对应的本地物理出接口下配置的接口MTU进行比较。如果本地接口MTU小于Adspec中的MTU值,则Adspec对象中的MTU值会被更新为较小的本地接口MTU;否则,保持Adspec中的MTU值不变。
(3) Egress节点获取到Path MTU:经过修改的Path消息继续沿着MPLS TE隧道传输至Egress节点。Egress节点接收到的Path消息中,Adspec对象携带的MTU值就是沿途路径上遇到的最小MTU值,即Path MTU。
(4) 通过Resv消息将Path MTU通告给Ingress节点:Egress节点向上游发送Resv消息,在Resv消息的FLOW_SPEC对象(流规格对象)中携带协商出来的Path MTU。这样,Ingress节点就可以知道沿途路径上允许的最大数据包大小,即Path MTU。
图4 RSVP-TE协商Path MTU过程示意图
RSVP-TE协商出的Path MTU值被用作RSVP-TE建立的CRLSP的IP MTU,用来指导数据包的分片处理。以适应网络中的MTU限制,确保数据包顺利传输。
OSPF DD报文的格式如图5所示。缺省情况下,设备上的OSPF接口发送DD报文时不使用接口的实际生效MTU值,而是用0代替。同时,OSPF接口不检查接收到的DD报文携带的MTU值,使得两端设备的接口MTU值不同也可以建立邻居关系。
如果待建立邻居关系的设备上的OSPF接口检查接收到的DD报文携带的MTU值,则各接口发送的DD报文携带的MTU值必须相同,否则邻居关系无法达到Full状态。
图5 OSPF DD报文格式
OSPFv3 DD报文的格式如图6所示。缺省情况下,设备上的OSPFv3接口发送DD报文时使用接口的实际MTU值。同时,OSPFv3接口会检查接收到的DD报文携带的MTU值,如果两端设备的接口MTU值不同,则邻居关系无法达到Full状态。
图6 OSPFv3 DD报文格式
IS-IS协议报文直接封装在链路层报文头后面,无法实现协议报文在IP层的自动分片。因此,运行IS-IS的设备与对端设备建立邻居关系时,双方会进行MTU大小的通信协商,来保证建立邻居双方接口MTU的一致性,从而避免双方MTU大小不一致导致较小的PDU可以通过,但是较大的PDU无法通过。因此,建立IS-IS邻居关系的两端设备的接口MTU必须一致,否则无法建立IS-IS邻居关系。
在实际网络环境中,多数设备的接口MTU是相同的,如果频繁发送达到接口MTU大小的Hello报文,会造成网络资源的浪费。为了解决此问题,IS-IS提供了发送不加入填充CLV的功能,即发送小型Hello报文。
为了合理的控制SRv6报文长度,SRv6网络中不仅存在接口IPv6 MTU,还引入专门的MTU:
· SRv6 Path MTU:专门用于控制源节点上封装的SRv6报文长度的MTU。
· SRv6 Reserved MTU:用于在源节点上,为SRv6报文转发过程中可能增加的报文头预留的MTU余量。
如图7所示在SRv6网络中,通过SRv6隧道转发原始报文时,SRv6源节点会为原始报文封装IPv6报文头,形成SRv6报文:
· 如果报文通过SRv6 BE方式转发,则在原始报文外层封装的IPv6报文头至少包含IPv6基本报文头,但不含SRH(Segment Routing Header,段路由扩展头)。
· 如果报文通过SRv6 TE方式转发,则在原始报文外层封装的IPv6报文头至少包含IPv6基本报文头以及SRH(Segment Routing Header,段路由扩展头)。
由于新增IPv6报文头的影响,SRv6源节点封装后的报文长度可能变得非常长。如果网络中接口IPv6 MTU设置的较小,则SRv6源节点会根据链路上最小的接口IPv6 MTU将原始报文被分成多个片段,每个分片都携带了IPv6报文头,影响链路的带宽利用率。
图7 SRv6源节点报文封装示意图
同时,IPv6报文在转发路径上的中间节点(含Endpoint和Transit节点)转发时不允许进行报文分片,即IPv6报文头+Payload载荷报文的总长度超出了接口的IPv6 MTU值,这些中间节点不会将IPv6报文分片,而是直接将过长的SRv6报文丢弃,并发送一个ICMPv6差错报文告知SRv6源节点中间节点的接口IPv6 MTU值,要求SRv6源节点重新按照该IPv6 MTU值封装报文。因此,接口IPv6 MTU值较小时,还可能出现报文重新封装和重传过程,影响了整个链路的转发效率。
当然,管理员可以将某些节点接口的IPv6 MTU值设置得更大,但这样操作既破坏了全局IPv6 MTU的一致性,又增加了网络规划设计的难度。如果管理员将全局所有节点的接口IPv6 MTU调整变大来适应SRv6封装,则可能出现超长报文,超长报文可能无法被接收端正常接收、报文的转发延迟增加,数据位的错误风险增大导致重传,因此,过大的接口IPv6 MTU也会影响转发效率。
基于上述原因,在SRv6组网场景中,引入了SRv6 Path MTU来专门控制SRv6报文长度。
SRv6 Path MTU不影响非SRv6报文,也不会对接口IPv6 MTU的机制产生影响。
SRv6源节点上配置SRv6 Path MTU后,在封装报文时,将计算封装后的IPv6报文头+Payload载荷的总长度:
· 如果总长度未超出SRv6 Path MTU和报文转发出接口的IPv6 MTU之间的较小值,则正常进行SRv6封装和转发。
· 如果总长度超出SRv6 Path MTU和报文转发出接口的IPv6 MTU之间的较小值,则SRv6源节点将对Payload载荷部分即原始报文(原始报文IP头DF=0,允许分片操作)合理分片,分片后的报文再进行SRv6封装。从而保证最终封装的SRv6报文始终小于所有节点接口的IPv6 MTU。
SRv6 Path MTU只需部署在SRv6源节点上,对SRv6报文的封装过程生效,对于中间节点无意义。通过SRv6 Path MTU和出接口的IPv6 MTU可以共同限制SRv6报文长度。一般而言,管理员将SRv6 Path MTU设置的比接口的IPv6 MTU略小,保证原始报文在封装40字节的IPv6基本报文头和一定长度的SRH扩展头之后,SRv6报文的IPv6报文头+Payload载荷报文的总长度仍小于接口的IPv6 MTU。
在SRv6 TE Policy中还可以指定显式路径Segment List粒度的SRv6 Path MTU,使得SRv6报文封装控制更加精细。
如图8所示,在SRv6组网场景中,中间节点也可能存在一些特殊情况导致原本的SRv6报文长度进一步增加。例如,SRv6报文缝接场景,即SRH中的某个SID等于转发路径上Endpoint节点上的Binding SID,Binding SID所代表的Segment List将采用Encaps或Insert方式封装到SRv6报文中。又如,SRv6 TI-LFA FRR场景,转发路径上的节点触发TI-LFA FRR倒换,Repair List将被封装到SRv6报文中。一旦出现了这类特殊情况,SRv6源节点上设置的SRv6 Path MTU可能就不再合适,并且中间节点转发SRv6报文时,仍可能出现IPv6报文头+Payload载荷报文的总长度超出接口的IPv6 MTU的情况。
图8 中间节点额外增加了SRv6报文长度示意图
为了解决上述问题,SRv6组网中引入了一个参数——预留的MTU(Reserved MTU)。Reserved MTU是一个工程经验值,大约等于SRv6报文缝接或TI-LFA FRR额外增加的IP报文头长度。在源节点上设置SRv6 Reserved MTU来进一步降低SRv6报文封装后的长度,为中间节点额外增加的报文长度预留空间。
SRv6 Path MTU、SRv6 Reserved MTU和接口IPv6 MTU在不同产品上生效机制略有差异:
· 对于某些产品,SRv6源节点发送的SRv6报文的大小同时受SRv6 Path MTU减去Reserved MTU的值和接口IPv6 MTU控制,实际生效的MTU是二者的较小值。例如,SRv6 Path MTU配置为1700,Reserved MTU配置为50,则先将SRv6 Path MTU和Reserved MTU相减,得到1650。
¡ 如果接口的IPv6 MTU≥1650,则SRv6源节点实际采用的MTU是1650;
¡ 如果接口的IPv6 MTU<1650,则SRv6源节点实际采用的MTU是接口的IPv6 MTU。
· 对于某些产品,SRv6源节点先比较SRv6 Path MTU和接口IPv6 MTU,取二者较小值。实际生效的MTU是较小值减去Reserved MTU再减去64字节。例如,SRv6 Path MTU配置为1600,Reserved MTU配置为100。
¡ 如果接口的IPv6 MTU≥1600,则源节点实际采用的MTU是SRv6 Path MTU减去Reserved MTU再减去64字节,即1436;
¡ 如果物理接口的IPv6 MTU<1600,例如1500,则源节点实际采用的MTU是物理接口的IPv6 MTU减去Reserved MTU再减去64字节,即1336。
SRv6 Path MTU减去Reserved MTU要求大于等于1280字节,如果配置后二者相减小于1280字节,实际生效也以1280字节为准。
在配置MTU时,不同MTU配置的影响范围可能会产生重叠,此时设备仅会以其中某个MTU配置为准。MTU配置的具体优先级如表1所示。
表1 MTU配置生效的优先级
MTU功能名称 |
优先级说明 |
配置接口的IP MTU |
接口下如果同时配置了mtu size、ip mtu size和ipv6 mtu size命令,则接口发送报文时的IP MTU以ip mtu size和ipv6 mtu size命令的配置为准 |
手动设置MTU与路径MTU探测 |
如果二者同时配置,则以两者设置的最小值为准 |
配置接口的MPLS MTU |
接口下配置的MPLS MTU值不能小于该接口下生效的IP MTU值,否则可能导致数据转发失败 |
配置L2VPN网络的MPLS MTU |
为VSI或交叉连接配置的MTU值不能大于网络中间设备的接口MPLS MTU值,否则有可能会导致数据转发失败 |
在TCP协议中,MSS(Maximum Segment Size,最大报文段长度)是一个重要的概念,它定义了TCP传输的单个数据段可以包含的最大数据量,不包括TCP头部和IP头部,如图9所示。
图9 TCP MSS示意图
TCP MSS的目的与MTU类似,也是为了优化网络传输,减少分片,提高效率。在TCP握手阶段,双方交换各自的MSS值,每一方都会告知对端它们可以接受的最大MSS值,对方会记录下来。后续在发送TCP报文时,设备会限制TCP报文的大小不超过对端的MSS值。如果收到了大于TCP MSS长度的报文,设备需要按照分片机制对报文进行分片或丢弃处理。
TCP MSS的缺省取值通常是基于设备接口的IP MTU值减去固定的IP头和TCP头的长度来确定。例如,例如,如果IP MTU是1500字节,考虑到IP头(通常20字节)和TCP头(通常20字节),那么MSS值会被缺省设置为1460字节。
TCP MSS值也可以手动配置,但如果TCP MSS和IP MTU的配置产生冲突,例如在同一接口下TCP MSS设置地比IP MTU更大,则设备将两者中的更小值作为生效值。例如,在一个接口下,如果TCP MSS被设置为1600字节,而IP MTU被设置为1500字节,则此接口实际生效的TCP MSS为1460(1500-20-20)字节。
选择合适的MSS对于网络性能至关重要。如果MSS设置得过大,超过了网络路径中某个节点的MTU,就会导致IP层分片,这会增加重传的可能性,并降低网络效率。反之,如果MSS设置得过小,虽然可以避免分片,但会增加因为头部开销所占比例过高而导致的网络效率降低。因此,合理设置MSS可以减少网络延迟,提高数据传输效率。
以太网的标准缺省MTU值为1500字节,这个标准在以太网发展的过程中一直未发生变化,随着可编程网络、软件定义网络等技术的发展,单个报文中携带的控制字段长度呈爆炸性增长,1500字节的MTU值将导致报文数量激增,为此带来的额外开销十分影响网络传输的效率。于是出现了巨型(Jumbo)帧的概念。
Jumbo帧最初是由Alteon Networks在1990年代中期推出的,用于其以太网交换机产品,目的是为了提高网络吞吐量并降低CPU的处理负担。随着网络带宽的需求增加,尤其是在数据中心和企业后端网络中,Jumbo帧逐渐成为提高数据传输效率的一种有效手段。
Jumbo帧通过允许MTU被设置为大于1500字节的值,从而减少每传输单位数据所需的帧数量。这样不仅减少了头部开销的总量,还减少了因处理大量小帧而产生的中断频率,从而降低了网络设备的CPU使用率。对于大量数据传输需求较高的应用,如大规模文件传输、备份操作或视频流,使用Jumbo帧可以显著提升网络传输效率。
在H3C设备进行软件转发时(例如协议报文转发以及基于策略转发),报文长度受各协议功能配置的MTU的影响,过长的报文可能会被分片或丢弃。
而在进行硬件转发时(例如常见的数据报文查表转发),报文长度不受各协议功能配置的MTU的限制,设备可以发送任意长度的报文。但在接收报文时,如果报文长度超过了链路能承载的Jumbo帧大小(例如9964、9416字节等,以设备的实际情况为准),设备会丢弃该报文。
从IEEE 802.3标准开始,1500字节就被确定为以太网数据帧数据部分的最大长度。这一标准对整个网络领域的设备和协议涉及产生了深远影响,并沿用至今。
先进的网络需求、技术发展、应用场景的演变以及对传输效率的要求提高使得报文长度越来越大,因此,目前大部分设备上接口的IP MTU和MPLS MTU缺省值为IEEE 802.3标准定义的最大长度——1500字节。使用此缺省值可以在保持以太网数据传输兼容性的同时,尽可能地保障报文的完整传输,以提高传输效率。
某些特殊接口下的MTU缺省值会小于1500,是考虑到此类接口通常要增加特殊封装内容以后才发送报文:例如,VSI虚接口的MTU缺省值通常为1444,目的是内层报文增加VXLAN报文头(外层VXLAN头8字节+外层UDP头8字节+外层IP头20字节或40字节)后报文长度仍不超过标准规定的最大长度1500。
考虑到很多情况下报文长度仍需超过1500字节,因此,在如下场景中推荐直接使用缺省的MTU值:
· 家庭网络和小型园区网络:此类网络通常配置简单,1500字节的MTU值足够满足日常需求。
· 不确定路径MTU的互联互通场景:1500字节是互联网普遍使用的MTU值,如果不知晓报文转发过程中各设备的具体MTU值设置,使用缺省的1500字节MTU值可以尽可能地保障兼容性和互操作性。
在如下场景中,建议手动调整MTU至大于1500字节的值:
· 数据中心网络:数据中心的数据传输量十分巨大,为了尽可能地提高数据传输效率,建议直接将数据中心内部网络设备的MTU值都调整为允许设置的最大值。
· 高带宽需求或者内部网络:在高带宽需求网络中,较大的MTU可以避免报文分片,提高传输速率;在控制严格、内部配置一致的网络中,可以使用较大的MTU值以提高传输效率,而不必担心安全风险。
在如下场景中,建议手动调整MTU至小于1500字节的值:
· 老旧网络环境:老旧设备可能不支持1500字节的MTU值,因此减少MTU值设置可以保障报文顺利传输。
· VPN和多重封装网络:在此环境中减少MTU值可以避免由于封装开销导致报文长度大于1500字节,从而造成分片或丢包。
· 安全考虑:减少MTU值可以防止网络受到超大数据包攻击。
路径MTU探测(Path MTU Discovery)是一种网络通信机制,用于确定报文在源端和目的节点之间传输路径的MTU最小值,从而避免IP分片,减少资源浪费。
如图10所示,路径MTU探测的过程为:
(1) 报文的源端一开始假设一个较大的MTU来发送报文,如果是IPv4报文,还会将DF置位。
(2) 报文传输过程中,如果某个设备的MTU小于报文长度,则会丢弃报文并向源端发送ICMP/ICMPv6协议消息,通知报文因大小超过本地的MTU而被丢弃,并且其中包含了自身的MTU值。
(3) 源端收到ICMP/ICMPv6错误消息后,降低自身MTU值为该消息中的MTU值,并重新发送更短的报文。
(4) 上述过程可能重复多次,直到找到一个可以成功将报文传输到目的节点的MTU大小,此MTU也是报文传输路径中所有节点的最小MTU值。
图10 路径MTU探测过程
为了避免手动规划MTU值导致的潜在分片和丢包风险,可以使用路径MTU探测功能帮助设备自动设置MTU值,帮助确保了数据包以最有效的方式传输。
如图11所示,数据中心的边缘设备为ED(Edge Device,边缘设备)。ED之间建立VXLAN-DCI隧道,该隧道采用VXLAN封装格式。ED与数据中心内部的VTEP建立VXLAN隧道。ED从VXLAN隧道或VXLAN-DCI隧道上接收到报文后,解除VXLAN封装,根据目的IP地址重新对报文进行VXLAN封装,并将其转发到VXLAN-DCI隧道或VXLAN隧道,从而实现跨数据中心之间的互通。
在VXLAN网络中,尽量不要对VXLAN报文进行分片,因为有些设备在收到分片的VXLAN报文后可能会直接丢弃掉报文,或者部分中间设备不支持分片,这些情况都会导致跨数据中心的数据丢失,从而影响数据中心的数据传输稳定性。
因此,需要进行MTU取值规划,使得报文在经过传输路径中的每一跳时,长度都不超过这一跳的MTU值。推荐网络中每一跳的MTU值都设置为最大值,以获得最高的传输效率,并修改服务器发送的报文大小,使其在增加VXLAN封装(外层VXLAN头8字节+外层UDP头8字节+外层IP头20字节或40字节)后,长度仍不超过传输路径上MTU的最小值。
· RFC 894:A Standard for the Transmission of IP Datagrams over Ethernet Networks
· RFC 1191:Path MTU Discovery
· RFC 2460:Internet Protocol, Version 6 (IPv6) Specification