MPLS LDP原理与配置

MPLS LDP原理与配置

      MPLS是一种根根据标签报文中携带的短而定长的标签来转发数据的技术。
      MPLS的一个基本概念就是两台LSR必须对在它们之间转发的数据的标签使用上“达成共识”。LSR之间可以运行标签分发协议(Label Distribution Protocol,LDP)来告知其他LSR本设备上的标签绑定信息,从而实现标签报文的正确转发。
      本课程将介绍LDP基本工作原理与特性,以及LDP的基本配置。

一、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的标签空间标识符(Label Space ID)构成。
                     LDP ID以“LSR ID : 标签空间标识”的形式呈现。例如2.2.2.2:0。
              标签空间标识一般存在两种形态:
                     值为0:表示基于设备(或基于平台)的标签空间;
                     值非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报文上。其他消息的传递要求可靠而有序,所以LDP使用TCP建立会话,会话、通告和通知消息都基于TCP传递。
       LDP报文封装
              LDP协议报文包括了LDP头部和LDP消息两部分。
                     LDP头部中携带了LDP版本、报文长度等信息;
                     LDP消息中携带了消息类型、消息长度等信息。

       LDP头部长度为10Byte,包括Version,PDU Length和LDP Identifier三部分。
              Version占用2Byte,表示LDP版本号,当前版本号为1。
              PDU Length占用2Byte,以字节为单位表示除了Version和PDU Length以外的其他部分的总长度。
              LDP Identifier,即LDP ID,长度6Byte,其中前4Byte用来唯一标识一个LSR,后2Byte用来表示LSR的标签空间。
       LDP消息包含五个部分。
              U占用1个bit,为Unknown Message bit。当LSR收到一个无法识别的消息时,该消息的U=0时,LSR会返回给该消息的生成者一个通告,当U=1时,忽略该无法识别的消息,不发送通告给生成者。
              Message Length占用2个bytes,以字节为单位表示Message ID、Mandatory Parameters和Optional Parameters的总长度。
              Message ID占用32个bit,用来标识一个消息。
              Mandatory Parameters和Optional Parameters分别为可变长的该消息的必须的参数和可选的参数。
              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。
                     Non-Existent状态:该状态为LDP Session最初的状态,在此状态双方发送HELLO消息,选举主动方,在收到TCP连接建立成功事件的触发后变为Initialized状态。
                     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状态。
                     Operational状态:该状态是LDP Session成功建立的标志。在此状态下可以发送和接收所有其它的LDP消息。在此状态如果KeepAlive超时或收到致命错误的Notification消息(Shutdown消息)或者自己主动发送Shutdown消息主动结束会话,都会转向Non-Existent状态。
              LDP状态切换信息可以通过指令debug mpls ldp session看到。

       LDP会话建立 - 发现阶段与TCP连接建立

              除了基本发现机制外,可以通过拓展发现机制发现非直连的远端邻接体,该内容不属于课程的重点,详细内容可以查阅RFC5036相关内容。
              LDP的传输地址用于与邻居建立TCP连接。
                     两台LSR之间在建立LDP会话之前,需要先建立TCP连接,以便进行LDP协议报文的交换。
                     设备的传输地址被包含在LDP Hello报文中,LSR通过Hello报文知晓邻居的传输地址。
                     在使用Hello报文发现邻居并且知道了对方的传输地址后,邻居之间就会开始尝试TCP三次握手(基于传输地址),并且交互LDP的初始化报文、标签映射报文等,这些报文都使用双方的传输地址作为源、目的IP地址。
                     LSR必须拥有到达邻居的传输地址的路由。
                     缺省情况下,公网的LDP传输地址等于设备的LSR ID,私网的传输地址等于接口的主IP地址。

       LDP会话建立 - 会话建立与保持

       LDP邻居状态

        LDP会话状态

       LDP会话的状态:
              NonExistent:表示LDP会话的最初状态。在此状态双方互相发送Hello消息,在收到TCP连接建立成功事件的触发后变为Initialized状态。
              Initialized:表示LDP会话处于初始化状态。
              Open Sent:表示LDP会话进入初始化状态后,主动方给被动方发送了Initialized消息,并等待对方的回应。
              Open Recv:表示LDP会话进入初始化状态后,当双方都收到了对方发送的KeepAlive消息后,LDP会话进入Operational状态。
              Operational:表示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捆绑的标签通告给上游邻居,无需邻居先发起请求再通告。

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

                      只有上游邻居向自己请求标签映射时,LSR才会通告标签映射给该邻居
       标签分配控制方式 - 独立模式
              独立(Independent)模式
                     本地LSR可以自主地分配一个标签绑定到某个FEC,并通告给上游LSR,而无需等待下游的标签。

                     标签分配控制方式需要与标签发布方式结合使用:
                            在使用DU作为标签分发方式的情况下,如图所示,R2和R3对192.168.4.0/24这条FEC,可以在上游LSR无请求,且自身没有收到下游LSR的标签绑定信息的情况下,主动向上游LSR通告标签绑定信息。
                            采用DoD作为标签发布方式时,如图所示,R2和R3对192.168.4.0/24这条FEC,只要收到上游LSR的标签请求消息,可以在自身没有收到下游LSR的标签绑定信息的情况下,向上游LSR通告标签绑定信息。
       标签分配控制方式 - 有序模式
              有序(Ordered)模式
                     对于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。

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

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

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

              Conservative方式的优点在于只需保留和维护用于转发数据的标签,以达到节约标签的目的。
                     当使用DU标签分发方式时,LSR可能从多个LDP邻居收到到同一网段的标签映射消息,如图中R3会分别从R2和R5收到网段192.168.1.0/24的标签映射消息。如果采用Conservative保持方式,则R3只保留下一跳R2发来的标签,丢弃非下一跳R5发来的标签。
                     当使用DoD标签分发方式时, LSR根据路由信息只向它的下一跳请求标签。
              当网络拓扑变化引起下一跳邻居改变时:
                     使用自由标签保持方式,LSR可以直接利用原来非下一跳邻居发来的标签,迅速重建LSP,但需要更多的内存和标签空间。
                     使用保守标签保持方式,LSR只保留来自下一跳邻居的标签,节省了内存和标签空间,但LSP的重建会比较慢。
                     保守标签保持方式通常与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表)即可获得相应的转发信息,转发效率得到了提升。

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

       隐式空标签与显式空标签 (2)
              显式空标签机制,Egress节点向倒数第二跳分配特殊标签0。
              R3在转发标签报文时,若出标签封装为0,则不会将标签头部弹出,标签头部中的QoS信息得以保存。R4在收到带0标签的报文的时候,直接弹出标签,不用去查找ILM表项。
              缺省情况下,Egress分配的是隐式空标签,通过label advertise explicit-null使能Egress节点向倒数第二跳分配显式空标签。

              在MPLS视图下,执行命令label advertise { explicit-null | implicit-null | non-null },配置向倒数第二跳分配的标签。
              根据参数的不同,可以配置Egress向倒数第二跳分配不同的标签。
                     缺省情况下,使用的是implicit-null,Egress向倒数第二跳节点分配隐式空标签,值为3。
                     如果配置的是explicit-null,Egress节点向倒数第二跳分配显式空标签,值为0。当需要支持MPLS QoS属性时,可以选用explicit-null。
                     如果配置的是non-null,Egress向倒数第二跳正常分配标签,即分配的标签值不小于16。

