华为MPLS技术学习指南
上QQ阅读APP看书,第一时间看更新

1.2 MPLS基本工作原理

MPLS技术基本工作原理方面主要涉及MPLS标签动作、MPLS报文转发流程,以及对MPLS报文中TTL的处理两个方面。

1.2.1 MPLS标签动作

MPLS 基本转发过程中涉及一些标签操作,主要包括标签压入(Push)、标签交换(Swap)和标签弹出(Pop)这三个动作。

(1)Push:标签压入动作,可能会在Ingress或Transit节点上发生。

标签压入动作是指在IP报文的二层协议头和IP报头之间插入一个MPLS标签(如图1-13的上图所示),或者是在现有标签栈顶部再增加一个新的出标签(如图1-13的下图所示),即标签嵌套封装,如BGP/MPLS IP VPN的Ingress节点可能会在一个IP报文中同时压入多层公网或私网MPLS标签。

(2)Swap:标签交换动作,会在Transit节点发生。

当MPLS报文在MPLS域内转发时,Transit节点根据标签转发表LFIB的查找,匹配到相应的表项后,用下一跳分配的出标签交换 MPLS 报文中原有的栈顶标签。原有MPLS报文中可以携带一层或多层MPLS标签,但仅交换最外层的标签。图1-14中上、下图所示分别是对携带单层标签和双层标签MPLS报文中的栈顶标签进行交换的示例。

图1-13 标签压入动作的两种情形

图1-14 标签交换动作的两种情形

(3)Pop:标签弹出动作,会在倒数第二跳Transit节点或Egress节点发生。

当MPLS报文离开MPLS域时,Egress节点将MPLS报文外层的标签剥离,使后续的报文转发按照IP路由进行(弹出标签后报文中无标签时,如图1-15中的上图所示),或者按照余下的标签进行(弹出标签后报文仍有其他标签时,如图1-15中的下图所示)。也可以利用PHP(Penultimate Hop Popping,倒数第二跳弹出)特性,在倒数第二跳节点处将标签弹出,减少最后一跳的负担,使最后一跳节点直接进行IP路由转发或者下一层标签转发。

图1-15 标签弹出动作的两种情形

默认情况下,华为设备支持PHP特性,支持PHP的Egress节点分配给倒数第二跳节点的标签值为3。

以下以支持PHP的LSP为例,说明MPLS报文的基本转发过程。在单纯的LDP LSP隧道环境下,MPLS报文最多仅带一层MPLS标签,从上游节点进入本地节点的入接口时携带的是上游节点分配给该FEC的出标签(也是本地节点对应的入标签),从本地节点出接口向下游节点发送时携带的是本地节点分配给对应FEC的出标签。

如图1-16所示,MPLS标签已分发完成,建立了一条LSP,其目的地址为4.4.4.2/32,其MPLS报文的基本转发过程如下。

(1)Ingress节点收到目的地址为4.4.4.2的IP报文后,首先根据FIB找到对应的下一跳,发现下一跳是LSR标签设备(如果发现下一跳是IP设备时会直接按FIB表项进行IP转发),并且因为本节点是入节点,所以在进行报文转发前需要进行标签压入动作,需压入的标签是根据FEC 4.4.4.2与标签的映射关系找到的(为Z,作为出标签),然后把MPLS报文从压入的标签所映射的出接口转发出去。

图1-16 MPLS报文基本转发示例

(2)Transit节点收到该标签的MPLS报文后,根据LFIB找到对应入标签(上一节点的出标签就是本节点的入标签)所映射的出标签、出接口,先进行标签交换(无需查看IP报头的目的地址),即用本地为FEC 4.4.4.2/32分配的出标签(Y)替换报文中原来的MPLS标签(Z),然后从找到的出标签所映射的出接口转发出去。

(3)倒数第二跳Transit节点收到MPLS报文后,同样根据LFIB找到对应入标签所映射的出标签、出接口,先用本地为FEC 4.4.4.2/32分配的出标签(通常为3)替换原来的MPLS标签,然后准备从出标签3所映射的出接口转发出去。但是因为Egress分给其的出标签值为3(这是一个特殊的标签,必须弹出,参见表1-1说明),所以需要先进行PHP操作,弹出出标签(此时报文已不带MPLS标签了),并根据自己的出标签3所映射的接口转发报文。

(4)Egress节点收到无MPLS标签的IP报文后,直接根据对应的IP路由表项把数据传输给目的主机4.4.4.2/32。

1.2.2 MPLS报文转发涉及的基本概念

1.2.1节所介绍的只是MPLS报文的基本转发流程,具体的转发流程还涉及一些其他的技术细节,所涉及的相关概念如下。

(1)Tunnel ID

为了给使用隧道的上层应用(如VPN、路由管理)提供统一的接口,系统会自动为隧道分配一个ID(在出节点上也可手动配置),也称为Tunnel ID。该Tunnel ID的长度为 32 比特,只有本地意义,即只要本地设备上唯一即可,同一条隧道中的不同节点的Tunnel ID可以一样。

