MPLS协议原理与配置

一、MPLS的简单概述

MPLS:(Multi-Protocol Lable Switching的缩写)多协议标签交换:是一种在开放的通信网上利用标签引导数据高速、高效传输的新技术。多协议的含义是指MPLS不但可以支持多种网络层层面上的协议,还可以兼容第二层的多种数据链路层技术。

优点:1、MPLS采用短而定长的标签进行数据转发,大大提高了硬件限制下的转发能力;

           2、MPLS可以扩展到多种网络协议(例如:IPv6,IPX等);

           3、MPLS协议从各种链路层协议(例如:PPP、ATM、帧中继、以太网等)得到链路层服务;

           4、可为网络层提供面向连接的服务;

           5、MPLS能从IP路由协议和控制协议中得到支持,路由功能强大、灵活,可以满足各种新应用对网络的要求。

MPLS协议原理与配置

MPLS协议处在链路层和网络层之间;例如ATM和IP。提供了一种方式将IP地址映射为简单的且具有固定长度的标签,用于不同的包转发和包交换技术。是现有路由和交换协议的接口,如IP、ATM、帧中继、RSVP(资源预留协议)、OSPF(开放最短路径优先)等等。

》》》》》》》MPLS的基本结构:

MPLS协议原理与配置

1、路由器的角色(在MPLS网络中,路由器的角色分为两种):

LER(Label Edge Router): 在MPLS网络中,用于标签的压入或弹出,如上图中的RTB,RTD

LSR(Label Switched Router):在MPLS网络中,用于标签的交换,如图中的RTC。

2、LSP(Label Switched Path):标签交换路径,即到达同一目的地址的报文在MPLS网络中经过的路径。

 根据数据流的方向:位于LSP的入口LER被称为入节点(Ingress);

                                 位于LSP中间的LSR被称为中间节点(Transit);

                                 位于LSP的出口LER被称为出节点(Egress)。

MPLS报文由Ingress发往Transit,则Ingress是Transit的上游节点,Transit是Ingress的下游节点;同理,Transit是Egress的上游节点,Egress是Transit的下游节点。

3、FEC(Forwarding Equivalent Class)转发等价类:一般指具有相同转发处理方式的报文。在MPLS网络中,到达同一目的地址的所有报文就是一个FEC。通常对一个FEC分配唯一的标签。

MPLS作为一种分类转发技术,将具有相同转发处理方式的报文分为一类,称该类报文为一个FEC(Forwarding Equivalent Class)。

FEC的划分方式非常灵活,可以是以源地址、目的地址、源端口、目的端口、协议类型或v*n等为划分依据的任意组合。

》》》》》》》MPLS网络模型:

MPLS协议原理与配置

位于MPLS域内的交换机和ATM交换机称为标签交换交换机LSR,位于MPLS域边缘用于连接IP网络或其他非MPLS网络的交换机或ATM交换机称为LER

在IP网络内进行传统的IP转发,在MPLS域内进行标签转发。

LER和LSR都具有标签转发能力,只是由于两者所处位置不同,对于报文的处理不同。

LER负责从IP网络接收IP报文并给报文打上标签,然后送到LSR,反之,也负责从LSR接收带标签的报文并去掉标签然后转发到IP网络;

LSR只负责按照标签进行转发即可。

报文在MPLS域内进行转发时经过的路径称为标签转发路径LSP,这条路径是在转发报文之前就已经通过各种协议确定并建立的,报文会在特定的LSP上传递。

》》》》》》》MPLS体系结构:

MPLS协议原理与配置

控制平面:负责产生和维护路由信息以及标签信息。

(1)路由信息表RIB(Routing Information Base):由IP路由协议(IP Routing Protocol)生成,用于选择路由。

(2)标签分发协议LDP(Label Distribution Protocol):负责标签的分配、标签转发信息表的建立、标签交换路径的建立、拆除等工作。

(3)标签信息表LIB(Label Information Base):由标签分发协议生成,用于管理标签信息。