二、LDP工作原理
       组网介绍
              网络中已经部署OSPF路由协议且各设备之间能够正常学习到对方的路由信息。
              已在各设备及相应接口上激活MPLS及LDP,且在相邻的设备之间已正常建立本地LDP会话。
              所有LSR均采用DU + Independent +Liberal方式。

              华为设备目前缺省模式为下游自主方式(DU)+ 有序标签分配控制方式(Ordered)+ 自由标签保持方式(Liberal)。
              对于从R1进入,到达192.168.4.0/24的数据,R1为Ingress LSR,R4为Egress LSR。

        标签分发 - Egress LSR
              R4直连网段192.168.4.0/24,R4将主动为到达该网段的路由分配标签,如1041,并主动通过LDP协议报文将标签映射通告给LDP对等体R2和R3。

              注:缺省情况下,根据32位的主机IP路由触发LDP建立LSP。可以通过手工配置触发非32位路由的LSP建立。

       标签分发 - 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。

              注:当R2发生故障时,OSPF路由将会重新收敛,此时R1的路由表中192.168.4.0/24路由的下一跳将会切换至R3,此时R1将启用R3所通告的、关于192.168.4.0/24的标签。
       标签转发 - Ingress LSR
              R1作为Ingress LSR,需要对接收的IP报文执行Push操作压入标签,并进行标签转发。

             当R1收到发往192.168.4.1的IP报文时,首先在其FIB表中查询该目的IP地址,它发现所匹配的表项的Tunnel ID为非0,因此继续在NHLFE中查询该Tunnel ID,然后意识到需要将对该IP报文压入标签并进行标签转发,出接口为GE0/0/0、下一跳为R2、出站标签为1021,于是为报文插入标签头部并转发出去。
       标签转发 - Transit LSR
              R2作为Transit LSR,需要对接收的IP报文执行Swap操作交换标签,并进行标签转发。

              当R2收到携带1021标签的标签报文时,查询ILM,根据ILM对应到NHLFE中的表项。于是,R2对该标签报文通过swap操作将标签更换为1041,并从相应的接口转发出去。
       标签转发 - Egress LSR
              R4作为Egress LSR,需要对接收的IP报文执行Pop操作交换标签,并进行IP转发。

              当R4收到携带1041标签的标签报文时,查询ILM,根据ILM查询到操作为Pop。于是,R4对该标签报文通过Pop操作将最外层标签剥离,此时该报文已经变成了标准IP报文,R4将对该IP报文执行标准的IP转发流程。
              R4在转发该报文时分别查询了LFIB和FIB表,作为最后Egress LSR,其存在转发效率提升的可能性,怎么做?

       在MPLS中,运行LDP协议的LSR的操作小结
              LSR首先通过运行IGP协议(例如OSPF、IS-IS等)来构建路由表、FIB表;
              LDP根据相应的模式,为路由表中的路由前缀(FEC)分配标签;
              LDP根据相应的模式,将自己为路由前缀分配的标签,通过LDP标签映射报文通告给LDP邻居;
              LSR将自己为路由前缀分配的标签,以及LDP邻居为该路由前缀通告的标签存储起来,并与出接口、下一跳地址等信息形成关联(标签转发表项);
              当LSR转发到达目的网络的标签报文时,所使用的出站标签总是下游LDP邻居所通告的标签,此处所指的下游邻居,是设备的路由表中到达该目的网络的下一跳设备。

