
一、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相关术语
LSR之间交互标签绑定信息之间必须建立LDP会话,LDP会话可以分为:
本地LDP会话(Local LDP Session):建立会话的两个LSR之间是直连的;
远程LDP会话(Remote LDP Session):建立会话的两个LSR之间是可以直连的,也可以是非直连的。
两台LSR之间交互Hello消息之后,即可建立起邻接(Adjacency)关系。在建立邻接关系的基础上,两台LSR之间交互LDP会话消息,建立起LDP会话,两台设备之间形成对等体关系。

3. 远程LDP会话
远程LDP会话,也叫非直连LDP会话,是指两台物理非直连、但三层路由可达的LSR,通过手动配置LDP邻居IP,跳过中间设备,直接建立LDPTCP邻居会话,交互FEC与标签映射、建立端到端LSP,不依赖直连链路。
建立远程LDP会话的前提是两台LSR之间三层路由互通(静态路由/IGP均可),路由可达是建立远程LDP会话的基础。通过手动将对端LSR的Loopback地址配置为LDP远程邻居,不通过LDP链路Hello报文自动发现,手动静态指定邻居。
建立连接过程
设备根据配置的远端Loopback地址,主动发起TCP连接(LDP默认TCP646端口);
TCP链路建立后,交互LDP初始化消息、会话参数协商;
会话建立成功后,直接交换FEC-标签映射、标签回收、通知等LDP消息;
不经过中间路由器参与LDP邻居协商,两端直连交互标签信息。
二、远程LDP会话配置案例
案例拓扑

案例需求
R1、R2、R3、R4运行OSPF路由协议,进程号为1,归属区域为0,通告直连接口及Loopback0接口
所有路由器激活MPLS,基于Loopback接口建立LDP邻居,同时在R1和R3建立远程LDP会话
[Step1] R1上的OSPF路由配置。
R1(config)#router ospf 1
R1(config-router)#router-id 1.1.1.1
Change router-id and update OSPF process! [yes/no]:yes
R1(config-router)#network 1.1.1.1 0.0.0.0 area 0
R1(config-router)#network 12.1.1.0 0.0.0.255 area 0
R1(config-router)#exit[Step2] R2上的OSPF路由配置。
R2(config)#router ospf 1
R2(config-router)#router-id 2.2.2.2
Change router-id and update OSPF process! [yes/no]:yes
R2(config-router)#network 2.2.2.2 0.0.0.0 area 0
R2(config-router)#network 12.1.1.0 0.0.0.255 area 0
R2(config-router)#network 23.1.1.0 0.0.0.255 area 0
R2(config-router)#exit[Step3] R3上的OSPF路由配置。
R3(config)#router ospf 1
R3(config-router)#router-id 3.3.3.3
Change router-id and update OSPF process! [yes/no]:yes
R3(config-router)#network 3.3.3.3 0.0.0.0 area 0
R3(config-router)#network 23.1.1.0 0.0.0.255 area 0
R3(config-router)#exit[Step4] R1上全局开启MPLS转发功能和LDP标签分发协议,指定远端会话设备R3的LDP RouterID,开启互联接口的标签交换能力和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
// 指定远端会话设备的LDP Router ID
R1(config-mpls-router)#neighbor 3.3.3.3
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[Step5] 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[Step6] R3上全局开启MPLS转发功能和LDP标签分发协议,指定远端会话设备R1的LDP RouterID,开启互联接口的标签交换能力和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)#neighbor 1.1.1.1
R3(config-mpls-router)#exit
R3(config)#interface g0/0
R3(config-if-GigabitEthernet 0/0)#mpls ip
R3(config-if-GigabitEthernet 0/0)#label-switching
R3(config-if-GigabitEthernet 0/0)#exit[Step7] 查看R1上的LDP发现情况,此时能够看到一个本地LDP会话(2.2.2.2)和远程LDP会话(3.3.3.3)。
R1#show mpls ldp discovery detail 
[Step8] 查看R2上的LDP发现情况,此时能够看到两个本地LDP会话(1.1.1.1和3.3.3.3)。
R2#show mpls ldp discovery detail
[Step9] 查看R3上的LDP发现情况,此时能够看到一个本地LDP会话(2.2.2.2)和远程LDP会话(1.1.1.1)。
R3#show mpls ldp discovery detail 
