MPLS LDP 简述

LDP是MPLS的一种控制协议,相当于传统网络中的信令协议,负责FEC的分类、标签的分配以及LSP的建立和维护等操作。LDP规定了标签分发过程中的各种消息以及相关处理过程。

LDP的工作过程主

LDP的工作过程主要分为两部分

        ①LSR之间建立LDP会话。

        ②LSR之间基于LDP会话动态交换标签与FEC的映射信息,并根据标签信息建立LSP。

LDP会话、LDP邻接体、LDP对等体

LSR之间交互标签绑定消息之前必须建立LDP会话。LDP会话可以分为:

  1. 本地LDP会话(Local LDP Session):建立会话的两个LSR之间是直连的;
  2. 远程LDP会话(Remote LDP Session):建立会话的两个LSR之间可以是直连的,也可以是非直连的。

两台LSR之间交互Hello消息之后,即建立起邻接体(Adjacency)关系;

在建立邻接体关系的基础上,两台LSR之间交互LDP会话消息,建立起LDP会话,两台设备之间形成LDP对等体关系。

LSR ID与LDP ID

每一台运行了LDP的LSR除了必须配置LSR ID,还必须拥有LDP ID。

  1. LDP ID的长度为48 bit,由32 bit的LSR ID与16 bit的标签空间标识符(Label Space ID)构成。
  2. LDP ID以“LSR ID : 标签空间标识”的形式呈现。例如2.2.2.2:0。

标签空间标识一般存在两种形态:

  1. 值为0:表示基于设备(或基于平台)的标签空间;
  2. 值非0:表示基于接口的标签空间。

LDP消息

运行LDP协议的LSR之间通过交换LDP消息来实现邻居发现、会话建立与维护以及标签管理等功能。

•    按照消息的功能,LDP消息一共可以分为四大类型:发现消息(Discovery Message),会话消息(Session Message),通告消息(Advertisement Message)和通知消息(Notification Message)。
▫    发现消息:用来宣告和维护网络中一个LSR的存在;用于通告和维护网络中LSR的存在,如Hello报文。
▫    会话消息:用于建立、维护和终止LDP对等体之间的会话,如Initialization报文、 Keepalive报文。
▫    通告消息:用来生成、改变和删除FEC的标签映射。
▫    通知消息:用来宣告告警和错误信息。
•    LDP消息承载在UDP或TCP之上,端口号均为646 。其中发现消息基于UDP传递;会话消息、通告消息、通知消息都基于TCP传递。

LDP报文封装

LDP协议报文包括了LDP头部和LDP消息两部分。

  1. LDP头部中携带了LDP版本、报文长度等信息;
  2. LDP消息中携带了消息类型、消息长度等信息。

 LDP头部长度为10 Byte,包括Version,PDU Length和LDP Identifier三部分。

  1.  Version占用2 Byte,表示LDP版本号,当前版本号为1。
  2. PDU Length占用2 Byte,以字节为单位表示除了Version和PDU Length以外的其他部分的总长度。
  3. LDP Identifier,即LDP ID,长度6 Byte,其中前4 Byte用来唯一标识一个LSR,后2 Byte用来表示LSR的标签空间。

•    LDP消息包含五个部分。

  1. U占用1个 bit,为Unknown Message bit。如果对端收到的LDP消息中“Message type”字段为未知的LDP消息类型,且“U”字段的值为“0”,则向源端发送通知消息;如果对端收到的LDP消息中“Message type”字段为未知的LDP消息类型,且“U”字段的值为“1”,则忽略该未知消息。
  2. Message Length占用2 Bytes,以字节为单位表示Message ID、Mandatory Parameters和Optional Parameters的总长度。
  3. Message ID占用32 bit,用来标识一个消息。
  4. Mandatory Parameters和Optional Parameters分别为可变长的该消息的必须的参数和可选的参数。
  5. Message Type表示具体的消息类型,目前LDP定义的常用的消息有Notification, Hello,Initialization,Keepalive,Address,Address Withdraw,Label Mapping,Label Request,Label Abort Request,Label Withdraw,Label Release。

LDP会话状态机

LDP使用5种状态描述LDP会话状态机。

LDP Session协商过程可以通过状态机来描述。