转发平面:即数据平面(Data Plane),负责普通IP报文的转发以及带MPLS标签报文的转发((标签换成什么,从什么端口转发出去))。

(1)转发信息表FIB(Forwarding Information Base):从RIB提取必要的路由信息生成,负责普通IP报文的转发。

(2)标签转发信息表LFIB(Label Forwarding Information Base):简称标签转发表,由标签分发协议建立LFIB,负责带MPLS标签报文的转发。

MPLS协议原理与配置

》》》》》》MPLS数据报文结构:

MPLS协议原理与配置

标签(Label)是一个短而定长的、只有本地意义的标识,用于唯一标识去往同一目的地址的报文分组。

MPLS标签的长度为4个字节,共分4个字段:

                (1)Label:20bit,标签值域;                  

                (2)Exp:3bit,用于扩展。现在通常用做CoS(Class of Service),当设备发生阻塞时,优先发送优先级高的报文;

                (3) S:1bit,栈底标识。MPLS支持多层标签,即标签嵌套。S值为1时表明为最底层标签;

                (4)TTL:8bit,和IP报文中的TTL(Time To Live)意义相同。

标签空间是指标签的取值范围,空间划分:

                (1)0~15:特殊标签。如标签3,称为隐式空标签,用于倒数第二跳弹出;

                (2)16~1023:静态LSP和静态CR-LSP(Constraint-based Routed Label Switched Path)共享的标签空间;

》》》》》》MPLS标签嵌套:

MPLS协议原理与配置

标注:    S标识是否是栈底标签;这里的Label1,Label2,Label3都指的是前一个胶片中的4个Bytes的MPLS头部,其中包含有20bits的标签信息。

标签嵌套应用:MPLS v*n,MPLS TE;

(1)二层报文头部中的协议字段PID可以用来标识该二层头部后面封装的是带标签的报文还是IP头。

(2)MPLS Header中的S字段可以用来表示其后面跟随的是另外一个标签还是三层的IP头。

(3)MPLS通常只为报文分配一个标签。但是在MPLS的高级应用会使用多层标签。如:MPLS v*n中会使用两个标签(复杂情况下,会用到三个标签),外层标签用于公网转发,内层标签用来标识报文属于哪个v*n;MPLS TE也会使用两个或多个标签,最外层标签标识TE隧道,内层标签表明报文的目的地。

 》》》》》》MPLS转发——Ingress LER

MPLS协议原理与配置MPLS协议原理与配置

当一个IP报文进入MPLS域时,入口LER(SWA)会分析报文,根据该报文的特点(一般根据目的地址前缀分析)决定应该给该报文封装哪个标签以及应该从哪个接口转发给哪个下一跳。

NHLFE(Next Hop Label Forwarding Entry)下一跳标签转发表项:进行标签转发时用到;下面是一些基本信息,   

                  1、报文的下一跳;

                  2、如何进行标签操作(包括压入新的标签,弹出标签,用新的标签替换原有的标签等操作)。        

                  3、NHLFE还可能包含一些其他信息,如发送报文使用的链路层封装等。>

》》》》》》MPLS转发——Ingress LER(SWA):

MPLS协议原理与配置

只有将FEC和NHLFE关联起来,才能实现对于同一类报文进行特定的标签转发——FTN实现这个功能;

FTN( FEC-to-NHLFE )将FEC映射到NHLFE。当LER将一个不带MPLS标签的IP报文转发给MPLS LSR时需要使用FTN。如果网络中存在等值路径,那么一个FEC可能会映射到多个NHLFE。

》》》》》》MPLS转发——LSR(SWB):

MPLS协议原理与配置MPLS协议原理与配置

SWB收到带有标签1030的数据包,根据标签转发,找到下一跳为10.1.1.6,并用出标签替换入(SWAP)标签,继续转发。(本例情况特殊,出标签和入标签相同)。

ILM将每个入标签映射到NHLFE,当LSR转发带有标签的报文时使用ILM。同样,如果存在等值路径时一个入标签会映射多个NHLFE。

