HCIP 数通:MPLS 标签转发原理、LDP 协议与 MPLS VPN 基础
系统讲解 MPLS(多协议标签交换)的工作原理:标签格式与交换机制(LER/LSR/LSP)、LDP 协议标签分发过程、MPLS 转发表(LFIB)与 IP 路由表的关系、MPLS VPN(L3VPN)的 VRF 隔离与 PE-CE 路由交换,覆盖华为 VRP 平台 MPLS 基础配置。
MPLS(Multi-Protocol Label Switching,多协议标签交换)是运营商骨干网的核心技术,也是企业专线(MPLS VPN)的基础。与 IP 路由逐跳查路由表不同,MPLS 在入口处给数据包贴上“标签”,中间路由器只查标签(速度更快),出口处去掉标签。
IP 路由 vs MPLS 转发
IP 路由转发:
每台路由器独立查 IP 路由表
→ 每一跳:查 FIB → 最长前缀匹配 → 转发
优点:简单
缺点:每跳都要查路由表;无法区分不同 VPN 的相同 IP 地址
MPLS 标签转发:
入口 LER(标签边缘路由器):给包贴标签,查路由表一次
中间 LSR(标签交换路由器):只查标签表,交换标签,转发
出口 LER:去掉标签,按目的 IP 转发给客户
优点:
1. 中间节点只查标签(查询更快,硬件转发)
2. 流量工程:不同流量可以走不同路径(不受 IGP 最短路径限制)
3. VPN 隔离:不同 VRF 可以使用相同 IP 地址(用标签区分)
一、MPLS 基础概念
标签结构
MPLS 标签头(4 字节,插在 IP 头和 MAC 头之间):
┌────────────────────────────────┬─────┬────┐
│ Label(标签值,20bit) │ EXP │ S │ TTL │
│ 0 - 1048575 │ 3bit│ 1b │ 8bit│
└────────────────────────────────┴─────┴────┘
Label:标签值(0-15 保留,16 以上可用)
EXP:实验位(用于 QoS 标记,类似 802.1p)
S:栈底位(1=最后一个标签,MPLS 支持标签嵌套)
TTL:跳数限制(防止环路)
标签嵌套(MPLS VPN 使用两层标签):
外层标签:标识 LSP 路径(到达对端 PE)
内层标签:标识 VPN 用户(区分不同客户)
MPLS 网络角色
LER(Label Edge Router,标签边缘路由器):
入口 LER:接收 IP 包,查路由表,压入标签
出口 LER:去掉最后的标签,按 IP 转发
LSR(Label Switch Router,标签交换路由器):
中间路由器,只查 LFIB(标签转发表),交换标签,转发
LSP(Label Switch Path,标签交换路径):
从入口 LER 到出口 LER 的转发路径(虚拟通道)
FEC(Forwarding Equivalence Class,转发等价类):
具有相同转发处理的一组数据流
通常 = 目标 IP 前缀(一个 FEC 对应一个 LSP)
二、LDP 协议(标签分发协议)
LDP 工作流程:
1. 邻居发现
LSR 周期性发送 LDP Hello(组播 224.0.0.2,UDP 646)
发现邻居后建立 LDP 会话(TCP 646)
2. 标签分配(下游分配)
每台 LSR 为本地的 FEC(路由前缀)分配标签
向上游邻居通告:
"我有到 10.0.1.0/24 的路由,发给我时贴标签 102"
3. 建立 LFIB
收到标签绑定后,LSR 建立标签转发表:
"收到标签 101 的包,换成 102,从接口 Gi0/1 发出"
4. 数据转发
入口 LER 压入标签 → 中间 LSR 交换标签 → 出口 LER 弹出标签
# 华为 VRP:启用 MPLS 和 LDP
system-view
# 全局启用 MPLS
mpls lsr-id 1.1.1.1 # 设置 LSR ID(通常用 Loopback IP)
mpls # 启用 MPLS
# 启用 LDP
mpls ldp
# 在接口上启用 MPLS(转发 MPLS 流量的接口)
interface GigabitEthernet0/0/0
mpls # 接口启用 MPLS
mpls ldp # 接口启用 LDP
# 验证 LDP 邻居
display mpls ldp peer
# LDP Peer Information in Public network
# Total number of peers : 2
# Peer-ID Status Hello Transport
# 2.2.2.2:0 OPER 100 2.2.2.2 ← LDP 邻居建立
# 查看标签转发表(LFIB)
display mpls forwarding-table
# LSP Information: LSP
# FEC In-Label Out-Label Out-IF Nexthop
# 3.3.3.3/32 NULL 3 GE0/0/0 10.0.12.2
# 4.4.4.4/32 NULL 17 GE0/0/0 10.0.12.2
# 2.2.2.2/32 3 PHP GE0/0/0 10.0.12.2
# PHP = Penultimate Hop Popping(倒数第二跳弹出标签)
# 查看 LDP 会话详情
display mpls ldp session
PHP(倒数第二跳标签弹出)
# PHP 优化:
# 正常:出口 LER 去掉标签(两次查表:先查 LFIB,再查 FIB)
# PHP:倒数第二个 LSR 就去掉标签,出口 LER 直接查 IP 路由表(一次查表)
# 结果:出口 LER 处理更快
# LDP 自动协商 PHP,不需要手动配置
# 出口 LER 向倒数第二跳分配"显式空标签"(Explicit Null Label = 0)
# 或"隐式空标签"(Implicit Null = 3,推荐,让上游弹出标签)
三、MPLS VPN 基础(L3VPN)
VPN 核心概念
MPLS VPN 解决的问题:
运营商为多个企业客户提供 VPN 服务
不同客户可以使用相同的 IP 地址(地址空间隔离)
客户之间不能互访(路由隔离)
关键组件:
CE(Customer Edge):客户边缘设备(客户路由器)
PE(Provider Edge):运营商边缘设备(与 CE 对接)
P(Provider):运营商核心路由器(只做 MPLS 转发,不涉及 VPN)
VRF(VPN Routing and Forwarding,VPN 路由转发表):
PE 上为每个 VPN 创建独立的路由表(隔离不同客户的路由)
Route Distinguisher(RD,路由区分符):
给 VPN 路由加上 64-bit 前缀,使相同 IP 地址在 BGP 中可以区分
格式:AS:num 或 IP:num(例如:65000:100)
Route Target(RT,路由目标):
控制 VPN 路由的导入/导出策略
import RT:接收哪些 RT 的路由
export RT:给自己的路由打上什么 RT
MPLS VPN 配置示例
# === PE1 路由器(连接 VPN A 的 Site 1)配置 ===
system-view
# 1. 启用 MPLS 和 LDP(如前所述)
mpls lsr-id 1.1.1.1
mpls
mpls ldp
# 2. 创建 VRF(为 VPN A 创建独立路由表)
ip vpn-instance VPN-A
ipv4-family
route-distinguisher 65000:100 # RD = 65000:100
vpn-target 65000:100 export-extcommunity # 发出的路由打上 RT 65000:100
vpn-target 65000:100 import-extcommunity # 接受 RT 65000:100 的路由
quit
# 3. 接口绑定 VRF(PE 连接 CE 的接口)
interface GigabitEthernet0/0/2
ip binding vpn-instance VPN-A # 绑定到 VPN-A VRF
ip address 10.1.1.1 255.255.255.252 # 接口 IP(CE 对接 IP)
# 4. PE-CE 路由交换(OSPF 方式,与 CE 建立 OSPF)
ospf 100 vpn-instance VPN-A # 在 VRF 内运行 OSPF
area 0
network 10.1.1.0 0.0.0.3
network 10.1.0.0 0.0.255.255 # CE 侧网段
# 5. MP-BGP(PE 之间交换 VPN 路由)
bgp 65000
peer 2.2.2.2 as-number 65000 # IBGP 邻居(PE2)
peer 2.2.2.2 connect-interface LoopBack0
ipv4-family vpnv4 # VPNv4 地址族
peer 2.2.2.2 enable # 和 PE2 交换 VPN 路由
peer 2.2.2.2 advertise-community
# 把 VPN-A 的路由引入 MP-BGP
ipv4-family vpn-instance VPN-A
import-route ospf 100 # 把 VPN-A 的 OSPF 路由引入 BGP
quit
# 查看 VRF 路由表
display ip routing-table vpn-instance VPN-A
# 只显示 VPN-A 的路由(与其他 VPN 完全隔离)
# 查看 VPNv4 BGP 路由
display bgp vpnv4 all routing-table
# Network NextHop LocPrf Weight Path
# Route Distinguisher: 65000:100
# *> 10.1.0.0/24 2.2.2.2 100 0 ? ← PE2 通告过来的 VPN-A 路由
四、MPLS 数据包转发过程
VPN A 数据包从 Site 1 到 Site 2 的转发:
Site 1 (10.1.0.1) → CE1 → PE1 → P1 → P2 → PE2 → CE2 → Site 2 (10.2.0.1)
1. CE1 发送普通 IP 包到 PE1(10.2.0.1)
2. PE1(入口 LER):
查 VRF VPN-A 路由表 → 找到 10.2.0.1 的 LSP
压入两层标签:
外层标签 L1(到 PE2 的 LSP)
内层标签 L2(标识 VPN-A)
→ 发给 P1
3. P1、P2(LSR):
只看外层标签 L1
L1=100 → 换成 L1=200,从接口 Gi0/1 发出
→ 这些路由器不需要知道 VPN-A 的存在
4. PE2(出口 LER):
PHP:P 路由器已经弹出外层标签(只剩内层标签 L2)
PE2 查标签 L2 → 对应 VPN-A
去掉 L2,查 VRF VPN-A 路由表 → 找 10.2.0.1 → 发给 CE2
5. CE2 收到普通 IP 包,转发给 10.2.0.1
验证与排障
# 查看 MPLS 转发表
display mpls forwarding-table verbose
# Traceroute 查看 MPLS 路径
tracert -a 0.0.0.0 10.2.0.1 # 查看从 PE1 到 Site 2 的 MPLS 路径
display mpls lsp destination 10.2.0.1 # 查看特定目的地的 LSP
# VPN 路由问题
display ip routing-table vpn-instance VPN-A # 查看 VRF 路由
display bgp vpnv4 all routing-table 10.2.0.0 24 # 查看 VPNv4 路由详情
# MPLS 标签问题
display mpls ldp lsp # 查看 LDP 创建的 LSP
debugging mpls ldp error # 开启 LDP 错误调试
小结
MPLS 的本质是用标签替代 IP 查表:入口一次查路由表,中间只查标签(快速硬件转发),出口去掉标签交还 IP 包。LDP 是标签分发协议,路由器之间交换“我有这条路由,对应标签 xxx”的信息,自动建立 LSP。MPLS VPN(L3VPN)的精华是 VRF + 两层标签:VRF 在 PE 上隔离不同客户的路由,外层标签走 LSP 路径,内层标签标识哪个 VPN,MP-BGP 在 PE 之间传递 VPN 路由(VPNv4 地址族)。这是运营商 MPLS 专线服务的基础架构。
