我希望你不会看晕,主页菌已经尽力描述得很细致了,如有疑问欢迎在文章最下方留言,如有错误也欢迎留言指正。_(:з」∠)_
问题一:什么是MPLS的LSP(Label Switched Path,MPLS的标签交换通道)?
回答:MPLS的LSP跟OSPF的LSP不是一个概念。MPLS域内的路由器都会为RIB(路由表)中的每条IGP路由分配MPLS标签,这就意味着每条IGP路由在MPLS域内都有一条最佳的数据包传递路径,这条路径也就是MPLS的LSP(MPLS的标签交换通道)。
问题二:那MPLS的LSP(MPLS的标签交换通道)被打断是一个什么概念呢?

回答:由上图可知,R5的IGP有10.1.1.0/24和10.1.2.0/24两个LAN网段。对于10.1.1.0/24来说,R5发送关于10.1.1.0/24路由的隐式空标签(imp-null)给R4,R4发送关于10.1.1.0/24路由的33号标签给R3,一直到R1。这样从R5到R1就形成了一条完整的LSP(MPLS的标签交换通道),读到这里我相信大家都没有问题。
现在我们在R3上做路由汇总,将10.1.1.0/24和10.1.2.0/24这两个LAN网段汇总成10.1.0.0/16。这个时候R3的MPLS会为10.1.0.0/16这条路由分配一个新的隐式空标签(imp-null)给R2(因为10.1.0.0/16这条路由起源于R3),而原来10.1.1.0/24路由的MPLS标签也会随着明细路由被抑制而消失。完整的LSP(MPLS的标签交换通道)现在被打断了。
原来关于10.1.1.0/24路由的LSP(MPLS的标签交换通道)现在被打断成了两截,在R2上数据包会因为是隐式空标签(imp-null)而弹出MPLS标签,导致R1到R3是一段LSP,R3到R5又是另外一段LSP。
问题三:那MPLS的LSP(MPLS的标签交换通道)中断对数据包的转发有什么影响么?
回答:在上面图示的环境中,虽然MPLS的LSP(MPLS的标签交换通道)被打断了,但是R1和R5关于10.1.1.0/24的LAN网段的通信还是可以正常进行的。当数据包从R1发往R5时,虽然数据包到了R2上MPLS标签会被弹出,然后变成纯的IP数据包发给R3,但是R3和R4的RIB(路由表)中只要还有关于10.1.1.0/24的路由(路由表中有路由,MPLS就会为该路由分配MPLS标签;或者进行纯IP数据包的转发),数据包又可以重新进入第二个MPLS的LSP(MPLS的标签交换通道)中进行转发。
但不是什么时候,IGP做了路由汇总,数据包都可以重新进入第二个MPLS的LSP(MPLS的标签交换通道)的。尤其是在结合BGP一起使用的情况下,因为MPLS域内的路由器显然没有BGP的路由。接下来的实验就会说明这个问题。
实验环境:
操作系统:Windows 10(1607,14393.351,当时最新测试版),模拟器:GNS3 IOU for Windows 1.5.2(当时最新正式版)
注:当然,只要有思科模拟器都可以做这个实验

