概述原理
相比于 OptionA 和 OptionB 方案,在 OptionC 中:
1)在 ASBR 上,并不保存 VPNv4-Route,并且 ASBR 之间也不通告 VPNv4-Route;ASBR 只需要维护所有去往 PE 的带标签路由,并通过 EBGP 通告给对端 AS。在 Transit AS 内的 ASBR 也同样需要使用 EBGP 通告这些 Labeled-IPv4-Route。这样在不同 AS 的 PE 之间给会建立一条 LSP,从而可以建立起入口 PE 和出口 PE 之间的多跳 MP-EBGP 连接并进行 VPNv4-Route 的通告;
2)不同 AS 的 PE 间建立 Multihop 方式的 EBGP 连接,直接交换 VPNv4-Route;为了进一步扩展性能,多跳 MP-EBGP 会话可以建立在不同的 AS 的 VPN RR 之间。并且当这些 VPN RR 通告 VPNv4-Route 时不改变 Nexthop 信息。PE 只与 VPN RR 建立 MP-IBGP 会话;
注:为了方便,如上图,使用的是对称的 LSP 进行示意,但是实际上在控制平面和数据平面的工作过程上,两端 AS 的 LSP 结构是不对称的;
Solution 1 vs. Solution 2
鉴于 OptionC 是 PE 间直接交换路由,所以 PE 间要有去往彼此的路由,即两个 PE 间要能够互通;
针对不同方式实现 PE 之间路由互通,OptionC 又可以分为两种方式:
1)方式一(Solution 1):针对去往其它 AS 中的 PE 路由,本域的 ASBR 通过 BGP 将其发送给本地 PE 设备;
2)方式二(Solution 2):针对去往其它 AS 中的 PE 路由,本域的 ASBR 将其引入 IGP 中;
Q:发布带标签的路由?Labeled IPv4 Route?
在常规的模式中,PE2 收到的 Route(=>PE1) 为普通的 IPv4-Route(FIB.TunnelID=0x0),那么数据平面在数据转发时也是普通的 IPv4 封装。当 P2 收到该报文后,由于 P2 没有 Route(=>PE1),将进行丢包(路由黑洞);
注意事项:
在 PE2.FIB 中,Route(=>PE1) 的下一跳是 P2,其 TunnelID=0x0 而未通过 MPLS 转发。这是因为 MPLS 默认只为 /32 路由分配标签;
鉴于 ASBR 无 VPNv4 的路由,因此为了避免转发数据包时出现路由黑洞,PE 设备必须将数据包引入隧道,使非 PE 设备不感知 VPN 的封装信息,因此 OptionC 的两种方式都需要 ASBR 之间发布带标签的路由,以构建 AS 之间的外层转发隧道;
注意事项:
当为 Route(=>PE1) 分配标签后,在 PE2 发送数据包时,最外层的标签是 Lable(=>ASBR2) 即 ASBR2 设备。这对比普通的 IPv4 转发相比,其下一跳是 P2 的地址。我们没有找到相关的文档,所以暂时不清楚其计算过程。
如果每个 AS 的 P 路由器都能够知道去往其他 AS 的 PE 路由器的路由,那情况会比较简单。但是如果 P 不知道,那么当 PE 收到从 CE 收到 VPN 数据时,就要加上三层标签,底层标签是由对端 PE 分配的与 VPNv4-Route 相关联的 VPN 标签,中间的标签是 ASBR 分配的与 Route(=>Left-PE) 相关联的标签,外层标签则是与 Route(=>Nexthop ASBR) 相关联的标签;
Option C Solution 1
控制平面:without RR
CE1 通告 IPv4-Route 给 PE1;
PE1 将 IPv4-Route 转化为 VPNv4-Route 发送给 PE2,并且设置 Nexthop 为 PE1,分配 VPN 标签 V1;
ASBR1 通过 EBGP 会话通告一条去往 PE1 的 Labeled-IPv4-Route 给 ASBR2,其中 Nexthop 为 ASBR1,标签为 BGP 标签,值为 B1;
ASBR2 通过 IBGP 会话通告一条去往 PE1 的 Labeled-IPv4-Route 给 PE2,其中 Nexthop 为 ASBR2,标签为 BGP 标签,值为 B2;
PE1、P1 分别为去往 PE1 的路由分配隧道标签 T1、T2;
ASBR2、P2 分别为去往 ASBR2 的路由分配隧道标签 T3、T4;
PE2 将 VPNv4-Route 转变为 IPv4-Route,通告给 CE2,并且设置 Nexthop 为 PE2;
PE1=(IBGP)=>ASBR1=(EBGP)=>ASBR2=(IBGP)=>PE2
控制平面:with RR
Left-PE 只与 Left-RR 建立 VPNv4 邻居,Left-RR 与 Right-RR 建立 VPNv4 邻居,实现跨域 VPNv4-Route 的传递;
Left-PE 还与 Left-RR 建立 I-BGP 邻居,目的是转播自身路由,实现两端 PE 互联;
ASBR,PE 同 RR 建立 BGP 单播 IPv4 邻居(这里仅传递 IPv4-Route):
ASBR 将从对端 ASBR 学到的 RR 的 loopback 接口的路由,传递给 Left-RR,用于 Left-RR 与 Right-RR 建立 VPNv4 邻居;
ASBR 将从对端 ASBR 学到的 RR 和 PE 的 loopback 接口的路由,传递给 Left-RR,Left-RR 再将其反射给 Left-PE,用于跨域之间的 PE 建立 BGP LSP;
转发平面
CE2 发送一个目的地为 Net1 的 IP 报文给 PE2;
PE2 收到 IP 报文后先封装 VPN 标签 V1,然后添加 ASBR2 分配的 BGP 标签 B2 做为中间标签,最后封装上外层标签 T4;
P2 把外层标签 T4 换成 T3,然后将此报文发送给 ASBR2;
ASBR2 去掉外层标签,将 BGP 标签 B2 交换为 B1,再将其转发给 ASBR1;
当 ASBR1 收到报文后,去掉 B1 进一步查表转发,发现此时去往 PE1 的路由有一个关联的标签 T2,因此,ASBR1 将其加在栈顶,并转发给 P1;
P1 进行标签交换,把外层标签 T2 换成 T1,然后将此报文发送给 PE1;
PE1 收到后去掉所有标签,将报文转发给 CE1;
Q:为什么 ASBR2 要为去往 PE1 的路由分配标签?(先不考虑 P2)
A:PE1 的 VPNv4-Route 是经过 RR1/RR2 传递并反射到达 PE2 ,并不经过 ASBR2,所以 ASBR2 并不感知 VPNv4-Route,所以当仅携带 VPN 标签(该标签由 PE1 分配)的数据包到达 ASBR2 时,ASBR2 无法识别,则 ASBR2 将丢弃数据包;
Q:为什么 ASBR1 要为去往 PE1 的路由分配标签?
A:同理,PE1 的 VPNv4-Route 是经过 RR1/RR2 传递并反射到达 PE2 ,并不经过 ASBR1,所以 ASBR1 不知道 VPNv4-Route,因此当只携带 VPN 标签(该标签由 PE1 分配)的数据包到达 ASBR1 时,ASBR1 无法识别,则 ASBR1 将丢弃数据包;
Q:为什么 ASBR2 要为 P2 分配标签?
A:由于 P2 不知道 PE1 的路由信息,因此当 VPN 报文携带的外层标签为 BGP 标签(该标签由 ASBR2 分配)时,P2 无法识别外层标签 B2,则 P2 丢弃该数据包。所以,该问题的解决方法是「分配标签,以封装(屏蔽)内层数据」;
Option C Solution 2
问题描述
在 Solution 1 中,需要使用三层标签(数据的发送端),即 VPNv4 Route Label、BGP LSP Label、LDP LSP Label 来承载流量。ASBR 在收到对端 ASBR 发来的 BGP-Labeled-Route 后,需要配置策略产生一个新的标签并发布给 AS 内的 PE 或者 RR 设备,以建立一条完整的 BGP LSP;
解决方案
跨域 VPN-OptionC Solution 2 与 Solution 1 大体相似,不同之处在于 Solution 2 只需要两层:
1)ASBR 不再维护或是通告 VPNv4-Route,其只需要维护所有去往 PE 的带标签路由,并通过 EBGP 通告给对端 ASBR;
2)对端 ASBR 需要配置 MPLS 触发为 BGP-Labeled-Route 分发标签。当对端 ASBR 收到带 BGP-Labeled-Route 后,LDP 会触发为该 BGP-Labeled-Route 产生标签,并在 AS 内的 LDP 邻居间传递。因此在 AS 内的 PE 上可以看到去往对端 PE 的 LDP LSP,而非 BGP LSP;
3)同时,还需要将 BGP-Route 引入到 IGP 协议中,目的是为了能够在 MPLS Domain 中的其他 P 设备为该路由继续分配标签;
注意,LDP 是为 Labeled-BGP-Route 分配标签,并不会为普通的 IPv4-Route 分配标签;
同理,方案二支持 RR 设备的部署;为了进一步扩展性能,多跳 MP-EBGP 会话可以建立在不同的 AS 的 VPN RR 之间,本 AS 内的 PE 只需要与 RR 建立 MP-IBGP 即可。这些 VPN RR 通告 VPNv4-Route 时不改变 Nexthop 信息,进而当对端 PE 转发流量时,可以迭代至正确的隧道;
控制平面:without RR
CE1 通告 IPv4-Route 给 PE1;
PE1 将 IPv4-Route 转化为 VPNv4-Route 发送给 PE2,并且设置下一跳为 PE1,分配 VPN 标签 V1;
PE1、P1 分别为去往 PE1 的路由分配隧道标签 T1、T2;
ASBR1 通过 EBGP 会话通告一条去往 PE1 的带标签的 IPv4-Route 给 ASBR2,其中下一跳为 ASBR1,标签为 BGP 标签,值为 B1;
ASBR2、P2 分别为去往 PE1 的路由分配隧道标签 T3、T4;
PE2 将 VPNv4-Route 转变为 IPv4-Route,通告给 CE2,并且设置下一跳为 PE2;
控制平面:with RR
本端 PE 只与本端 RR 建立 VPNv4 邻居,本端 RR 与对端 RR 建立 VPNv4 邻居,实现了跨域 VPNv4-Route 的传递;
RR 只负责控制平面 VPNv4-Route 的传递,转发平面的流量不经过 RR;
转发平面
CE2 发送一个目的地为 Net1 的 IP 报文给 PE2;
PE2 收到 IP 报文后先封装 VPN 标签 V1,由于去往 Net1 的下一跳 PE1 不是直连邻居,通过查表发现去往 PE1 的标签为 T4,打上 T4;
P2 把外层标签 T4 换成 T3,然后将此报文发送给 ASBR2;
ASBR2 去掉外层标签,将 T3 交换为 B1,再将其转发给 ASBR1;
当 ASBR1 收到报文后,去掉 B1 进一步查表转发,发现此时去往 PE1 的路由有一个关联的标签 T2,因此,ASBR1 将其加在栈顶,并转发给 P1;
P1 进行标签交换,把外层标签 T2 换成 T1,然后将此报文发送给 PE1;
PE1 收到后去掉所有标签,将报文转发给 CE1;
特性特征(总结)
优点
VPNv4-Route 在入口 PE 和出口 PE 之间直接交换,不需要中间设备的保存和转发;
VPN 的路由信息只出现在 PE 设备上,而 P 和 ASBR 只负责报文的转发,使得中间域的设备可以不支持 MPLS VPN 业务,只需支持 MPLS 转发,ASBR 设备不再成为性能瓶颈。因此跨域 VPN-OptionC 更适合在跨越多个 AS 时使用;
更适合支持 MPLS VPN 的负载分担;
缺点
缺点是维护一条端到端的 BGP LSP 连接,管理代价较大;
缺点是维护一条端到端的 PE 连接管理代价较大;