
一、LDP基本概念
1. 标签分发协议LDP
MPLS数据转发的核心就是标签转发,MPLS依据FEC为数据分配标签。MPLS可以使用LDP、MP-BGP、RSVP为数据包动态分配标签,建立LSP。
LDP协议:为IGP路由、静态路由分配标签
MP-BGP协议:为VPN-V4路由分配标签
RSVP协议:为MPLS-TE的数据包分配标签
Label Distribution Protocol标签分发协议
LDP协议使用UDP和TCP两种承载协议
Hello报文基于UDP,通过组播方式发现邻居、维护邻居
LDP协议会生成一个标签转发表(ILM)
其它报文都是基于TCP之上,端口号为646,用于会话建立和标签通告
2. LDP协议报文
LDP 协议原理可归纳为三个阶段、四种消息。三个阶段分别为邻居发现、会话建立、标签通告;四种消息包含邻居发现消息、会话建立与维护消息、标签分发消息以及错误通告消息。
邻居发现消息:在启用LDP的接口上周期发送Hello消息报文实现邻居探测。
会话建立与维护消息:负责LDP会话的参数协商、连接建立与长期保活,主要包含下列消息。
Initialization消息
KeepAlive消息
标签分发消息:承担标签请求、通告、释放及撤销等交互功能,主要包含下列消息。
Address消息、Address withdraw消息
Label Request消息、Label Mapping消息、Label release消息
Label withdraw消息、Label abort Request消息
错误通告消息:依靠Notification报文,向LDP对等体上报会话运行过程中的异常事件与协议告警信息。
2.1 LDP邻居发现阶段
LDP邻居发现阶段采用UDP报文,通过组播机制完成邻居探测。邻居发现阶段的核心目标是协商确定后续LDP TCP会话的主动发起方,协商规则为:传输地址更大的LSR作为主动发起方,主动向对端发起TCP连接请求。
默认情况下,LDP传输地址(Transport Address)取值为LSR的Router ID,接口模式下可以通过命令手动修改传输地址。组网规划中必须保证通信双方的传输地址的三层互通,否则LDP邻居间无法建立TCP会话,后续LDP邻居与会话关系也无法正常建立。与OSPF不同的是,LSR的Router-ID必须存在且可达,必须手工指定Router-ID,无法自动生成。

[Step1] 通过抓取R1上G0/0接口的Hello报文,能够看到相关参数信息。

2.2 LDP会话建立阶段
LDP通过Hello报文完成对等体邻居发现后,根据Hello报文中通告的传输地址建立TCP可靠传输连接。TCP连接建立完成后,两端LSR通过交互Initialization初始化报文,协商LDP会话参数,最终完成LDP会话的建立。

同时必须保证通信双方的LDP传输地址三层路由可达,如果传输地址路由不可达,可以在接口模式下将LDP传输地址修改为直连接口IP地址,以此保障LDP邻居的TCP会话正常建立。
R1(config)#interface gigabitEthernet 0/0
R1(config-if-GigabitEthernet 0/0)#mpls ldp transport-address interface
R1(config-if-GigabitEthernet 0/0)#exit2.3 标签通告阶段
LDP会话建立完成后,对等体间进入标签通告阶段,依托TCP可靠连接交互标签绑定信息。首先通过Address Message向邻居通告本端所有直连地址;随后通过Label Mapping Message为FEC分配标签并同步绑定关系;最终动态生成端到端的LSP标签交换路径。会话双方周期性发送Keep Alive Message维持会话连通性。
LSP建立的本质就是完成FEC与标签的绑定,并将该绑定关系通告至相邻LSR,从而在MPLS网络中生成端到端的标签转发路径。

[Step1] 在抓包中解析Address报文,能够清晰看到发送路由器通告的所有直连接口地址。

[Step2] 在抓包中解析Label Mapping报文,能够清晰看到发送路由器通告的本地FEC与标签的映射关系。

3. 基于直连接口建立LDP对等体
上面提到组网规划中必须保证通信双方的传输地址的三层互通,否则LDP邻居间无法建立TCP会话,后续LDP邻居与会话关系也无法正常建立。如果传输地址路由不可达,可以在接口模式下将LDP传输地址修改为直连接口IP地址,以此保障LDP邻居的TCP会话正常建立。其实这种方式适用的场景比较窄,适用于下列几种场景。
3.1 没有环回口或环回口不可达
现有网络中的一些设备没有配置Loopback地址或环回接口没有注入到IGP协议中,导致环回地址不可达。
3.2 点到点直连、仅需本地 LDP 邻居
适用于不需要全网建立LSP,只需要直连邻居间交换标签,不配环回、不配 IGP,接口地址直连互通的场景。
3.3 跨域 / ASBR 间 LDP、环回不通
跨域Option B/C、ASBR之间只通直连接口、环回隔离,不能用环回接口建立LDP会话,只能用互联接口地址。
3.4 只允许直连接口建立LDP
禁止基于环回的LDP会话,限制LDP邻居范围为直连设备,防止非法设备通过环回冒充邻居。
二、直连接口建立LDP对等体案例配置
案例拓扑

案例需求
在R1、R2激活MPLS,基于直连接口建立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
// 将LDP传输地址修改为直连接口IP地址
R1(config-if-GigabitEthernet 0/0)#mpls ldp transport-address interface
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 g0/0
R2(config-if-GigabitEthernet 0/0)#mpls ip
R2(config-if-GigabitEthernet 0/0)#label-switching
R2(config-if-GigabitEthernet 0/0)#mpls ldp transport-address interface
R2(config-if-GigabitEthernet 0/0)#exit[Step3] 查看R1上LDP的详细信息。
R1#show mpls ldp parameters
[Step4] 查看R1上的LDP发现情况。
R1#show mpls ldp discovery detail
[Step5] 查看R2上的LDP邻居关系。
R2#show mpls ldp neighbor
