3. MPLS标签分发协议LDP工程部署
LDP(Label Distribution Protocol)是MPLS网络中应用最广泛的标签分发协议,它负责在LSR之间动态协商标签绑定关系,为LSP的建立提供标签映射。在H3C Comware平台上,LDP的工程部署围绕会话建立、标签映射、PHP(Penultimate Hop Popping)行为和故障排查四条主线展开。本节从协议交互的实际过程出发,说明每一步在设备上如何体现、如何配置、如何验证。
一、LDP会话建立的两个阶段
LDP会话建立分为发现(Discovery)和会话初始化两个阶段。发现阶段通过周期性发送Hello消息实现:LSR在启用LDP的接口上以UDP 646端口向组播地址224.0.0.2发送Hello,携带传输地址(Transport Address)。当两台LSR在同一链路上互相收到Hello后,会选取传输地址较大的一方作为主动方,由它发起TCP连接(端口646)。
会话初始化阶段在TCP之上进行:主动方发送Initialization消息,携带LDP版本、标签分发方式、Keepalive时间等参数;被动方回复Initialization和Keepalive,双方进入Operational状态。此后通过Address、Address Withdraw、Label Mapping、Label Request、Label Release、Notification等消息维护会话和标签绑定。Keepalive默认周期15秒、超时45秒,超时未收到则会话Down,相关LSP被撤销。
二、标签映射与LSP建立
LDP采用下游自主标签分发(DU)和有序标签控制(Ordered)模式。对于每条IGP路由(如OSPF/BGP学到的32位主机路由),下游LSR会主动向上游分配标签,上游收到Label Mapping后将其写入LIB(标签信息库),并选取最优下一跳对应的标签生成LFIB表项,从而形成LSP。
以一条从PE1到PE2的LSP为例,沿途P1、P2逐跳分配标签。PE1的LFIB中,去往PE2的32位路由对应出标签由P1分配;P1的LFIB中对应出标签由P2分配,依此类推。标签值由各LSR本地分配,仅具有本地意义,因此同一LSP上各跳标签通常不同。
三、PHP(倒数第二跳弹出)
PHP是LDP的重要优化机制。当某LSR发现自己是某FEC的倒数第二跳时,会向上一跳分配特殊标签3(隐式空标签,Implicit Null)。上一跳收到标签3后,在转发该FEC的报文时直接弹出标签栈,将原始IP报文交给最后一跳。最后一跳收到的是无标签IP报文,直接查IP路由转发,从而减少一次标签查找和标签操作。
PHP的触发条件是:该LSR到目的FEC的下一跳就是该FEC的Egress LSR(即自己是倒数第二跳)。在Comware上,可通过 display mpls ldp lsp 查看出标签是否为3来判断PHP是否生效。若最后一跳希望保留标签(如用于显式空标签或标签栈统计),可配置 label advertise non-null 关闭PHP。
四、LDP配置命令与验证
在Comware设备上,LDP的基础配置如下:
# 全局启用MPLS和LDP
mpls lsr-id 1.1.1.1
mpls ldp
# 接口启用LDP
interface GigabitEthernet1/0/1
ip address 10.0.1.1 30
mpls enable
mpls ldp enable
# 查看LDP会话
display mpls ldp session
# 查看LDP对等体
display mpls ldp peer
# 查看LSP
display mpls ldp lsp
# 查看标签绑定
display mpls ldp lsp 2.2.2.2 32
配置完成后,应依次确认:接口Hello是否正常、会话是否Operational、LIB/LFIB是否生成对应表项、转发是否命中标签。若使用 display mpls ldp session 看到State为Operational,说明会话已建立;若为Initialized或Non-existent,则需进一步排查。
五、故障排查方法
LDP故障排查可按“物理—IGP—LDP—转发”四层递进。第一层检查接口UP、MTU、链路误码;第二层确认IGP邻居和路由可达,因为LDP传输地址通常依赖IGP路由;第三层检查LDP会话状态和标签绑定;第四层用 tracert 或 ping mpls 验证LSP转发。
常见问题包括:传输地址不可达导致TCP连接失败;ACL拦截UDP/TCP 646;LSR-ID冲突;Keepalive超时;标签映射被过滤。排查时可用 debugging mpls ldp 观察消息交互,但生产环境慎用。下表汇总了典型现象与处理方向。
| 现象 | 可能原因 | 处理方向 |
|---|---|---|
| 会话Non-existent | Hello未互通或传输地址不可达 | 检查接口LDP、IGP路由、ACL |
| 会话Initialized | TCP已建但参数协商失败 | 检查版本、标签分发方式、Keepalive |
| 会话Operational但无LSP | 路由未生成或标签映射未收到 | 检查IGP路由、LIB表项 |
| 出标签非3 | PHP未生效 | 检查是否倒数第二跳、是否配置non-null |
六、工程部署要点
在实际工程中,LDP部署需注意以下几点。第一,LSR-ID必须使用Loopback接口地址并保证全网IGP可达,否则TCP会话无法建立。第二,接口启用LDP前需先启用MPLS,且接口不能是MPLS TE显式排除的接口。第三,若网络中存在大量路由,建议配置LDP标签映射过滤,只对必要FEC分配标签,减少LIB规模。第四,PHP默认开启,若下游需要保留标签做统计或VPN场景,需评估是否关闭。第五,Keepalive参数可调,但两端需匹配,避免因超时不一致导致会话震荡。
验证LSP是否真正可用,最直接的方法是在Ingress执行 ping mpls ipv4 4.4.4.4 32,若返回成功且沿途标签正确,说明LSP转发正常。也可用 tracert mpls ipv4 4.4.4.4 32 查看每一跳的标签和出接口,确认PHP是否在倒数第二跳生效。
综上,LDP工程部署的核心是“会话通、标签对、转发准”。掌握Hello与TCP的分工、DU+Ordered的标签分发模式、PHP的触发条件,再配合display和debug命令逐层排查,即可在Comware设备上稳定运行MPLS LDP网络。