以下内容摘自笔者编著、华为公司授权出版,并作为华为ICT培训官方教材的《华为MPLS ***学习指南》一书(《华为MPLS技术学习指南》为其必备配套图书)。

在基本BGP/MPLS IP ***应用中(不包括跨域的情况),对***报文转发原理的理解非常重要,也是许多正在进军华为HICE认证的朋友认为的一个难点,在此专门进行讲解。基本BGP/MPLS IP ***应用中,私网用户发送的***报文采用两层MPLS标签方式进行转发:

  • 外层(公网)标签在骨干网内部进行交换,指示从本端PE到对端PE的一条LSP***报文利用这层标签可以沿LSP到达对端PE

公网隧道可以是LSP隧道、MPLS TE隧道和GRE隧道。当公网隧道为LSP隧道或MPLS TE隧道时,公网标签为MPLS LSP标签(MPLS TE隧道的CR-LSP也是采用LSP标签);当公网隧道为GRE隧道时,公网标签为GRE封装。

  • 内层(私网)标签在从对端PE到达对端CE时使用,指示报文应被送到哪个Site,这就是为不同路由或不同***实例所分配的私网路由标签。

   当PE之间已在通过MP-BGP相互发布***-IPv4路由时,会将本端所学习的每个私网***-IPv4路由所分配的私网标签通告给了对端PE,这样对端PE根据报文中所携带的私网标签可以找确定报文所属的***实例,然后再通过查找该***实例的路由表,将报文正确地转发到相应的Site

【说明】特殊情况下,属于同一个***的两个Site连接到同一个PE时,PE不需要为***报文封装内、外层标签,只需查找对应***实例的路由表,然后再找到报文的出接口即可将报文转发至相应的Site

   下面以图1-22为例说明BGP/MPLS IP ***报文的转发过程。图中是CE1发送报文给CE2的过程,其中,I-L表示内层标签,O-L表示外层标签。本示例中内、外层标签均为MPLS LSP标签。

1.png

1CE1Ingress PE发送一个要访问远端CE2所连接Site中目标主机的***报文。

  (2Ingress PE从绑定了***实例的接口上接收***数据包后进行如下操作:

  • 先根据绑定的***实例的RD属性查找对应***的转发表(VRF)。

  • 再根据***报文中的目的IPv4前缀,查找对应的Tunnel ID,然后将报文打上对应的私网(内层)标签(I-L),根据Tunnel ID找到隧道。

  • ***报文从找到的隧道发送出去,发出之前***报文要加装一层公网(外层)MPLS标签(O-L1)。此时***报文中携带有两层MPLS标签。

   接着,该报文携带两层MPLS标签穿越骨干网。骨干网的每台P设备都仅对该***报文的外层标签进行交换,内层私网路由标签保持不变。如图1-23Ingress PEEgress PE发送的一个ICMP请求报文的报文结构示例,他包括了两层MPLS标签,其中外层标签为1025MPLS Bottom os labelstack:0,表示后面还有MPLS标签,非栈底标签),内层标签为1026MPLS Bottom os labelstack:1,表示此为MPLS栈底标签)。

2.png

   【经验提示】因为Egress节点为倒数第二跳分配的标签通常是支持PHP特性的,所以在倒数第二跳把报文传输Egress节点时会先弹出外层标签。这样一来,Egress接收到的报文往往只带有一层标签。如图1-24Ingress PE连接P的接口上接收到来自对端的响应ICMP报文的报文结构示例,其中显示只有一层MPSL标签(MPLS Bottomos label stack:1,表示此为MPLS栈底标签)。在EgressPE连接P的接口接收ICMP请求报文的报文结构一样,也只有一层MPLS标签,也是因为外层标签在倒数第二跳(P)弹出了。

    这样一来,可以想象,如果是两PE相连,则报文在PE间直连链路上传输时均只带一层MPLS标签,这层标签就是内层私网标签,因为此时两PE互相为对方的倒数第二跳,在发送报文时会弹出外层的MPLS标签。但在这种PE直连情况下,我们一般配置是不支持PHP,这样两个直连的PE在发送报文时就不会弹出外层标签了。

3.png

 (3Egress PE收到该携带两层标签的报文后,交给MPLS协议模块处理。MPLS协议将去掉外层标签(本示例最后的外层标签是O-L2,但如果应用了PHP特性,则此标签会在到达Egress PE之前的一跳P弹出,Egress PE只能收到带有内层标签的报文,参见图1-24)。

   (4)剥离了外层LSP标签后,Egress PE就可以看见内层标签I-L,先根据内层私网路由标签查找到***实例,然后通过查找该***实例的路由表,可确定报文要转发的目的Site和出接口。

同时,Egress PE发现报文中的内层标签处于栈底,于是将内层标签剥离,根据对应的***实例路由表项将报文发送给CE2。此时报文是个纯IP报文。

   这样,报文就成功地从CE1传到CE2了,CE2再按照普通的IPv4报文转发过程将报文传送到目的主机。以上报文转发的流程可用图1-25进行描述。

4.png