》》》》》》MPLS转发——LSR(SWC):

MPLS协议原理与配置

SWC收到带有标签1030的报文后,根据标签进行转发,并用新出标签替换原来标签。

》》》》》》MPLS转发——LSR(SWD):

MPLS协议原理与配置

Egress LSR SWD收到带有标签1032的报文后,去掉(POP)标签,查找IP路由表转发。

二、LSP建立方式

MPLS协议原理与配置

建立LSP的方式有两种:

           (1)静态LSP:用户通过手工方式为各个转发等价类分配标签建立转发隧道;

           (2)动态LSP:通过标签发布协议动态建立转发隧道。

》》》》》》静态LSP:

MPLS协议原理与配置

静态LSP的特点:

             (1)不使用标签发布协议,不需要交互控制报文,资源消耗比较小;

             (2)通过静态方式建立的LSP不能根据网络拓扑变化动态调整,需要管理员干预。

静态LSP适用于拓扑结构简单并且稳定的网络。

配置静态LSP时,管理员需要为各路由器手工分配标签,需要遵循的原则是:前一节点出标签的值等于下一个节点入标签的值。

(1)配置LSR ID用来在网络中唯一标识一个MPLS路由器。缺省没有配置LSR ID,必须手工配置。为了提高网络的可靠性,推荐使用LSR某个Loopback接口的地址作为LSR ID。

(2)在MPLS域的所有节点与相应的接口上开启MPLS协议。

(3)LSP双向都要配置,才能完成RTA正常访问RTD的100.1.1.1/32的路由。

》》》》》》动态LSP:

MPLS协议原理与配置

动态LSP通过LDP协议实现对FEC的分类、标签的分配及LSP的建立和维护等操作。

动态LSP的特点:

           (1)组网配置简单,易于管理和维护;

           (2)支持基于路由动态建立LSP,网络拓扑发生变化时,能及时反映网络状况。

图示解析:

(1)Egress路由器RTD为本地存在的路由分配标签,并将路由和标签的绑定关系主动发送给上游邻居路由器RTC;

(2)路由器RTC收到下游邻居路由器RTD的路由和标签的绑定关系后,将其记录到LIB中,并将自己分配的标签和路由的绑定关系发送给上游邻居路由器RTB;

(3)RTB执行相同的动作将标签和路由的绑定关系发送给上游邻居路由器RTA,RTA为Ingress路由器,没有上游邻居,因此动态的LSP完成建立。

(4)LDP协议:是一个通称,标签发布协议;

》》》》》》LDP邻居建立:

LDP协议主要使用四类消息:

      (1)发现(Discovery)消息:用于通告和维护网络中邻居的存在,如Hello消息。

      (2)会话(Session)消息:用于建立、维护和终止LDP对等体之间的会话,如Initialization消息、Keepalive消息。

      (3)通告(Advertisement)消息:用于创建、改变和删除FEC的标签映射,如Address消息、Label Mapping消息。

      (4)通知(Notification)消息:用于提供建议性的消息和差错通知。

MPLS协议原理与配置

LDP邻居建立过程上图解析:

(1)两个LSR之间互相发送Hello消息。

              Hello消息中携带传输地址,双方使用传输地址建立LDP会话。

(2)传输地址较大的一方作为主动方,发起TCP连接。

              上图中,RTB作为主动方发起TCP连接,RTA作为被动方等待对方发起连接。

(3)TCP连接建立成功后,由主动方RTB发送初始化消息,协商建立LDP会话的相关参数。

              LDP会话的相关参数包括LDP协议版本、标签分发方式、Keepalive保持定时器的值、最大PDU长度和标签空间等。

(4)被动方RTA收到初始化消息后,如果RTA接受相关参数,则发送初始化消息,同时发送Keepalive消息给主动方RTB。 如果被动方RTA不能接受相关参数,则发送Notification消息终止LDP会话的建立。 主动方RTB收到初始化消息后,接受相关参数,则发送Keepalive消息给被动方RTA。 如果主动方RTB不能接受相关参数,则发送Notification消息给被动方RTA终止LDP会话的建立。

