「MPLS-VPN」- 数据转发

  CREATED BY JENKINSBOT

问题描述

前面 MP-BGP 已经完成路由传递,接下来可以开始进行数据转发。但是,中间 P 设备是没有路由的,那么数据转发是如何进行的呢?

解决方案

数据转发是通过标签解决的,简单说,就是涉及两层标签;

详细解释

在 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;

报文转发案例

以图中用户X的站点B访问站点A的192.168.1.0/24网段为例,报文转发过程如下

on Local-CE

on Local-PE

on MPLS-Domain

on Remote-PE

on Remote-CE