MPLS LDP 原理与配置

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

(1)状态机

    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邻居所通告的标签,
         此处所指的下游邻居,是设备的路由表中到达该目的网络的下一跳设备。
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值