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被撤销。

会话建立的关键判断:Hello用于邻居发现,TCP用于会话承载。若Hello正常但会话无法建立,应重点检查传输地址是否可达、TCP 646是否被ACL拦截。

二、标签映射与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-existentHello未互通或传输地址不可达检查接口LDP、IGP路由、ACL
会话InitializedTCP已建但参数协商失败检查版本、标签分发方式、Keepalive
会话Operational但无LSP路由未生成或标签映射未收到检查IGP路由、LIB表项
出标签非3PHP未生效检查是否倒数第二跳、是否配置non-null
LDP会话建立与标签映射过程 PE1 LSR-ID 1.1.1.1 P1 LSR-ID 2.2.2.2 P2 LSR-ID 3.3.3.3 PE2 LSR-ID 4.4.4.4 ① Hello 发现(UDP 646 / 224.0.0.2) 各接口周期发送Hello,互相学习传输地址 ② TCP 会话建立(端口 646) 传输地址大者主动发起,交换 Initialization / Keepalive ③ 标签映射(Label Mapping) 下游自主分发:PE2→P2→P1→PE1 逐跳分配标签 出标签 1024 → P1 出标签 2048 → P2 出标签 3(PHP) → PE2 Egress 弹出标签查IP 标签值仅本地有效,各跳可不同;标签3表示隐式空标签,触发PHP

六、工程部署要点

在实际工程中,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会话依赖IGP路由,若IGP发生震荡,LDP会话可能随之Down,导致LSP撤销。建议在核心层启用IGP与LDP同步(如LDP-IGP Sync),避免路由先通、标签后建造成的短暂黑洞。

综上,LDP工程部署的核心是“会话通、标签对、转发准”。掌握Hello与TCP的分工、DU+Ordered的标签分发模式、PHP的触发条件,再配合display和debug命令逐层排查,即可在Comware设备上稳定运行MPLS LDP网络。