MPLS+BGP+静态引入CE路由的双层标签详解

文章目录

参考阅读

实验详解手工指定MPLS的LSP(Huawei设备)
MPLS+BGP产生的数据层面的路由黑洞详解

双层标签含义

MPLS+BGP+静态引入CE路由的双层标签详解

对于MPLS+BGP的组网中,需要将各个CE间的路由打通,这样在公网的内部就回出现两层的label;

  • 由公网内部的mpls ldp分配的 对于公网路由的label
  • 由MP-BGP的vpnv4分配的 对于私网路由的label

实验拓扑

MPLS+BGP+静态引入CE路由的双层标签详解
说明:
1、R2 R4之间建立BGP-vpnv4的邻居,R3不运行BGP进程
2、R2、R3、R4组成一个MPLS-domain
3、R1、R5分别作为独立的客户侧,其路由网段为172.16.1.0/24 172.16.5.0/24
4、CE与PE间采用静态引入的方式打通

配置思路

路由配置
[R1]ip route-static 0.0.0.0 0.0.0.0 172.16.12.2
[R2]ip route-static vpn-instance a 172.16.1.0 255.255.255.0 
[R4]ip route-static vpn-instance b 172.16.5.0 255.255.255.0 
[R5]ip route-static 0.0.0.0 0.0.0.0 172.16.45.4

MPLS配置就是全局、接口使能mpls、mpls ldp即可 参考阅读的实验由配置上说明

vpn-instance配置
[R2-vpn-instance-a]di th
[V200R003C00]
#
ip vpn-instance a
 ipv4-family
  route-distinguisher 12:12
  vpn-target 15:15 export-extcommunity
  vpn-target 15:15 import-extcommunity
#
return
[R4-vpn-instance-b]di th
[V200R003C00]
#
ip vpn-instance b
 ipv4-family
  route-distinguisher 45:45
  vpn-target 15:15 export-extcommunity
  vpn-target 15:15 import-extcommunity
#
return


BGP配置
[R2-bgp]di th
[V200R003C00]
#
bgp 234
 undo default ipv4-unicast
 peer 10.1.4.4 as-number 234 
 peer 10.1.4.4 connect-interface LoopBack0
 #
 ipv4-family unicast
  undo synchronization
  undo peer 10.1.4.4 enable
 # 
 ipv4-family vpnv4
  policy vpn-target
  peer 10.1.4.4 enable
 #
 ipv4-family vpn-instance a 
  import-route direct
  import-route static
#
return

[R4-bgp]di th
[V200R003C00]
#
bgp 234
 peer 10.1.2.2 as-number 234 
 peer 10.1.2.2 connect-interface LoopBack0
 #
 ipv4-family unicast
  undo synchronization
  undo peer 10.1.2.2 enable
 # 
 ipv4-family vpnv4
  policy vpn-target
  peer 10.1.2.2 enable
 #
 ipv4-family vpn-instance b 
  import-route direct
  import-route static
#
return

检查

BGP-vpnv4邻居

MPLS+BGP+静态引入CE路由的双层标签详解

MPLS LDP邻居

MPLS+BGP+静态引入CE路由的双层标签详解
R1的私网路由pingR5在R3的入接口处(S4/0/0)抓包,可以看到是双层的label
MPLS+BGP+静态引入CE路由的双层标签详解

控制+数据层面

下面就对控制和数据层面分别分析路由和label的情况

控制平面

1、私网路由,私网标签
R4将vpn-instance b中的static引入到bgp中
MPLS+BGP+静态引入CE路由的双层标签详解

BGP将RD+ipv4 组成一个96bit的vpnv4路由,且带上export的vpn-target45:45 BGP-vpnv4为这条私网路由分配的私网label
MPLS+BGP+静态引入CE路由的双层标签详解

这条私网路由通过vpnv4的邻居关系传递到R2,R2就收到了这条私网路由,且label为1026,通过10.1.4.4这个vpnv4邻居发来的
MPLS+BGP+静态引入CE路由的双层标签详解

至此,R2收到这个私网路由172.16.5.0/24 下一跳是10.1.4.4 label为1026 是由R4 的bgp vpnv4产生
2、公网路由,公网标签
R4给作为egress给自己的in打上3的label,即告诉R3要进行PHP
MPLS+BGP+静态引入CE路由的双层标签详解

R3打上1025传递给R2
MPLS+BGP+静态引入CE路由的双层标签详解

R2就收到了这个1025的label
MPLS+BGP+静态引入CE路由的双层标签详解

至此,R2收到这个公网路由10.1.4.4/32 下一跳是10.1.23.3 label为1025 是由R3的mpls ldp分配

数据层面

1、R1查询本地FIB,找到下一跳给到R2
MPLS+BGP+静态引入CE路由的双层标签详解

2、R2查询vpn-instance a的FIB,可以看到这IP包要push一个1026的label,变成标签包,这里的BGPNextHop意思是这个label是通过控制平面的BGP-vpnv4传递对于私网传递过来的label
MPLS+BGP+静态引入CE路由的双层标签详解

此时数据包进入到了MPLS-domain中(可以理解为进入公网的范畴),要经过BGP来进行传递,这时就会再次push一个公网的标签,在R2上查看LFIB可以看到对于10.1.4.4有两种操作,分别是Ingress、Transit;看哪个取决于Token,上一步中的tunnel-id对应这里的Fec和Token;继续查询tunnel-id 0x3可以看出对于公网10.1.4.4就要封装1025这个label,至此这个数据包就有了两层label,且下一跳是10.1.23.3 即R3
MPLS+BGP+静态引入CE路由的双层标签详解

此时这个数据包就变成了

Sip 172.16.1.1 dip 172.16.5.5 | 私网label 1026 |公网label 1025 | ppp

如下是对R3的入接口进行抓包(serial 4/0/0)
MPLS+BGP+静态引入CE路由的双层标签详解

此时数据包来到R3后,R3收到一个label的包,肯定查询LFIB,R3对于公网的label做了一个POP操作,此LFIB中存在出接口与下一条,将label包扔给R4
MPLS+BGP+静态引入CE路由的双层标签详解

MPLS+BGP+静态引入CE路由的双层标签详解

如下是对R3的出接口进行抓包,可以看到公网的label被POP了,只留下了私网的label
MPLS+BGP+静态引入CE路由的双层标签详解

数据包来到R4后,查询in-label为1026的LFIB,做的是POP操作,但是没有出接口与下一跳,就要继续查询FIB,注意查找的是vpn-instance b(根据的是VrfIndex)

MPLS+BGP+静态引入CE路由的双层标签详解
MPLS+BGP+静态引入CE路由的双层标签详解

然后数据包扔给R5,路由就通了

总结

  • 对于数据包来到路由器上首先要从宏观上分析控制层面的表项信息是如何学习生成的
  • 查询什么表取决于这个数据是IP还是label
  • 对于双层标签要明确每层是如何封装且数据包转发时,什么时候做POP操作

后面还会继续更新BGP+MPLS+OSPF的CE联动


上一篇:Git 基础(2)| 如何修改上一次的提交?


下一篇:【技术揭秘】任务型语音对话中的纠错系统