
一、MPLS LDP基本概念
1. LDP概述
LDP(Label Distribution Protocol,标签分发协议)采用UDP、TCP双协议承载机制。其中LDP Hello报文基于UDP协议封装,以组播方式实现LDP邻居发现与邻居关系保活。其余LDP控制报文均基于TCP协议传输,默认监听端口为646,负责完成LDP会话建立、参数协商及标签通告等交互过程。
LDP是MPLS体系的核心控制协议,对标传统网络的信令协议,主要承担FEC分类、标签分配、LSP隧道建立与维护等功能,同时标准化了标签分发过程中的各类交互信息与处理机制。LDP的工作流程分为两个核心阶段,首先在LSR设备间完成LDP会话建立,再基于LDP会话动态交互标签与FEC的映射关系,从而生成LSP转发路径。
MPLS数据转发的核心机制是标签交换,整体以FEC为依据为数据流分配标签,构建LSP。MPLS可以通过多种协议动态分配标签,不同协议适配不同的路由场景:
LDP协议为IGP协议、静态路由分配标签。
MP-BGP为VPNv4路由分配标签。
RSVP协议为MPLS-TE的数据包分配标签。
2. LDP标签接收策略
配置限制:单个邻居仅支持一条过滤规则,新规则会覆盖原有配置;单个LDP实例最多可以为64个邻居配置此过滤规则。
neighbor 命令仅对IP 路由类 FEC的标签映射消息生效,对伪线(PW)等其他类型 FEC 无效。基于该命令配置入方向标签映射消息过滤规则后,设备仅接收指定邻居、且匹配 ACL 规则的 IP 路由 FEC 标签映射消息,其余不匹配 ACL 的同类消息将直接丢弃;该过滤策略不会干预其他邻居发送的标签映射消息。
若为某邻居配置neighbor命令但未绑定 ACL 规则,则该邻居发送的所有 FEC 标签映射消息都会被丢弃。使用no命令删除过滤规则后,已被丢弃的历史消息无法恢复,仅对后续接收的消息生效。如需恢复正常报文收发,需执行clear mpls ldp neighbor命令复位 LDP 会话。
通俗一点说,就是精准管控指定LDP邻居的路由标签报文,按需放行或拦截,实现报文收发的权限控制。
3. 主流应用场景
3.1 安全防攻击/防异常报文
网络中若某台邻居设备故障、恶意发包,会大量发送无效标签消息占用设备资源。通过规则拦截异常报文,避免CPU冲高、LDP会话震荡,保障设备稳定。
3.2 路由与标签精细化管控
多业务共用LDP时,用ACL只放行指定网段的标签消息。比如只允许对方传递骨干网路由标签,拒绝用户侧路由,实现不同业务、网段隔离,避免路由混乱。
3.3 临时阻断指定邻居路由传递
运维割接、设备下线排查时,不想断开LDP会话,但又要停止接收该邻居的路由标签。不配ACL直接拦截,临时切断路由同步,排查完成后再取消规则。
3.4 网络优化与流量管控
只接收合法、必要的标签映射消息,过滤冗余报文,减少设备报文处理压力,提升整个MPLS网络转发效率。
3.5 多邻居环境权限划分
一台设备对接多台LDP邻居时,按需给部分邻居开启过滤,做到差异化权限管理,只信任合规设备。
二、LDP标签接收策略案例
案例拓扑