如图所示,有5种状态。分别是Non-Existent,Initialized,OpenRec,OpenSent,Operational。

  1. Non-Existent状态:该状态为LDP Session最初的状态,在此状态双方发送HELLO消息,选举主动方,在收到TCP连接建立成功事件的触发后变为Initialized状态。
  2. Initialized状态:该状态下分为主动方和被动方两种情况,主动方将主动发送Initialization消息,转向OpenSent状态,等待回应的Initialization消息;被动方在此状态等待主动方发给自己的Initialization消息,如果收到的Initialization消息的参数可以接受,则发送Initialization和Keepalive转向OpenRec状态。主动方和被动方在此状态下收到任何非Initialization消息或等待超时时,都会转向Non-Existent状态。
  3. OpenSent 状态:此状态为主动方发送Initialization消息后的状态,在此状态等待被动方回答Initialization消息和Keepalive消息,如果收到的Initialization消息中的参数可以接受则转向OpenRec状态,如果参数不能接受或Initialization消息超时则断开TCP连接转向Non-Existent状态。
  4. OpenRec状态:在此状态不管主动方还是被动方都是发出Keepalive后的状态,在等待对方回应Keepalive,只要收到Keepalive消息就转向Operational状态;如果收到其它消息或Keepalive超时则转向Non-Existent状态。
  5. Operational状态:该状态是LDP Session成功建立的标志。在此状态下可以发送和接收所有其它的LDP消息。在此状态如果Keepalive超时或收到致命错误的Notification消息(Shutdown消息)或者自己主动发送Shutdown消息主动结束会话,都会转向Non-Existent状态。

LDP状态切换信息可以通过指令debug mpls ldp session看到。

LDP会话建立

发现阶段与TCP连接建立

•    除了基本发现机制外,可以通过拓展发现机制发现非直连的远端邻接体,该内容不属于课程的重点,详细内容可以查阅RFC5036相关内容。
•    LDP的传输地址用于与邻居建立TCP连接。

  1. 两台LSR之间在建立LDP会话之前,需要先建立TCP连接,以便进行LDP协议报文的交换。
  2. 设备的传输地址被包含在LDP Hello报文中,LSR通过Hello报文知晓邻居的传输地址。
  3. 在使用Hello报文发现邻居并且知道了对方的传输地址后,邻居之间就会开始尝试TCP三次握手(基于传输地址),并且交互LDP的初始化报文、标签映射报文等,这些报文都使用双方的传输地址作为源、目的IP地址。
  4. LSR必须拥有到达邻居的传输地址的路由。

会话建立与保持

LDP邻居状态

 LDP会话状态

  1. NonExistent:表示LDP会话的最初状态。在此状态双方互相发送Hello消息,在收到TCP连接建立成功事件的触发后变为Initialized状态。
  2. Initialized:表示LDP会话处于初始化状态。
  3. Open Sent:表示LDP会话进入初始化状态后,主动方给被动方发送了Initialized消息,并等待对方的回应。
  4. Open Recv:表示LDP会话进入初始化状态后,当双方都收到了对方发送的Keepalive消息后,LDP会话进入Operational状态。
  5. Operational:表示LDP会话建立成功。

 标签的发布和管理

在MPLS网络中,下游LSR决定标签和FEC的绑定关系,并将这种绑定关系发布给上游LSR。

LDP通过发送标签请求和标签映射消息,在LDP对等体之间通告FEC和标签的绑定关系来建立LSP

标签的发布和管理由标签发布方式、标签分配控制方式和标签保持方式来决定。

MPLS根据数据的转发方向确定上、下游关系。标签报文从上游LSR发出,被下游LSR接收并处理。

标签发布方式

DU模式

对于一个特定的FEC,LSR无需从上游获得标签请求消息即进行标签分配与分发。LSR会主动将自己为FEC捆绑的标签通告给上游邻居,无需邻居先发起请求再通告。

•    标签分配:LSR从本地标签空间中取出一个标签与FEC绑定。
•    标签分发:LSR将标签与FEC的绑定关系通知给上游LSR。
•    标签发布方式为DU时,系统默认支持LDP为所有对等体分标签,即每个节点都可以向所有的对等体发布标签映射关系,不再区分上下游关系。因为在只给上游对等体分标签情况下,发送标签映射消息的时候,要根据路由信息对会话的上下游关系进行确认。

DoD模式

对于一个特定的FEC,LSR获得标签请求消息之后才进行标签分配与分发。一般情况下,对特定FEC的访问需求会触发标签请求消息。只有上游邻居向自己请求标签映射时,LSR才会通告标签映射给该邻居。

标签分配控制方式

独立模式

本地LSR可以自主地分配一个标签绑定到某个FEC,并通告给上游LSR,而无需等待下游的标签。

标签分配控制方式需要与标签发布方式结合使用:

  1. 在使用DU作为标签分发方式的情况下,如图所示,R2和R3对192.168.4.0/24这条FEC,可以在上游LSR无请求,且自身没有收到下游LSR的标签绑定信息的情况下,主动向上游LSR通告标签绑定信息。

采用DoD作为标签发布方式时,如图所示,R2和R3对192.168.4.0/24这条FEC,只要收到上游LSR的标签请求消息,可以在自身没有收到下游LSR的标签绑定信息的情况下,向上游LSR通告标签绑定信息。

有序模

对于LSR上某个FEC的标签映射,只有当该LSR已经具有此FEC下一跳的标签映射消息、或者该LSR就是此FEC的出节点时,该LSR才可以向上游发送此FEC的标签映射。

