首页/网络/BGP 与广域网速查/标签栈与 push/swap/pop 操作
MPLS 与专线70 条

标签栈与 push/swap/pop 操作

标签头 32 位:20 位标签值、3 位 EXP、1 位 S(栈底)、8 位 TTL;转发操作有 push(压栈)、swap(换标)、pop(弹栈),由 LFIB 查表决定。

BGP 与广域网速查网络更新于 2026-10-13

标签栈与转发动作

MPLS 报文在二层头与 IP 头之间插入一个或多个 32 位标签项。单个标签项由 20 位标签值、3 位 EXP(现多称 TC,用于 QoS)、1 位 S(栈底标志)、8 位 TTL 组成。节点查 LFIB(标签转发表)决定对栈顶标签做 push、swap 还是 pop,整个转发过程只看标签,不再逐跳查 IP 路由表。

基本信息

标签长度每项 32 位:20 位标签值 + 3 位 EXP + 1 位 S + 8 位 TTL
S 位含义1 表示该项是栈底,紧跟在后面的就是 IP 报文
TTL 处理默认逐跳递减,与 IP TTL 行为一致,可用配置改成统一值
适用平台Cisco IOS/IOS-XE、华为 VRP、Juniper 等支持 MPLS 的设备
查询依据LFIB(入标签 + 出接口决定出标签与下一跳)

三种标签操作

操作发生位置说明
PushLER(入标签边缘路由器)或隧道入口压入一层或多层标签,进入 LSP
SwapLSR(核心转发节点)替换栈顶标签值后转发,标签值逐跳变化
Pop倒数第二跳或出口 LER弹出栈顶标签;PHP 场景由倒数第二跳完成弹出

常用保留标签值

标签值名称用途
0IPv4 Explicit NULL出标签为 0 时对端显式弹出后按 IPv4 转发,保留 EXP 信息
2IPv6 Explicit NULLIPv6 报文对应的显式空标签
3Implicit NULL本机通告该标签表示上一跳可直接弹出(PHP 的基础)

查转发行为

查转发行为
show mpls forwarding-table
# 典型列:Local(入标签) / Outgoing(出标签) / Prefix or Tunnel Id
#        Outgoing interface / Next Hop
# 16     Pop Label  10.1.1.0/24   Gi0/1   10.0.0.2   # 本机为倒数第二跳
# 17     18         10.2.2.0/24   Gi0/1   10.0.0.2   # 核心节点做 swap
#
show mpls forwarding-table 10.1.1.0    # 按前缀精查
show mpls interfaces                   # 确认接口是否启用 MPLS
!
# 华为:display mpls lsp / display mpls lsp verbose

抓包看标签栈

抓包看标签栈
# Wireshark 过滤器:只看带 MPLS 头的帧
mpls
# 展开 MPLS 段可看到逐层标签值、EXP/TC、S 标志与 TTL
# 普通单层 LSP 只有一个标签项,S 位应为 1
# VPN 场景通常外层为隧道标签、内层为 VPN 标签
「标签 3(Implicit NULL)」出现在邻居的通告里是正常现象,表示该邻居希望上游直接弹出标签;如果某条 LSP 全程都是显式标签,通常是 PHP 未启用或设备平台行为不同,先对照两端转发项再判断。

易错点

  • 把 S 位算进标签值:解析标签栈时 S 位是独立标志位,误当成值的一部分会导致标签值判断整体出错
  • 多标签场景只关注栈顶:VPN 业务中外层隧道标签与内层 VPN 标签由不同环节处理,只看一层会误判问题归属
  • 排查时只看 IP 路由表:标签转发依据 LFIB,IP 表可达不代表 LSP 正常,两套表要分别核对
  • 忽略 MTU 与标签开销:压入标签会让报文变长,隧道场景未调整 MTU/MSS 时表现为大包丢失、小包正常

数据来源与参考

  • RFC 3032: MPLS Label Stack Encoding
  • Cisco: show mpls forwarding-table
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