MPLS简介

什么是MPLS

MPLS(Multi-Protocol Label Switching , 多协议标签交换)。传统的IP转发采用的是逐跳转发。数据报文经过每一台路由器,都要被解封装查看报文网络层信息,然后根据路由最长匹配原则查找路由表指导报文转发。各路由器重复进行解封装查找路由表和再封装的过程, 所以转发性能低。

与传统IP路由方式相比,MPLS在数据转发时,只在网络边缘分析IP报文头, 在网络内部采用更为离效的标签( Label ) 转发, 节约了处理时间。

  • MPLS位于TCP/IP协议栈中的数据链路层网络层之间, 可以向所有网络层提供服务。
  • 通过在数据链路层和网络层之间墙加额外的MPLS头部,基于MPLS头部实现数据快速转发。
image-20220801112932794

MPLS相关名词

LSR

支持MPLS的路由器,称为LSR(Label Switching Router),位于MPLS域边缘、连接其它网络的LSR称为边沿路由器LER (Label Edge Router) ,区域内部的LSR称为核心LSR(Core LSR)。

image-20220801164217344

除了根据位置对LSR进行分类,还可以根据LSR对数据处理的方式进行分类:

  • 入站LSR (Ingress LSR) :通常是向IP报文中压入MPLS头部并生成MPLS报文的LSR 。
  • 中转LSR (Transit LSR) :通常是将MPLS报文进行例如标签置换操作, 并将报文继续在MPLS域中转发的LSR 。
  • 出站LSR (Egress LSR) :通常是将MPLS报文中MPLS头部移除,还原为IP报文的LSR 。
image-20220801165957116

FEC

FEC(Forwarding Equivalence Class,转发等价类)是—组具有某些共性的数据流的集合, 这些数据流在转发过程中被网络节点以相同方式处理。

  • 在MPLS网络中,FEC可以通过多种方式划分,例如基于目的IP地址及网络掩码、DSCP等特征来划分。
  • 数据属于哪—个LSP,由数据进入MPLS域时的Ingress LSR决定。
  • MPLS标签通常是与FEC相对应的,必须有某种机制使得网络中的LSR获得关于某FEC的标签信息。
image-20220801172331959
  • 在传统的采用最长匹配算法的IP转发中,匹配到同一条路由的所有报文就是一个转发等价类。
  • 在MPLS中,关于FEC最常见的例子是:目的IP地址匹配同一条IP路由的报文被认为属于同一个FEC。

LSP

LSP ( Label Switched Path , 标签交换路径)是标签报文穿越MPLS网络到达目的地所走的路径

同一个FEC的报文通常采用相同的LSP穿越MPLS域,所以对同一个FEC , LSR总是用相同的标签转发。

image-20220801172620518

  • 一条LSP包含一台入站LSR、一台出站LSR以及数量可变的中转LSR,因此LSP也可以看做是这些LSR的有序集合。
  • LSP需要在数据转发开始前建立完成,只有这样报文才能顺利穿越MPLS域。
  • LSP可通过静态和动态两种方式建立。
  • 需要注意的是,LSP是一个从“起点”到“终点”的单向路径,若需要双向数据互通,则需要在双方之间建立双向的LSP。

MPLS标签

IP报文进入MPLS域之前, 会被入站LSR压入MPLS头部( 又叫MPLS标签), 形成—个MPLS标签报文。 一个标签报文可以包含一个或多个MPLS标签。

image-20220805154650575
  • Label:用于携带标签值,长度20bit
  • EXP(experiment use):主要用于Cos(class of service),长度3bit
  • S:栈底位,用于指示该标签头部是否为最后一层标签,长度1bit
  • TTL:防止报文被无限转发(和IP报文的TTL作用一样)

MPLS支持—层或多层标签头部,这些标签头部的有序集合被称为标签栈(Label Stack) 。

当标签栈中存在多个标签时,这些标签的顺序是非常讲究的:

  • 最靠近二层头部的标签是栈顶标签,标签中的S字段为0 。
  • 最靠近IP头部的标签是栈底标签, 标签中的S字段为1 。
image-20220805155514236

标签(Label)是—个短而定长的、只具有本地意义的标识符。标签空间就是指标签的取值范围

image-20220805155731185

MPLS 转发

MPLS转发的本质就是将数据归到对应的FEC并按照提前建立好的LSP进行转发

如下图,MPLS的体系结构同样也包括控制平面和转发平面:

image-20220805160931675

当网络层协议为IP协议时,FEC所对应的路由必须存在LSR的IP路由表中,否则该FEC的标签转发项不生效。

LSR用标签标识指定FEC , 所以该FEC的数据被发送至LSR时,必须携带正确的标签,才能被LSR正 确的处理。

对于某个FEC,LSR上存在In标签和Out标签,为了保证标签报文被正确的转发和处理,上游LSR的出标签应该与下游LSR的标签值相同。

image-20220808095335134

LSP建立

