LDP基本概念
1. LDP协议概述
LDP是MPLS的一种控制协议,相当于传统网络中的信令协议,负责FEC的分类、标签的分配以及LSP的建立和维护等操作。
LDP的工作过程主要分为两部分:
LSR之间建立LDP会话。
LSR之间基于LDP会话动态交换标签与FEC的映射信息,并根据标签信息建立LSP。
2. 基本概念
(1)LDP会话
LSR之间交互标签绑定消息之前必须建立LDP会话。LDP会话可以分为:
本地LDP会话:建立会话的两个LSR之间是直连的;
远程LDP会话:建立会话的两个LSR之间可以是直连的,也可以是非直连的。
(2)LDP邻接体
两台LSR之间交互Hello消息之后,即建立起邻接体(Adjacency)关系;
(3)LDP对等体
在建立邻接体关系的基础上,两台LSR之间交互LDP会话消息,建立起LDP会话,两台设备之间形成LDP对等体关系;
(4)LDP ID
每一台运行了LDP的LSR除了必须配置LSR ID,还必须拥有LDP ID。
构成:LDP ID的长度为48bit,由32bit的LSR ID与16bit的标签空间标识符(Label Space ID)构成
呈现形式:LDP ID以“LSR ID : 标签空间标识”
标签空间标识的两种形态:
值为0:表示基于设备(或基于平台)的标签空间;
值非0:表示基于接口的标签空间。
3. LDP消息
按照消息的功能,LDP消息一共可以分为四大类型:发现消息(Discovery Message),会话消息(Session Message),通告消息(Advertisement Message)和通知消息(Notification Message)。
(1)发现消息:
用来宣告和维护网络中一个LSR的存在;用于通告和维护网络中LSR的存在,如Hello报文。
(2)会话消息:
用于建立、维护和终止LDP对等体之间的会话,如Initialization报文、KeepAlive报文。
(3)通告消息:
用来生成、改变和删除FEC的标签映射;
(4)通知消息:
用来宣告告警和错误信息。
LDP消息承载在UDP或TCP之上,端口号均为646 。其中发现消息用来发现邻居,承载在UDP报文上。
其他消息的传递要求可靠而有序,所以LDP使用TCP建立会话,会话、通告和通知消息都基于TCP传递。
4. LDP报文封装
LDP协议报文包括了LDP头部和LDP消息两部分。
(1)LDP头部中携带了LDP版本、报文长度等信息;
Version占用2Byte,表示LDP版本号,当前版本号为1。
PDU Length占用2Byte,以字节为单位表示除了Version和PDU Length以外的其他部分的总长度。
LDP Identifier,即LDP ID,长度6Byte,其中前4Byte用来唯一标识一个LSR,后2Byte用来表示LSR的标签空间。
(2)LDP消息中携带了消息类型、消息长度等信息。
U占用1个bit,为Unknown Message bit。无法识别的消息,U=0,返回通告;
当U=1时,忽略该无法识别的消息,不发送通告给生成者。
Message Length占用2个bytes,以字节为单位表示Message ID、Mandatory Parameters和Optional Parameters的总长度。
Message ID占用32个bit,用来标识一个消息。
Mandatory Parameters和Optional Parameters分别为可变长的该消息的必须的参数和可选的参数。
Message Type表示具体的消息类型。
LDP工作原理
1. LDP会话建立
状态机
LDP状态切换信息查看:debug mpls ldp session
5种状态:
Non-Existent状态:
初始状态,双方发送HELLO消息,选举主动方,在收到TCP连接建立成功事件后变为Initialized状态。
命令:
mpls ldp timer hello-hold命令用来设置Hello保持定时器的值。
undo mpls ldp timer hello-hold命令用来恢复缺省值。
缺省情况下,链路Hello保持定时器为15秒,目标Hello保持定时器为45秒。
链路Hello配置举例:
[R4-GigabitEthernet0/0/0]mpls ldp timer hello-hold ?
INTEGER<3-65535> Discovery Hello-hold timer value(in seconds)
目标Hello保持定时器配置举例:
[R4]mpls ldp remote-peer ?
STRING<1-32> Specify the remote peer name
[R4-mpls-ldp-remote-r2]mpls ldp timer hello-hold ?
INTEGER<3-65535> Discovery Hello-hold timer value(in seconds)
mpls ldp timer hello-send命令用来配置Hello发送定时器的值。
undo mpls ldp timer hello-send命令用来恢复缺省配置。
缺省情况下,Hello发送定时器的值是Hello保持定时器值的1/3。
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状态。
graceful-restart timer reconnect命令用来配置LDP会话重连接定时器的值。
undo graceful-restart timer reconnect命令用来恢复缺省设置。
缺省情况下,LDP会话重连接定时器的值是300秒。
[R4-mpls-ldp]graceful-restart timer recovery ?
INTEGER<3-3600> Value of the Recovery time(in seconds)
Operational状态:
该状态是LDP Session成功建立的标志。
在此状态下可以发送和接收所有其它的LDP消息。在此状态如果KeepAlive超时或收到致命错误的Notification消息(Shutdown消息)
或者自己主动发送Shutdown消息主动结束会话,都会转向Non-Existent状态。
(2)发现阶段与TCP连接建立
发现阶段:
设备通过周期性地发送LDP链路Hello报文(LDP Link Hello),实现LDP基本发现机制。
LDP链路Hello报文使用UDP报文,目的地址是组播地址224.0.0.2。如果LSR在特定接口接收到LDP链路Hello报文,表明该接口存在LDP邻接体。
TCP连接建立:
Hello报文中携带传输地址,双方后续将使用传输地址建立LDP会话。
传输地址较大的一方作为主动方,主动发起建立TCP连接。
经过TCP三次握手之后,两者建立起TCP连接。
(3)会话建立与保持
TCP连接建立成功后,主动方(传输地址大的一方)发送LDP初始化报文,协商建立LDP会话的相关参数。
LDP会话的相关参数包括LDP协议版本、标签分发方式、KeepAlive保持定时器的值、最大PDU长度和标签空间等。
被动方收到初始化报文后,若接受主动方的相关参数,则回应KeepAlive报文作为确认,为了提高发送效率同时发送自己的初始化报文。
主动方收到被动方的初始化报文后,若接受相关参数,则回复KeepAlive报文给被动方。
双方都收到对端的KeepAlive报文后,会话建立成功。后续通过周期性发送的KeepAlive报文保持会话。
(4)查看邻居状态
命令:
<R2>disp mpls ldp peer
关键字段:
PeerID:LDP邻居的LDP ID;
TransportAddress:LDP邻居的传输地址;
(5)查看LDP会话状态
命令:
<R1>display mpls ldp session
关键字段:
Status:LDP会话的状态;
LAM:标签发布模式:
SsnRole:LSR在LDP会话中的角色;
Active表示建立LDP会话的主动方;Passive表示建立LDP会话的被动方;
2. LDP标签分发
(1)概述:
标签的发布和管理由标签发布方式、标签分配控制方式和标签保持方式来决定;
标签分配:LSR从本地标签空间中取出一个标签与FEC绑定;
标签分发:LSR将标签与FEC的绑定关系通知给上游LSR;
上游、下游:根据数据的转发方向确定上、下游关系。标签报文从上游LSR发出,被下游LSR接收并处理;
(2)标签发布方式
DU(下游自主)模式:对于一个特定的FEC,LSR无需从上游获得标签请求消息即进行标签分配与分发;(默认)
系统默认支持LDP为所有对等体分标签,即每个节点都可以向所有的对等体发布标签映射关系,不再区分上下游关系。
DoD(下游按需)模式:对于一个特定的FEC,LSR获得标签请求消息(对特定的FEC访问时触发)之后才进行标签分配与分发;
只有上游邻居向自己请求标签映射时,LSR才会通告标签映射给该邻居。
配置命令:
[R4-GigabitEthernet0/0/0]mpls ldp advertisement ?
dod Downstream On Demand Advertisement Mode
du Downstream Unsolicited Advertisement Mode
(3)标签分配控制方式:需与标签发布方式结合使用
独立(Independent)模式:本地LSR可以自主地分配一个标签绑定到某个FEC,并通告给上游LSR,而无需等待下游的标签。
DU+独立:可以在上游LSR无请求,且自身没有收到下游LSR的标签绑定信息的情况下,主动向上游LSR通告标签绑定信息。
DoD+独立:只要收到上游LSR的标签请求消息,可以在自身没有收到下游LSR的标签绑定信息的情况下,主动向上游LSR通告标签绑定信息。
有序(Ordered)模式:只有当LSR收到特定FEC下一跳发送的特定FEC标签映射消息或者LSR是LSP的出节点时,LSR才可以向上游发送标签映射消息。(默认)
DU+有序:不论上游LSR是否由请求,必须收到下游LSR对此FEC的标签绑定信息才向上游LSR发布标签绑定信息,
所以必须由Egress LSR作为LSP建立的”起点“;
DoD+有序:只要收到上游LSR的标签请求消息,且自身已经收到下游LSR的标签绑定信息的情况下,才向上游LSR通告标签绑定信息,
所以必须由Ingress LSR发起请求,逐跳请求到Egress LSR,最终由Egress LSR开始,向上游建立LSP。
CE设备支持修改,命令:
label distribution control-mode { independent | ordered }命令用来配置LDP标签分配控制方式。
undo label distribution control-mode命令用来恢复缺省配置。
缺省情况下,LDP标签分配控制方式为有序标签分配控制(Ordered)。
[*R8-mpls-ldp]label distribution control-mode ?
independent Independent Label Distribution Control
ordered Ordered Label Distribution Control
(4)标签保留
自由(Liberal)模式:对于从邻居LSR收到的标签映射,无论邻居LSR是不是自己的下一跳都保留。(默认)
优点:路由发生变化时能够快速建立新的LSP进行数据转发(保留了所有的标签);
缺点:需要分发和维护不必要的标签映射。
保守(Conservative)模式:对于从邻居LSR收到的标签映射,只有当邻居LSR是自己的下一跳时才保留。
优点:只需要保留和维护用于转发数据的标签,以达到节约标签的目的。
缺点:LSP的重建比较慢,通常与DoD方式一起,用于标签空间有限的LSR。
(5)PHP(次末跳弹出):
如果激活了PHP特性,那么egress节点在为本地路由分配标签的时候,会分配一个特殊标签—3,该标签被称为隐式空标签(Implicit NULL Label)。
在数据转发时,次末跳(倒数第二跳)发现出标签值为3,于是将标签头部弹出,将IP报文转发给Egress LSR,Egress LSR则仅需执行一次查询操作(查询FIB表)即可获得相应的转发信息,转发效率得到了提升。
(6)隐式空标签与显式空标签
隐式空标签(implicit-null):Egress节点向倒数第二跳分配特殊标签3。(缺省)
但在部署QoS的场景下,标签被弹出后,其中的优先级也会一并丢失。
显式空标签(Explicit-null):Egress节点向倒数第二跳分配特殊标签0。
次末跳在转发报文时,若出标签封装为0,则不会将标签头部弹出,标签头部中的QoS信息得以保存。
Egress LSR在收到带0标签的报文的时候,直接弹出标签,不用去查找ILM表项。
配置命令:
[R4-mpls]label advertise ?
explicit-null Explicit-null(显式空标签)
implicit-null Implicit-null(隐式空标签)
non-null Non-null(正常分配标签)
3. LDP工作过程详解
华为设备目前缺省模式为下游自主方式(DU)+ 有序标签分配控制方式(Ordered)+ 自由标签保持方式(Liberal)。
在MPLS中,运行LDP协议的LSR的操作:
LSR首先通过运行IGP协议(例如OSPF、IS-IS等)来构建路由表、FIB表;
LDP根据相应的模式,为路由表中的路由前缀(FEC)分配标签;
LDP根据相应的模式,将自己为路由前缀分配的标签,通过LDP标签映射报文通告给LDP邻居;
LSR将自己为路由前缀分配的标签,以及LDP邻居为该路由前缀通告的标签存储起来,并与出接口、下一跳地址等信息形成关联(标签转发表项);
当LSR转发到达目的网络的标签报文时,所使用的出站标签总是下游LDP邻居所通告的标签,
此处所指的下游邻居,是设备的路由表中到达该目的网络的下一跳设备。