补充:172.17.4.1与172.17.5.1的通信过程
如果大家有仔细看文章的话,就知道172.17.4.1与172.17.5.1是没有通告到OSPF中的,它是被通告了BGP中,按正常的情况下,RT4与RT5都学到了对方发来的BGP路由,数据包封装是没问题的,但是数据包被发到OSPF区域时,里面没有这两个网段的路由,数据包肯定会被丢弃的。但是此博文中这个两个网段是可以通信的,为什么?原因就在配置BGP时,加了一条命令将下一跳指向自己,这个命令在BGP中大家应该很熟悉了。(RT4: neighbor 5.5.5.5 next-hop-self RT5: neighbor 4.4.4.4 next-hop-self)所以这两个网段的通信是没有问题的。
下面就来分析:
首先172.17.4.1要与172.17.5.1通信,就需要查询路由表,发现路由表的中的172.17.5.0/24的下一跳是5.5.5.5,然后再以5.5.5.5为目标网段查询路由表,为直链网段,查查询MPLS标签转发表,发现5.5.5.5应封装的标签为19,之后就进行MPLS标签转发了,在RT3做下一跳弹出,去掉了MPLS的标签,最后到达172.17.5.1,回来的过程与上面一样。
RT4的路由表:
O       5.5.5.5 [110/301] via 10.0.24.1, 00:42:02, Serial0/0
B       172.17.5.0 [200/0] via 5.5.5.5, 00:32:56
RT4的MPLS标签转发表:
RT4#show mpls for
Local  Outgoing    Prefix            Bytes tag  Outgoing   Next Hop    
tag    tag or VC   or Tunnel Id      switched   interface              
16     16          1.1.1.1/32        0          Se0/0      point2point  
17     Pop tag     2.2.2.2/32        0          Se0/0      point2point  
18     17          3.3.3.3/32        0          Se0/0      point2point  
19     19          5.5.5.5/32        0          Se0/0      point2point  
20     21          172.16.5.0/24     0          Se0/0      point2point  
21     Pop tag     10.0.12.0/30      0          Se0/0      point2point  
22     22          10.0.13.0/30      0          Se0/0      point2point  
23     Pop tag     10.0.23.0/30      0          Se0/0      point2point  
24     23          10.0.35.0/30      0          Se0/0      point2point  
抓包分析:
标签是19与MPLS标签转发表时的标签是一致的。但是从这里抓回来的包,没有MPLS的标签,这是为什么?因为做了倒数第二跳弹出了,要看标签到对面去抓。
总结一下:MPLS不为BGP的路由分为标签,只为IGP与直连路由分发标签。MPLS分发的标签只在本地具有意义,只要本路由器的分配的标签不重复就行。当路由器收到一条路由有多个MPLS标签时,选择最优的,就是根据本路由器的全局路由表中的路由条目中的下一跳发过来的,如果是负载的,MPLS标签也做负载。当收到标签中的路由,本地不存在时,则不进入MPLS标签转发表。
以上提到的内容具体细节见前面博文!