MPLS 协议深度解析

从标签结构、转发原理到 VPN 部署和 Traffic Engineering,系统性理解 Multi-Protocol Label Switching 的每一个核心机制。

1. 什么是 MPLS

MPLS(Multi-Protocol Label Switching,多协议标签交换)是一种运行在 OSI 第 2 层与第 3 层之间 的数据转发技术。它使用 定长的短标签(Label)替代传统的 IP 最长前缀匹配(Longest Prefix Match)来做出转发决策,从而大幅提升转发效率与灵活性。

1.1 为什么需要 MPLS?

传统 IP 转发存在几个核心痛点:

痛点 说明
逐跳最长前缀匹配 — 慢 每一跳路由器都需要对 IP 目的地址进行最长前缀匹配(查 FIB),在大路由表场景下耗时高。而标签匹配是精确匹配 O(1) 查表,速度极快。
IP 转发只看目的地址 — 僵硬 IP 路由只能根据目的地址选择路径,无法实现基于流量工程的灵活路径调度。MPLS 可以在入口处就确定整条 LSP(显式路径)。
VPN 隔离 — 难 纯 IP 网络难以在共享骨干上为不同客户提供独立的地址空间和路由隔离。MPLS 的标签栈天然提供了 VPN 的隧道隔离能力。

1.2 MPLS 在协议栈中的位置

1
2
3
4
5
6
7
8
9
10
11
12
13
传统 IP 转发:
┌─────────────┬──────────────┬──────────────┬──────────────┐
│ L2 Header │ IP Header │ L4 Header │ Payload │
│ Ethernet │ 20B │ TCP/UDP │ Data │
└─────────────┴──────────────┴──────────────┴──────────────┘

MPLS 转发(L2.5):
┌─────────────┬──────────────┬──────────────┬──────────────┬──────────────┐
│ L2 Header │ MPLS Label │ IP Header │ L4 Header │ Payload │
│ Ethernet │ 4B × N │ 20B │ TCP/UDP │ Data │
└─────────────┴──────────────┴──────────────┴──────────────┴──────────────┘

插入在 L2 和 L3 之间 → 因此称为 2.5 层协议

MPLS 不替换 IP 协议,而是在以太网帧头(L2)和 IP 头(L3)之间 插入一个 4 字节的标签头。MPLS 的”多协议”特性意味着它不仅可承载 IP,还能承载 ATM、帧中继等任何三层协议。

帧类型标识: 以太网帧中,MPLS 的 EtherType 为 0x8847(单播)和 0x8848(组播)。

2. Label(标签)结构详解

2.1 32-bit MPLS 标签头

每个 MPLS 标签固定为32 位(4 字节),由以下四个字段组成:

1
2
3
4
5
6
MPLS Label Header · 32 bits
┌────────────────────────────────┬──────────┬────┬──────────────────┐
│ Label │ TC/EXP │ S │ TTL │
│ 20 bits │ 3 bits │1bit│ 8 bits │
└────────────────────────────────┴──────────┴────┴──────────────────┘
← 0 31 →

各字段含义:

字段 长度 含义 取值范围
Label 20 bit 标签值,是转发的唯一标识。LSR 根据此值查 LFIB 进行转发 0 – 1,048,575
TC (Traffic Class) 3 bit 原名 EXP。用于 QoS 优先级映射,类似 IP DSCP 0 – 7
S (Bottom of Stack) 1 bit 栈底标志。S=1 表示此标签是标签栈的 最底层(下一个头就是 IP 或其他 L3 PDU) 0 或 1
TTL 8 bit 生存时间,机制与 IP TTL 完全相同,逐跳递减,防环 0 – 255

2.2 需要牢记的保留标签

标签值 名称 用途
0 IPv4 Explicit NULL 告诉出站 LER 不要再查 IP,直接弹出标签后按照 QoS 字段处理
1 Router Alert 类似 IP Router Alert,要求每跳 LSR 都”看一下”再转发
2 IPv6 Explicit NULL 同 Label 0,但用于 IPv6
3 Implicit NULL 由 PHP(倒数第二跳弹出)使用。出站 LER 向上游通告此标签,上游会在倒数第二跳弹出整个标签
4–15 保留 IETF 保留,不可用于常规分配
16–1023 静态分配范围 通常保留给静态 LSP
1024–1048575 动态分配范围 LDP/RSVP-TE 动态分配使用

2.3 标签栈(Label Stack)

MPLS 允许在同一个包中 嵌套多个标签,形成一个”栈”。位于栈顶的标签决定当前的转发行为。只有最底部的标签的 S 位才为 1。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
标签栈结构 · 可以嵌套 N 层

┌──────────────────────────────────────────────┐
│ Ethernet Header │ ← L2 帧头,EtherType = 0x8847
├──────────────────────────────────────────────┤
│ Outer Label (Transport Label) │ ← S=0,不是栈底
├──────────────────────────────────────────────┤
│ Inner Label (VPN Label) │ ← S=1,栈底标志
├──────────────────────────────────────────────┤
│ IP Header │ ← 原始 IP 报文
├──────────────────────────────────────────────┤
│ TCP / UDP │ ← 传输层
├──────────────────────────────────────────────┤
│ Payload │ ← 应用数据
└──────────────────────────────────────────────┘

工作中的关键点: 在运营商 L3VPN 环境中,你会始终看到两层标签 — 外层(Transport Label)用于穿越骨干网到达远端 PE,内层(VPN Label)用于在远端 PE 上区分不同的 VPN 实例(VRF)。

L2VPN 用 1 层标签 / L3VPN 用 2 层标签(Transport + VPN)

3. 核心概念

3.1 LSR、LER 与 LSP