•    当标签控制方式为Ordered,只有当LSR收到特定FEC下一跳发送的特定FEC标签映射消息或者LSR是LSP的出口节点时,LSR才可以向上游发送标签映射消息。
▫    当标签分发方式为DU时,如图所示,对于192.168.4.0/24这条FEC,不论上游LSR是否有请求,必须收到下游LSR对此FEC的标签绑定信息才向上游LSR发布标签绑定信息,所以必须由Egress LSR,也就是R4作为LSP建立的“起点”。
▫    当标签发布方式采用DoD时,如图所示,对于192.168.4.0/24这条FEC,只有收到上游LSR请求的请求,且自身已经收到下游LSR的标签绑定信息的情况下,才向上游LSR通告标签绑定信息。因此,必须由Ingress LSR(R1)发起请求,逐跳请求到Egress LSR(R4),最终由R4开始,向上游建立LSP。

标签保留

自由模式

LSR收到的标签映射可能来自下一跳,也可能来自非下一跳。对于从邻居LSR收到的标签映射,无论邻居LSR是不是自己的下一跳都保留。

•    当基于IP网络部署MPLS时,LSR根据IP路由表判断接收到的标签映射是否来自下一跳。
•    Liberal方式的最大优点在于路由发生变化时能够快速建立新的LSP进行数据转发,因为Liberal方式保留了所有的标签。缺点是需要分发和维护不必要的标签映射。
▫    DU标签分发方式下,如果采用Liberal保持方式,则R2保留所有LDP邻居 R3和R5发来的关于192.168.4.0/24这个FEC的标签,无论R3和R5是否是IP路由表中到达192.168.4.0/24的下一跳。
▫    DoD标签分发方式下,如果采用Liberal保持方式, LSR会向所有LDP邻居请求标签。但通常来说,DoD分发方式都会和Conservative保持方式搭配使用。

保守模式

保守(Conservative)模式对于从邻居LSR收到的标签映射,只有当邻居LSR是自己的下一跳时才保留。

Conservative方式的优点在于只需保留和维护用于转发数据的标签,以达到节约标签的目的。

  1. 当使用DU标签分发方式时,LSR可能从多个LDP邻居收到到同一网段的标签映射消息,如图中R2会分别从R3和R5收到网段192.168.4.0/24的标签映射消息。如果采用Conservative保持方式,则R2只保留下一跳R3发来的标签,丢弃非下一跳R5发来的标签。
  2. 当使用DoD标签分发方式时, LSR根据路由信息只向它的下一跳请求标签。

当网络拓扑变化引起下一跳邻居改变时:

  1. 使用自由标签保持方式,LSR可以直接利用原来非下一跳邻居发来的标签,迅速重建LSP,但需要更多的内存和标签空间。
  2. 使用保守标签保持方式,LSR只保留来自下一跳邻居的标签,节省了内存和标签空间,但LSP的重建会比较慢。
  3. 保守标签保持方式通常与DoD方式一起,用于标签空间有限的LSR。

PHP特性

PHP(Penultimate Hop Popping,次末跳弹出),如果激活了PHP特性,那么egress节点在为本地路由分

配标签的时候,会分配一个特殊标签(3),该标签被称为隐式空标签(Implicit NULL Label)。当LSR转发一个标签报文时,如果发现对应的出标签值为3,则LSR会将栈顶标签弹出,并将里面所封装的数据转发给下游LSR。

•    在标签发布时,R3为作为192.168.3.0/24这条FEC的Egress LSR。分配标签时,R3为该FEC分配了标签3,并将该标签绑定信息通告给R2。
•    在数据转发时,R2作为到达192.168.3.0的次末跳(倒数第二跳),发现出标签值为3,于是将标签头部弹出,将IP报文转发给R3,而R3则仅需执行一次查询操作(查询FIB表)即可获得相应的转发信息,转发效率得到了提升。

隐式空标签与显式空标签

缺省情况下,Egress节点向倒数第二跳分配隐式空标签(implicit-null),即特殊标签3。但在部署QoS的场景下,标签被弹出后,其中的优先级也会一并丢失。

显式空标签机制,Egress节点向倒数第二跳分配特殊标签0。

R3在转发标签报文时,若出标签封装为0,则不会将标签头部弹出,标签头部中的QoS信息得以保存。R4在收到带0标签的报文时,直接弹出标签,不用去查找ILM表项。

缺省情况下,Egress分配的是隐式空标签。

•    在MPLS视图下,执行命令label advertise { explicit-null | implicit-null | non-null },配置向倒数第二跳分配的标签。
•    根据参数的不同,可以配置Egress向倒数第二跳分配不同的标签。

  1. 缺省情况下,使用的是implicit-null,Egress向倒数第二跳节点分配隐式空标签,值为3。
  2. 如果配置的是explicit-null,Egress节点向倒数第二跳分配显式空标签,值为0。当需要支持MPLS QoS属性时,可以选用explicit-null。
  3.  如果配置的是non-null,Egress向倒数第二跳正常分配标签,即分配的标签值不小于16。

  • 14
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

❸杨开泰

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值