第153篇:MPLS 基本概念——标签、LSP、FEC
关键词
MPLS、标签(Label)、LSP(Label Switched Path)、FEC(Forwarding Equivalence Class)、LSR、LER、标签转发
一、为什么需要 MPLS?
1.1 IP 转发的局限性
传统的 IP 转发(逐跳路由)存在几个根本性局限:
| 局限 | 问题 |
|---|---|
| 最长匹配查找 | 每台路由器都要做一次 IP 路由表最长匹配,转发速度受限 |
| 只依赖目的 IP | 无法基于源地址、端口、VPN 等信息做转发决策 |
| 逐跳决策 | 每台路由器独立决策,无法指定整条路径 |
| BGP 路由黑洞 | 非直连 BGP 路由可能被中间设备丢弃(因为没有对应路由) |
| VPN 隔离困难 | 传统 IP 转发无法天然支持多租户 VPN |
1.2 MPLS 的设计思想
MPLS(Multiprotocol Label Switching)的核心思想是将路由和转发分离:
- 路由:仍然通过 IGP/BGP 学习路由
- 转发:基于固定长度的标签(Label)而非 IP 目的地址
标签是一个固定长度(4 字节)的短标识符,路由器只需查标签表(比 IP 路由表简单得多)就能决定转发行为。
二、MPLS 的三大核心概念
2.1 标签(Label)
标签 = 一个本地区域内有意义的短标识符(4 字节 32 位)
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Label | Exp |S| TTL |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| 20 位标签值 | 3位 |1| 8 位 |
标签结构: - Label(20 位):实际的标签值,范围 16-1,048,575(0-15 为保留值) - Exp(3 位):实验用途,通常用于 QoS(类似 IP 的 DSCP) - S(1 位):栈底标识——1 表示栈底,0 表示还有更多标签 - TTL(8 位):生存时间,防环路
关键理解:标签在每一个 LSR 上有本地意义。即 LSR-A 给某 FEC 分配的标签是 101,LSR-B 给同一 FEC 分配的标签可能是 205。
2.2 FEC(转发等价类)
FEC = 按照相同方式转发的一组 IP 数据包
常见 FEC 划分方式: - 同一目的 IP 前缀(最常用) - 同一 BGP VPN 路由 - 需要相同 QoS 处理的流量 - 需要走相同 TE 隧道的流量
核心思想:同一个 FEC 的所有数据包在 MPLS 域内走相同的 LSP,获得相同的标签。
2.3 LSP(标签交换路径)
LSP = 沿着 MPLS 域的、从入口到出口的标签转发路径
LSP(标签交换路径)
| Ingress Transit Egress | |
| LSR LSR LSR | |
| (LER) (LSR) (LER) | |
| IP包 | |
| push label swap label pop label | |
- Ingress LSR(入站 LSR):数据包进入 MPLS 域的第一个路由器,负责压入标签(Push)
- Transit LSR(中间 LSR):中间路由器,负责交换标签(Swap)
- Egress LSR(出站 LSR):数据包离开 MPLS 域的最后一个路由器,负责弹出标签(Pop)
三、MPLS 的转发过程
3.1 经典转发示例
网络拓扑:
R1 ---- R2 ---- R3 ---- R4
目标网络:10.0.0.0/24 挂在 R4 下
标签分配(假设使用 LDP):
R4 为 10.0.0.0/24 分配标签 100 ← 本地有意义
R3 为 10.0.0.0/24 分配标签 200
R2 为 10.0.0.0/24 分配标签 300
转发过程:
数据包从 R1 → R2(Ingress)→ R3(Transit)→ R4(Egress)→ 目标
R1 发送普通 IP 包
│
R2(Ingress):
│ 路由查找 → 匹配标签转发表
│ 压入标签 300 → 发送到 R3
│
R3(Transit):
│ 收到标签 300
│ 标签查找 → 交换为标签 100
│ 发送到 R4
│
R4(Egress):
│ 收到标签 100 → 这是自己分配的标签
│ 弹出标签 → 恢复为普通 IP 包
│ 正常 IP 转发到 10.0.0.0/24
3.2 标签操作类型
| 操作 | 含义 | 发生位置 |
|---|---|---|
| Push | 压入新标签(在已有的标签栈顶部添加) | Ingress LSR |
| Swap | 交换标签(用新标签替换栈顶标签) | Transit LSR |
| Pop | 弹出标签(移除栈顶标签) | Egress LSR |
四、LSR(标签交换路由器)的角色
4.1 LSR 分类
MPLS 域 LER LSR LER ▶ push ──▶ swap ──▶ pop ─▶
LER(Label Edge Router) LSR(Label Switching Router) = 边界 LSR = 核心 LSR = 进行 IP 路由查找 + 标签操作 = 仅做标签交换
4.2 LSR 的标签转发动作
标签转发表(LFIB - Label Forwarding Information Base):
Incoming Label Outgoing Label Outgoing Interface Next Hop
────────────── ────────────── ────────────────── ────────
300 100 GE0/0/1 10.1.1.2
500 - (pop) GE0/0/2 10.1.2.2
- (untagged) 200 GE0/0/0 10.1.0.2
说明:
第一行:入标签 300 → 交换为 100 从 GE0/0/1 发出
第二行:入标签 500 → 弹出标签(PHP 机制)
第三行:无标签的 IP 包 → 压入标签 200 转发
五、MPLS 的优势总结
| 优势 | 说明 |
|---|---|
| 转发速度 | 基于固定的标签查找,比 IP 最长匹配更快 |
| 支持多服务 | 标签栈支持 VPN、TE、QoS 等多层能力 |
| 与上层协议无关 | 标签交换不关心上层是 IPv4、IPv6 还是其他协议 |
| 流量工程 | 可以显式指定 LSP 路径,而非 IP 的逐跳决策 |
| VPN 隔离 | 通过多标签栈实现 L3VPN/L2VPN 业务隔离 |
| 解决 BGP 黑洞 | MPLS 保证 BGP 路由在中间节点也能正确转发 |
六、MPLS 与 IP 转发的对比
| 对比维度 | IP 转发 | MPLS 转发 |
|---|---|---|
| 转发依据 | 目的 IP 地址最长匹配 | 固定长度标签(精确匹配) |
| 路由与转发 | 耦合(每跳都要路由) | 分离(边缘路由、核心交换) |
| 路径控制 | 逐跳独立决策 | 可以指定端到端路径 |
| QoS 集成 | 需要单独机制 | EXP 位内嵌在标签中 |
| VPN | 复杂(IP + GRE) | 天然支持(两层标签) |
七、总结
| 知识点 | 核心要点 |
|---|---|
| MPLS 本质 | 标签交换,路由与转发分离 |
| 标签 | 4 字节固定长度本地标识,含 Label/Exp/S/TTL |
| FEC | 一组按相同方式转发的数据包 |
| LSP | 标签交换路径,由 ingress 到 egress |
| LSR 类型 | Ingress(Push)/ Transit(Swap)/ Egress(Pop) |
| LFIB | 标签转发信息表,入标签→出标签的映射 |
八、思考
- MPLS 为什么比传统 IP 转发更快?
- 标签中的 S 位(栈底标识)有什么作用?
- 什么情况下路由器会执行 Pop 操作?
- FEC 的划分依据有哪些?举例说明。
- 为什么说 MPLS "将路由和转发分离"?
下篇预告:第154篇《MPLS 标签分配协议——LDP 工作原理》——MPLS 中的标签是如何自动分配的?LDP 如何建立邻居关系并分发标签?