4.3 MPLS技术的基本内容和工作机制
微视频5 MPLS基本原理
MPLS技术位于传统的第二层与第三层协议之间,其上层的协议与下层的协议可以是当前网络中存在的各种协议,所以称为多协议。MPLS称为“标签交换”技术,是因为它将第二层ATM标签交换和第三层IP路由协议有机结合起来,引入基于标签的机制,而且还把路由选择和数据转发分开,由标签来规定一个分组通过网络的路径。MPLS的实质是将路由器移到网络的边缘,而将快速、简单的交换机置于网络中心,对一个连接请求实现一次路由选择和多次交换,其主要目的是将标签转发数据包的基本技术与网络层路由选择有机地集成。MPLS是在TAG交换的基础上发展起来的,既吸收了IP交换、TAG交换方案的部分思想,又对它们进行了扩充。
4.3.1 MPLS的基本概念和术语
下面介绍MPLS中几个重要的概念。
(1)转发等价类(Forwording Equivalence Class,FEC)
MPLS实际上是一种分类转发的技术,它将具有相同转发处理方式(目的相同、使用的转发路径相同或具有相同的服务等级等)的分组归为一类,这种类别就称为转发等价类。属于相同转发等价类单元的分组在MPLS网络中将获得完全相同的处理。转发等价类的划分方式非常灵活,可以是源地址、目的地址、源端口、目的端口、协议类型、VPN等的任意组合。例如,在传统的采用最长匹配算法的IP转发中,到同一个目的地址的所有报文就是一个转发等价类。
(2)标签(Label)
用于标识一个FEC的短而定长(20bit)标志符,在物理上连续且只有本地意义。当报文分组到达MPLS网络入口时,它将按一定规则被划归为不同的FEC,根据分组所属的FEC,将相应的标签封装在分组中。
(3)标记交换路径(Label Switched Path,LSP)
标签交换路径由一个或多个标签交换跳连接而成的路径,通过标记交换路径,分组可以穿越整个MPLS网络。
(4)标签交换路由器(Label Switching Router,LSR)
支持MPLS协议的路由器是MPLS网络中的基本元素。标签交换路由器由两部分组成:控制单元和转发单元。控制单元将负责标签的分配、路由的选择、标签转发表的建立、标签交换路径(LSP)的建立和拆除等工作。转发单元则依据标签转发表对收到的标签分组进行转发。LSR的体系结构如图4-1所示。
图4-1 LSR的体系结构
(5)标签分发协议(Label Distribution Protocol,LDP)
LDP是MPLS的控制协议,也就是MPLS技术的核心。它相当于传统网络中的信令协议,将负责FEC的分类、标签的分配以及分配标签的传输和LSP建立、维护等一系列操作。
4.3.2 MPLS的主要转发表项
1)标签转发信息库(LFIB):使用标签来进行索引,作用类似于路由表,包含各个标签所对应的各种转发信息。每个入标签对应一条表项,每条表项包括入标签、入端口、IP地址/MASK等。LFIB表项如表4-1所示。
表4-1 LFIB表项条目
2)下一跳转发条目(NHLFE):转发标签分组是使用下一跳转发条目,其包含下列信息。
·分组的下一跳。
·在分组的标签栈上完成的下列3种操作之一:一是用特定的新标签替换标签栈顶的标签(SWAP);二是标签栈执行出栈操作(POP);三是用特定的新标签替换标签栈顶的标签,然后将一个或多个特定的新标签压入标签(PUSH)。
·NHLFE还可以包含传送分组使用的数据链路层封装类型,传送分组时标签栈的编码方式,以及进行分组处理所需的其他信息。
3)FEC到NHLFE映射(FTN):FTN将每个FEC映射到一组NHLFE,对于收到的未打标签的分组,要在转发之前打上标签时,需要使用FTN。当FTN将某一特定标签映射到包含多个元素的一组NHLFE上时,在对该分组进行转发之前必须从该组中明确地选出一个元素。
4)输入标签映射(ILM):将每个输入标签映射到一组NHLFE,对收到的标签分组进行转发时使用ILM。当ILM将某一特定标签映射到包含多个元素的一组NHLFE时,转发该分组之前必须从该分组中明确的选出一个元素。
4.3.3 MPLS的报文结构
MPLS报文头部的结构如图4-2所示。
图4-2 MPLS报文头结构
MPLS报头的位置界于二层和三层之间,俗称2.5层。MPLS可以承载的报文通常是IP包。其中32bit的标签各个域的含义如下。
Label(20bit):标签域,可用于数据转发的标签大于5。
EXP(3bit):保留,可用于传递区分服务的服务类型信息。
S(1bit):栈底标记,表示该标签是否为标签栈的栈底(S=0表示栈底)。
TTL(8bit):MPLS分组的生存期,在MPLS网络边界设置,每经过一个MPLS网络中继段,TTL值便减1。
MPLS可以看作是一种面向连接的技术。通过MPLS信令或手工配置的方法建立MPLS标签交换路径以后,在LSP的入口把需要通过这个LSP的报文打上MPLS标签,中间路由器在收到MPLS报文以后直接根据MPLS报头的标签进行转发,而不用再通过IP报头的IP地址查找路由表。在MPLSLSP的出口(或倒数第二跳),弹出MPLS报头,还原IP报文。
4.3.4 MPLS的工作过程
微视频6 MPLS数据转发过程
MPLS是一种将具有相同转发处理方式的分组归为一类的分类转发技术。MPLS是通过将第2层交换和第3层路由技术相结合的方法,采用“一次路由,多次交换”的方法来避免在核心网络上多次路由,以简捷的方式完成分组的传送。具体来说,就是在MPLS网络中,通过LDP(标签分发协议)可以动态地建立一系列由源到目的LSR(标签交换路由器)的LSP,形成逻辑的全网状拓扑结构。进入MPLS网络的IP分组被封装成标签分组后基于标签高速转发,而不需要进行复杂的路由查找和转发。MPLS的基本组网如图4-3所示。
图4-3 MPLS的基本组网
图4-3中,LER为标签边缘路由器,分组从IP域或其他网络进入到MPLS域的入口LER称为Ingress节点,从MPLS域离开的出口LER称为Egress节点;而MPLS网络中间的路由器称为一般意义的LSR,即标签交换路由器。
MPLS网络中标签交换路径LSP的形成分为3个过程。
第1个过程:网络启动之后在路由协议(如BGP、OSPF、IS-IS等)的作用下,各个节点建立自己的路由表,如图4-4所示,RA、RB、RC这3台路由器都学习到边缘网络的路由信息47.1.0.0/16,47.2.0.0/16和47.3.0.0/16。
图4-4 各节点建立自己的路由表
第2个过程:根据路由表,各个节点在LDP的控制下建立标签交换转发信息库LIB。如图4-5所示,路由器RC作为47.1.0.0/16网段的出口LSR随机分配标签“40”,发送给上游邻居RB,并记录在标签交换转发数据库LIB中。当路由器RC收到标记“40”的报文时就知道这是发送给47.1.0.0/16网段的信息。当路由器RB收到RC发送的关于47.1.0.0/16网段及标签“40”的绑定信息后,将标签信息及接收端口记录在自己的LIB中,并为47.1.0.0/16网段随机分配标签发送给除接收端口外相应的邻居。假设RB为47.1.0.0/16网段分配标签“50”发送给接口int3的邻居RA。在RB的LIB中就产生这样的一条信息:
该信息表示,当路由器RB从接口int3收到标记为“50”的报文时,将标记改为“40”并从接口int1转发,不需要经过路由查找。
图4-5 LIB表的形成
同理,RA收到RB的绑定信息后将该信息记录,并为该网段分配标签。
第3个过程:随着标签的交互过程的完成,将入口LSR、中间LSR和出口LSR的输入输出标签互相映射拼接起来后,就形成了标签交换路径LSP。如图4-5在RA、RB、RC之间形成了关于47.1.0.0/16网段的标签交换路径LSP。
MPLS进行分组转发的基本步骤如下:
1)在MPLS网络内,每个LSR运行OSPF或者IS-IS等域内路由协议负责获取该区域内的拓扑信息,同时运行LDP,根据拓扑信息完成分组目的地址/标签的映射和映射信息的分发,存储在各自的FIB表中,并且为指定类别的分组建立专用的LSP。
2)在入口LER上,从FIB表中提取出Token值不是Invaild的表项形成FTN表(FIB表中Token值为Invaild表示进行IP转发,而Token值为有效时,进行MPLS转发),同时,分析分组的网络层报文头部信息,在FTN表中选择对应的表项,给该分组打上表示分组归属的FEC关联标签,即形成NHLFE表项,然后转发给相应的LSP的下一节点LSR。
3)在中间节点上,仅基于标签值在数据链路层依次转发分组,不必再分析网络层报文头部信息。根据NHLFE和ILM表项,找到与出口关联的新标签,替换旧标签。
4)在出口LER上,有两种情况:
·如果边界节点的下一个节点为非MPLS节点,则删去标签,按照传统网络路由协议寻径和转发分组。
·如果边界节点的下一节点为另一MPLS域的边界节点,则采用“标签栈”技术,使分组继续以标签交换的方式进入下一MPLS域。或者采用“倒数第二跳弹出”技术,无论是哪种情况,在倒数第二跳的节点上,分配特定的标签(通常为3),以表示下一跳为出口,在出口LER上弹出标签,恢复成原来的IP分组。具体转发过程的举例如图4-6所示,在入口LER读取到达的IP分组的目的主机地址3.3.3.3,查询NHLFE,给分组打上标签2001,经过端口1发送出去。在中间LSR读取该标签,在ILM中查询,用特定的弹出标签3替换标签2001,从端口3发送出去。出口LER处收到分组后,发现收到的是标签3,则弹出标签,从端口5发送出去。
图4-6 报文转发的过程
4.3.5 倒数第二跳弹出机制
PHP(Penultimate Hop Poping)意思为次末跳弹出或者倒数第二跳弹出,这是MPLS的一个基础性机制,下面进行分析。
如图4-7所示,路由器A、B、C都通过路由协议学习到30.0/24的路由,由于设备都激活了LDP(标签分发协议),因此大家都会为30.0/24路由捆绑标签,并且将标签映射分发给自己的LDP邻居,从图中可以看到,C为路由分配了标签301,B为路由分配了标签201。
图4-7 没有采用PHP的标签交换过程
现在A路由器收到一个目的地是30.0/24网络的IP数据包,经过FIB查表后将数据包压入标签201然后转发给B(注意,A发送标签数据给B,要压入的是B给分的标签),B收到这个标签包后,通过LFIB表(标签转发信息表)查找后将标签置换成301然后转发给C。
C收到这个标签包后,先查LFIB表,发现要将标签弹出,于是它将标签弹出,弹出后发现是个IP报文,于是又去查FIB表,最终将这个IP数据包转发出去。C进行了两次查找动作。这显然降低了转发效率。其实标签可以在倒数第二跳(也就是在B处)上弹出,如此一来C收到的就是一个IP数据包,它只需查找FIB表将收到的IP报文路由出去即可。
如果采用PHP倒数第二跳弹出机制,路由器为本地的路由分配的标签就是一个特殊的标签值——3。当一台标签交换路由器收到一个标签包,在LFIB中进行查表时,若出站标签为3,则意味着需要将标签包的顶层标签弹出。
如图4-8所示,路由器C为本地的直连路由30.0/24所分配的标签为Well-Known(被保留的约定标签)标签3,它将标签映射传递给B。如此一来,B收到A发送过来的标签值为201的标签包,会将标签弹出得到IP包,再转发给C,如此C仅需对IP包进行FIB表的查询和转发即可,提高了转发效率。
图4-8 采用PHP的标签交换过程
需要提出的是,倒数第二跳弹出机制(PHP)有两种标签:一是implicit null(隐式空),这是目前所主要采用的方式,在LDP中标签值为3;另一个是explicit null(显式空),在LDP中标签值为0。
如果收到LDP邻居发送来的关于某条路由分配的标签值为3,则发送前往该目标网段的数据给该邻居时,会将该标签弹出,再将内层数据转给邻居。而如果邻居关于某条路由分配的标签值为0,那么本地在转数据给邻居时,会带上标签头(标签值为0的)一并发给邻居,这是为了在某种情况下保持网络规划的统一性。例如为了部署MPLS的QoS,最后一跳必须使用标签包中的EXP字段,因此标签不能被弹出。