建立LSP,就是根据FEC事先为报文分配好标签,建立一条转发路径。建立LSP又分为静态和动态两种。

image-20220808095948405

标签转发过程

LSR进行标签转发时,主要依靠FTN、NHLFE、ILM:

image-20220808100603954
  • Tunnel ID:为了给使用隧道的上层应用(如VPN、路由管理)提供统一的接口,系统自动为隧道分配了一个ID,也称为Tunnel ID。该Tunnel ID的长度为32比特,只是本地有效。在MPLS转发过程中,FIB、ILM和NHLFE表项是通过Tunnel ID关联的。

Ingress处理过程:

  1. 当IP报文进入MPLS域,Ingress 查看FIB表(得到FTN信息),检查目的地址对应的Tunnel ID是否为0x0,如果为0,则进入正常的IP转发流程
  2. 如果Tunnel ID不为0,根据FIB的Tunnel ID找到对应的NHLFE表,把FIB和NHLFE关联起来。
  3. 查看NHLFE的表项,得到出接口、下一跳、出标签和标签操作
  4. 在IP报文中压入出标签,同时处理TTL,将封装好的MPLS报文发送给下一跳
image-20220808101813911

Transit处理过程:

  1. 根据收到的MPLS标签,查询对应的ILM表,得到Tunnel ID
  2. 根据Tunnel ID查找NHLFE
  3. 在NHLFE中得到出接口、下一跳、出标签和标签操作,标签操作为swap,则交换标签

image-20220808102201104

Egress处理过程:

  1. 根据ILM表,得到标签的对应操作为Pop,剥除该标签
  2. 根据标签头部的下一层报文进行下一步处理
image-20220808103216488

LDP

在LSP建立提到,分为静态(手工)配置和LDP动态分发标签配置。LDP(Lable Distribution Protoal),是MPLS的一种控制协议,相当千传统网络中的信令协议,负责FEC的分类、标签的分配以及LSP的建立和维护等操作。LDP规定了标签分发过程中的各种消息以及相关处理过程。

LDP协议的工作过程包括:

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

LDP会话

LSR之间互相交互绑定消息之前需要建立LDP会话,分为本地LDP和远程LDP会话:

image-20220808110410164
  • 本地LDP会话主要用于直连的两台LSR,远程LDP用于非直连的LSR
  • 两台LSR之间交互Hello消息之后, 即建立起邻接体(Adjacency) 关系;
  • 在建立邻接体关系的基础上, 两台LSR之间交互LDP会话消息,建立起LDP会话, 两台设备之间形成LDP对等体关系

LSR ID

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

LDP ID的长度为48 bit, 由32 bit的LSR ID与16 bit的标签空间标识符( Label Space ID ) 构成。

LDP ID以“LSR ID :标签空间标识”的形式呈现。例如 2.2.2.2 : 0 。

  • 标签空间标识一般存在两种形态:
  • 值为0: 表示基于设备(或基千平台)的标签空间;
  • 值非0 : 表示基于接口的标签空间。
image-20220808111240906

LDP报文

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

image-20220808111834909

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。

消息类型及其作用如下表:

image-20220808112213086

工作原理

包括会话建立、标签分发和交互过程三部分

会话建立

LDP会话状态机有五个状态:

image-20220808113641133
五个状态描述
  • 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链路Hello报文,实现LDP基本发现机制
  • LDP 链路Hello报文使用UDP报文,目的地址是组播地址224.0.0.2 。如果LSR在特定接口接收到LDP 链路Hello报文, 表明该接口存在LDP邻接体。

TCP连接建立阶段:

  • Hello报文中携带传输地址,双方后续使用该地址建立LDP会话
  • 传输地址较大的一方作为主动方,主动发起TCP连接
image-20220808124132857

LDP的传输地址用于与邻居建立TCP连接。

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

会话建立与保持:

  • TCP连接建立成功后,主动方R2(传输地址大的一方)发送LDP初始化报文,协商建立LDP会话的相关参数。
  • LDP会话的相关参数包括LDP协议版本、标签分发方式、KeepAlive保待定时器的值、最大PDU长度和标签空间等。
  • 被动方R1收到初始化报文后,若接受R2的相关参数,则回应KeepAlive报文作为确认,为了提高发送效率同时发送自己的初始化报文。
  • R2收到R1的初始化报文后,若接受相关参数, 则回复KeepAlive报文给R1 。
  • 双方都收到对端的KeepAlive报文后,会话建立成功。后续通过周期性发送的KeepAlive报文保待会话。
image-20220808125306238

标签分发

  • 在LDP中,下游LSR决定标签和FEC的绑定关系,并将这个绑定关系发布给上游LSR(这里的上下游是根据数据的转发方向定的,一个LSR在数据流A中可能作为下游LSR,在数据流B中可能作为上游LSR)

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

    image-20220808131056045