实验需求:
- IOU2、IOU3、IOU4和IOU5之间开启了ISIS做为IGP,并且开启了MPLS;
- IOU1(router bgp 1)和IOU2(router bgp 2345)是EBGP邻居关系,IOU2和IOU5是IBGP邻居关系,IOU5(router bgp 2345)和IOU6(router bgp 6)是EBGP邻居关系;
- IOU1上有10.1.1.0/24、10.1.2.0/24和10.1.3.0/24三个LAN网段,并将LAN网段通告到BGP中;
- IOU6上有172.16.6.0/24、172.16.7.0/24和172.16.8.0/24三个LAN网段,并将LAN网段通告到BGP中。
实验步骤:
1、先完成基础配置(IP地址和IGP):
IOU1:
conf t int l 0 int e 0/0 |
IOU6:
conf t int l 0 int e 0/0 |
IOU2:
conf t int l 0 int e 0/0 int e 0/1 router isis 1 int e 0/1 |
IOU3:
conf t int l 0 int e 0/0 int e 0/1 router isis 1 int r e 0/0 , e 0/1 |
IOU4:
conf t int l 0 int e 0/0 int e 0/1 router isis 1 int r e 0/0 , e 0/1 |
IOU5:
conf t int l 0 int e 0/0 int e 0/1 router isis 1 int e 0/1 |
2、接着完成MPLS的配置:
IOU2:
mpls ip int e 0/1 |
IOU3:
mpls ip router isis 1 |
IOU4:
mpls ip router isis 1 |
IOU5:
mpls ip int e 0/1 |
3、配置BGP:
IOU1:
router bgp 1 |
IOU2:
router bgp 2345 |
IOU5:
router bgp 2345 |
IOU6:
router bgp 6 |
上面的实验配置是一个标准的“MPLS基于BGP的单播应用”,现在在该实验拓扑的基础上对它进行修改以完成本实验。
ISIS的域内汇总似乎没法做,所以我们用一个特别的方式完成ISIS的“域内汇总”:
- 在之前配置的基础上,IOU2和IOU3从原先的net 49.0001修改成net 49.0002;
- 同时,IOU3和IOU4、IOU4和IOU5之间的链路从原先的level-1修改成level-2。
IOU2:
router isis 1 do clear isis * |
IOU3:
router isis 1 is-type level-1-2 do clear isis * |
IOU4:
router isis 1 do clear isis * |
IOU5:
router isis 1 do clear isis * |
(PS:如果你等了很长时间发现IOU2并没有收到IOU3传给它的一条L1默认路由,那你就再在IOU3上do clear isis * 一次。)
经过这样的修改,IOU2和IOU3属于net 49.0002,IOU4和IOU5属于net 49.0001,IOU3就变成了net 49.0002的边界路由器。因为IOU3变成了ISIS域的边界路由器,所以IOU2就会接收到一条由IOU3分发下来的L1默认路由:
IOU2#sh ip ro
Codes: L - local, C - connected, S - static, R - RIP, M - mobile, B - BGP
D - EIGRP, EX - EIGRP external, O - OSPF, IA - OSPF inter area
N1 - OSPF NSSA external type 1, N2 - OSPF NSSA external type 2
E1 - OSPF external type 1, E2 - OSPF external type 2
i - IS-IS, su - IS-IS summary, L1 - IS-IS level-1, L2 - IS-IS level-2
ia - IS-IS inter area, * - candidate default, U - per-user static route
o - ODR, P - periodic downloaded static route, H - NHRP, l - LISP
a - application route
+ - replicated route, % - next hop override
Gateway of last resort is 23.1.1.3 to network 0.0.0.0
i*L1 0.0.0.0/0 [115/10] via 23.1.1.3, 00:03:13, Ethernet0/1
2.0.0.0/32 is subnetted, 1 subnets
C 2.2.2.2 is directly connected, Loopback0
3.0.0.0/32 is subnetted, 1 subnets
i L1 3.3.3.3 [115/10] via 23.1.1.3, 00:04:22, Ethernet0/1
10.0.0.0/24 is subnetted, 3 subnets
B 10.1.1.0 [20/0] via 12.1.1.1, 00:04:37
B 10.1.2.0 [20/0] via 12.1.1.1, 00:04:37
B 10.1.3.0 [20/0] via 12.1.1.1, 00:04:37
12.0.0.0/8 is variably subnetted, 2 subnets, 2 masks
C 12.1.1.0/24 is directly connected, Ethernet0/0
L 12.1.1.2/32 is directly connected, Ethernet0/0
23.0.0.0/8 is variably subnetted, 2 subnets, 2 masks
C 23.1.1.0/24 is directly connected, Ethernet0/1
L 23.1.1.2/32 is directly connected, Ethernet0/1
172.16.0.0/24 is subnetted, 3 subnets
B 172.16.6.0 [200/0] via 5.5.5.5, 00:03:08
B 172.16.7.0 [200/0] via 5.5.5.5, 00:03:08
B 172.16.8.0 [200/0] via 5.5.5.5, 00:03:08

