问题描述
前面 MP-BGP 已经完成路由传递,接下来可以开始进行数据转发。但是,中间 P 设备是没有路由的,那么数据转发是如何进行的呢?
如图所示,这里存在两个问题:
1)中间的 P 设备无路由,所以无法转发来自 PE2 的数据;
2)远端的 PE1 无法区分数据所属的站点;
解决方案
数据转发是通过 Lable(标签)解决的,简单说,就是涉及两层标签:
1)第一层标签(外层),用于数据在 P、PE 间进行转发;
2)第二层标签(内层),用于区分数据所属站点(VRF-Inst)
详细解释
在 PE 和 P 间,运行 LDP 协议,交换公网标签,建立 PE 间的 LSP 隧道(公网隧道);
入口 PE,在通过 MP-BGP 传递 VPNv4 路由时,会携带私网标签,用于区分不同 VPN 的数据;
出口 PE 在接收到 VPNv4 路由后,需要执行私网路由交叉和隧道迭代来选择路由;
PE 上分配私网标签的方法有如下两种:
1)基于路由的 MPLS 标签分配:为 VPN 路由表的每一条路由分配一个标签(one label per route)。这种方式的缺点是:当路由数量比较多时,设备入标签映射表 ILM(Incoming Label Map)需要维护的表项也会增多,从而提高了对设备容量的要求;
2)基于 VRF 实例的 MPLS 标签分配:为整个 VRF 实例分配一个标签,该 VRF 实例里的所有路由都共享一个标签。使用这种分配方法的好处是节约标签,也是目前采用的方法,也是我们正在学习的方法;
私网路由交叉:VPNv4-Route 与 本地 VRF 实例的 RT 进行匹配的过程称为私网路由交叉。PE 在收到 VPNv4 路由后,既不进行优选,也不检查隧道是否存在,直接将其与本地的 VPN 实例进行交叉;
隧道迭代:为了将私网流量通过公网传递到另一端,需要有一条公网隧道承载这个私网流量。因此私网路由交叉完成后,需要根据目的 IPv4 前缀进行路由迭代,即该 IPv4 路由的下一跳有对应的 LSP 存在;只有隧道迭代成功,该路由才被放入对应的 VRF 实例路由表。
要想理解数据转发,我们认为这里有两点非常关键:
1)当 PE2 收到报文时,他会首先查找去往 192.168.1.0/24 的路由,该路由是由 MP-BGP 传递过来,在传递路由时 MP-BGP 已为该路由分配标签,所以报文将被添加该标签(即内层标签);
2)该路由的 Next-Hop 是 PE1,然后设备会去查询去往 PE1 的路由,而到达 PE1 的路由在 MPLS Domain 中,也被分配标签,所以该报文将被添加外层标签;
注意,查询路由表的时候,会检查 Tunnel-ID 是否为 0x0 值,如果 != 0x0 则进行 MPLS 隧道转发,即添加 MPLS Lable;
报文转发案例
以图中 User-X 的站点 B 访问站点 A 的 192.168.1.0/24 网段为例,报文转发过程如下
on Local-CE
on Local-PE
on MPLS-Domain
on Remote-PE
on Remote-CE