(5)当双方都收到对端的Keepalive消息后,LDP会话建立成功。LDP会话建立成功后,进行FEC的创建与标签的分发。

》》》》》》标签的发布方式:

MPLS协议原理与配置

标签的发布方式:

DU(Downstream Unsolicited,下游自主方式):对于一个到达同一目地址报文的分组,LSR无需从上游获得标签请求消息即可进行标签分配与分发。

DoD(Downstream on Demand,下游按需方式):对于一个到达同一目的地址报文的分组,LSR获得标签请求消息之后才进行标签分配与分发。

图示解析:

(1)采用DU方式分发标签,对于目的地址为100.1.1.1/32的分组,下游RTD(Egress)通过标签映射消息主动向上游RTC(Transit)通告自己主机路由100.1.1.1/32的标签。

(2)采用DoD方式分发标签,对于目的地址为100.1.1.1/32的分组,上游RTC(Transit)向下游发送标签请求消息,下游RTD(Egress)收到标签请求消息后,才会向上游发送标签映射消息。

华为设备默认采用DU的方式发布标签。

DU无需等待上游的请求消息,可以直接向邻居分配标签。在网络拓扑发生变化时,采用DU方式可以快速反应为新的拓扑分发标签,收敛时间相对于DoD方式较短。

》》》》》》关于上游、下游:

(1)数据从上游传向下游;

(2)标签从下游传向上游(与路由的传递方向一致)(本地路由属于最下游)。

》》》》》》标签的分配控制方式:

标签的分配控制方式:

Independent(独立标签分配控制方式):本地LSR可以自主地分配一个标签绑定到某个IP分组,并通告给上游LSR,而无需等待下游的标签。

Ordered(有序标签分配控制方式):只有当该LSR已经具有此IP分组的下一跳的标签,或者该LSR就是该IP分组的出节点时,该LSR才可以向上游发送此IP分组的标签。(华为设备默认)

MPLS协议原理与配置

图示解析:

(1)采用Independent方式:

                 ~.~如果标签发布方式为DU,且标签分配控制方式为Independent,则RTC(Transit)无需等待下游RTD(Egress)的标签,就会直接向上游RTB分发标签。

                 ~.~如果标签发布方式为DoD,且标签分配控制方式为Independent,则发送标签请求的RTB(Transit)的直连下游RTC(Transit)会直接回应标签,而不必等待来自下游RTD(Egress)的标签。

(2)采用Ordered方式:

                 ~.~如果标签发布方式为DU,且标签分配控制方式为Ordered,则RTC(Transit)只有收到下游RTD(Egress)的标签,才会向上游RTB分发标签。

                 ~.~如果标签发布方式为DoD,且标签分配控制方式为Ordered,则发送标签请求的RTB(Transit)的直连下游RTC(Transit)只有收到下游RTD(Egress)的标签,才会向上游RTB分发标签。

华为设备默认采用Ordered的方式分配标签。

采用Ordered方式,只有当该LSR已经具有此IP分组的下一跳的标签时,才能向上游分发标签,这样是为了避免下游IP分组的标签未分配或收敛时间较长,上游的标签已分配,数据开始转发造成的数据丢失。

》》》》》》标签的保持方式:

标签的保持方式:

Liberal(*标签保持方式):对于从邻居LSR收到的标签映射,无论邻居LSR是不是自己的下一跳都保留。(华为默认) 

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

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

使用*标签保持方式,LSR可以直接利用原来非下一跳邻居发来的标签,迅速重建LSP,但需要更多的内存和标签空间。          使用保守标签保持方式,LSR只保留来自下一跳邻居的标签,节省了内存和标签空间,但LSP的重建会比较慢。

华为设备默认采用*标签保持方式保存标签。

MPLS协议原理与配置

图示解析:

路由表中,RTB通过RTD到达100.1.1.1/32的路径最优,RTB从RTC收到分配给100.1.1.1/32的标签处理方式有以下两种: 一是RTB保留从RTC收到的标签信息,二是RTB不保留从RTC收到的标签信息,前者称为Liberal方式,后者称为Conservative方式。

》》》》》》LDP建立LSP过程:

IGP协议负责实现MPLS网络内路由可达,为FEC的分组提供路由(默认下只为主机路由(32位)分配路由);

LDP协议负责实现对FEC的分类、标签的分配以及LSP的建立和维护等操作。

MPLS协议原理与配置

LDP动态建立LSP的过程图示解析:

(1)RTD上存在100.1.1.1/32的主机路由,因为RTD是Egress节点,所以直接向自己上游邻居RTC发布100.1.1.1/32与标签的绑定关系;

(2)RTC收到下游邻居RTD分配的100.1.1.1/32与标签的绑定关系后,将标签记录在自己的LIB表中,并向上游邻居RTB发布100.1.1.1/32与标签的绑定关系,同时RTC查看自己IP路由表中到达100.1.1.1/32的下一跳是否为RTD,如果IP路由表中的下一跳为RTD,则RTC使用RTD分配的标签封装到达100.1.1.1/32的数据;如果IP路由表中的下一跳不是RTD,则RTC保留RTD分配的标签作为备用标签;

(3)RTB收到下游邻居RTC分配的100.1.1.1/32与标签的绑定关系后,执行与RTC相同的动作;

(4)RTA收到下有邻居RTB分配的100.1.1.1/32与标签的绑定关系后,查看自己IP路由表中到达100.1.1.1/32的下一跳是否为RTB,如果IP路由表中的下一跳为RTB,则RTA使用RTB分配的标签封装到达100.1.1.1/32的数据;如果IP路由表中的下一跳不是RTB,则RTA保留RTB分配的标签作为备用。因为RTA为Ingress,最终到达100.1.1.1/32的LSP完成建立。

》》》》》》MPLS数据转发过程:

在MPLS网络中,数据包在每台路由器上根据已分配的标签进行标签的封装和转发;

MPLS协议原理与配置

MPLS数据转发过程图示解析:

(1)RTA上收到访问100.1.1.1/32的数据包,如果数据包为普通的IP报文,则查找FIB表,因为Tunnel ID为非0x0,封装已分配的标签1027进行MPLS转发;如果数据包为带标签的报文,查找LFIB表,封装已分配的标签1027进行MPLS转发;

(2)RTB收到RTA发送的带标签1027的报文,查找LFIB表,封装已分配的出标签1026进行MPLS转发给RTC;

(3)RTC收到RTB发送的带标签1026的报文,查找LFIB表,封装已分配的出标签1025进行MPLS转发给RTD;

(4)RTD收到RTC发送的带标签1025的报文,查找LFIB表,出标签为Null,表明数据包已经到达Egress节点,所以路由器将数据包的标签信息去掉,并对数据包进行三层处理,查找IP路由表发现100.1.1.1/32的路由为自己本地的路由,根据IP路由表中的出接口进行IP数据的封装并转发。

如果MPLS网络中的业务量很大,则每次数据包在Egress节点都要进行两次处理才能进行正确的路由转发,这样会导致Egress节点的处理压力增加,路由器的处理性能降低。

希望在Egress节点上只处理一次就能将数据包正确转发,以提高Egress的转发性能,所以提出了PHP技术。

》》》》》》Penultimate Hop Popping(PHP技术):

MPLS协议原理与配置

PHP(Penultimate Hop Popping,倒数第二跳弹出),过程如下:

(1)RTC收到RTB发送的带标签1026的报文,查找LFIB表,发现分配的出标签为隐式空标签3,于是执行弹出标签的动作,并将IP数据包转发给下游路由器RTD;

(2)RTD收到RTC发送的IP报文,直接查找自己的FIB表,根据FIB表中的出接口进行IP数据的封装并转发。