4. MPLS转发与标签操作实战
MPLS转发的核心并不在于“查路由表”,而在于对标签栈的精确操作。一台设备收到带标签的报文后,究竟是把新标签压入栈顶、把栈顶标签替换成另一个值,还是把栈顶标签弹出,取决于它在当前LSP(标签交换路径)中扮演的角色,以及报文的下一跳类型。理解Push、Swap、Pop三种基本动作,是读懂Comware转发流程和display命令输出的前提。
三种基本标签操作的定义与触发条件
先明确参照约定:本文所述“栈顶”指报文最外层、最先被设备读取的标签,位于标签栈的最上方;标签栈自栈顶向下依次为外层标签、内层标签。设备转发时总是先处理栈顶标签。
- Push(压入):在原有标签栈之上再压入一个或多个新标签,报文标签深度增加。典型场景是Ingress LSR(入站标签交换路由器)收到普通IP报文后,为其压入本LSP的出标签,使报文进入MPLS域;在MPLS VPN中,PE还会先压私网标签、再压公网标签,形成两层标签栈。
- Swap(交换):将栈顶标签替换为另一标签值,标签深度不变。这是Transit LSR(中转LSR)的典型动作,依据入标签查LFIB(标签转发信息库),得到出标签和出接口。
- Pop(弹出):移除栈顶标签,标签深度减一。当栈顶标签为隐式空标签(值为3)时,倒数第二跳设备执行Pop,使Egress LSR收到的是无标签IP报文;若为显式空标签(值为0),则Egress LSR自己弹出标签后再查IP路由。
需要特别区分:PHP(倒数第二跳弹出)是Pop的一种部署方式,由倒数第二跳设备完成弹出,目的是减轻Egress LSR的标签处理负担。而Swap只改变标签值,不改变栈深,这是它与Push、Pop最本质的区别。
标签栈处理与转发流程
Comware的MPLS转发流程可概括为:入接口收到报文后,根据报文是否带标签、标签值以及本地LFIB表项,决定执行Push、Swap还是Pop,然后从对应出接口发出。对于Ingress,先查FIB得到Tunnel ID,再查NHLFE(下一跳标签转发项)获得出标签和出接口,执行Push;对于Transit,直接以栈顶标签查LFIB,执行Swap;对于Egress或PHP场景,执行Pop后按IP路由转发。
下面这张图展示了同一报文在Ingress、Transit、倒数第二跳、Egress四类角色上的标签栈变化与操作对应关系,可对照理解“谁在什么时候动栈顶”。
Comware转发流程中的关键表项
在Comware上,MPLS转发依赖几张关键表:FIB表用于Ingress查找Tunnel ID;ILM(入标签映射)表把入标签映射到NHLFE;NHLFE表记录出标签、出接口、下一跳和操作类型(Push/Swap/Pop)。执行display mpls lsp可以看到LSP的建立状态,display mpls lsp verbose能看到入标签、出标签、出接口和下一跳;display fib用于确认IP路由与Tunnel ID的关联;display mpls ilm和display mpls nhlfe则直接反映标签操作类型。
下面给出一段示例配置与查看命令,用于在Comware设备上建立一条静态LSP并观察标签操作。示例参数为教学假设,实际部署需按现网规划替换。
# 在Ingress上配置静态LSP,出标签1600,下一跳10.0.0.2
system-view
mpls lsr-id 1.1.1.1
mpls
static-lsp ingress LSP1 destination 3.3.3.3 32 nexthop 10.0.0.2 out-label 1600
# 在Transit上配置Swap:入标签1600,出标签1700
static-lsp transit LSP1 incoming-interface GigabitEthernet1/0/1 in-label 1600 nexthop 10.0.0.3 out-label 1700
# 在倒数第二跳配置PHP:入标签1700,出标签3(隐式空)
static-lsp transit LSP1 incoming-interface GigabitEthernet1/0/1 in-label 1700 nexthop 10.0.0.4 out-label 3
# 查看LSP与标签操作
display mpls lsp
display mpls lsp verbose
display mpls ilm
display mpls nhlfe
执行display mpls lsp verbose时,重点看In/Out Label、Nexthop、Out Interface和State字段。若Ingress显示Out Label为1600、State为Up,说明Push动作已生效;Transit显示In Label 1600、Out Label 1700,说明Swap正常;倒数第二跳显示Out Label为3,说明已按PHP弹出。若某跳State为Down,通常要检查下一跳可达性、出接口状态或静态LSP配置是否与对端一致。
display命令分析要点与常见排障
分析display输出时,建议按“入标签—操作—出标签—出接口”的顺序核对。常见异常有三类:一是标签不匹配,表现为Transit上查不到对应ILM表项,报文被丢弃,需核对上下游in-label/out-label是否首尾相接;二是PHP未生效,Egress收到带标签报文却无对应ILM,需检查倒数第二跳是否配置out-label 3;三是出接口Down导致LSP State为Down,需先恢复链路再确认标签转发。
把三种操作与转发角色对应起来记忆:Ingress做Push,Transit做Swap,倒数第二跳做Pop,Egress做IP转发。再结合Comware的ILM、NHLFE表和display命令逐跳核对,就能把“标签栈怎么变、报文怎么走”这条链路完整串起来。