LDP原理及配置
- 引入背景
- LDP协议概述
- LDP会话、LDP邻接体、LDP对等体
- LSR ID与LDP ID
- LDP消息类型
- LDP会话的建立过程
- LDP LSP的建立过程
- 标签的发布和管理
- PHP特性
- 隐式空标签与显式空标签(1)
- 隐式空标签与显式空标签(2)
- 小结
引入背景
- MPLS是一种根据标签报文中携带的短而定长的标签来转发数据的技术。
- MPLS的一个基本概念就是两台LSR必须对在它们之间转发的数据的标签使用上“达成共识”。LSR之间可以运行标签分发协议(Label DistributionProtocol, LDP)来告知其他LSR本设备上的标签绑定信息,从而实现标签报文的正确转发。
那么既然知道MPLS依靠标签,那么LDP一定就是用来解决这个问题的协议。
LDP协议概述
- LDP是MPLS的一种控制协议,相当于传统网络中的信令协议,负责FEC的分类、标签的分配以及LSP的建立和维护等操作。LDP规定了标签分发过程中的各种消息以及相关处理过程。
- LDP的工作过程主要分为两部分:
1.LSR之间建立LDP会话。
2.LSR之间基于LDP会话动态交换标签与FEC的映射信息,并根据标签信息建立LSP。
LDP会话、LDP邻接体、LDP对等体
- LSR之间交互标签绑定消息之前必须建立LDP会话。LDP会话可以分为:
- 本地LDP会话(Local LDP Session):建立会话的两个LSR之间是直连的;
- 远程LDP会话(Remote LDP Session):建立会话的两个LSR之间可以是直连的,也可以是非直连的。
- 两台LSR之间交互Hello消息之后,即建立起邻接体(Adjacency)关系;
- 在建立邻接体关系的基础上,两台LSR之间交互LDP会话消息,建立起LDP会话,两台设备之间形成LDP对等体关系;
LSR ID与LDP ID
每一台运行了LDP的LSR除了必须配置LSR ID,还必须拥有LDP ID:
- LDP ID的长度为48bit,由32bit的LSR ID与16bit的标签空间标识符{ LabelSpace ID )构成。
- LDP ID以“LSR ID:标签空间标识”的形式呈现。例如2.2.2.2:0。(2.2.2.2是LSR ID,0是空间标识符)
标签空间标识一般存在两种形态:
- 值为0:表示基于设备(或基于平台)的标签空间;(可以理解为全局唯一)
- 值非0:表示基于接口的标签空间。(可以理解为一个接口是一个单独的系统)
LDP消息类型
LDP发现机制用于LSR发现潜在的LDP对等体。LDP有两种发现机制:
- 基本发现机制:用于发现链路上直连的LSR。
LSR通过周期性地发送LDP链路Hello消息(LDP Link Hello),实现LDP基本发现机制,建立本地LDP会话。
LDP链路Hello消息使用UDP报文,目的地址是组播地址224.0.0.2。如果LSR在特定接口接收到LDP链路Hello消息,表明该接口存在LDP对等体。 - 扩展发现机制:用于发现链路上非直连LSR。
LSR周期性地发送LDP目标Hello消息(LDP Targeted Hello)到指定IP地址,实现LDP扩展发现机制,建立远端LDP会话。
LDP目标Hello消息使用UDP报文,目的地址是指定IP地址。如果LSR接收到LDP目标Hello消息,表明该LSR存在LDP对等体。
LDP会话的建立过程
1.两个LSR之间互相发送Hello消息。
Hello消息中携带传输地址(即设备的IP地址),双方使用传输地址(一般是LSR ID)建立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会话建立成功。
LDP LSP的建立过程
LDP通过发送标签请求和标签映射消息,在LDP对等体之间通告FEC和标签的绑定关系来建立LSP,而标签的发布和管理由标签发布方式、标签分配控制方式和标签保持方式来决定。
标签的发布和管理
标签发布方式(Label Advertisement Mode)
- 下游主动方式DU
对于一个特定的FEC,LSR无需从上游获得标签请求消息即进行标签分配与分发。(就是说得到了路由信息就接着向下分配标签) - 下游按需方式DoD
对于一个特定的FEC,LSR获得标签请求消息之后才进行标签分配与分发。(就是说只有在有被请求的时候,才能够向下进行传递标签)
标签分配控制方式(Label Distribution Control Mode)
- 独立标签分配控制方式(Independent):本地LSR可以自主地分配一个标签绑定到某个FEC,并通告给上游LSR,而无需等待下游的标签。(就是说自己本身有这个路由,就接着可以为这个路由信息分配标签)
- 有序标签分配控制方式(Ordered):对于LSR上某个FEC的标签映射,只有当该LSR已经具有此FEC下一跳的标签映射消息、或者该LSR就是此FEC的出节点时,该LSR才可以向上游发送此FEC的标签映射。(即使本身有这个路由信息,但是也不能直接为这条路由信息分配标签, 必须从下游学习到这条路由的标签,才能够继续为这条路由信息分配标签)
标签保持方式(Label Retention Mode)
- 自由标签保持方式(Liberal)
对于从邻居LSR收到的标签映射,无论邻居LSR是不是自己的下一跳都保留。(就是无论是不是次优路径传递来的标签信息,都进行接收) - 保守标签保持方式(Conservative)
对于从邻居LSR收到的标签映射,只有当邻居LSR是自己的下一跳时才保留。(只接收来自最优路径传递来的标签信息)
目前设备支持如下组合方式:
- 下游自主方式(DU)+ 有序标签分配控制方式(Ordered)+ 自由标签保持方式(Liberal),该方式为缺省方式。
- 下游按需方式(DoD)+ 有序标签分配控制方式(Ordered)+ 保守标签保持方式(Conservative)。
PHP特性
PHP(Penultimate Hop Popping,次末跳弹出),如果激活了PHP特性,那么egress节点在为本地路由分配标签的时候,会分配一个特殊标签——3,该标签被称为隐式空标签(lmplicit NULL Label)。当LSR转发一个标签报文时,如果发现对应的出标签值为3,则LSR会将栈顶标签弹出,并将里面所封装的数据转发给下游LSR。
这样的话在最后一条路由器就不用MPLS表与IP路由表都去查看了,省去查看MPLS表的过程。
隐式空标签与显式空标签(1)
- 缺省情况下,Egress节点向倒数第二跳分配隐式空标签( implicit-null),即特殊标签3。
- 但在部署QoS的场景下,标签被弹出后,其中的优先级也会一并丢失。
现在好比图中的这个场景盲从R1到R4都需要保证200M的带宽,MPLS标签中有个EXP位,就是用来做QOS用的,当到达R3之后,标签弹出,没有QOS保证,那么带宽信息就无法进行保证了。
隐式空标签与显式空标签(2)
显式空标签机制,Egress节点向倒数第二跳分配特殊标签0。
- R3在转发标签报文时,若出标签封装为0,则不会将标签头部弹出,标签头部中的QoS信息得以保存。R4在收到带0标签的报文的时候,直接弹出标签,不用去查找ILM表项。
- 缺省情况下,Egress分配的是隐式空标签。
小结
- LSR首先通过运行IGP协议(例如OSPF、 IS-IS等) 来构建路由表、FIB表;
- LDP根据相应的模式,为路由表中的路由前缀(FEC) 分配标签;
- LDP根据相应的模式,将自己为路由前缀分配的标签,通过LDP标签映射报文通告给LDP邻居;
- LSR将自己为路由前缀分配的标签,以及LDP邻居为该路由前缀通告的标签存储起来,并与出接口、下一跳地址等信息形成关联(标签转发表项) ;
- 当LSR转发到达目的网络的标签报文时,所使用的出站标签总是下游LDP邻居所通告的标签,此处所指的下游邻居,是设备的路由表中到达该目的网络的下一-跳设备。