MPLS基础
| 术语 | 备注 |
|---|
| LSR(Label Switch Router,标签交换路由器) | 支持MPLS的路由器(实际上也指支持MPLS的交换机或其他网络设备),该设备能够根据报文的MPLS标签头部对其进行转发 |
| MPLS域 | 一系列连续的LSR构成了一个MPLS域 |
| LER(Label Edge Router) | 位于MPLS域边缘、连接其他网络的LSR |
| LSP(Label Switched Path,标签交换路径) | 是标签报文穿越MPLS网络到达目的地所在的路径 |
| Ingress LSR | 入站LSR,是LER |
| Egress LSR | 出站LSR |
| Transit LSR | 中转LSR,是LER |
| FEC(Forwarding Equivalence Class,转发等价类) | 到同一条路由的所有报文就是一个转发等价类 |
| NHLFE(Next Hop Label Forwarding Entry,下一跳标签转发表项,用于指导MPLS报文的转发) | NHLFE包括:Tunnel ID、出接口、下一跳、出标签、标签操作类型等信息 |
| FTN(FEC-to-NHLFE,FEC到一组NHLFE的映射) | 通过查看FIB表中Tunnel ID值不为0x0的表项,能够获得FTN的详细信息。FTN只在Ingress存在 |
| ILM(Incoming Label Map,入标签到一组下一跳标签转发表项的映射) | ILM包括:Tunnel ID、入标签、入接口、标签操作类型等信息;ILM在Transit LSR的作用是将标签和NHLFE绑定,通过标签索引ILM表,就相当于目的IP地址查询FIB,能够得到所有的标签转发信息 |
| Tunnel ID | 为了给使用隧道的上层应用(如VPN、路由管理)提供统一的接口,系统自动为隧道分配了一个ID,也称为Tunnel ID。该Tunnel ID的长度为32bit,只有本地有效。这是设备为各种隧道所分配的一个ID。在MPLS中,Tunnel ID还用于将FIB、ILM及NHLFE进行关键 |
MPLS转发过程

MPLS架构
- 控制平面(Control Plane)
-
- 是无连接的,主要功能是负责产生和维护信息以及标签信息;控制平面中IP路由协议(IP Routing Protocol)模块用来传递路由信息,生成路由信息表,标签分发协议(Label Distribution Protocol)模块用来完成标签信息的交换,建立标签转发路径
-
- 路由信息表RIB(Routing Information Base):由IP路由协议(IP Routing Protocol)生成,用于选择路由
-
- 标签分发协议LDP(Label Distribution Base):负责标签的分配、标签转发信息表的建立、标签交换路径的建立、拆除等工作
-
- 标签信息表LIB(Label Information Base):由标签分发协议生成,用于管理标签信息
- 数据平面(Data Plane)
-
- 数据平面也称为转发平面,是面向连接的,主要功能是负责普通IP报文的转发以及带MPLS标签报文转发;数据平面包络IP转发信息表(Forwarding Information Base)和标签转发信息表(Label Forwarding Information Base),当收到普通IP报文时,如果是普通IP转发,则查找IP路由表转发,如果需要标签转发,则按照标签转发表转发,当收到带有标签的报文时,如果需要按照标签转发,根据标签转发表转发,如果需要转发到IP网络,则去掉标签后根据IP转发表转发
-
- 转发信息表FIB(Forwarding Information Base):从RIB提取必要的路由信息生成,负责普通IP报文的转发
-
- 标签转发信息表LFIB(Label Forwarding Information Base):简称标签转发表,由标签分发协议在LSR上建立LFIB,负责带MPLS标签报文的转发

MPLS标签结构