1
2
3
4
5
6
MPLS 网络拓扑 · 核心角色

[Site-A] [PE-1] [P-1] [P-2] [PE-2] [Site-B]
CE ←→ Ingress ←→ Core ←→ Core ←→ Egress ←→ CE
🖥️ LER 🔷 LSR 🔶 LSR 🔶 LER 🔷 🖥️
BGP/OSPF LDP Label LDP Label LDP Label BGP/OSPF
角色 全称 功能
LSR Label Switch Router 任何支持 MPLS 的路由器。能够根据标签转发数据包。
LER Label Edge Router 位于 MPLS 域边界的 LSR。Ingress LER 负责给 IP 包压入(Push)标签;Egress LER 负责弹出(Pop)标签恢复 IP 包。
LSP Label Switched Path 从 Ingress LER 到 Egress LER 的一条 单向 标签交换路径。数据包沿着 LSP 逐跳标签交换转发。
P Router Provider Router MPLS 骨干网内部的 纯转发 路由器,只做标签交换,不连接任何客户。
PE Router Provider Edge Router 连接客户的边界路由器。负责 VPN 路由学习、标签压入/弹出、VRF 管理。
CE Router Customer Edge Router 客户侧路由器,与 PE 交互路由协议(如 BGP/OSPF/静态),不需要感知 MPLS。

3.2 FEC(Forwarding Equivalence Class)转发等价类

FEC 是 MPLS 中最核心的概念之一:一组以相同方式被转发的 IP 分组 共享同一个 FEC。

在实际网络中,一个 FEC 通常对应以下之一:

  • 一个 IP 目的前缀(如 10.1.1.0/24)— 最常见的分类方式
  • 一个 VPN 路由(RD + 前缀)
  • 一条 RSVP-TE 隧道的所有流量
  • 特定的源-目的地址对(用于流量工程)

⚠️ 理解要点: FEC 只在 Ingress LER 上被确定。一旦分类完成、分配了标签,中间 LSR 只看标签转发,不再关心 IP 头。这是 MPLS 与传统 IP 转发的根本区别。

3.3 LFIB(Label Forwarding Information Base)

LFIB 是 LSR 上的标签转发表,其核心表项格式为:

1
2
3
4
5
6
7
LFIB 表项结构:

In-Label → Out-Label + Out-Interface + Next-Hop
───────── ────────── ─────────────── ────────
100 200 Gi0/0 192.168.1.2 ← Swap 操作
200 pop Gi0/1 10.0.0.1 ← Pop 操作 (PHP)
imp-null 300 Gi0/2 172.16.0.1 ← Push 操作 (Ingress)

对比 IP FIB: IP FIB 做最长前缀匹配 → 多次比较;LFIB 用 In-Label 做 精确匹配 → 一次查表 → 硬件友好,转发性能极高。

4. 标签转发流程

4.1 三种标签操作

操作 执行位置 说明
Push(压入) Ingress LER 在 IP 包前插入一个或多个 MPLS 标签。根据 FEC 分类结果选择标签值。
Swap(交换) 中间 LSR(P Router) 用新的标签替换栈顶标签。每跳都进行:查 In-Label → 替换为 Out-Label。
Pop(弹出) Egress LER(或 PHP) 移除栈顶标签。若还有内层标签,继续按栈顶标签转发。
Swap + Push ASBR / Inter-AS 先弹出外层标签,再压入新的标签栈。跨域 MPLS VPN 场景。
1
2
3
4
5
6
7
8
9
10
Push:           Swap:             Pop:
┌─────────┐ ┌─────────┐
┌─────────┐ │旧 Label │ │旧 Label │ → 弹出
│ Label │ ├─────────┤ ├─────────┤
│ New │ │新 Label │ │ IP 包 │ → 转发
├─────────┤ ├─────────┤ ├─────────┤
│ IP 包 │ │ IP 包 │ │ Payload │
├─────────┤ ├─────────┤ └─────────┘
│ Payload │ │ Payload │
└─────────┘ └─────────┘

4.2 PHP(Penultimate Hop Popping)倒数第二跳弹出

PHP 是 MPLS 的一项重要优化。核心思想:不要让 Egress LER 做两次查找(先查标签表弹出标签,再查 IP FIB 转发 IP 包)。

PHP 工作机制:

  1. Egress LER 通告 Implicit NULL(Label 3) Egress LER 通过 LDP 向上游邻居通告:针对某 FEC,我的标签是 Implicit NULL (3)

  2. 倒数第二跳 LSR 收到后理解含义 上游(倒数第二跳)LSR 看到 Label 3,知道 Egress LER 不需要标签了。因此在转发数据时,直接弹出整个 MPLS 标签(而不是用 3 替换),将裸 IP 包发给 Egress LER。

  3. Egress LER 直接查 IP FIB Egress LER 收到的是纯 IP 包,直接查 IP FIB 转发,省去了一次标签查表

1
2
3
4
5
6
7
                  倒数第二跳 P-2              Egress PE-2
┌──────────┐ ┌──────────┐
┌──────────┐ │ │ │ │
│ L:200 │ ──→ │ Pop L:200│ ──→ IP包 ──→│ 查 IP FIB│ ──→ 转发
│ IP 包 │ │ (PHP) │ (无标签) │ 直接转发 │
└──────────┘ └──────────┘ └──────────┘
标签包 弹出外层标签 省去标签查表

⚠️ 实际场景注意: 如果你需要在 Egress LER 上根据 MPLS TC/EXP 字段做 QoS 处理,则不应使用 PHP,而应使用 Explicit NULL(Label 0)。Explicit NULL 会保留标签头到达 Egress LER,这样 Egress LER 可以读取 TC 位再弹出标签。

