目录
[一、MPLS LDP的原理](#一、MPLS LDP的原理)
[2.MPLS LDP的基本概念](#2.MPLS LDP的基本概念)
[二、MPLD LDP的实验配置](#二、MPLD LDP的实验配置)
[2.配置MPLS LDP](#2.配置MPLS LDP)
一、MPLS LDP的原理
1.回顾MPLS
MPLS是一种根据标签报文携带的短而定长的标签来转发数据的技术。MPLS 的一个基本概念就是两台LSR必定对在它们之间转发的数据标签使用上"达成共识"。
2.MPLS LDP的基本概念
LDP是MPLS的一种控制协议,相当于传统网络中的信令协议,负责FEC的分类、标签的分配以及LSP的建立和维护等操作。LDP规定了标签分发过程中的各种消息以及相关处理过程。
3.LDP的工作过程主要分为两部分
第一部分:LSR之间建立LDP会话;
第二部分:LSR之间基于LDP会话动态交换标与FEC的映射信息,并根据标签信息建立LSP。
4.LDP会话:
LDP会话用于LSR之间交换标签映射、释放等消息。只有存在对等体才能建立LDP会话,LDP会话分为以下两种:
(1)本地LDP会话(local LDP Session):建立会话的两个LSR之间是直连的。
(2)远程LDP会话(Remote LDP Session):建立会话的两个LSR之间可以是直连,也可以是非直连的。
5.LDP的对等体
LDP对等体是指相互之间存在LDP会话、使用LDP来交换标签消息的两个LSR。LDP对等体通过它们之间的LDP会话获得对方的标签。
6.LDP的消息
运行LDP协议的LSR之间通过交换机LDP消息来实现邻居发现、会话建立与维护以及标签管理等功能。

LDP协议主要使用四类消息:
发现(Discovery)消息 :用于通告和维护网络中LSR的存在,如Hello消息。
会话(Session)消息 :用于建立、维护和终止LDP对等体之间的会话,如Initialization消息、Keepalive消息。
通告(Advertisement)消息 :用于创建、改变和删除FEC的标签映射。
通知(Notification)消息 :用于提供建议性的消息和差错通知。
为保证LDP消息的可靠发送,除了Discovery消息使用UDP(User Datagram Protocol)传输外,LDP的Session消息、Advertisement消息和Notification消息都使用TCP(Transmission Control Protocol)传输。
7.LDP工作原理
LDP会话建立:
LDP使用5种状态描述LDP会话状态机
LDP Session协商过程可以分为通过状态机来描述。如上图所示,有5中状态,分别是Non-Existent、initialized、opensent、Operational。
Non-Existent状态:该状态为LDP Session最初的状态,在此状态双方发送HELLO消息,选举主动方,在收到TCP连接建立成功事件的触发后变为initialized状态。
Initialized状态:该状态下分为主动方和被动方两种情况,主动方将主动发送Initialization消息,转向OpenSent 状态,等待回应的Initialization消息;被动方在此状态等待主动方发给自己的Initialization消息,如果收到的Initialization消息的参数可以接受,则发送Initialization和KeepAlive转向OpenRec状态。主动方和被动方在此状态下收到任何非Initialization消息或等待超时时,都会转向Non-Existent状态。
OpenSent 状态:此状态为主动方发送Initialization消息后的状态,在此状态等待被动方回答Initialization消息和KeepAlive消息,如果收到的Initialization消息中的参数可以接受则转向OpenRec状态,如果参数不能接受或Initialization消息超时则断开TCP连接转向Non-Existent状态。
OpenRec状态:在此状态不管主动方还是被动方都是发出KeepAlive后的状态,在等待对方回应KeepAlive,只要收到KeepAlive消息就转向Operational状态;如果收到其它消息或KeepAlive超时则转向Non-Existent状态。
Operational状态:该状态是LDP Session成功建立的标志。在此状态下可以发送和接收所有其它的LDP消息。在此状态如果KeepAlive超时或收到致命错误的Notification消息(Shutdown消息)或者自己主动发送Shutdown消息主动结束会话,都会转向Non-Existent状态。
LDP会话的建立过程

(1)两个LSR之间互相发送Hello消息。
Hello消息中携带传输地址(即设备的IP地址),双方使用传输地址建立LDP会话。
(2)传输地址较大 的一方作为主动方,发起建立TCP连接。
如图所示,LSR_1作为主动方发起建立TCP连接,LSR_2作为被动方等待对方发起连接。
(3)TCP连接建立成功后,由主动方LSR_1发送初始化消息,协商建立LDP会话的相关参数。
LDP会话的相关参数包括LDP协议版本、标签分发方式、Keepalive保持定时器的值、最大PDU长度和标签空间等。
(4)被动方LSR_2收到初始化消息后,LSR_2接受相关参数,则发送初始化消息,同时发送Keepalive消息给主动方LSR_1。
如果被动方LSR_2不能接受相关参数,则发送Notification消息终止LDP会话的建立。
初始化消息中包括LDP协议版本、标签分发方式、Keepalive保持定时器的值、最大PDU长度和标签空间等。
(5)主动方LSR_1收到初始化消息后,接受相关参数,则发送Keepalive消息给被动方LSR_2。
如果主动方LSR_1不能接受相关参数,则发送Notification消息给被动方LSR_2终止LDP会话的建立。
当双方都收到对端的Keepalive消息后,LDP会话建立成功。
8.标签的发布和管理
|-------------------------------------------|--------------------|------------|--------------------------------------------------------------------------------------|
| 内容 | 名称 | 默认 | 含义 |
| 标签发布方式(Label Advertisement Mode) | 下游自主方式(DU) | 是 | 对于一个特定的FEC,LSR无须从上游获得标签请求消息即进行标签的分配与分发。 |
| 标签发布方式(Label Advertisement Mode) | 下游按需方式(DoD) | 否 | 对于一个特定的FEC,LSR 获得标签请求消息之后才进行标签的分配与分发。 |
| 标签分配控制方式(Label Distribution Control Mode) | 独立方式(Independent) | 否 | 本地LSR可以自主地分配一个标签绑定到某个FEC,并通告给上游LSR,而无须等待下游的标签。 |
| 标签分配控制方式(Label Distribution Control Mode) | 有序方式(Ordered) | 是 | 对于LSR上某个FEC的标签映射,只有当该LSR已经具有此FEC下一跳的标签映射消息,或者该LSR 就是此FEC的出节点时,该LSR才可以向上游发送此FEC的标签映射。 |
| 标签保持方式(Label Retention Mode) | 自由方式(Liberal) | 是 | 对于从邻居LSR收到的标签映射,无论邻居LSR是不是自己的下一跳都保留。 |
| 标签保持方式(Label Retention Mode) | 保守方式(Conservative) | 否 | 对于从邻居LSR 收到的标签映射,只有当邻居LSR是自己的下一跳时才保留。 |
二、MPLD LDP的实验配置

1.配置IP地址和OSPF
AR1
int g0/0/0
ip add 12.1.1.1 24
q
int LoopBack 0
ip add 1.1.1.1 32
q
ospf
area 0
network 12.1.1.0 0.0.0.255
network 1.1.1.1 0.0.0.0
q
AR2
int g0/0/1
ip add 12.1.1.2 24
q
int g0/0/0
ip add 23.1.1.1 24
q
int LoopBack 0
ip add 2.2.2.2 32
q
ospf
area 0
network 12.1.1.0 0.0.0.255
network 23.1.1.0 0.0.0.255
network 2.2.2.2 0.0.0.0
q
AR3
int g0/0/1
ip add 23.1.1.2 24
q
int g0/0/0
ip add 34.1.1.1 24
int LoopBack 0
ip add 3.3.3.3 32
q
ospf
area 0
network 23.1.1.0 0.0.0.255
network 34.1.1.0 0.0.0.255
network 3.3.3.3 0.0.0.0
q
int g0/0/1
ip add 34.1.1.2 24
q
int LoopBack 0
ip add 4.4.4.4 32
q
ospf
area 0
network 4.4.4.4 0.0.0.0
network 34.1.1.0 0.0.0.255
q
2.配置MPLS LDP
[AR1]mpls lsr-id 1.1.1.1 //配置MPLS LSR-ID
[AR1]mpls //全局开启MPLS
[AR1-mpls]q
[AR1]mpls ldp //全局开启MPLS LDP协议
[AR1-mpls-ldp]q
[AR1]int g0/0/0
[AR1-GigabitEthernet0/0/0]mpls //在接口下开启MPLS
[AR1-GigabitEthernet0/0/0]mpls ldp //在接口下开启MPLS LDP
[AR1-GigabitEthernet0/0/0]q
[AR2]mpls lsr-id 2.2.2.2
[AR2]mpls
Info: Mpls starting, please wait... OK!
[AR2-mpls]mpls ldp
[AR2-mpls-ldp]q
[AR2]int g0/0/0
[AR2-GigabitEthernet0/0/0]mpls
[AR2-GigabitEthernet0/0/0]mpls ldp
[AR2-GigabitEthernet0/0/0]q
[AR2]int g0/0/1
[AR2-GigabitEthernet0/0/1]mpls
[AR2-GigabitEthernet0/0/1]mpls ldp
[AR2-GigabitEthernet0/0/1]q
[AR2]
[AR3]mpls lsr-id 3.3.3.3
[AR3]mpls
Info: Mpls starting, please wait... OK!
[AR3-mpls]mpls ldp
[AR3-mpls-ldp]q
[AR3]int g0/0/1
[AR3-GigabitEthernet0/0/1]mpls
[AR3-GigabitEthernet0/0/1]mpls ldp
[AR3-GigabitEthernet0/0/1]q
[AR3]int g0/0/0
[AR3-GigabitEthernet0/0/0]mpls
[AR3-GigabitEthernet0/0/0]mpls ldp
[AR3-GigabitEthernet0/0/0]q
[AR3]
[AR4]mpls lsr-id 4.4.4.4
[AR4]mpls
Info: Mpls starting, please wait... OK!
[AR4-mpls]mpls ldp
[AR4-mpls-ldp]q
[AR4]int g0/0/1
[AR4-GigabitEthernet0/0/1]mpls
[AR4-GigabitEthernet0/0/1]mpls ldp
[AR4-GigabitEthernet0/0/1]q
[AR4]
3.查看各个设备的LDP会话建立情况
AR1

AR2

AR3

AR4

从上面的图可以看到各个设备都与它邻居建立了LDP会话关系
其中,peerID表示对等体的LDP标识符,格式为<LSR ID>:<标签空间>。其中
"0"表示全局标签空间;
"1"表示接口标签空间;
4.查看LDP动态建立的LSP

可以看到,设备每一个32位的主句地址分配了标签,并且动态地建立LSP隧道。
5.在AR1设备测试3.3.3.3的连通性,并且抓包


抓包的结果可以发现,当AR1访问3.3.3.3时,设备会查看MPLS LDP,其中MPLS LDP中的出标签位1025,因此设备在发送数据时会为数据包封装一层MPLS头部,并且携带标签为1025.当下一条设备收到该报文时,就可以直接通过标签转发,而不需要再查询路由表。