首先我们要清楚,MPLS这项转发机制都使用到了那些表:
- RIB:Routing Information Base,路由信息表或称路由择域信息库,一般习惯上都称它为路由表。该表可通过show ip route查看。
- FIB:Forwarding Information Base,转发信息表。这是CEF(Cisco Express Forwarding)所使用到的表,通过RIB拷贝生成而来,MPLS的开启也需要使用到CEF(比如MPLS在形成标签时也需要读取这张表的数据)。该表可通过show ip cef查看。
- LIB:Lable Information Base,标签信息表。在分配和收集MPLS标签的阶段,MPLS会将所有分配的和所有收集到的标签记录到该表中,然而这些标签中可能只有其中的一部分才能进入LFIB。该表可通过show mpls ldp bindings查看。
- LFIB:Lable Forwarding Information Base,标签转发信息表。在MPLS真正转发数据包时,查的就是LFIB,LIB仅仅只是标签的集合。该表可通过show mpls forwarding-table查看。

- RIB对应上图中Control Plane最上层的IP Routing Table;
- LIB仅仅只是标签的集合,非得在上图中找到一个合适的位置的话,那IP Routing Table下面的LDP这个位置会比较合适;
- FIB对应上图中Data Plane最上层的IP Forwarding Table;
- LFIB对应上图中Data Plane最下层的LFIB。
实验环境
R2/3/4/5是MPLS域,R1和R6没有跑MPLS;R1有一个loopback口(1.1.1.1),现在用R6去ping R1的loopback口(1.1.1.1)。

Step1:按上述拓扑搭建网络环境,并运行 ISIS,Area-id = 49.1111
Step2:R2/R3/R4/R5 配置成 MPLS-DOMAIN
1、R2/R3/R4/R5 全局开启 CEF
R2/R3/R4/R5(config)# ip cef
2、R2/R3/R4/R5 配置 MPLS 相关选项(option)
R2/R3/R4/R5(config)# mpls ip (全局开启MPLS转发功能,默认是开启的)
R2/R3/R4/R5(config)# mpls label procol ldp (选择LDP作为标签分发协议,默认也是LDP)
R2/R3/R4/R5(config)# mpls label range x000 x999 ( 给定标签分配范围)
R2/R3/R4/R5(config)# mpls ldp router-id loopback 0 fource (标签分发协议的RID)
3、R2/R3/R4/R5 相应的接口下开启 MPLS
R2/R3/R4/R5(config-if)#mpls ip
Step3:R6 ping R1

实验现象描述

1、当目的地址为1.1.1.1、源地址为6.6.6.6的ping包从R6出去时,在R6上查的是FIB。
R6上因为没有开启MPLS,所以只有RIB和FIB,默认开启了ip cef的话查的就应该是FIB。下图在R6上的debug信息也证明了这一点。

2、当ping包到达了R5以后,查的是FIB。
ping包是从R6来到R5的,R6没有开启MPLS,所以ping包没有携带任何MPLS标签。当MPLS域的边缘设备(也就是R5)收到一个没有MPLS标签的数据包时,还是会查找FIB。
如下图所示,FIB中有相应的MPLS标签,这个时候ping包才会压上一层MPLS标签并转发给R4。

3、R4收到ping包后,会查LFIB,然后转发给R3。R3和R2同理(R3收到ping包后,也会查LFIB,然后转发给R2;R2收到ping包后,也会查LFIB,然后转发给R1)。
因为ping包在R5的时候已经压上了一层MPLS标签,所以ping包到达R4后直接就查找了LFIB(只要数据包里有MPLS标签就去查找LFIB)。R3和R2同理。



但需要注意的是,在R2查LFIB以后你会发现LFIB上显示Outgoing为No Label(如上图所示),No Label意味着MPLS标签被R2全部剥离了,这个时候R2发给R1的数据包是没有携带任何MPLS标签的纯IP数据包了。
4、当ping包到达R1以后,查的是RIB(先查FIB,但是FIB查找失败)。
这里之所以不用查FIB而是查RIB,是因为这个包是终止于本地的,这个数据包将会交给进程处理,不需要经过FIB这种基于硬件的快速转发芯片了。通过下图你会发现,R1上FIB也查了,但是查找失败(packet routing failed)。

注意:
- 上图确实是R1的截图,不是R7的。因为当时R1这个设备有问题,所以用R7顶替了R1。
- 如果你使用的是旧版的IOS,这里的debug信息是可以看到最后查找了RIB的。
如有错误,欢迎在下方留言指正,谢谢。
发表评论?