4.3 完整转发流程示例

假设 PC-A(10.1.1.10)发送 IP 包到 PC-B(10.2.2.20),穿越一个 MPLS 网络:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
完整 MPLS 转发流程 · Push → Swap → Swap → Pop

PC-A PE-1 P-1 P-2 PE-2 PC-B
CE Ingress LER Core LSR 倒数第二跳 Egress LER CE
┌─────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────┐
│ │ │ │ │ │ │ │ │ │ │ │
│10.1 │──→│Push │──→│Swap │──→│Pop │──→│Pop VPN │──→│10.2 │
│.1.10│ │L:100 │ │L:100→200│ │L:200 │ │L:500 │ │.2.20│
│ │ │Push L:500│ │(VPN) │ │(PHP) │ │查VRF │ │ │
└─────┘ └─────────┘ └─────────┘ └─────────┘ └─────────┘ └─────┘
│ │ │ │ │ │
IP包 [L:100] [L:200] [L:500] IP包 IP包
[L:500] [L:500] [IP包] (无外层标签)
[IP包] [IP包]

逐步说明:

步骤 设备 操作 标签状态
PC-A → PE-1 PC-A 发送普通 IP 包(Dst: 10.2.2.20) 无标签
PE-1(Ingress LER) 查 VRF-A 路由表,匹配 MP-BGP 学来的路由。Push 两层标签:外层 L:100(Transport,LDP 分配)+ 内层 L:500(VPN Label,MP-BGP 分配) [L:100][L:500][IP]
P-1(Core LSR) 查 LFIB:In-Label=100 → Swap 为 Out-Label=200 [L:200][L:500][IP]
P-2(倒数第二跳) 查 LFIB:In-Label=200 → Pop(PHP,Implicit NULL) [L:500][IP]
PE-2(Egress LER) 查 LFIB:In-Label=500 → Pop VPN Label,查 VRF-A 出接口转发 [IP]
PE-2 → PC-B 普通 IP 包送达终端 无标签

5. 标签分发协议

MPLS 本身 不定义路由协议,它依赖标签分发协议来在 LSR 之间建立标签映射关系。主要有以下三种:

5.1 LDP(Label Distribution Protocol)

RFC 5036 定义,部署最广泛的标签分发协议。

核心特点:

  • 基于 IGP 最短路径 自动建立 LSP
  • 为路由表中每个 IGP 前缀分配并分发标签
  • 逐跳 LSP,路径与 IGP 路径一致
  • 无带宽预留、无显式路径能力
  • 部署最广泛,配置简单
  • 使用 UDP 646(发现)和 TCP 646(会话)

LDP 工作机制:

1
2
3
4
5
6
7
8
9
10
11
Step 1: 邻居发现          Step 2: 会话建立
┌───────┐ UDP Hello ┌───────┐ TCP 646 ┌───────┐
│ LSR │ ──────────→ │ LSR │ ←──────────────→ │ LSR │
│ A │ 224.0.0.2 │ B │ Initialization │ B │
└───────┘ └───────┘ + Parameters └───────┘

Step 3: 标签分发 Step 4: LSP 建立
┌───────┐ Label Mapping ┌───────┐ ┌───────┐ ──LSP──→
│ LSR │ ────────────────→ │ LSR │ │ LSR │
│ A │ "前缀 X→标签 Y" │ B │ │ A │ → L:Y
└───────┘ └───────┘ └───────┘

LDP 的下游自主模式(Downstream Unsolicited): 默认模式下,LSR 不需要收到上游请求 就主动向所有 LDP 邻居通告标签映射。这种方式建立 LSP 速度快,但会占用更多内存。另一种模式是 Downstream on Demand,只有上游请求时才分配和通告标签。

5.2 RSVP-TE(Resource Reservation Protocol - TE)

RFC 3209 定义,用于流量工程的标签分发协议。

核心特点:

  • 支持 显式路径(Explicit Route)
  • 支持 带宽预留 和约束路由
  • 可实现流量工程(TE)
  • 使用 CSPF 算法计算满足约束的路径
  • 通过 PATH / RESV 消息建立 LSP
  • 配置复杂,扩展性较差(每条 LSP 都要维护状态)

RSVP-TE LSP 建立流程:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
Head-End          Transit          Transit          Tail-End
Ingress LSR LSR Egress
┌──────┐ ┌──────┐ ┌──────┐ ┌──────┐
│ │──PATH──→│ │──PATH──→│ │──PATH──→│ │
│ │ ERO │ │ ERO │ │ ERO │ │
│ │ 带宽 │ │ 带宽 │ │ 带宽 │ │
│ │ │ │ │ │ │ │
│ │←─RESV───│ │←─RESV───│ │←─RESV───│ │
│ │ Label │ │ Label │ │ Label │ │
│ │ 预留 │ │ 预留 │ │ 预留 │ │
└──────┘ └──────┘ └──────┘ └──────┘

→ PATH 消息携带 ERO(显式路径对象)+ 带宽请求
← RESV 消息沿途分配标签 + 预留带宽 → LSP 建立完成

RSVP-TE 关键对象:

  • ERO(Explicit Route Object): 指定 LSP 经过的严格/松散节点列表
  • RRO(Record Route Object): 记录 LSP 实际经过的路径,用于环路检测
  • SESSION_ATTRIBUTE: 包含 LSP 优先级、抢占策略、FRR 需求等

5.3 Segment Routing(SR)

Segment Routing 是 MPLS 的下一代演进,不再需要 LDP/RSVP-TE 协议分发标签,而是直接利用 IGP(IS-IS/OSPF)的扩展来通告 Segment ID(SID)。