(2)NHLFE

NHLFE(Next Hop Label Forwarding Entry,下一跳标签转发表项)用于指导MPLS报文的转发。NHLFE 包括:Tunnel ID、出接口、下一跳、出标签、标签操作类型等信息,可根据出标签找到对应的出接口及下一跳,进行报文转发。

FEC与NHLFE的映射称为FTN(FEC-to-NHLFE)。通过执行display fib命令查看FIB表中Tunnel ID值不为0x0的转发表项,能够获得FTN的详细信息。

FTN只在Ingress存在,因为只在Ingress节点需要用到FEC中的分类信息来查找所需压入的出标签,然后再根据该出标签所映射的 NHLFE 找到对应的出接口及下一跳,进行报文的转发。后面的节点都是直接根据 MPLS 报文中所携带的出标签,在 NHLFE中找到与出标签映射的出接口及下一跳信息进行报文转发。

(3)ILM

入标签与NHLFE(下一跳标签转发表项)的映射称为ILM(Incoming Label Map,入标签映射),其使本地设备的入标签和出标签、Tunnel ID建立对应的关联关系。ILM包括:Tunnel ID、入标签、入接口、标签操作类型等信息。

ILM在Transit节点的作用是将入/出标签和NHLFE绑定。通过标签索引ILM表,就相当于使用目的IP地址查询FIB,能够得到所有的标签转发信息。

下面以图1-17所示的示例介绍MPLS报文详细的转发过程。

图1-17 MPLS报文转发详细流程示例

当IP报文从Ingress节点进入MPLS域时,首先查看FIB表,检查目的IP地址对应的Tunnel ID值是否为0x0。

如果Tunnel ID值为0x0,则进入正常的IP转发流程。

如果Tunnel ID值不为0x0,则进入MPLS转发流程。

在MPLS转发过程中,FIB、ILM和NHLFE表项都是通过Tunnel ID关联的。

1.2.3 MPLS报文转发流程

MPLS报文在骨干网中不同节点的具体转发流程有所不同,下面分别予以介绍。

1.Ingress节点的转发流程

在Ingress节点上通过查询FIB表和NHLFE表指导报文的转发。

(1)首先根据 IP报文的目的 IP地址查看 FIB表,即查看与目的 IP地址对应的Tunnel ID。如果需要采用MPLS转发,则Tunnel ID值肯定不为0。

(2)然后根据FIB表的Tunnel ID找到对应的NHLFE(下一跳标签转发表项),在LSP 已建立的情况下,可在 NHLFE 查看到对应的出接口、下一跳、出标签和标签操作类型(此时为Push)。

(3)在IP报文的二层协议头和三层IP报头之间压入一个出标签,同时处理TTL,然后将封装好的MPLS报文发送给下一跳。

2.Transit节点的转发流程

在 Transit 节点上通过查询 ILM(入标签映射)表和 NHLFE 表指导 MPLS 报文的转发。

(1)根据MPLS报文中的出标签值查看对应的ILM表(上游节点所压入的出标签与本地节点的入标签是相同的),可以得到对应的本地Tunnel ID。

(2)然后再根据ILM表的Tunnel ID找到对应的NHLFE表项,可以得到进行下一跳转发所需的出接口、下一跳、出标签和标签操作类型。

(3)MPLS报文的处理方式随着不同的标签值而不同。

如果得到的出标签值≥16(表示该出标签不是特殊的标签),则用本地节点为该FEC分配的出标签替换原来MPLS报文中携带的标签(此时标签操作类型为Swap),同时处理TTL,然后将替换完标签的MPLS报文发送给下一跳。

如果得到的出标签值为3,则直接弹出MPLS报文中原来的出标签(此时标签操作类型为Pop),同时处理TTL,然后进行IP转发或下一层标签转发。

3.Egress节点的转发流程

在Egress节点上,仅需通过查询ILM表来指导MPLS报文的转发,或通过查询IP路由表指导IP报文转发,因为出节点在MPLS域对应的LSP中没有下一跳设备,所以无需再利用NHLFE表来查询报文转发的出接口和下一跳。

(1)如果Egress收到的是不带MPLS标签的IP报文,则查看IP路由表,进行IP转发。

(2)如果Egress收到的是带有MPLS标签的MPLS报文,则查看ILM表获得的标签操作类型,同时处理TTL。

如果标签中的栈底标识S=1,表明该标签是栈底标签,直接弹出该标签,然后进行IP转发。

如果标签中的栈底标识 S=0,表明还有下一层标签(此时至少还有两层标签),继续进行下一层标签转发。

1.2.4 MPLS对TTL的处理

MPLS对TTL的处理包括MPLS对TTL的处理模式和ICMP响应报文这两个方面。

1.MPLS对TTL的处理模式