案例需求
路由器R1、R2、R3、R4部署OSPF路由协议,进程号为1,所有接口划入骨干区域Area 0,同时宣告Loopback0接口;
全网设备启用MPLS转发功能,LDP会话基于Loopback0接口建立;
R4部署Loopback10、Loopback20模拟分公司业务流量;
R1对接总公司内网,为防止接收非必要流量,配置LDP标签接收过滤策略。
1. LDP基础配置
[Step1] R1上全局开启MPLS转发功能和LDP标签分发协议,开启互联接口的标签交换能力和LDP协议。
// 全局开启MPLS转发功能
R1(config)#mpls ip
// 全局开启LDP标签分发协议
R1(config)#mpls router ldp
// 指定LDP的Router-ID,使用force强制属性使其立即生效
R1(config-mpls-router)#ldp router-id interface loopback 0 force
R1(config-mpls-router)#exit
R1(config)#interface g0/0
// 接口下开启LDP协议
R1(config-if-GigabitEthernet 0/0)#mpls ip
// 缺省情况下,三层接口只能识别IP数据包,需要开启接口的标签交换功能
R1(config-if-GigabitEthernet 0/0)#label-switching
R1(config-if-GigabitEthernet 0/0)#exit[Step2] R2上全局开启MPLS转发功能和LDP标签分发协议,开启互联接口的标签交换能力和LDP协议。
R2(config)#mpls ip
R2(config)#mpls router ldp
R2(config-mpls-router)#ldp router-id interface loopback 0 force
R2(config-mpls-router)#exit
R2(config)#interface range g0/0-1
R2(config-if-range)#mpls ip
R2(config-if-range)#label-switching
R2(config-if-range)#exit[Step3] R3上全局开启MPLS转发功能和LDP标签分发协议,开启互联接口的标签交换能力和LDP协议。
R3(config)#mpls ip
R3(config)#mpls router ldp
R3(config-mpls-router)#ldp router-id interface loopback 0 force
R3(config-mpls-router)#exit
R3(config)#interface range g0/0-1
R3(config-if-range)#mpls ip
R3(config-if-range)#label-switching
R3(config-if-range)#exit[Step4] R4上全局开启MPLS转发功能和LDP标签分发协议,开启互联接口的标签交换能力和LDP协议。
R4(config)#mpls ip
R4(config)#mpls router ldp
R4(config-mpls-router)#ldp router-id interface loopback 0 force
R4(config-mpls-router)#exit
R4(config)#interface g0/0
R4(config-if-GigabitEthernet 0/0)#mpls ip
R4(config-if-GigabitEthernet 0/0)#label-switching
R4(config-if-GigabitEthernet 0/0)#exit[Step5] R1上查看OSPF路由信息,能够正常学习到全网路由。
R1#show ip route ospf
[Step6] R2上查看LDP邻居信息,能够正常与上下游LSR建立邻居。
R2#show mpls ldp neighbor
[Step7] R3上查看LDP邻居信息,能够正常与上下游LSR建立邻居。
R3#show mpls ldp neighbor
[Step8] R1上查看10.10.10.10/32和20.20.20.20/32的标签绑定信息,正常分配remote binding(远端标签映射)和Local binding。
R1#show mpls ldp bindings 10.10.10.10/32
R1#show mpls ldp bindings 20.20.20.20/32
[Step9] R1上使用mpls ping命令测试10.10.10.10/32和20.20.20.20/32,能够正常访问。
R1#ping mpls ipv4 10.10.10.10/32 source 1.1.1.1
R1#ping mpls ipv4 20.20.20.20/32 source 1.1.1.1
2. 配置标签接收策略
[Step1] R1上新建标签ACL,需要注意的是标签接收策略只适用IP标准ACL和IP扩展ACL,其它类型的ACL不适用。
R1(config)#access-list 10 deny host 20.20.20.20
R1(config)#access-list 10 deny host 10.10.10.10
R1(config)#access-list 10 permit any[Step2] R1上进入LDP配置模式,配置标签接收策略。
R1(config)#mpls router ldp
R1(config-mpls-router)#neighbor 2.2.2.2 labels accept 10
R1(config-mpls-router)#exit[Step3] 验证:R1上查看10.10.10.10/32和20.20.20.20/32的标签绑定信息,可以看到没有来自2.2.2.2的remote binding。只能看到本地为这些路由分配的Local binding,这是因为我们过滤了2.2.2.2发来的标签映射消息,被ACL 10 deny的路由不会被接收,因此不会生成远端标签条目。
R1#show mpls ldp bindings 10.10.10.10/32
R1#show mpls ldp bindings 20.20.20.20/32
[Step4] 验证:R2上查看LDP转发表,可以看到R2为这两个路由都分配了本地标签,同时也向R1发送标签映射消息。但是R1上没有收到这些映射消息,说明过滤生效。
R2#show mpls ldp bindings 10.10.10.10/32
R2#show mpls ldp bindings 20.20.20.20/32
[Step5] R1上执行ping mpls命令,与4.4.4.4/32的LSP建立成功,能够正常接收标签。与10.10.10.10/32和20.20.20.20/32的ping mpls结果为QQQQQ,表示无FEC映射/无标签转发表项。说明标签接收过滤策略生效,拒绝来自R2的10.10.10.10/32和20.20.20.20/32标签映射消息。
R1#ping mpls ipv4 4.4.4.4/32 source 1.1.1.1
R1#ping mpls ipv4 10.10.10.10/32 source 1.1.1.1
R1#ping mpls ipv4 20.20.20.20/32 source 1.1.1.1
3. 取消过滤规则
[Step1] 假设此时因为业务变动需要取消过滤规则,在R1上使用no命令取消规则。
R1(config)#mpls router ldp
R1(config-mpls-router)#no neighbor 2.2.2.2 labels accept
R1(config-mpls-router)#exit[Step2] 验证:R1上查看10.10.10.10/32和20.20.20.20/32的标签绑定信息,可以看到仍然没有来自2.2.2.2的remote binding,只能看到本地为这些路由分配的Local binding。
R1#show mpls ldp bindings 10.10.10.10/32
R1#show mpls ldp bindings 20.20.20.20/32
[Step3] 验证:R1上执行ping mpls命令,与10.10.10.10/32和20.20.20.20/32的ping mpls结果为QQQQQ,表示无FEC映射/无标签转发表项。说明标签接收过滤策略仍然在生效,拒绝来自R2的10.10.10.10/32和20.20.20.20/32标签映射消息。
R1#ping mpls ipv4 10.10.10.10/32 source 1.1.1.1
R1#ping mpls ipv4 20.20.20.20/32 source 1.1.1.1
[Step4] 移除过滤规则后,此前被拦截的标签映射消息无法恢复,规则仅对后续新接收的报文生效。因此删除规则后,已中断的LSP不会自动重建,需要手动复位LDP会话,才能重新建立LSP并恢复转发。
R1#clear mpls ldp neighbor 2.2.2.2
[Step5] 验证:等待LDP会话重建后,再次执行ping mpls命令,此时能够正常连通。
R1#ping mpls ipv4 10.10.10.10/32 source 1.1.1.1
R1#ping mpls ipv4 20.20.20.20/32 source 1.1.1.1
[Step6] R1上查看10.10.10.10/32和20.20.20.20/32的标签绑定信息,此时已经正常分配remote binding和Local binding。
R1#show mpls ldp bindings 10.10.10.10/32
R1#show mpls ldp bindings 20.20.20.20/32