SR 的核心优势:

  • 无状态转发: 中间节点不需要维护 LSP 状态,只需按 SID 转发
  • 简化协议栈: 不再需要 LDP,IGP 本身就承载了标签信息
  • 灵活路径编程: 通过在报文头塞入有序的 SID 列表,实现任意路径
  • SR-MPLS: SID 直接复用 MPLS 标签空间(20-bit Label 作为 SID)
  • SRv6: 使用 IPv6 扩展头(Segment Routing Header)实现,完全脱离 MPLS

三种协议对比:

对比维度 LDP RSVP-TE SR (SR-MPLS)
标签分发方式 独立协议 LDP RSVP-TE 信令 IGP 扩展(无独立协议)
路径控制 仅 IGP 最短路径 显式路径 + 约束路由 SID 列表编程任意路径
带宽预留 不支持 支持 需配合 SR-TE / PCE
状态维护 每前缀每邻居 每条 LSP 每跳 中间节点 无状态
扩展性 中等 优秀
成熟度 成熟 成熟 快速发展中

6. MPLS L3VPN(BGP/MPLS IP VPN)

MPLS L3VPN 是 MPLS 最广泛的应用场景,RFC 4364 定义。它让运营商在同一张物理骨干网上为不同企业客户提供 完全隔离 的虚拟专用网络。

6.1 架构与组件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
                       MPLS L3VPN 架构

Customer A Customer B
┌──────────┐ ┌──────────┐
│ Site A1 │ │ Site B1 │
│10.1.0.0/16│ │10.1.0.0/16│ ← 地址重叠!
│ CE-A1 │ │ CE-B1 │
└────┬─────┘ └─────┬────┘
│ │
┌────┴──────────────────┐ ┌─────────────────┴────────┐
│ PE-1 │ │ PE-2 │
│ ┌───────────────────┐ │ │ ┌───────────────────────┐│
│ │ VRF-A RD:100:1 │ │ │ │ VRF-A RD:100:1 ││
│ │ RT:100:1 (imp/exp)│ │ │ │ RT:100:1 (imp/exp) ││
│ ├───────────────────┤ │ │ ├───────────────────────┤│
│ │ VRF-B RD:200:1 │ │ │ │ VRF-B RD:200:1 ││
│ │ RT:200:1 (imp/exp)│ │ │ │ RT:200:1 (imp/exp) ││
│ └───────────────────┘ │ │ └───────────────────────┘│
└──────────┬────────────┘ └────────────┬─────────────┘
│ │
│ MP-BGP (VPNv4 + VPN Label)
│◄───────────────────────────→│
│ │
┌──────┴──────┐ ┌───────┴─────┐
│ P Router │──────────────│ P Router │
│ (仅标签交换) │ LDP Labels │ │
└─────────────┘ └─────────────┘

┌──────────┐ ┌──────────┐
│ Site A2 │ │ Site B2 │
│10.2.0.0/16│ │10.2.0.0/16│
│ CE-A2 │ │ CE-B2 │
└──────────┘ └──────────┘

6.2 RD 与 RT 的区别

这是面试和实战的高频考点:

维度 RD (Route Distinguisher) RT (Route Target)
作用 解决不同 VPN 客户地址空间重叠问题 控制 VPN 路由的 导入和导出
格式 8 字节,如 100:1 也是 8 字节,如 100:1(但概念不同)
用法 在 BGP 更新中,把 32-bit IPv4 前缀 + 64-bit RD 组合成 96-bit VPNv4 地址 Export RT:VRF 导出路由时附加的 RT 属性;Import RT:VRF 收到路由时,检查 RT 是否匹配
数量 每 VRF 一个 RD 一个 VRF 可以有多个 Import/Export RT
影响范围 只用于 路由区分,不做路由导入/导出决策 决定路由在 VRF 之间的 可达性

RD 如何解决地址重叠:

1
2
3
4
VPN_A 的路由: 10.1.0.0/16  +  RD:100:1  →  VPNv4: 100:1:10.1.0.0/16
VPN_B 的路由: 10.1.0.0/16 + RD:200:1 → VPNv4: 200:1:10.1.0.0/16

两个不同的 VPNv4 路由,BGP 可以同时存储和分发

RT 如何控制路由导入:

1
2
3
4
5
6
VRF-A Export RT = 100:1    →   导出的路由携带 RT:100:1
VRF-A Import RT = 100:1 → 只导入 RT 包含 100:1 的路由
VRF-B Export RT = 200:1 → 导出的路由携带 RT:200:1
VRF-B Import RT = 200:1 → 只导入 RT 包含 200:1 的路由

结果: VRF-A 和 VRF-B 互相看不到对方的路由 → 完全隔离

⚠️ 实战经验: 在绝大多数简单场景中,RD 和 RT 的值设成一样的(如100:1)就足够了。但在 Hub-Spoke 拓扑或 Extranet 场景中,RD 和 RT 必须分开设计。例如 Hub 站点的 Export RT 是 Spoke 的 Import RT,反之则不同。

6.3 L3VPN 数据转发流程

以 CE-A1 发送 IP 包到 CE-A2 为例:

1
2
3
4
┌──────┐    ┌──────┐    ┌──────┐    ┌──────┐    ┌──────┐
│CE-A1 │───→│ PE-1 │───→│ P │───→│ PE-2 │───→│CE-A2 │
└──────┘ └──────┘ └──────┘ └──────┘ └──────┘
① ② ③ ④ ⑤

逐步说明:

步骤 设备 操作
CE-A1 → PE-1 CE-A1 发送 IP 包(目的地址 10.2.0.0/16),通过 IGP/静态路由/EBGP 到达 PE-1。
PE-1 查 VRF-A 路由表查找目的前缀。该路由来自 PE-2 通过 MP-BGP 通告的 VPNv4 路由,携带了 PE-2 分配的 VPN Label(如 500)压入两层标签:外层 L:100(Transport,LDP)+ 内层 L:500(VPN)。
P Router 只看外层标签 L:100,Swap 为下一跳标签。对内层 VPN Label 完全不感知
PE-2 的上游 LSR 倒数第二跳 PHP:弹出外层 Transport Label,将只含 VPN Label 的包发给 PE-2。
PE-2 收到 L:500,查 LFIB 发现 L:500 对应 VRF-A 的出接口,弹出 VPN Label,将裸 IP 包转发给 CE-A2。

标签栈在每一跳的变化:

1
2
3
4
5
6
7
8
9
CE-A1 → PE-1:   [Eth] [IP:Dst=10.2.2.20] [Payload]
↓ Push 两层标签
PE-1 → P: [Eth] [L:100] [L:500] [IP] [Payload]
↓ Swap 外层标签
P → 倒数第二跳: [Eth] [L:200] [L:500] [IP] [Payload]
↓ Pop 外层标签 (PHP)
倒数第二跳→PE-2: [Eth] [L:500] [IP] [Payload]
↓ Pop VPN Label
PE-2 → CE-A2: [Eth] [IP:Dst=10.2.2.20] [Payload]

7. MPLS L2VPN 基础

MPLS L2VPN(二层虚拟专用网络)是基于 MPLS 隧道的二层透明传输技术,核心特点是运营商网络不感知客户三层路由,仅负责转发二层帧,客户可自主规划 IP 地址、运行内部路由协议。主流标准为 RFC 4448(Martini 方式),也就是我们常说的 VPLS / PW

7.1 MPLS L2VPN

MPLS L2VPN 在 MPLS 骨干上为客户透传二层帧,客户两端如同直连在同一二层网络中。主要有以下几种实现方式:

技术 信令 拓扑 特点
VPWS LDP / BGP 点到点 即 Kompella / Martini 方案,点对点伪线透传。常用于 E-Line 业务
VPLS LDP / BGP Full-Mesh Virtual Switch 多点到多点,PE 之间建立 Full-Mesh 伪线(Pseudowire),模拟交换机
EVPN BGP 灵活 下一代 L2VPN,使用 BGP EVPN 地址族分发 MAC/IP 绑定,解决传统 VPLS 的泛洪问题

L2VPN vs L3VPN 的标签使用:

  • L3VPN: 两层标签 — Transport Label(穿越骨干)+ VPN Label(区分 VRF)
  • L2VPN(VPWS/VPLS): 两层标签 — Transport Label + VC Label(Pseudowire 标签,区分不同的虚拟电路)

外层标签机制完全相同,差异在于内层标签的语义。

L2VPN 与 L3VPN 核心区别:

对比维度 MPLS L2VPN MPLS L3VPN
转发层级 二层帧透明传输 三层 IP 路由转发
路由参与 PE 不学习客户路由,全程透明 PE 维护 VRF 路由,与 CE 交互路由
标签层数 单层标签(Transport 标签) 双层标签(Transport + VPN 标签)
地址规划 客户两端可私有地址、可重叠 依靠 RD/RT 解决地址重叠
适用场景 跨站点二层互通、专线替代、传统局域网延伸 多站点三层互联、企业分支组网

7.2 PW(伪线)与 VPLS

PW(Pseudo-Wire,伪线)是 L2VPN 的核心载体,通过 MPLS 隧道在两个 PE 之间建立一条虚拟的二层专线,点对点透明传输以太网、PPP、HDLC 等二层帧。

VPLS(Virtual Private LAN Service,虚拟专用局域网业务)属于多点二层 VPN,可将企业多个远程站点虚拟化为一个统一局域网,支持多站点二层互通,具备 MAC 地址学习、转发、老化能力,实现类似交换机的局域网功能。

核心总结: L2VPN 核心价值是二层透明、三层自治,适合需要保留自有网络架构、自主运行路由协议的企业;L3VPN 核心价值是运营商代维路由、多租户隔离,适合轻量化分支组网场景。

Pseudowire(伪线)概念:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
CE-A                                    CE-B
┌───┐ MPLS 骨干网 ┌───┐
│ │ ┌─────┐ ┌─────┐ ┌─────┐ ┌──┤ │
│ ├──┤ PE1 ├──┤ P ├──┤ PE2 ├──┤ │ │
│ │ └─────┘ └─────┘ └─────┘ └──┤ │
└───┘ └───┘
◄──── Pseudowire (PW) ────►
VC Label: 100 VC Label: 200
Transport Label: LDP/RSVP 分配

效果: CE-A 和 CE-B 如同直连在同一 L2 网段
CE-A CE-B
┌───┐ MPLS 骨干网 ┌───┐
│ │ ┌─────┐ ┌─────┐ ┌─────┐ ┌──┤ │
│ ├──┤ PE1 ├──┤ P ├──┤ PE2 ├──┤ │ │
│ │ └─────┘ └─────┘ └─────┘ └──┤ │
└───┘ └───┘
◄──── Pseudowire (PW) ────►
VC Label: 100 VC Label: 200
Transport Label: LDP/RSVP 分配

效果: CE-A 和 CE-B 如同直连在同一 L2 网段

8. QoS 与 Traffic Engineering

传统 LDP 基于 IGP 最短路径建立 LSP,容易导致最短路径拥堵、次优路径空闲,无法适配大带宽、低时延、负载均衡的组网需求。MPLS TE(Traffic Engineering,流量工程)通过 RSVP-TE 协议实现流量的人工调度、带宽预留、路径约束,解决网络流量不均问题。

