MPLS(Multi-Protocol Label Swithing,多协议标签交换)
MPLS位于TCP/IP协议栈中的数据链路层和网络层之间,可以向网络层提供服务,也称2.5层。
1、为什么说MPLS标签转发表比路由表查询更快速?
如果在大型的网络中,路由表的条目可达十多万条目。
路由表查询路由的时候都是按照从上往下匹配路由条目,查询的效率随着路由表的条目增加而效率降低。
而MPLS中的标签转发表,优势在于多条路由条目可能会共用一个标签进行转发。
同时以标签方式作为匹配方式,也能在一定程度上提高匹配速度。
2、
MPLS转发动作包括标签压入(Push)、标签交换(Swap)和标签弹出(Pop),它们是标签转发的基本动作。
在最后一跳节点,标签已经没有使用价值。
这种情况下,可以利用倒数第二跳弹出特性PHP(Penultimate Hop Popping),在倒数第二跳节点处将标签弹出,减少最后一跳的负担。最后一跳节点直接进行IP转发或者下一层标签转发。
默认情况下,设备支持PHP特性,支持PHP的Egress节点分配给倒数第二跳节点的标签值为3。
栈顶,把栈理解成一座金字塔,最顶端即为栈顶,标签亦是如此封装。
每次压入标签,即向栈顶添加一层标签;
标签弹出即将栈顶的标签拿掉,而不是拿多字塔中间的标签;
交换则是替换,同样是替换栈顶的标签。
# 配置AR1
[AR1]int loopback0
[AR1-LoopBack0]ip add 1.1.1.1 32
[AR1-LoopBack0]quit
[AR1]mpls lsr 1.1.1.1
# 配置AR2
[AR2]int loopback0
[AR2-LoopBack0]ip add 2.2.2.2 32
[AR2-LoopBack0]quit
[AR2]mpls lsr 2.2.2.2
# 配置AR1
[AR1]mpls
[AR1-mpls]int g0/0/0
[AR1-GigabitEthernet0/0/0]ip add 10.1.0.1 24
[AR1-GigabitEthernet0/0/0]mpls
# 配置AR2
[AR2]mpls
[AR2-mpls]int g0/0/0
[AR2-GigabitEthernet0/0/0]ip add 10.1.0.2 24
[AR2-GigabitEthernet0/0/0]mpls
[AR1]dis mpls interface
Interface Status TE Attr LSP Count CRLSP Count Effective MTU
GE0/0/0 Up Dis 0 0 1500
[AR2]dis mpls interface
Interface Status TE Attr LSP Count CRLSP Count Effective MTU
GE0/0/0 Up Dis 0 0 1500
[AR1]dis mpls lsp
[AR2]dis mpls lsp
在进行配置静态标签分配前,先了解数据是怎么以MPLS方式进行数据转发。
1、入站LSR收到一个数据包,检查其DIP,如果是该DIP在FIB表中,Tunnel ID非0x0,则在NHLFE中查询对应的Tunnel ID表项决定该数据包需要打上的标签与后继转发操作。
2、中转LSR收到带有标签的MPLS数据包之后,基于接收到的MPLS标签的接口与其标签,查询本地的**ILM表( Incoming Label Map 入标签映射表)**得出其对应的Tunnel ID表项,然后到NHLFE中查看该Tunnel ID对应的信息,决定该数据包的后继转发操作。
3、经过多个中转LSR最终将MPLS发送到出站LSR,出站LSR对接收到的指定MPLS标签的路由进行剥离操作,然后进行正常的路由转发操作。
4、数据转发全流程图
static-lsp ingrees 名称 destination 目的路由 掩码 nexthop 下一跳 out-label 出标签
static-lsp transit 名称 incoming-interface 入接口 in-label 入标签 nexthop 下一跳 out-label 出标签
static-lsp egress 名称 incoming-interface 入接口 in-label 入标签
需求:
1、省略设备IP地址、OSPF、BGP配置,自由发挥能实现互相学习到对方业务路由即可。
注意两个坑位:
1、EBGP使用环回口建立时,需要配置EBGP最大跳数,以及指定连接接口。以AR1为例:
peer 3.3.3.3 as-number 200
peer 3.3.3.3 ebgp-max-hop 10
peer 3.3.3.3 connect-interface LoopBack02、EBGP路由传递给IBGP时,下一跳不会改变需要进行调整。以AR1为例:
AR4收到AR1传来的EBGP路由,下一跳为3.3.3.3,由于下一跳未知,故AR4不会将路由加入路由表。
所以需要在AR1上配置:peer 10.1.14.4 next-hop-local
配置完成之后, 检查各自设备的路由情况,能够学习到对方业务路由为正确。
# AR4学习到AR5业务路由
[AR4]display ip routing-table protocol bgp
Destination/Mask Proto Pre Cost Flags NextHop Interface
192.168.50.0/24 IBGP 255 0 RD 10.1.14.1 GigabitEthernet0/0/0
# AR5学习到AR4业务路由
[AR5]display ip routing-table protocol bgp
Destination/Mask Proto Pre Cost Flags NextHop Interface
192.168.40.0/24 IBGP 255 0 RD 10.1.35.3 GigabitEthernet0/0/0
2、解决AR2路由黑洞问题。
简写:
由于AR2缺少AR4、AR5的业务路由条目,
故当AR4访问AR5业务路由时,AR2不知道AR5业务路由如何转发。
因此目前情况下无法实现业务互通。
MPLS标签除了能够实现标签数据转发效率加快,还能够解决路由黑洞的问题。
无法互通的原因是AR2在转发AR1/AR3发来的数据报文时需要检查路由表判断报文中的目的路由下一步该如何走。
但AR2并没有AR4、AR5路由,故发来的数据报文将在AR2上丢弃。
只要解决AR1到AR3之间畅通无阻即可实现互通。MPLS标签转发可以实现!
3、配置AR1、AR2、AR3的静态MPLS标签分配。
# 先配置MPLS功能
[AR1]mpls lsr 1.1.1.1
[AR1]mpls
[AR1-mpls]int g0/0/1
[AR1-GigabitEthernet0/0/1]mpls
[AR1-GigabitEthernet0/0/1]
[AR2]mpls lsr 2.2.2.2
[AR2]mpls
[AR2-mpls]int g0/0/0
[AR2-GigabitEthernet0/0/0]mpls
[AR2-GigabitEthernet0/0/0]int g0/0/1
[AR2-GigabitEthernet0/0/1]mpls
[AR3]mpls lsr 3.3.3.3
[AR3]mpls
[AR3-mpls]int g0/0/1
[AR3-GigabitEthernet0/0/1]mpls
标签空间,指标签的取值范围。标签空间划分如下:
故目前使用16~1024内的标签进行静态分配,以下是规划图。
由于标签都是本地有效,故不需要担心标签分配冲突的问题。
# 配置Ingress设备(流量双向,故AR1、AR3均为Ingress)
# AR1--》AR3,打上50标签
[AR1]static-lsp ingress 3.3.3.3 destination 3.3.3.3 32 nexthop 10.1.12.2 out-label 33
# AR3--》AR1,的上40标签
[AR3]static-lsp ingress 1.1.1.1 destination 1.1.1.1 32 nexthop 10.1.23.2 out-label 111
# 配置Transit设备(只有AR2)
# 从AR1去往AR3业务路由的标签交换配置
[AR2]static-lsp transit 333 incoming-interface GigabitEthernet0/0/0 in-label 33 nexthop 10.1.23.3 out-label 33
# 从AR3去往AR1业务路由的标签交换配置
[AR2]static-lsp transit 111 incoming-interface GigabitEthernet0/0/1 in-label 111 nexthop 10.1.12.1 out-label 111
# 配置Egress设备(流量双向,故AR1、AR3均为Egress)
# 剥离AR3发来的标签路由
[AR1]static-lsp egress 111-e incoming-interface GigabitEthernet0/0/1 in-label 111
# 剥离AR1发来的标签路由
[AR3]static-lsp egress 33-e incoming-interface GigabitEthernet0/0/1 in-label 33
1、查看MPLS LSP标签信息。
[AR1]display mpls static-lsp
TOTAL : 2 STATIC LSP(S)
UP : 2 STATIC LSP(S)
DOWN : 0 STATIC LSP(S)
Name FEC I/O Label I/O If Status
3.3.3.3 3.3.3.3/32 NULL/33 -/GE0/0/1 Up
111-e -/- 111/NULL GE0/0/1/- Up
[AR2]dis mpls static-lsp
TOTAL : 2 STATIC LSP(S)
UP : 2 STATIC LSP(S)
DOWN : 0 STATIC LSP(S)
Name FEC I/O Label I/O If Status
333 -/- 33/33 GE0/0/0/GE0/0/1 Up
111 -/- 111/111 GE0/0/1/GE0/0/0 Up
[AR3]dis mpls static-lsp
TOTAL : 2 STATIC LSP(S)
UP : 2 STATIC LSP(S)
DOWN : 0 STATIC LSP(S)
Name FEC I/O Label I/O If Status
1.1.1.1 1.1.1.1/32 NULL/111 -/GE0/0/1 Up
33-e -/- 33/NULL GE0/0/1/- Up
2、查看FIB表项
[AR1]display fib
Destination/Mask Nexthop Flag TimeStamp Interface TunnelID
192.168.50.0/24 10.1.12.2 DGU t[5605] GE0/0/1 0x0
192.168.40.0/24 10.1.14.4 DGU t[5605] GE0/0/0 0x0
[AR3]display fib
Destination/Mask Nexthop Flag TimeStamp Interface TunnelID
192.168.40.0/24 10.1.23.2 DGU t[5632] GE0/0/1 0x0
192.168.50.0/24 10.1.35.5 DGU t[5632] GE0/0/0 0x0
此时AR1去往AR3的业务路由,其Tunnel ID为0x0,表示不通过MPLS标签方式转发。
3、Tunnel ID为0x0是什么原因?
因为缺省情况下,非标签公网BGP路由、静态路由只能迭代到出接口和下一跳,不会迭代到隧道。
而目前的业务路由就属于没有标签的BGP路由。
此时需要添加一条命令:route recursive-lookup tunnel
,控制路由优先通过MPLS隧道转发。
[AR1]route recursive-lookup tunnel
[AR3]route recursive-lookup tunnel
此时再查看FIB表就会发现变化
[AR1]display fib
192.168.50.0/24 10.1.12.2 DGU t[5920] GE0/0/1 0x3
[AR3]display fib
192.168.40.0/24 10.1.23.2 DGU t[5928] GE0/0/1 0x2
4、检测连通性
[AR4]ping -a 192.168.40.254 192.168.50.254
PING 192.168.50.254: 56 data bytes, press CTRL_C to break
Reply from 192.168.50.254: bytes=56 Sequence=1 ttl=252 time=40 ms
Reply from 192.168.50.254: bytes=56 Sequence=2 ttl=252 time=50 ms
Reply from 192.168.50.254: bytes=56 Sequence=3 ttl=252 time=50 ms
[AR5]ping -a 192.168.50.254 192.168.40.254
PING 192.168.40.254: 56 data bytes, press CTRL_C to break
Reply from 192.168.40.254: bytes=56 Sequence=1 ttl=252 time=60 ms
Reply from 192.168.40.254: bytes=56 Sequence=2 ttl=252 time=40 ms
Reply from 192.168.40.254: bytes=56 Sequence=3 ttl=252 time=50 ms
为了方便进行MPLS静态标签分配排错定位故障位置,需要掌握相应的配置查看命令。
主要排错思路以MPLS标签转发方式为基础。
1、查看FIB表
2、查看NHLFE下一跳标签转发表(ENSP无调试命令)
由于AR2240设备的网页无权限观看,故只能参数AR300设备命令
display mpls nhlfe - display mpls nhlfe - AR300, AR700 V300R023 诊断和调试命令参考 - 华为 (huawei.com)
# 进入诊断视图
[Huawei] diagnose
[Huawei-diagnose] display mpls nhlfe 隧道值(5)
出接口 隧道值 操作 下一跳 深度 标签号
OUTINTERFACE TUNNELID OPER NEXTHOP DEEP STACK
------------------------------------------------------------------------
Vlanif210 0x5 PUSH 178.10.20.1 1 3
Tunnel ID为0x1,其隧道值为1
Tunnel ID为0x5,其隧道值为5
3、查看IML入标签映射表(ENSP无调试命令)
display mpls ilm - display mpls nhlfe - display mpls nhlfe - AR300, AR700 V300R023 诊断和调试命令参考 - 华为 (huawei.com)
# 进入诊断视图
[Huawei] diagnose
[Huawei-diagnose] display mpls ilm 入标签号
ILM[1]:
LSP type : LDP
Label operation : SWAP
In interface : GigabitEthernet1/0/10
In Label : 1025
Swap label : 1026
VPN index : 0
6PE ilm flag : IPv4
Is Outgoing tunnel id : no
Load-balance count : 1
Tunnel id[0] : 0x800010df
Out interface[0] : GigabitEthernet2/0/11
Nexthop[0] : 198.3.4.5
.....省略一堆
4、查看总的标签信息
display mpls lsp
-------------------------------------------------------------------------------
LSP Information: STATIC LSP
-------------------------------------------------------------------------------
FEC In/Out Label In/Out IF Vrf Name
3.3.3.3/32 NULL/33 -/GE0/0/1
-/- 111/NULL GE0/0/1/-