三、LDP基本配置
       LDP基本配置命令 (1)
       1、使能LDP
              [Huawei] mpls ldp
              mpls ldp命令用来使能本节点的LDP能力,并进入LDP视图。
              [Huawei-GigabitEthernet0/0/0] mpls ldp
              在接口视图下,使能当前接口的LDP功能。需先使能全局LDP能力后才能执行接口下的LDP使能命令。
       2、配置LDP远端会话
              [Huawei] mpls ldp remote-peer remote-peer-name
              mpls ldp remote-peer命令用来创建远端对等体并进入远端对等体视图。
              [Huawei-mpls-ldp-remote-PeerName] remote-ip ip-address
              remote-ip命令用来配置LDP远端对等体的IP地址。
       LDP基本配置命令 (2)
       3、配置触发LSP的策略
              [Huawei-mpls] lsp-trigger { all | host | ip-prefix ip-prefix-name | none }
              lsp-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。
       4、配置LDP标签发布模式
              [Huawei-GigabitEthernet0/0/0] mpls ldp advertisement { dod | du }
              缺省情况下,标签发布模式为下游自主标签分发(Downstream Unsolicited)。
                     如果标签分配方式为DU,则标签保持模式为Liberal。
                     如果标签分配方式为DOD,则标签保持模式为Conservative。
              BGP路由也可以触发LDP LSP的建立,但此部分内容不在本课程的讨论范围内。
       LDP基本配置命令 (3)
       5、配置LDP标签分配控制方式
              [Huawei-mpls-ldp] label distribution control-mode { independent | ordered }
              缺省情况下,LDP标签分配控制方式为有序标签分配控制(Ordered)。
       6、配置PHP特性
              [Huawei-mpls] label advertise { explicit-null | implicit-null | non-null }
              缺省情况下,出节点向倒数第二跳分配隐式空标签(implicit-null)。
                     explicit-null:出节点向倒数第二跳分配显式空标签。
                     implicit-null:出节点向倒数第二跳分配隐式空标签。
                     non-null:出节点向倒数第二跳正常分配标签。


              MPLS体系有多种标签分配协议,LDP标签分配协议是这些协议中使用较广的一种。
              LDP是LSR之间协商标签含义的过程。LDP协议使用发现、会话、通告、通知四类报文进行会话的建立和标签的分发。
              LDP通过标签发布方式、标签分配控制方式和标签保持方式来决定标签的发布和管理。华为数通产品默认的方式为:下游自主标签发布方式+有序标签分配控制方式+自由标签保持方式。
              利用LDP可以实现将网络层的路由信息直接映射到标签信息,进而建立起标签交换路径(LSP)。LSR之间将依据本地转发表中对应于一个特定FEC的入标签、下一跳节点、出标签等信息连接在一起,从而形成跨越整个MPLS域的标签交换路径。

posted @ 2022-01-17 15:24  博雅塔之客  阅读(1120)  评论(0编辑  收藏  举报