8.1 MPLS QoS(TC / EXP 位)

MPLS 标签中的 TC(Traffic Class) 字段(原名 EXP,3 bit)用于 QoS 处理,范围 0–7,类似 IP 的 DSCP/ToS。

两种 QoS 映射模式:

模式 说明 适用场景
Uniform Mode IP DSCP 与 MPLS TC 及外层 MPLS TC 保持一致映射。当 IP 包进入 MPLS 域时,DSCP → TC;当标签交换时,内层 TC → 外层 TC。整个域内 QoS 行为一致。 运营商和客户共用同一 QoS 策略
Pipe Mode MPLS TC 由运营商独立设置,与客户 IP DSCP 无关。PE 处理客户 IP 包时使用客户的 DSCP,MPLS 域内使用运营商自己的 TC 值。 运营商独立管理骨干网 QoS

8.2 MPLS Traffic Engineering (TE)

TE 允许运营商精确控制流量在网络中的路径,突破 IGP 最短路径的限制。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
Traffic Engineering 概念图:

┌─────────┐
┌───→│ B (高带宽) │───┐ Cost: 10
│ └─────────┘ │
┌───┐ │ │ ┌───┐
│ A │───┤ ├───→│ D │
└───┘ │ │ └───┘
│ ┌─────────┐ │
└───→│ C (低延迟) │───┘ Cost: 30
└─────────┘

IGP 最短路径: A → B → D (Cost=20)
TE 隧道: A → C → D (Cost=60,但满足低延迟约束)
Traffic Engineering 概念图:

┌─────────┐
┌───→│ B (高带宽) │───┐ Cost: 10
│ └─────────┘ │
┌───┐ │ │ ┌───┐
│ A │───┤ ├───→│ D │
└───┘ │ │ └───┘
│ ┌─────────┐ │
└───→│ C (低延迟) │───┘ Cost: 30
└─────────┘

IGP 最短路径: A → B → D (Cost=20)
TE 隧道: A → C → D (Cost=60,但满足低延迟约束)

TE 的关键技术组件:

组件 说明
IGP 扩展(OSPF-TE / IS-IS TE) 在 IGP LSA 中通告链路的可用带宽、TE Metric、管理组(Affinity)等属性
CSPF(Constrained Shortest Path First) 在满足带宽和策略约束的前提下计算最短路径
RSVP-TE 信令 沿 CSPF 计算的路径建立 LSP 并预留带宽
FRR(Fast Reroute) 预先计算备份路径,主路径故障时在 50ms 内切换

TE 核心价值:

  • 负载均衡:将流量从拥堵的最短路径疏导至空闲链路,提升全网带宽利用率
  • 带宽保证:通过 RSVP 带宽预留机制,为关键业务固定分配带宽,保障业务稳定性
  • 路径定制:支持显式指定转发路径,规避时延高、抖动大、不安全的链路
  • 故障快速切换:配合 FRR 实现毫秒级链路/节点故障切换,远快于 IGP 收敛

CSPF 约束最短路径算法:

TE 不使用传统 IGP SPF 算法,而是采用CSPF(Constraint Shortest Path First,约束最短路径优先)。CSPF 在计算路径时,不仅参考链路开销,还会校验带宽、最大跳数、链路颜色、时延等约束条件,筛选出符合业务需求的最优路径。

CSPF 计算逻辑:1. 过滤不满足约束的链路;2. 在剩余合法链路中,按照 IGP 开销计算最短路径;3. 生成 ERO 显式路径,用于 RSVP-TE 建立 LSP。

8.3 MPLS FRR 快速重路由

MPLS FRR(Fast Reroute)是 MPLS 体系的核心容错技术,可实现50ms 级故障切换,解决 IGP 收敛速度慢导致的业务丢包、中断问题,是运营商骨干网高可用的核心保障。

FRR 两种模式:

模式 全称 说明
Facility Backup NHOP / NNHOP Backup 一个备份隧道保护多条主 LSP,扩展性好,最常用
One-to-One Backup Detour 每条主 LSP 单独建立备份路径,资源消耗大

FRR 工作原理:

核心思想:预先备份、故障秒切。网络正常时,Ingress LER 提前为主 LSP 计算并建立备份 LSP,主链路/节点正常时流量走主路径;当主路径出现故障(链路 down、节点宕机),设备无需等待 IGP 收敛,直接将流量瞬间切换至备份路径,实现无感知切换。

主流 FRR 类型:

  • 链路保护:针对主 LSP 单条链路故障,备份路径规避故障链路,保护范围小、资源占用低
  • 节点保护:针对主 LSP 中间节点故障,备份路径规避故障节点,保护范围更广、可靠性更高
  • TE FRR:基于 RSVP-TE 隧道实现,支持带宽预留、路径约束,适用于关键业务专线
  • LDP FRR:基于 LDP 动态 LSP 实现,配置简单、部署广泛,适用于普通骨干网场景

关键指标: MPLS FRR 切换时延 ≤50ms,符合语音、视频、金融交易等实时业务的中断容忍标准,是骨干网高可用的核心技术。

9. 实战配置示例

9.1 Huawei VRP 配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
# ═══════════════════════════════════════
# PE-1 配置(Huawei VRP)
# ═══════════════════════════════════════

# 1. 全局启用 MPLS 和 LDP
mpls lsr-id 1.1.1.1
mpls
mpls ldp

# 2. 在核心接口启用 MPLS LDP
interface GigabitEthernet0/0/0
ip address 192.168.1.1 255.255.255.252
mpls
mpls ldp

