【实验】MPLS下,IGP使用路由汇总造成标签交换路径(LSP,Label Switched Path)中断的问题

我希望你不会看晕,主页菌已经尽力描述得很细致了,如有疑问欢迎在文章最下方留言,如有错误也欢迎留言指正。_(:з」∠)_

 

问题一:什么是MPLS的LSP(Label Switched Path,MPLS的标签交换通道)?

回答:MPLS的LSP跟OSPF的LSP不是一个概念。MPLS域内的路由器都会为RIB(路由表)中的每条IGP路由分配MPLS标签,这就意味着每条IGP路由在MPLS域内都有一条最佳的数据包传递路径,这条路径也就是MPLS的LSP(MPLS的标签交换通道)。

问题二:那MPLS的LSP(MPLS的标签交换通道)被打断是一个什么概念呢?

MPLS的LSP(标签交换通道)被IGP路由汇总打断
MPLS的LSP(标签交换通道)被IGP路由汇总打断

回答:由上图可知,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(当时最新正式版)
注:当然,只要有思科模拟器都可以做这个实验

【实验】IGP使用路由汇总造成标签交换路径(LSP,Label Switched Path)中断的问题
【实验】IGP使用路由汇总造成标签交换路径(LSP,Label Switched Path)中断的问题

实验需求:

  • 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
ip add 1.1.1.1 255.255.255.255
ip add 10.1.1.1 255.255.255.0 secondary
ip add 10.1.2.1 255.255.255.0 secondary
ip add 10.1.3.1 255.255.255.0 secondary

int e 0/0
ip add 12.1.1.1 255.255.255.0
no sh

IOU6:

conf t

int l 0
ip add 6.6.6.6 255.255.255.255
ip add 172.16.6.6 255.255.255.0 secondary
ip add 172.16.7.6 255.255.255.0 secondary
ip add 172.16.8.6 255.255.255.0 secondary

int e 0/0
ip add 56.1.1.6 255.255.255.0
no sh

IOU2:

conf t

int l 0
ip add 2.2.2.2 255.255.255.255

int e 0/0
ip add 12.1.1.2 255.255.255.0
no sh

int e 0/1
ip add 23.1.1.2 255.255.255.0
no sh

router isis 1
net 49.0001.0000.0000.0002.00
is-type level-1
pass l 0
adv pass

int e 0/1
ip router isis 1

IOU3:

conf t

int l 0
ip add 3.3.3.3 255.255.255.255

int e 0/0
ip add 34.1.1.3 255.255.255.0
no sh

int e 0/1
ip add 23.1.1.3 255.255.255.0
no sh

router isis 1
net 49.0001.0000.0000.0003.00
is-type level-1
pass l 0
adv pass

int r e 0/0 , e 0/1
ip router isis 1

IOU4:

conf t

int l 0
ip add 4.4.4.4 255.255.255.255

int e 0/0
ip add 34.1.1.4 255.255.255.0
no sh

int e 0/1
ip add 45.1.1.4 255.255.255.0
no sh

router isis 1
net 49.0001.0000.0000.0004.00
is-type level-1
pass l 0
adv pass

int r e 0/0 , e 0/1
ip router isis 1

IOU5:

conf t

int l 0
ip add 5.5.5.5 255.255.255.255

int e 0/0
ip add 56.1.1.5 255.255.255.0
no sh

int e 0/1
ip add 45.1.1.5 255.255.255.0
no sh

router isis 1
net 49.0001.0000.0000.0005.00
is-type level-1
pass l 0
adv pass

int e 0/1
ip router isis 1

2、接着完成MPLS的配置:

IOU2:

mpls ip
mpls label protocol ldp
mpls ldp router-id Loopback0 force
mpls label range 2000 2999

int e 0/1
mpls ip

IOU3:

mpls ip
mpls label protocol ldp
mpls ldp router-id Loopback0 force
mpls label range 3000 3999

router isis 1
mpls ldp autoconfig

IOU4:

mpls ip
mpls label protocol ldp
mpls ldp router-id Loopback0 force
mpls label range 4000 4999

router isis 1
mpls ldp autoconfig

IOU5:

mpls ip
mpls label protocol ldp
mpls ldp router-id Loopback0 force
mpls label range 5000 5999

int e 0/1
mpls ip

3、配置BGP:

IOU1:

router bgp 1
bgp router-id 1.1.1.1
network 10.1.1.0 mask 255.255.255.0
network 10.1.2.0 mask 255.255.255.0
network 10.1.3.0 mask 255.255.255.0
neighbor 12.1.1.2 remote-as 2345

IOU2:

router bgp 2345
bgp router-id 2.2.2.2
neighbor 12.1.1.1 remote-as 1
neighbor 5.5.5.5 remote-as 2345
neighbor 5.5.5.5 up l 0
neighbor 5.5.5.5 next-hop-self

IOU5:

router bgp 2345
bgp router-id 5.5.5.5
neighbor 56.1.1.6 remote-as 6
neighbor 2.2.2.2 remote-as 2345
neighbor 2.2.2.2 up l 0
neighbor 2.2.2.2 next-hop-self

IOU6:

router bgp 6
bgp router-id 6.6.6.6
network 172.16.6.0 mask 255.255.255.0
network 172.16.7.0 mask 255.255.255.0
network 172.16.8.0 mask 255.255.255.0
neighbor 56.1.1.5 remote-as 2345

上面的实验配置是一个标准的“MPLS基于BGP的单播应用”,现在在该实验拓扑的基础上对它进行修改以完成本实验。

ISIS的域内汇总似乎没法做,所以我们用一个特别的方式完成ISIS的“域内汇总”:

  • 在之前配置的基础上,IOU2和IOU3从原先的net 49.0001修改成net 49.0002;
  • 同时,IOU3和IOU4、IOU4和IOU5之间的链路从原先的level-1修改成level-2。
IOU2:

router isis 1
net 49.0002.0000.0000.0002.00
no net 49.0001.0000.0000.0002.00

do clear isis *

IOU3:

router isis 1
net 49.0002.0000.0000.0003.00
no net 49.0001.0000.0000.0003.00

is-type level-1-2

do clear isis *

IOU4:

router isis 1
is-type level-2-only

do clear isis *

IOU5:

router isis 1
is-type level-2-only

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
【实验】MPLS下,IGP使用路由汇总造成标签交换路径(LSP,Label Switched Path)中断的问题
【实验】MPLS下,IGP使用路由汇总造成标签交换路径(LSP,Label Switched Path)中断的问题

如上图所示,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

总结:

  1. 单播应用中IGP路由的FEC(标签的分配对象)是FIB的每一个目的前缀;
  2. 单播应用中BGP路由的FEC(标签的分配对象)是BGP路由的下一跳;
  3. 任何时候进入MPLS域内的数据包,如果该数据包的目的IP地址在边界设备上是以BGP路由的形式出现的,边界设备转发该数据包将是借其去往BGP路由的下一跳标签来发送(也就是说本地如何去往下一跳就如何发送该数据包)。

PS:FEC(标签的分配对象)是什么?请看《MPLS的FEC(转发等价类)

 

主页菌相信本文的描述已经非常详尽了,如果读到这里你还有疑问,欢迎在下方留言。如有错误也欢迎在下方留言指正。主页菌去睡觉了,好困,撑不住了。_(:з」∠)_

这篇文章对你有帮助吗?

相关文章

发表评论?

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