| 标题 | 长度 | 备注 |
|---|
| Label | 20bit | 标签字段,用于存储标签值 |
| EXP | 3bit | 实验位,通常用做CoS(Class of Service),当设备阻塞时,优先发送优先级高的报文 |
| BoS | 1bit | 栈底位,用于指示该标签头部是否为最后一层标签,如果该比特为1,则表示当前标签头部为栈底;如果该比特为0,则表示当前标签头部之后依然还有其他标签头部 |
| TTL | 8bit | 与IP报文头部中的TTL具有相同的意义,用于防止标签报文被无限制转发 |
标签值
- 0-15:特殊标签
- 16-2023:静态LSP和静态CR-LSP共享的标签值
- 1024以上:LDP、RSVP-TE、MP-BGP等动态信令协议的标签值
| 标签值 | 含义 | 备注 |
|---|
| 0 | IPV4 Explicit NULL Label | 表示该变迁必须被弹出,且报文的转发必须基于IPV4。如果出节点分配给倒数第二跳节点的标签值为0,则倒数第二跳LSR需要将值为0的标签正常压入报文标签值顶部,转发给最后一跳;最后一跳发现报文携带的标签值为0,则将标签弹出,0标签只有出现在栈底时才有效 |
| 1 | 只有出现在非栈底时才有效,类似于IP报文的“Router Alert Option”字段,节点收到Router Alert Label时,需要将其送往本地软件模块进一步处理;实际报文转发由下一层标签决定;如果报文需要继续转发,则节点需要将Router Alert Label压回标签栈顶 | |
| 2 | IPV6 Explicit NULL Label | 与IPV4 Explicit NULL Label功能类似 |
| 3 | Implicit NULL Label | 倒数第二跳LSR进行标签交换时,如果发现交换后的标签值为3,则将标签弹出,并将报文发给最后一跳;最后一跳收到该报文直接进行IP转发或下一层标签转发 |
| 4-13 | 保留 | |
| 14 | OAM Router Alert Label | 通过发送OAM报文检测和通告LSP故障。OAM报文使用MPLS承载 |
| 15 | 保留 | |
MPLS标签的处理
| 标题 | 备注 |
|---|
| Push | 指当IP报文进入MPLS域时,MPLS边界设备在报文二层头部和IP头部之间插入一个新标签;或者MPLS中间设备根据需要,在标签栈顶增加一个新的标签 |
| Swap | 当报文在MPLS域内转发时,根据标签转发表,用下一跳分配的标签,替换MPLS报文的栈顶标签 |
| Pop | 当报文离开MPLS域时,将MPLS报文的标签去掉;在最后一跳LSR,标签已经没有使用价值,这种情况下,可以利用倒数第二跳弹出特性PHP(Penultimate Hop Popping) ,在倒数第二跳LSR处将标签弹出,减少最后一跳的负担,最后一跳LSR直接进行IP转发或者下一层标签转发;PHP在Egress LSR上配置,支持PHP的Egress LSR分配给倒数第二跳的标签值为3 |

静态LSP配置
| 命令 | 备注 |
|---|
| mpls lsr-id 1.1.1.1 | 配置LSR ID;VRP没有缺省的LSR ID,必须手工配置,保证唯一;推荐使用Loopback接口IP;如果要修改LSR ID,必须执行undo mpls(会导致MPLS业务中断) |
| mpls | 开启MPLS,全局和接口都需要配置 |
| static-lsp ingress LSP1 destination 3.3.3.3 32 nexthop 12.1.1.1 out-label 100 | 配置入节点静态LSP |
| static-lsp transit LSP1 incoming-interface g0/0/0 in-label 100 nexthop 12.1.1.1 out-label 200 | 配置中间节点静态LSP |
| static-lsp egress LSP1 incoming-interface g0/0/0 in-label 200 | 配置出节点静态LSP |
| display mpls static-lsp | 验证静态LSP |
| ping lsp ip 3.3.3.3 32 | 测试静态LSP |
案例一

#
dhcp enable
#
mpls lsr-id 1.1.1.1
mpls
#
interface GigabitEthernet0/0/0
ip address 192.168.0.1 255.255.255.0
ospf enable 1 area 0.0.0.0
dhcp select interface
#
interface GigabitEthernet0/0/1
ip address 12.1.1.1 255.255.255.0
ospf enable 1 area 0.0.0.0
mpls
#
ospf 1
area 0.0.0.0
#
static-lsp ingress r12r3 destination 192.168.1.0 24 nexthop 12.1.1.2 out-label 1
00
static-lsp egress r32r1 incoming-interface GigabitEthernet0/0/1 in-label 100
#
#
mpls lsr-id 2.2.2.2
mpls
#
interface GigabitEthernet0/0/0
ip address 12.1.1.2 255.255.255.0
ospf enable 1 area 0.0.0.0
mpls
#
interface GigabitEthernet0/0/1
ip address 23.1.1.2 255.255.255.0
ospf enable 1 area 0.0.0.0
mpls
#
ospf 1
area 0.0.0.0
#
static-lsp transit r12r3 incoming-interface GigabitEthernet0/0/0 in-label 100 ne
xthop 23.1.1.3 out-label 200
static-lsp transit r32r1 incoming-interface GigabitEthernet0/0/1 in-label 200 ne
xthop 12.1.1.1 out-label 100
#
#
dhcp enable
#
mpls lsr-id 3.3.3.3
mpls
#
interface GigabitEthernet0/0/0
ip address 23.1.1.3 255.255.255.0
ospf enable 1 area 0.0.0.0
mpls
#
interface GigabitEthernet0/0/1
ip address 192.168.1.1 255.255.255.0
ospf enable 1 area 0.0.0.0
dhcp select interface
#
ospf 1
area 0.0.0.0
#
static-lsp egress r12r3 incoming-interface GigabitEthernet0/0/0 in-label 200
static-lsp ingress r32r1 destination 192.168.0.0 24 nexthop 23.1.1.2 out-label 2
00
#
此时PC1 ping PC2就有带有MPLS标签,如图:

LDP协议(一个动态生成标签的协议)
Label Distribution Protocol,标签分发协议,RFC5036
- 在LSR之间建立LDP Session
- 建立了LDP Session的两台设备称为LDP Peers(LDP邻居/对等体)
- 在LDP Peers间交换Label/FEC映射

| 报文(封装在UDP或TCP上,端口号646) | 作用 | 分类 | 协议 |
|---|
| Hello | LDP发现机制中宣告LSR并发现邻居 | discovery | UDP |
| Initialization | 在LDP Session建立过程中协商参数 | Session | TCP |
| KeepAlive | 监控LDP Session的TCP连接的完整性 | Session | TCP |
| Address | 宣告接口地址 | Advertisement | TCP |
| Address Withdraw | 撤销接口地址 | Advertisement | TCP |
| Label Mapping | 宣告FEC/Label映射信息 | Advertisement | TCP |
| Label Request | 请求FEC的标签映射 | Advertisement | TCP |
| Label Abort Request | 终止未完成的Label Request Message | Advertisement | TCP |
| Label Withdraw | 撤销FEC/Label映射 | Advertisement | TCP |
| Label Release | 释放标签 | Advertisement | TCP |
| Notification | 通知LDP Peer错误信息 | Notification | TCP |
LSR ID
- 每台运行MPLS的LSR必须拥有一个域内唯一的LSR ID
- 在华为设备上激活MPLS能力之前,必须为设备配置MPLS ID(使用全局配置命令mpls lsr-id)
- LSR ID长度为32bit,与IPV4地址的格式相同
- 通常情况下,我们会选择设备的某个Loopback接口地址作为LSR ID
LDP ID
- 每一台运行了LDP的LSR除了必须拥有LSR ID,还必须拥有LDP ID
- LDP ID的长度为48bit,由32bit的LSR ID与16bit的标签空间标识符(Label Space ID)
构成
- LDP ID以“LSR ID:标签空间标识”的形式呈现,例如2.2.2.2:0
- 标签空间标识一般存在两种形态
-
-
LDP发现机制

| 机制 | 备注 | 发送周期 |
|---|
| LDP基本发现机制 | 发现直连的邻居,使用组播;周期性的发送LDP Link Hello,建立本地LDP会话 | 5s |
| LDP扩展发现机制 | 发现非直连的邻居,使用单播;周期性的发送LDP Targeted Hello,建立远端LDP会话 | 5s |
LDP 邻居发现过程
- Hello消息使用UDP封装,发送周期为5s,使用组播地址224.0.0.2
- Hello消息中,携带有Transport Address(传输地址)字段,该字段默认与设备配置的LSR ID一致,表明与对端建立邻居关系时所使用的IP地址(保证路由可达)
- 参数包括LDP协议版本、标签分发方式、Keepalive保持定时器的值、最大PDU长度和标签空间等
- 如果不能接收相关参数,则发送Notification消息终止LDP会话的建立
- LDP会话建立成功后,进行FEC的创建与标签的分发


详细图解



PHP特性

- R3如果激活了PHP特性,那么当它为本地直连路由1.0.0.0/8分配标签时,会分配一个特殊的标签,该标签被称为隐式空标签(Implicit NULL Label),其值为3,R3将该标签值通告给R2
- 当LSR转发一个标签报文时,如果发现相应的入站标签对应的出站标签值为3,那么该LSR将把报文的标签头部弹出,然后将里面所封装的数据转发给下游LSR,也就是执行PHP(Penultimate hop popping,次末跳弹出)操作
- R2作为到达1.0.0.0/8的次末跳(倒数第二跳),收到发往1.1.1.3的标签报文后,发现出站标签值为3,于是将标签头部弹出,将IP报文转发给R3,而R3则仅需执行一次查询操作(查询FIB表)即可获得相应的转发信息,转发效率得到了提升