MPLS virtual private network报文转发过程

概述:

首先数据流由CE 到PE使用的是IP转发,这个很容易理解。而数据流要经过骨干网,因为骨干网内部Р路由器没有私网路由,也就是没办法使用P转发,这时就应该想到用MPLS标签转发技术。在IP报文进入到MPLS骨干网的PE后封装上一个公网标签,该标签对应着穿越整个公网的LSP,数据包通过LSP隧道转发到出站的 PE,中间的P路由器只使用标签交换转发方式,而不需要IP转发,数据包的入站PE和出站PE同时使用了IP转发和标签转发。

那公网中的LSP是如何建立的?它是由LDP协议通过为公网中的IGP路由映射标签,然后进行分发标签等过程后来建立的。

当数据包到达出站PE时,因为是从公网的接口接收到的数据包,所以还必须使用一个VPN标签(私网标签)用于判断数据包通过哪个VPN实例进行转发。私网标签在前文中有提到过,它是由MP-BGP 协议生成的,每条VPN路由都会有一个私网标签,出站的PE可以借私网标签知道该向哪个VPN转发数据。

所以,在 VPN的业务数据通过MPLS 骨干网时会带上两层标签(公网标签和私网标签),公网标签位于外层,用于使数据包穿越整个公网发送到出站的 PE;私网标签位于内层,用于判断该数据包属于哪个VPN实例。下面从三个阶段具体分析整个数据转发的过程:

  1. 数据从CE到入站PE。
  2. 数据从入站PE到出站PE。
  3. 数据从出站PE到远端的CE。

阶段一:数据从CE到入站PE