如上图所示,IOU2上的这条L1默认路由,就相当于是在IOU3上对5.5.5.5/32“网段”做了一个巨大的“域内汇总”,并抑制掉了明细路由(IOU2收不到5.5.5.5/32)。只是IOU3汇总得太狠了,不小心汇总成了默认路由。_(:з」∠)_
现在R2 ping R5,没有问题,MPLS域内的IGP通信不受LSP中断的影响:
IOU2#p 5.5.5.5 so 2.2.2.2 Type escape sequence to abort. Sending 5, 100-byte ICMP Echos to 5.5.5.5, timeout is 2 seconds: Packet sent with a source address of 2.2.2.2 !!!!! Success rate is 100 percent (5/5), round-trip min/avg/max = 1/1/2 ms IOU2#tra 5.5.5.5 so 2.2.2.2 Type escape sequence to abort. Tracing the route to 5.5.5.5 VRF info: (vrf in name/id, vrf out name/id) 1 23.1.1.3 1 msec 0 msec 1 msec 2 34.1.1.4 [MPLS: Label 4001 Exp 0] 1 msec 0 msec 1 msec 3 45.1.1.5 1 msec 1 msec 1 msec
至于为什么不受影响其实我上面也解释了。因为这个ping包的目的地址为5.5.5.5,无论LSP(MPLS的标签交换通道)在哪个路由器上被打断,只要MPLS域内的所有非边缘路由器的RIB(路由表)中还有5.5.5.5的路由,ping包依旧可以重新进入第二条LSP(MPLS的标签交换通道)进行转发。
现在我们详细地跟踪一下:
在IOU2上ping 5.5.5.5 so 2.2.2.2,ping包这个时候还是纯IP数据包,所以IOU2默认会先查找FIB(只有带有MPLS标签的数据包默认才会去查找LFIB)。由下图可知,IOU2会把这个ping包从Ethernet0/1口转发出去,下一跳是23.1.1.3。因为IOU2没有5.5.5.5/32的明细路由了,IOU2这个转发行为其实是通过L1默认路由把数据包转发给IOU3的。
IOU2#sh ip cef 5.5.5.5 5.5.5.5/32 nexthop 23.1.1.3 Ethernet0/1
IOU3收到这个纯IP数据包以后,默认还是会查找FIB(只有带有MPLS标签的数据包默认才会去查找LFIB)。由下图可知,FIB上要求IOU3将该数据包从Ethernet0/0口转发出去,下一跳是34.1.1.4,同时要打上编号为4001的MPLS出标签。
IOU3#sh ip cef 5.5.5.5 5.5.5.5/32 nexthop 34.1.1.4 Ethernet0/0 label 4001
PS:如果你想了解更多关于MPLS转发环境下,每次转发数据包都要查找那些表,请看《在MPLS环境下,每次转发数据包所查找的表都分别是什么?》
了解CEF转发机制的盆友们都知道,FIB里的数据其实是RIB(路由表)的拷贝,现在我们去IOU3的RIB(路由表)上看看。如下图所示,5.5.5.5的下一跳确实是34.1.1.4。
IOU3#sh ip ro
Codes: L - local, C - connected, S - static, R - RIP, M - mobile, B - BGP
D - EIGRP, EX - EIGRP external, O - OSPF, IA - OSPF inter area
N1 - OSPF NSSA external type 1, N2 - OSPF NSSA external type 2
E1 - OSPF external type 1, E2 - OSPF external type 2
i - IS-IS, su - IS-IS summary, L1 - IS-IS level-1, L2 - IS-IS level-2
ia - IS-IS inter area, * - candidate default, U - per-user static route
o - ODR, P - periodic downloaded static route, H - NHRP, l - LISP
a - application route
+ - replicated route, % - next hop override
Gateway of last resort is not set
2.0.0.0/32 is subnetted, 1 subnets
i L1 2.2.2.2 [115/10] via 23.1.1.2, 00:17:17, Ethernet0/1
3.0.0.0/32 is subnetted, 1 subnets
C 3.3.3.3 is directly connected, Loopback0
4.0.0.0/32 is subnetted, 1 subnets
i L2 4.4.4.4 [115/10] via 34.1.1.4, 00:16:54, Ethernet0/0
5.0.0.0/32 is subnetted, 1 subnets
i L2 5.5.5.5 [115/20] via 34.1.1.4, 00:16:54, Ethernet0/0
23.0.0.0/8 is variably subnetted, 2 subnets, 2 masks
C 23.1.1.0/24 is directly connected, Ethernet0/1
L 23.1.1.3/32 is directly connected, Ethernet0/1
34.0.0.0/8 is variably subnetted, 2 subnets, 2 masks
C 34.1.1.0/24 is directly connected, Ethernet0/0
L 34.1.1.3/32 is directly connected, Ethernet0/0
那FIB怎么就知道要打编号为4001的MPLS出标签啦?因为你在IOU3上开启MPLS了嘛,MPLS往FIB里面添加的。如下图所示,通过查找IOU3的LFIB我们可以看到,去往5.5.5.5的数据包出标签为4001,出接口为Et0/0,下一跳为34.1.1.4。
IOU3#sh mpls forwarding-table
Local Outgoing Prefix Bytes Label Outgoing Next Hop
Label Label or Tunnel Id Switched interface
3000 Pop Label 2.2.2.2/32 3910 Et0/1 23.1.1.2
3001 Pop Label 4.4.4.4/32 0 Et0/0 34.1.1.4
3002 4001 5.5.5.5/32 0 Et0/0 34.1.1.4
于是,ping包就会在IOU3上打上编号为4001的MPLS出标签,并将该数据包转发给IOU4。
正是因为IOU3、IOU4和IOU5的RIB(路由表)上也都还有5.5.5.5/32的路由,所以该ping包在IOU3上重新进入第二条LSP(MPLS的标签交换通道)。至此,该ping包就会通过第二条LSP(MPLS的标签交换通道)顺利地转发到IOU5上。
但是R1 ping R6的通信就无法正常进行了:
IOU1#p 172.16.6.6 so 10.1.1.1 Type escape sequence to abort. Sending 5, 100-byte ICMP Echos to 172.16.6.6, timeout is 2 seconds: Packet sent with a source address of 10.1.1.1 ..... Success rate is 0 percent (0/5)
IOU1和IOU6之间的通信是要依靠MPLS域中的5.5.5.5路由的LSP(MPLS的标签交换通道)完成数据转发的,现在关于5.5.5.5路由的LSP(MPLS的标签交换通道)被IOU3上的“域内汇总”打断了。MPLS标签被弹出后数据包将按照纯IP数据包的方式进行转发,然而MPLS域内的非边缘路由器的RIB(路由表)中都没有172.16.6.0/24的路由,所以ping包直接在MPLS 域内(即IOU3上)被丢包了。最终,也就不通了。
现在我们详细地跟踪一下:
在IOU1上ping 172.16.6.6 so 10.1.1.1,因为IOU1并没有运行MPLS,所以IOU1发给IOU2的ping包自然是纯的IP数据包,那么IOU2就会去查找FIB。由下图可知,IOU2会根据FIB将ping包从Ethernet0/1口转发出去,下一跳是23.1.1.3。
IOU2#sh ip cef 172.16.6.6 172.16.6.0/24 nexthop 23.1.1.3 Ethernet0/1
IOU3收到这个纯的IP数据包后,还是会查找FIB。由下图可知,IOU3不知道如何去往172.16.6.6,所以IOU3丢包。
IOU3#sh ip cef 172.16.6.6 0.0.0.0/0 no route
总结:
- 单播应用中IGP路由的FEC(标签的分配对象)是FIB的每一个目的前缀;
- 单播应用中BGP路由的FEC(标签的分配对象)是BGP路由的下一跳;
- 任何时候进入MPLS域内的数据包,如果该数据包的目的IP地址在边界设备上是以BGP路由的形式出现的,边界设备转发该数据包将是借其去往BGP路由的下一跳标签来发送(也就是说本地如何去往下一跳就如何发送该数据包)。
PS:FEC(标签的分配对象)是什么?请看《MPLS的FEC(转发等价类)》
主页菌相信本文的描述已经非常详尽了,如果读到这里你还有疑问,欢迎在下方留言。如有错误也欢迎在下方留言指正。主页菌去睡觉了,好困,撑不住了。_(:з」∠)_
发表评论?