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会话的建立过程

MPLS标签发表分析 简述mpls的标签分发的过程_运维


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标签发表分析 简述mpls的标签分发的过程_运维_02


这样的话在最后一条路由器就不用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邻居所通告的标签,此处所指的下游邻居,是设备的路由表中到达该目的网络的下一-跳设备。