2MTU的技术实现

admin 2025-08-16 15:40:22 2018世界杯投注

2MTU的技术实现

2 MTU的技术实现

2.1 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示意图

2.2 MTU的分片机制

分片是为了避免单个报文超过链路的承载极限,IP协议在传输报文时,将一个完整的报文分为若干个分片进行分别传输的机制。MTU就规定了这个“承载极限”,超过MTU长度的报文通常会被分片或者丢弃,下面将分别介绍IP MTU和MPLS

MTU的分片机制。

2.2.1 IP 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分片机制

2.2.2 MPLS 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的分片机制

3 MTU的配置与协商

3.1 MTU的配置与协商

3.1.1 配置接口的IP 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报文的大小。

3.1.2 配置MPLS MTU

1. 配置接口下的MPLS MTU

在接口视图下可以通过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,也会不分片直接发送该报文,报文能否发送成功由接口的实际情况决定。

2. 配置MPLS L2VPN中的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值,否则有可能会导致数据转发失败。

3.1.3 RSVP-TE协商Path 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限制,确保数据包顺利传输。

3.1.4 IGP协商IP MTU

1. OSPF的IP MTU协商

OSPF DD报文的格式如图5所示。缺省情况下,设备上的OSPF接口发送DD报文时不使用接口的实际生效MTU值,而是用0代替。同时,OSPF接口不检查接收到的DD报文携带的MTU值,使得两端设备的接口MTU值不同也可以建立邻居关系。

如果待建立邻居关系的设备上的OSPF接口检查接收到的DD报文携带的MTU值,则各接口发送的DD报文携带的MTU值必须相同,否则邻居关系无法达到Full状态。

图5 OSPF DD报文格式

2. OSPFv3的MTU协商

OSPFv3 DD报文的格式如图6所示。缺省情况下,设备上的OSPFv3接口发送DD报文时使用接口的实际MTU值。同时,OSPFv3接口会检查接收到的DD报文携带的MTU值,如果两端设备的接口MTU值不同,则邻居关系无法达到Full状态。

图6 OSPFv3 DD报文格式

3. IS-IS的MTU协商

IS-IS协议报文直接封装在链路层报文头后面,无法实现协议报文在IP层的自动分片。因此,运行IS-IS的设备与对端设备建立邻居关系时,双方会进行MTU大小的通信协商,来保证建立邻居双方接口MTU的一致性,从而避免双方MTU大小不一致导致较小的PDU可以通过,但是较大的PDU无法通过。因此,建立IS-IS邻居关系的两端设备的接口MTU必须一致,否则无法建立IS-IS邻居关系。

在实际网络环境中,多数设备的接口MTU是相同的,如果频繁发送达到接口MTU大小的Hello报文,会造成网络资源的浪费。为了解决此问题,IS-IS提供了发送不加入填充CLV的功能,即发送小型Hello报文。

3.1.5 配置SRv6网络中的MTU

为了合理的控制SRv6报文长度,SRv6网络中不仅存在接口IPv6 MTU,还引入专门的MTU:

· SRv6 Path MTU:专门用于控制源节点上封装的SRv6报文长度的MTU。

· SRv6 Reserved MTU:用于在源节点上,为SRv6报文转发过程中可能增加的报文头预留的MTU余量。

1. 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报文长度。

2. SRv6

Path MTU

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报文封装控制更加精细。

3. SRv6

Reserved MTU

如图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字节为准。

3.2 MTU配置生效的优先级

在配置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值,否则有可能会导致数据转发失败