外层(公网)标签在骨干网内部进行交流,指示从本端PE到对端PE的一条LSP。VPN报文利用这层标签可以沿LSP到达对端PE。
公网隧道可以是LSP隧道、MPLS TE隧道和GRE隧道。当公网隧道为LSP隧道或MPLS TE隧道时,公网标签为MPLS LSP标签(MPLS TE隧道的CR-LSP也是采取LSP标签);当公网隧道为GRE隧道时,公网标签为GRE封装。
内层(私网)标签在从对端PE到达对端CE时利用,指示报文应被送到哪个Site,这便是为不同路由或不同VPN实例所分配的私网路由标签。
当PE之间已在通过MP-BGP相互发布VPN-IPv4路由时,会将本端所学习的每个私网VPN-IPv4路由所分配的私网标签通知布告给了对端PE,这样对端PE根据报文中所携带的私网标签可以找确定报文所属的VPN实例,然后再通过查找该VPN实例的路由表,将报文精确地转发到相应的Site。
【解释】分外情形下,属于同一个VPN的两个Site连接到同一个PE时,PE不须要为VPN报文封装内、外层标签,只需查找对应VPN实例的路由表,然后再找到报文的出接口即可将报文转发至相应的Site。
下面以图1-22为例解释BGP/MPLS IP VPN报文的转发过程。图中是CE1发送报文给CE2的过程,个中,I-L表示内层标签,O-L表示外层标签。本示例中内、外层标签均为MPLS LSP标签。
图1-22
(1)CE1向Ingress PE发送一个要访问远端CE2所连接Site中目标主机的VPN报文。
(2)Ingress PE从绑定了VPN实例的接口上吸收VPN数据包后进行如下操作:
先根据绑定的VPN实例的RD属性查找对应VPN的转揭橥(VRF)。
再根据VPN报文中的目的IPv4前缀,查找对应的Tunnel ID,然后将报文打上对应的私网(内层)标签(I-L),根据Tunnel ID找到隧道。
将VPN报文从找到的隧道发送出去,发出之前VPN报文要加装一层公网(外层)MPLS标签(O-L1)。此时VPN报文中携带有两层MPLS标签。
接着,该报文携带两层MPLS标签穿越骨干网。骨干网的每台P设备都仅对该VPN报文的外层标签进行交流,内层私网路由标签保持不变。如图1-23是Ingress PE向Egress PE发送的一个ICMP要求报文的报文构造示例,他包括了两层MPLS标签,个中外层标签为1025(MPLS Bottom os labelstack:0,表示后面还有MPLS标签,非栈底标签),内层标签为1026(MPLS Bottom os labelstack:1,表示此为MPLS栈底标签)。
图1-23
【履历提示】由于Egress节点为倒数第二跳分配的标签常日是支持PHP特性的,以是在倒数第二跳把报文传输Egress节点时会先弹出外层标签。这样一来,Egress吸收到的报文每每只带有一层标签。如图1-24是Ingress PE连接P的接口上吸收到来自对真个相应ICMP报文的报文构造示例,个中显示只有一层MPSL标签(MPLS Bottomos label stack:1,表示此为MPLS栈底标签)。在EgressPE连接P的接口吸收ICMP要求报文的报文构造一样,也只有一层MPLS标签,也是由于外层标签在倒数第二跳(P)弹出了。
图1-24
这样一来,可以想象,如果是两PE相连,则报文在PE间直连链路上传输时均只带一层MPLS标签,这层标签便是内层私网标签,由于此时两PE相互为对方的倒数第二跳,在发送报文时会弹出外层的MPLS标签。但在这种PE直连情形下,我们一样平常配置是不支持PHP,这样两个直连的PE在发送报文时就不会弹出外层标签了。
(3)Egress PE收到该携带两层标签的报文后,交给MPLS协议模块处理。MPLS协议将去掉外层标签(本示例末了的外层标签是O-L2,但如果运用了PHP特性,则此标签会在到达Egress PE之前的一跳P弹出,Egress PE只能收到带有内层标签的报文,拜会图1-24)。
(4)剥离了外层LSP标签后,Egress PE就可以瞥见内层标签I-L,先根据内层私网路由标签查找到VPN实例,然后通过查找该VPN实例的路由表,可确定报文要转发的目的Site和出接口。
同时,Egress PE创造报文中的内层标签处于栈底,于是将内层标签剥离,根据对应的VPN实例路由表项将报文发送给CE2。此时报文是个纯IP报文。
这样,报文就成功地从CE1传到CE2了,CE2再按照普通的IPv4报文转发过程将报文传送到目的主机。以上报文转发的流程可用图1-25进行描述。
图1-25