# 3. 创建 VPN 实例(VRF)
ip vpn-instance VPN_A
ipv4-family
route-distinguisher 100:1
vpn-target 100:1 export-extcommunity
vpn-target 100:1 import-extcommunity

# 4. 连接 CE 的接口绑定 VRF
interface GigabitEthernet0/0/1
ip binding vpn-instance VPN_A
ip address 10.0.1.1 255.255.255.0

# 5. PE 与 CE 之间路由协议(以 EBGP 为例)
bgp 100
ipv4-family vpn-instance VPN_A
peer 10.0.1.2 as-number 65001

# 6. PE 之间 MP-BGP(VPNv4 地址族)
bgp 100
peer 2.2.2.2 as-number 100
peer 2.2.2.2 connect-interface LoopBack0
ipv4-family vpnv4
peer 2.2.2.2 enable
# ═══════════════════════════════════════
# PE-1 配置(Huawei VRP)
# ═══════════════════════════════════════

# 1. 全局启用 MPLS 和 LDP
mpls lsr-id 1.1.1.1
mpls
mpls ldp

# 2. 在核心接口启用 MPLS LDP
interface GigabitEthernet0/0/0
ip address 192.168.1.1 255.255.255.252
mpls
mpls ldp

# 3. 创建 VPN 实例(VRF)
ip vpn-instance VPN_A
ipv4-family
route-distinguisher 100:1
vpn-target 100:1 export-extcommunity
vpn-target 100:1 import-extcommunity

# 4. 连接 CE 的接口绑定 VRF
interface GigabitEthernet0/0/1
ip binding vpn-instance VPN_A
ip address 10.0.1.1 255.255.255.0

# 5. PE 与 CE 之间路由协议(以 EBGP 为例)
bgp 100
ipv4-family vpn-instance VPN_A
peer 10.0.1.2 as-number 65001

# 6. PE 之间 MP-BGP(VPNv4 地址族)
bgp 100
peer 2.2.2.2 as-number 100
peer 2.2.2.2 connect-interface LoopBack0
ipv4-family vpnv4
peer 2.2.2.2 enable

9.2 Cisco IOS-XR 配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
! ═══════════════════════════════════════
! PE-1 Configuration (Cisco IOS-XR)
! ═══════════════════════════════════════

! 1. Enable MPLS LDP globally
mpls ldp
router-id 1.1.1.1
interface GigabitEthernet0/0/0/0

! 2. Configure VRF
vrf VPN_A
address-family ipv4 unicast
import route-target 100:1
export route-target 100:1

! 3. Bind interface to VRF
interface GigabitEthernet0/0/0/1
vrf VPN_A
ipv4 address 10.0.1.1/24

! 4. MP-BGP with VPNv4
router bgp 100
address-family vpnv4 unicast
neighbor 2.2.2.2
remote-as 100
address-family vpnv4 unicast

! 5. PE-CE routing (VRF BGP)
router bgp 100
vrf VPN_A
rd 100:1
address-family ipv4 unicast
neighbor 10.0.1.2
remote-as 65001
! ═══════════════════════════════════════
! PE-1 Configuration (Cisco IOS-XR)
! ═══════════════════════════════════════

! 1. Enable MPLS LDP globally
mpls ldp
router-id 1.1.1.1
interface GigabitEthernet0/0/0/0

! 2. Configure VRF
vrf VPN_A
address-family ipv4 unicast
import route-target 100:1
export route-target 100:1

! 3. Bind interface to VRF
interface GigabitEthernet0/0/0/1
vrf VPN_A
ipv4 address 10.0.1.1/24

! 4. MP-BGP with VPNv4
router bgp 100
address-family vpnv4 unicast
neighbor 2.2.2.2
remote-as 100
address-family vpnv4 unicast

! 5. PE-CE routing (VRF BGP)
router bgp 100
vrf VPN_A
rd 100:1
address-family ipv4 unicast
neighbor 10.0.1.2
remote-as 65001

9.3 实际部署检查清单

  • 确保 IGP(OSPF/IS-IS)在骨干网内先收敛,Loopback 可达
  • LDP 邻居必须在所有 P 和 PE 之间建立
  • MP-BGP 邻居使用 Loopback 地址 建立,确保 LSP 到达对端 Loopback
  • VRF 的 RT Import/Export 必须匹配,否则路由不会交叉导入
  • PE-CE 之间使用 不同的 AS 号(EBGP)或配置 as-override / allowas-in
  • PE 上务必检查 display mpls lspshow mpls forwarding 确认 LSP 完整

10. MPLS 常见故障与排查思路

MPLS 排障的核心思路:自下而上,逐层验证

10.1 典型故障场景

  • LDP 邻居无法建立:常见原因:UDP/TCP 646 端口放通异常、IGP 路由不通、LDP 全局/接口未使能、邻居 Hello 报文超时
  • LSP 无法建立:常见原因:IGP 路由缺失、标签分配失败、下游未通告标签、接口 MPLS 未开启
  • L3VPN 站点不通:常见原因:RD/RT 配置不匹配、VRF 绑定错误、MP-BGP 邻居异常、内层 VPN 标签分发失败
  • PHP 导致 QoS 失效:常见原因:启用隐式空标签后,报文无 MPLS 头,无法读取 TC 优先级,关键业务 QoS 调度失效
  • TE 隧道 UP 但无流量:常见原因:未配置静态路由/策略引流、CSPF 路径计算失败、ERO 路径配置错误

10.2 核心排查命令(通用)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 查看 LDP 邻居状态
display mpls ldp neighbor

# 查看标签转发表 LFIB
display mpls lfib

# 查看 LSP 隧道状态
display mpls lsp