MPLS标签中包含一个8比特的TTL字段(参见图1-5),其含义与IP报头中的TTL字段相同,用于限制报文在传输过程中所经过的三层设备数(每经过一跳值减1)。MPLS对TTL的处理与IP网络中对TTL的处理一样,除了用于防止产生路由环路外,也用于实现Traceroute(路由跟踪)功能。

RFC3443中定义了两种MPLS对TTL的处理模式:Uniform(统一)和Pipe(管道)。缺省情况下,MPLS对TTL的处理模式为Uniform。

(1)Uniform模式

在Uniform模式下,针对IP报头中的TTL字段,最终在离开MPLS域时其值仍是减少了MPLS中所经过的跳数,只是在MPLS域内传输时,IP报头TTL字段的改变移植到了MPLS标签中的TTL字段,然后在离开MPLS域时再反向移植到IP报头的TTL字段。

具体来说,IP报文经过MPLS网络时,在入节点,IP报头的TTL值减1映射到MPLS标签TTL字段,此后报文在MPLS网络中按照标准的TTL处理方式处理,即逐跳减1,但IP报头中的TTL字段值在MPLS域中不改变。在出节点将MPLS标签的TTL减1后的值再映射到IP报头的TTL字段。最终的结果是,在IP报头的TTL字段值还是在逐跳减1,即把MPLS网络中的每跳设备当作IP网络中的单跳来处理。

下面以图1-18所示的示例进行介绍。

图1-18 Uniform模式TTL处理示例

1)IP报文由CE1设备发出时,IP报头中的TTL字段值为最大的255。

2)到了PE1设备时,IP报头中的TTL字段值减1,变成了254,然后把这个值映射到生成的MPLS标签TTL字段中,即254。

3)MPLS报文传输到中间设备P后,MPLS标签TTL字段按标准TTL方式处理,即再减1,变成了253,但此时IP报头中的TTL字段值仍为254,保持不变。

4)MPLS 报文继续传输到 PE2 设备时,MPLS 标签要弹出了,此时会先把 MPLS标签中的TTL字段再减1,得到252,映射到IP报头中的TTL字段,使得到达PE2设备时IP报文的TTL字段值为252。

从CE1到PE2,总的来说经过了三跳设备,如果没有经过MPLS封装,IP报头中的TTL字段值也要减3,即255-3=252,这与经过MPLS网络传输的结果是相同的,所以称之为Uniform(统一)模式。

(2)Pipe模式

在Pipe模式中,IP报头中的TTL字段会把所经过的MPLS网络的中间节点忽略,将其看作两端边缘节点通过一个管道的直连(这也是称之为“Pipe”模式的原因),也就是无论在MPLS网络中经过了多少三层设备,从MPLS入节点到出节点之间,IP报头中的TTL字段值只减1。

具体来说,IP报文进入到MPLS网络的入节点后,IP报头的TTL值减1,MPLS标签中的TTL字段为一个固定值(这点与Uniform模式不同),此后报文在MPLS网络中传输,MPLS标签TTL字段值按照标准的TTL处理方式处理,即每经过一跳减1,但IP报头的TTL值保持不变(这点与Uniform模式相同)。在出节点会直接弹出MPLS标签,然后将IP报头TTL字段的值减1(这点与Uniform模式也不同)。即IP报文在经过MPLS网络时,无论中间经过了多少跳,IP报头的TTL值只在入节点和出节点分别减1,中间传输过程中保持不变,即相当于把MPLS网络中间节点忽略。

图1-19是一个采用 Pipe模式的TTL处理示例。在MPLS VPN应用中,出于网络安全的考虑,需要隐藏 MPLS 骨干网络的结构,这种情况下,对于私网报文采用 Pipe模式。因为这种模式下,MPLS骨干网中间节点是看不出来的。

图1-19 Pipe模式下TTL处理示例

2.ICMP响应报文

在MPLS网络中,当LSR收到TTL为1(表示不能再向下传了)的含有标签的MPLS报文时,会生成一个ICMP的TTL超时消息。LSR将TTL超时消息回应给报文发送者的方式有两种。

如果LSR上存在到达报文发送者的路由,则可以通过IP路由,直接向发送者回应TTL超时消息。

如果LSR上不存在到达报文发送者的路由,则ICMP响应报文将按照LSP继续传送,到达LSP出节点后,由Egress节点将该消息返回给发送者。

通常情况下,当收到的MPLS报文只带一层标签时,LSR可以采用第一种方式回应TTL超时消息,因为此时表明LSR是MPLS域的边缘节点LER,可直接通过IP路由传输响应报文。当收到的MPLS报文包含多层标签时,LSR采用第二种方式回应TTL超时消息。但是,在MPLS VPN中,ASBR(Autonomous System Boundary Router,自治系统边界路由器)和HoVPN(Hierarchy of VPN,分层VPN)组网应用中的SPE(Superstratum PE or Sevice Provider-end PE,上层PE或运营商侧PE)接收到的承载VPN报文的MPLS报文也可能只有一层标签,此时,这些设备上并不存在到达报文发送者的路由,则采用第二种方法回应TTL超时消息。