在MPLS环境下,每次转发数据包所查找的表都分别是什么?

首先我们要清楚,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查看
MPLS转发机制中所用到的Table的图示
MPLS转发机制中所用到的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)。

MPLS实验环境
MPLS实验环境

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

R6 ping R1
R6 ping R1

实验现象描述

MPLS在转发数据包的过程中所用到(查找)的表
MPLS在转发数据包的过程中所用到(查找)的表

1、当目的地址为1.1.1.1、源地址为6.6.6.6的ping包从R6出去时,在R6上查的是FIB。

R6上因为没有开启MPLS,所以只有RIB和FIB,默认开启了ip cef的话查的就应该是FIB。下图在R6上的debug信息也证明了这一点。

R6上输出的debug ip packet信息
R6上输出的debug ip packet信息

2、当ping包到达了R5以后,查的是FIB。

ping包是从R6来到R5的,R6没有开启MPLS,所以ping包没有携带任何MPLS标签。当MPLS域的边缘设备(也就是R5)收到一个没有MPLS标签的数据包时,还是会查找FIB。

如下图所示,FIB中有相应的MPLS标签,这个时候ping包才会压上一层MPLS标签并转发给R4。

R5上通过show ip cef命令来查看FIB
R5上通过show ip cef命令来查看FIB

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同理。

R4上通过show mpls forwarding-table命令来查看LFIB
R4上通过show mpls forwarding-table命令来查看LFIB
R3上通过show mpls forwarding-table命令来查看LFIB
R3上通过show mpls forwarding-table命令来查看LFIB
R2上通过show mpls forwarding-table命令来查看LFIB
R2上通过show mpls forwarding-table命令来查看LFIB

但需要注意的是,在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上输出的debug ip packet信息
R1上输出的debug ip packet信息

注意:

  • 上图确实是R1的截图,不是R7的。因为当时R1这个设备有问题,所以用R7顶替了R1。
  • 如果你使用的是旧版的IOS,这里的debug信息是可以看到最后查找了RIB的。

 

如有错误,欢迎在下方留言指正,谢谢。

这篇文章对你有帮助吗?

相关文章

发表评论?

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据