- LDP基本概念
- LDP协议概述
- LDP会话、LDP邻接体、LDP对等体
- LSR ID与LDP ID
- LDP消息
- LDP工作原理
- LDP会话建立
- LDP会话状态机
- LDP会话建立 - 发现阶段与TCP连接建立
- LDP会话建立 - 会话建立与保持
- LDP邻居状态
- LDP会话状态
- LDP标签分发
- 标签的发布和管理
- 上游与下游
- 标签发布方式 - DU模式
- 标签发布方式 - DoD模式
- 标签分配控制方式 - 独立模式
- 标签分配控制方式 - 有序模式
- 标签保留 - 自由模式
- 标签保留 - 保守模式
- PHP特性
- 隐式空标签与显式空标签 (1)
- LDP工作过程详解
- 组网介绍
- 标签分发 - Egress LSR
- 标签分发 - Transit LSR
- 标签分发 - Ingress LSR
- 标签转发 - Ingress LSR
- 标签转发 - Transit LSR
- 标签转发 - Egress LSR
- 在MPLS中,运行LDP协议的LSR的操作小结
- LDP会话建立
- LDP基本配置
- LDP基本配置命令
- 配置案例
- 检查配置 - 查看LSP
MPLS是一种根根据标签报文中携带的短而定长的标签来转发数据的技术。
MPLS的一个基本概念就是两台LSR必须对在它们之间转发的数据的标签使用上“达成共识”。LSR之间可以运行标签分发协议(Label Distribution Protocol,LDP)来告知其他LSR本设备上的标签绑定信息,从而实现标签报文的正确转发。
本文将介绍LDP基本工作原理与特性,以及LDP的基本配置。
LDP基本概念
LDP协议概述
LDP是MPLS的一种控制协议,相当于传统网络中的信令协议,负责FEC的分类、标签的分配以及LSP的建立和维护等操作。LDP规定了标签分发过程中的各种消息以及相关处理过程。
LDP的工作过程主要分为两部分:
- LSR之间建立LDP会话。
- 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的标签空间标识符(Label Space ID)构成。
LDP ID以“LSR ID : 标签空间标识”的形式呈现。例如2.2.2.2:0。
标签空间标识一般存在两种形态:
值为0:表示基于设备(或基于平台)的标签空间;
值非0:表示基于接口的标签空间。
LDP消息
运行LDP协议的LSR之间通过交换LDP消息来实现邻居发现、会话建立与维护以及标签管理等功能。
LDP工作原理
LDP会话建立
LDP会话状态机
LDP使用5种状态描述LDP会话状态机。
LDP会话建立 - 发现阶段与TCP连接建立
发现阶段
设备通过周期性地发送LDP链路Hello报文(LDPLink Hello),实现LDP基本发现机制。
LDP链路Hello报文使用UDP报文,目的地址是组播地址224.0.0.2。如果LSR在特定接口接收到LDP链路Hello报文,表明该接口存在LDP邻接体。
TCP连接建立阶段
Hello报文中携带传输地址,双方后续将使用传输地址建立LDP会话。
传输地址较大的一方作为主动方,主动发起建立TCP连接。
经过TCP三次握手之后,两者建立起TCP连接。
LDP会话建立 - 会话建立与保持
TCP连接建立成功后,主动方R2(传输地址大的一方)发送LDP初始化报文,协商建立LDP会话的相关参数。
LDP会话的相关参数包括LDP协议版本、标签分发方式、KeepAlive保持定时器的值、最大PDU长度和标签空间等。
被动方R1收到初始化报文后,若接受R2的相关参数,则回应KeepAlive报文作为确认,为了提高发送效率同时发送自己的初始化报文。
R2收到R1的初始化报文后,若接受相关参数,则回复KeepAlive报文给R1。
双方都收到对端的KeepAlive报文后,会话建立成功。后续通过周期性发送的KeepAlive报文
LDP邻居状态
<R1>display mpls ldp peer
LDP Peer Information in Public network
A '*' before a peer means the peer is being deleted.
------------------------------------------------------------------------------
PeerID TransportAddress DiscoverySource
------------------------------------------------------------------------------
2.2.2.2:0 2.2.2.2 GigabitEthernet0/0/0
------------------------------------------------------------------------------
TOTAL: 1 Peer(s) Found.
PeerID:LDP邻居的LDP ID;
2.2.2.2代表的是邻居节点的LSR ID;
0代表的是标签空间是基于平台的;
TransportAddress:LDP邻居的传输地址;
2.2.2.2代表邻居用来建立TCP连接的IP地址。
LDP会话状态
<R1>display mpls ldp session
LDP Session(s) in Public Network
Codes: LAM(Label Advertisement Mode), SsnAge Unit(DDDD:HH:MM)
A '*' before a session means the session is being deleted.
------------------------------------------------------------------------------
PeerID Status LAM SsnRole SsnAge KASent/Rcv
------------------------------------------------------------------------------
2.2.2.2:0 Operational DU Passive 0000:00:33 133/133
------------------------------------------------------------------------------
TOTAL: 1 session(s) Found.
Status:LDP会话的状态;
Operational表示LDP会话建立成功;
LAM:标签发布模式:
标签发布模式有DU和DoD两种模式(后文介绍);
此例中采用的是DU(下游自主)模式;
SsnRole:LSR在LDP会话中的角色;
Active表示建立LDP会话的主动方;Passive表示建立LDP会话的被动方;
LDP标签分发
标签的发布和管理
在MPLS网络中,下游LSR决定标签和FEC的绑定关系,并将这种绑定关系发布给上游LSR。
LDP通过发送标签请求和标签映射消息,在LDP对等体之间通告FEC和标签的绑定关系来建立LSP
标签的发布和管理由标签发布方式、标签分配控制方式和标签保持方式来决定。
上游与下游
MPLS根据数据的转发方向确定上、下游关系。标签报文从上游LSR发出,被下游LSR接收并处理。
如图所示,对于到达192.168.3.0/24的LSP而言,R3是R2的下游LSR,R1是R2的上游LSR。
标签发布方式 - DU模式
DU模式
对于一个特定的FEC,LSR无需从上游获得标签请求消息即进行标签分配与分发。
LSR会主动将自己为FEC捆绑的标签通告给上游邻居,无需邻居先发起请求再通告。
标签发布方式 - DoD模式
DoD模式
对于一个特定的FEC,LSR获得标签请求消息之后才进行标签分配与分发。
一般情况下,对特定FEC的访问需求会触发标签请求消息。
标签分配控制方式 - 独立模式
独立(Independent)模式
本地LSR可以自主地分配一个标签绑定到某个FEC,并通告给上游LSR,而无需等待下游的标签。
标签分配控制方式 - 有序模式
有序(Ordered)模式
对于LSR上某个FEC的标签映射,只有当该LSR已经具有此FEC下一跳的标签映射消息、或者该LSR就是此FEC的出节点时,该LSR才可以向上游发送此FEC的标签映射。
标签保留 - 自由模式
自由(Liberal)模式
LSR收到的标签映射可能来自下一跳,也可能来自非下一跳。
对于从邻居LSR收到的标签映射,无论邻居LSR是不是自己的下一跳都保留。
标签保留 - 保守模式
保守(Conservative)模式
对于从邻居LSR收到的标签映射,只有当邻居LSR是自己的下一跳时才保留。
PHP特性
PHP(Penultimate Hop Popping,次末跳弹出),如果激活了PHP特性,那么egress节点在为本地路由分配标签的时候,会分配一个特殊标签—3,该标签被称为隐式空标签(Implicit NULL Label)。当LSR转发一个标签报文时,如果发现对应的出标签值为3,则LSR会将栈顶标签弹出,并将里面所封装的数据转发给下游LSR。
隐式空标签与显式空标签 (1)
缺省情况下,Egress节点向倒数第二跳分配隐式空标签(implicit-null),即特殊标签3。
但在部署QoS的场景下,标签被弹出后,其中的优先级也会一并丢失。
显式空标签机制,Egress节点向倒数第二跳分配特殊标签0。
R3在转发标签报文时,若出标签封装为0,则不会将标签头部弹出,标签头部中的QoS信息得以保存。R4在收到带0标签的报文的时候,直接弹出标签,不用去查找ILM表项。
缺省情况下,Egress分配的是隐式空标签,通过label advertise explicit-null使能Egress节点向倒数第二跳分配显式空标签。
LDP工作过程详解
组网介绍
网络中已经部署OSPF路由协议且各设备之间能够正常学习到对方的路由信息。
已在各设备及相应接口上激活MPLS及LDP,且在相邻的设备之间已正常建立本地LDP会话。
所有LSR均采用DU + Independent +Liberal方式。
标签分发 - Egress LSR
R4直连网段192.168.4.0/24,R4将主动为到达该网段的路由分配标签,如1041,并主动通过LDP协议报文将标签映射通告给LDP对等体R2和R3。
标签分发 - Transit LSR
以R2为例,在其路由表中,192.168.4.0/24路由的下一跳为R4,当它从R4收到关于192.168.4.0/24的标签映射通告时,由于该通告来自下游LDP邻居,因此这将触发它自己为该路由分配标签1021,并将标签映射通告给LDP邻居(如R1)。R3同理。
标签分发 - Ingress LSR
R1收到LDP邻居R2及R3通告过来的关于192.168.4.0/24路由的标签映射后,将这两个标签都存储起来,但是由于在自己的路由表中,到达192.168.4.0/24的下一跳是R2,因此当前它只会使用R2所通告的标签1021。
标签转发 - Ingress LSR
R1作为Ingress LSR,需要对接收的IP报文执行Push操作压入标签,并进行标签转发。
标签转发 - Transit LSR
R2作为Transit LSR,需要对接收的IP报文执行Swap操作交换标签,并进行标签转发。
标签转发 - Egress LSR
R4作为Egress LSR,需要对接收的IP报文执行Pop操作交换标签,并进行IP转发。
在MPLS中,运行LDP协议的LSR的操作小结
LSR首先通过运行IGP协议(例如OSPF、IS-IS等)来构建路由表、FIB表;
LDP根据相应的模式,为路由表中的路由前缀(FEC)分配标签;
LDP根据相应的模式,将自己为路由前缀分配的标签,通过LDP标签映射报文通告给LDP邻居;
LSR将自己为路由前缀分配的标签,以及LDP邻居为该路由前缀通告的标签存储起来,并与出接口、下一跳地址等信息形成关联(标签转发表项);
当LSR转发到达目的网络的标签报文时,所使用的出站标签总是下游LDP邻居所通告的标签,此处所指的下游邻居,是设备的路由表中到达该目的网络的下一跳设备。
LDP基本配置
LDP基本配置命令
- 使能LDP
[Huawei] mpls Idp
mpls ldp命令用来使能本节点的LDP能力,并进入LDP视图。
[Huawei-GigabitEthernet0/0/0] mpls Idp
在接口视图下,使能当前接口的LDP功能。需先使能全局LDP能力后才能执行接口下的LDP使能命令。 - 配置LDP远端会话
[Huawei] mpls Idp remote-peer remote-peer-name
mpls ldp remote-peer命令用来创建远端对等体并进入远端对等体视图。
[Huawei-mpls-Idp-remote-PeerName] remote-ip ip-address
remote-ip命令用来配置LDP远端对等体的IP地址。 - 配置触发LSP的策略
[Huawei-mpls] Isp-trigger { all | host | ip-prefix ip-prefix-name | none }
Isp-trigger命令用来指定哪些静态路由及IGP路由会触发LDP LSP的建立,缺省情况下,根据32位地址的IP路由触发LDP建立LSP。
all:所有静态路由和IGP路由项触发建立LSP。配置该命令后,所有静态路由及IGP路由会触发LDP建立LSP,会导致LSP数量庞大,占用过多的标签资源,以及整网LSP收敛速度变慢。故一般情况下不推荐配置此命令。
host:32位地址的IP路由触发建立LSP。
ip-prefix ip-prefix-name:根据IP地址前缀列表触发建立LSP。
None:不触发建立LSP。 - 配置LDP标签发布模式
[Huawei-GigabitEthernet0/0/0] mpls Idp advertisement { dod | du }
缺省情况下,标签发布模式为下游自主标签分发(Downstream Unsolicited)。
如果标签分配方式为DU,则标签保持模式为Liberal。
如果标签分配方式为DOD,则标签保持模式为Conservative。 - 配置LDP标签分配控制方式
[Huawei-mpls-Idp] label distribution control-mode { independent | ordered }
缺省情况下,LDP标签分配控制方式为有序标签分配控制(Ordered)。 - 配置PHP特性
[Huawei-mpls] label advertise { explicit-null | implicit-null | non-null }
缺省情况下,出节点向倒数第二跳分配隐式空标签(implicit-null)。
explicit-null:出节点向倒数第二跳分配显式空标签。
implicit-null:出节点向倒数第二跳分配隐式空标签。
non-null:出节点向倒数第二跳正常分配标签。
配置案例
背景:R1、R2、R3和R4之间运行了IGP协议,已经实现了IP层面的互联互通。
需求:通过配置MPLS以及LDP,使得192.168.1.0/24网段和192.168.4.0/24网段可以通过标签交换的方式实现互访。
使能设备上基础的MPLS和LDP功能,以R1为例:
[R1]mpls
[R1-mpls]quit
[R1]mpls ldp
[R1-mpls-ldp]quit
[R1]interface GigabitEthernet 0/0/0
[R1-GigabitEthernet0/0/0]mpls
[R1-GigabitEthernet0/0/0]mpls ldp
[R1-GigabitEthernet0/0/0]quit
由于192.168.1.0/24不是32位掩码的路由,所以要额外配置触发LSP建立:
[R1]ip ip-prefix ldp permit 192.168.1.0 24
[R1-mpls]lsp-trigger ip-prefix ldp
同理,R4也需要进行相应的配置
[R4]ip ip-prefix ldp permit 192.168.4.0 24
[R4-mpls]lsp-trigger ip-prefix ldp
检查配置 - 查看LSP
查看R1使用LDP创建的LSP相关信息
[R1]display mpls ldp lspLDP LSP Information
-------------------------------------------------------------------------------------------------------------------
DestAddress/Mask In/OutLabel UpstreamPeer NextHop OutInterface
-------------------------------------------------------------------------------------------------------------------
10.0.2.2/32 1024/3 10.0.2.2 10.0.12.2 GE0/0/0
10.0.3.3/32 1025/1025 10.0.2.2 10.0.12.2 GE0/0/0
192.168.1.0/24 3/NULL 10.0.2.2 192.168.1.254 GE0/0/1
*192.168.1.0/24 Liberal/1027 DS/10.0.2.2
192.168.4.0/24 1027/1028 10.0.2.2 10.0.12.2 GE0/0/0