# 查看 VRF 路由与 RT 配置
display ip vrf verbose

# 查看 RSVP-TE 隧道信息
display mpls te tunnel-interface
display rsvp neighbor

10.3排障五步法

Step 1: IGP 收敛检查

确认所有 PE 的 Loopback 地址在骨干网中互相可达。

1
2
3
4
5
6
7
8
9
10
# Huawei
display ip routing-table 2.2.2.2

# Cisco XR
show route 2.2.2.2/32
# Huawei
display ip routing-table 2.2.2.2

# Cisco XR
show route 2.2.2.2/32

Step 2: LDP 邻居检查

确认 LDP Session 状态为 Operational。

1
2
3
4
5
6
7
8
9
10
# Huawei
display mpls ldp session

# Cisco XR
show mpls ldp neighbor
# Huawei
display mpls ldp session

# Cisco XR
show mpls ldp neighbor

Step 3: LSP 完整性检查

确认 Ingress → Egress 的 LSP 完整,没有断裂。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 查看完整 LSP
display mpls lsp verbose

# MPLS LSP Ping(验证连通性)
ping lsp -v ip 2.2.2.2 32

# MPLS LSP Traceroute(逐跳排查)
tracert lsp -v ip 2.2.2.2 32
# 查看完整 LSP
display mpls lsp verbose

# MPLS LSP Ping(验证连通性)
ping lsp -v ip 2.2.2.2 32

# MPLS LSP Traceroute(逐跳排查)
tracert lsp -v ip 2.2.2.2 32

Step 4: MP-BGP 邻居与 VPN 路由检查

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 检查 VPNv4 邻居状态
display bgp vpnv4 all peer

# 查看 VPN 路由
display bgp vpnv4 vpn-instance VPN_A routing-table

# VRF FIB
display ip routing-table vpn-instance VPN_A
# 检查 VPNv4 邻居状态
display bgp vpnv4 all peer

# 查看 VPN 路由
display bgp vpnv4 vpn-instance VPN_A routing-table

# VRF FIB
display ip routing-table vpn-instance VPN_A

Step 5: LFIB / Label 检查

1
2
3
4
5
6
7
8
9
10
# 查看特定 FEC 的标签
display mpls lsp include 2.2.2.2

# 确认 FIB 表项存在
display fib
# 查看特定 FEC 的标签
display mpls lsp include 2.2.2.2

# 确认 FIB 表项存在
display fib

10.4 常见故障原因 Top 5

排名 故障原因 表现 排查方法
1 LDP 未在接口启用 某一跳的接口忘开 MPLS/LDP,导致 LSP 断裂 display mpls ldp session 查看邻居状态
2 RT Import/Export 不匹配 VPN 路由无法交叉导入,PE 上看不到对方的 VPN 路由 display bgp vpnv4 vpn-instance X routing-table
3 MP-BGP 使用物理口而非 Loopback 邻居能建但 VPN 路由下一跳不可达 检查 peer X.X.X.X connect-interface
4 TTL 问题 LSP Ping 通但业务不通,可能是 MPLS TTL 或 IP TTL 过期 ping lsp 和普通 ping 对比
5 PHP 配置与 QoS 冲突 使用 Implicit NULL 导致 Egress 看不到 TC 位 检查 LDP 的 label advertise explicit-null 配置

10.5 常用排障命令速查表

场景 Huawei 命令 Cisco IOS-XR 命令
查看 LDP 邻居 display mpls ldp session show mpls ldp neighbor
查看 LSP 表 display mpls lsp show mpls forwarding
查看 LFIB display mpls lsp verbose show mpls forwarding detail
LSP Ping ping lsp -v ip X.X.X.X 32 ping mpls ipv4 X.X.X.X/32
LSP Traceroute tracert lsp -v ip X.X.X.X 32 traceroute mpls ipv4 X.X.X.X/32
查看 VPNv4 邻居 display bgp vpnv4 all peer show bgp vpnv4 unicast summary
查看 VPN 路由 display bgp vpnv4 vpn-instance X show bgp vpnv4 unicast vrf X
查看 VRF 路由表 display ip routing-table vpn-instance X show route vrf X

11. MPLS 整体总结与技术演进

11.1 核心技术复盘

MPLS 作为 2.5 层转发技术,核心颠覆了传统 IP 逐跳最长前缀匹配的转发模式,通过标签精确匹配转发实现高性能数据传输;依靠标签栈嵌套实现多租户 VPN 隔离;依托TE、FRR实现流量灵活调度与高可用,是当前运营商骨干网、企业专线组网的基石技术。

三大核心协议适配不同场景:LDP 适配通用极简组网、RSVP-TE 适配流量工程与高可靠组网、SR-MPLS 适配未来简化、可扩展的智能组网。

11.2 技术演进趋势

传统 MPLS 存在协议栈复杂、节点状态维护压力大、扩展性有限的问题,目前行业正向 SR-MPLS 全面演进:摒弃 LDP/RSVP 复杂信令,基于 IGP 扩展分发 SID 标签,实现无状态转发、路径可编程、极简运维,完美适配 5G、云专网、大带宽低时延新型业务场景,是当下运营商网络改造的核心方向。

11.3 核心应用场景汇总

  • 企业专线组网:L3VPN 实现多分支三层互联,L2VPN 实现局域网跨地域延伸
  • 运营商骨干网:MPLS TE+FRR 保障骨干网流量均衡、高可靠传输
  • 云数据中心互联(DCI):SR-MPLS 实现跨数据中心灵活流量调度、低时延传输
  • 5G 承载网:基于 MPLS/SR-MPLS 实现 5G 基站、核心网的高可靠、低时延承载