标签发布方式

  • DU模式

    • 对于特定的FEC,LSR无需从上游获得标签请求消息,便可以进行标签分配和发送。

    • LSR会主动将自己给FEC捆绑的标签通告给上游邻居

    • 标签发布方式为DU时,系统默认支持LDP为所有对等体分标签,即每个节点都可以向所有的对等体发布标签映射关系,不再区分上下游关系。因为在只给上游对等体分标签情况下,发送标签映射消息的时候,要根据路由信息对会话的上下游关系进行确认。

      image-20220808133016776
  • DoD模式

    • 对于一个特定的FEC , LSR获得标签请求消息之后才进行标签分配与分发。

    • 一般情况下, 对特定FEC的访问需求会触发标签清求消息。

      image-20220808133158899

标签分配控制方式

  • 独立模式

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

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

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

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

        image-20220808133555991
  • 有序模式

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

      • 当标签分发方式为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。

        image-20220808133832712

标签保留方式

  • 自由模式

    • LSR收到的标签映射可能来自下一跳,也可能来自非下一跳。(通过路由表可以得知是否为下一跳)

    • 对于从邻居LSR收到的标签映射, 无论邻居LSR是不是自己的下一跳都保留

      • 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保持方式搭配使用。

        image-20220808134308199
  • 保守模式

    • 只保留下一跳邻居发送的标签映射

      • 当使用DU标签分发方式时,LSR可能从多个LDP邻居收到到同一网段的标签映射消息,如图中R3会分别从R2和R5收到网段192.168.1.0/24的标签映射消息。如果采用Conservative保持方式,则R3只保留下一跳R2发来的标签,丢弃非下一跳R5发来的标签。
      • 当使用DoD标签分发方式时, LSR根据路由信息只向它的下一跳请求标签。
    • 当网络拓扑变化引起下一跳邻居改变时: 使用自由标签保持方式,LSR可以直接利用原来非下一跳邻居发来的标签,迅速重建LSP,但需要更多的内存和标签空间。 使用保守标签保持方式,LSR只保留来自下一跳邻居的标签,节省了内存和标签空间, 但LSP的重建会比较慢。 保守标签保持方式通常与DoD方式一起,用于标签空间有限的LSR。

      image-20220808141822086

PHP特性

PHP(Penultimate Hop Popping, 次末跳弹出),如果激活了PHP特性,那么egress节点在为本地路由分配标签的时候, 会分配一个特殊标签——3 , 该标签被称为隐式空标签(Implicit NULL Label) 。当LSR转发一个标签报文时,如果发现对应的出标签值为3, 则LSR会将栈顶标签弹出, 并将里面所封装的数据转发给下游LSR 。

image-20220808142212154
  • 在标签发布时,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在转发标签报文时, 若出标签封装为o , 则不会将标签头部弹出, 标签头部中的QoS信息得以保存。R4在收到带0标签的报文的时候, 直接弹出标签,不用去查找ILM 表项。
  • 缺省情况下, Egress分配的是隐式空标签。
image-20220808142651176

举例说明

image-20220808142945636

拓扑中的设备已配置OSPF并且正常学习到邻居的路由信息,同时在设备的各个接口使能LDP和MPLS功能,相邻的设备已建立好LDP会话。

LSR的标签分发和管理采用DU+Ordered+Liberal的方式

现数据从R1进入,要到192.168.4.0/24网段。

标签分发

Egress标签分发:

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

image-20220808143709700

Transit 标签分发:

以R2为例,在其路由表中,192.168.4.0/24路由的下一跳为R4 , 当它从R4收到关千192.168.4.0/24的标签映射通告时,由于该通告来自下游LDP邻居,因此这将触发它自己为该路由分配标签1021 , 并将标签映射通告给LDP邻居( 如R1) 。R3同理。

image-20220808144106217

Ingress 标签分发:

R1收到LDP邻居R2及R3通告过来的关于192.168.4.0/24路由的标签映射后,将这两个标签都存储起来,但是由 千在自己的路由表中,到达192.168.4.0/24的下一跳是R2 , 因此当前它只会使用R2所通告的标签1021。

image-20220808144255700

当R2发生故障时,OSPF路由将会重新收敛,此时R1的路由表中192.168.4.0/24路由的下一跳将会切换至R3,此时R1将启用R3所通告的、关于192.168.4.0/24的标签。

标签转发

Ingress

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

image-20220808144555339

Transit

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

image-20220808144645268

Egress

当R4收到携带1041标签的标签报文时,查询ILM,根据ILM查询到操作为Pop。于是,R4对该标签报文通过Pop操作将最外层标签剥离,此时该报文已经变成了标准IP报文,R4将对该IP报文执行标准的IP转发流程。

image-20220808144823149

MPLS实际应用

随着硬件技术的进步,采用ASIC和NP进行转发的高速路由器和三层交换机得到广泛应用,使得IP转发性能大为提高,可以满足网络数据转发性能需求。MPLS技术在提高转发性能应用上未能发挥优势。 但MPLS支持多层标签嵌套和面向连接的特点,使得其在VPN、流量工程(TE)、QoS等方面得到广泛应用。