如图所示,Site2去往Site1的业务数据由CE2转发到PE2(普通IP转发〉后,PE2根据数据包进入的接口,查找相应的VPN实例转发表,找到该路由在公网的下一跳(对端PE的 Loopback接口)和私网标签。封装完私
网标签(MP-BGP分配)后,再通过公网的标签(MPLS分配)转发表,查找到去往公网中下一跳地址的标签,该标签作为公网标签封装进数据包,封装完两层标签后,数据包被转发进 MPLS 网络。
在这里插入图片描述

阶段二:数据从入站PE到出站PE

在这里插入图片描述
如图所示,在前文有说到,当IP报文由入站PE进入MPLS网络后会通过LSP转发,并且通过中间的P设备查找标签转发表进行标签交换,最终通过公网LSP转发到出站的PE。

注意:数据包实际转发时不会携带3号标签,这里出现3号标签是为了方便表述原理。

阶段三:数据从出站PE到远端的CE

当数据包由MPLS骨干网转发到达出站PE时,只剩下一层私网标签,这是因为PHP(倒数第二跳弹出)的原因,公网标签已经在倒数第二跳的Р设备剥离掉了。出站PE利用该私网标签判断出该数据包去往的VPN实例,在查找到相应的VPN实例转发表后,移除该私网标签,将报文还原为IP报文后再转发给CE,如图所示:
在这里插入图片描述
至此,客户通过MPLS VPN完成了私网站点之间的流量转发,可以发现VPN业务的数据流是经过骨干网的LSP隧道方式进行转发的从而保证了客户数据的安全性。

这里需要强调的是,传递VPN业务数据流时需要使用到两层标签(私网标签+公网标签),公网标签用于帮助VPN业务数据流穿越公网中的LSP,而私网标签用于LSP的出站PE进行判断该向哪个VPN实例进行转发,那么这两个标签是如何产生的?这里我们再了解一下公网标签和私网标签的详细分配过程。

公网标签分配过程:

因为 MPLS VPN骨干网中的Р路由器并没有私网路由,所以骨干网不能使用IP转发的方式来转发VPN业务数据流,而是使用MPLS标签转发的方式,这就需要骨干网的PE之间为每个VPN客户建立一条或多条公网LSP,VPN业务流通过入站PE进入骨干网后,通过相应LSP转发到出站PE。公网标签是由骨干网内部的LDP 协议根据IGP路由或静态路由而产生的标签,那么下面就来具体分析一下通过LDP协议产生公网标签并建立公网LSP的过程。

前文中有提到,VPNv4路由通过MP-iBGP在PE之间交换,两个PE 需要使用Loopback 接口来建立MP-iBGP 邻居,所以在 MPLS骨干网内部需要使用IS-IS、OSPF等IGP协议来打通PE和Р路由器之间的路由连通性。当所有Р和PE路由器都有了公网的路由后,通过LDP协议互相通告标签映射,从而建立公网路由的标签转发表。下面以图下的案例为例来介绍一下公网LSP的建立过程。
在这里插入图片描述
如图所示,PE1和 PE2之间通过Loopback0接口建立.MP-iBGP 邻居,Site1和Site2已经完成了VPNv4路由的交换。现以Sitel访问Site2方向的数据流为例,对LSP的入站PE1来说,到达Site2的下一跳为10.1.4.4,那么需要有到该下一跳的LSP。由于LDP协议依据IGP的路由前缀(FEC)来建立LSP。LSP的出站 PE2会通过LDP协议将自己的LoopbackO (10.1.4.4/32)对应的标签映射发布给Р路由器,Р路由器在收到出站PE 的标签时也会生成自己的标签,然后发布给其上游LDP邻居。这样,在入站PE1处会收到来自Р路由器的关于出站PE2的 Loopback0路由的标签,也就是在入站PE1处会拥有去往下一跳(出站PE2的Loopback0)的标签,这样建立了公网的LSP。下面的输出显示了PE1上关于到下一跳10.1.4.4的 LSP转发信息,其中,标签1025( out-label )就是由LDP邻居分配的,如下输出所示:
在这里插入图片描述
我们再来观察一下P2上有关10.1.4.4的LSP 转发信息,如下输出所示:
在这里插入图片描述
可以发现,公网标签实际上在数据流到达出站PE2之前就已经被弹出了,这是由于启用了PHP机制的原因。

私网标签分配过程:

在这里插入图片描述
现以vpna的 Site1 中1.1.5.0/24访问Site2中的1.1.6.0/24为例。

第1步:CE1使用IP转发的方式将数据流量转发至PE1。
第2步:PE1接收到来自CE1的数据流量时,查找VPN实例(vpna)的FIB表,根据FIB表中的转发信息压入对应的标签,然后转至下一跳P1。这里我们来看一下PE1的VPN实例(vpna)的FIB表关于目标路由前缀1.1.6.0/24的详细信息,如下输出所示:
在这里插入图片描述
由上面的输出信息可以发现,此时PE1会在报文中压入私网标签(InLabel) 1029,同时,这条目标路由前缀是由BGP 邻居 PE2(地址是10.1.4.4)通告过来的,所以报文需要送达到PE2,而要送达到这个地址,必须有到达这个地址的LSP,这时再查看一下PE1公网LSP转发表,如下输出所示:
在这里插入图片描述
由上面的输出信息可知,PE1要将数据转发给10.1.4.4,需要再压入公网标签1025,然后通过公网的LSP将数据流转发到PE2。也就是说,当数据流进入PE1时,分别压入了一个私网标签1029和一个公网标签1025,然后转发给P1路由器。

第3步:当P1路由器接收到该数据流后,根据数据包的公网标签信息进行转发,直接根据标签转发表进行转发,由下面的输出可以知道P1路由器接收到带有标签值为1025的报文时,直接将标签交换成出标签1025,然后从GEO/0/1转发给下一跳P2路由器,如下输出所示:
在这里插入图片描述
第4步:数据流到达P2路由器,这时P2和P1的处理方式相同,根据P2的标签转发表(如下表所示)的信息,此时P2将数据包携带公网标签1025进行弹出后再转发至PE2,也就是数据包到达PE2时只剩下一层私网标签,如下输出所示:
在这里插入图片描述
第5步:只带有私网标签信息的数据包到达PE2。PE2标签转发表(如下表所示)显示该FEC的出标签为空,所以在完成标签移除操作后,再以P转发的方式将P数据包转发至CE2,如下输出所示:

在这里插入图片描述
以上就是通过MPLS VPN传递用户业务数据流的整个过程,可以发现,对于入站PE1来说,在接收到用户的IP业务流量时,需要完成压入双层标签的操作;对于出站PE2来说,需要将标签从数据包中移除,然后以IP转发的方式将流量转发给用户的CE2设备;而对于骨干网中的P路由器来说,只需要进行标签的交换就可以完成数据包的转发。

整理资料来源:HCIE路由交换学习指南

猜你喜欢

转载自blog.csdn.net/tushanpeipei/article/details/113048123