在20世纪90年代中期,随着IP网络的快速发展,Internet数据量急剧增长。由于当时的硬件技术存在限制,基于最长匹配算法的IP技术必须使用软件方法查找路由,转发性能低下,所以IP的转发性能成为当时限制网络发展的瓶颈。在这种背景下,IETF提出了MPLS协议。MPLS最初的目的就是为了提升IP网络中路由设备的转发速率。
与传统的IP路由方式相比,MPLS通过以下两种方式提升转发速率:
后来,随着ASIC(Application Specific Integrated Circuit,专用集成电路)技术的迅速发展,IP路由表查找逐步改用硬件方法,处理速度大大提高,这使得MPLS在提高IP网络转发速率方面不再具备明显的优势。
但是,MPLS的标签转发本质上是一种隧道技术,它还支持封装多层标签,并且MPLS天然兼容多种网络层和链路层协议,因此,MPLS非常适合在各种VPN业务中充当公网隧道。此外,由于MPLS的报文转发依靠一条固定的标签交换路径,所以MPLS是一种面向连接的转发技术,这使得MPLS在流量工程(Traffic Engineering,TE)、QoS等领域也有着广泛的应用。
MPLS是一种分类转发技术,它将具有相同转发处理方式的数据分组归为一类,称为FEC(Forwarding Equivalence Class,转发等价类)。MPLS对相同FEC的数据分组采取完全相同的处理方式。
FEC的划分方式非常灵活,可以是源地址、目的地址、源端口、目的端口、协议种类、业务类型等要素的任意组合。例如,在采用最长匹配算法的IP路由转发中,去往同一个目的地址的所有报文就是一个FEC。
MPLS标签是一个简短且长度固定的标识符,它只具有本地意义,用于唯一标识一个分组所属的FEC。在某些情况下(例如,进行负载分担)对应一个FEC可能会有多个MPLS标签,但是在一台设备上,一个MPLS标签只能代表一个FEC。
MPLS标签长度为4个字节,封装结构如下图所示。
MPLS标签封装在链路层和网络层之间,它在报文分组中的封装位置如下图所示。MPLS标签能够被任意的链路层协议所支持。
MPLS标签栈(Label stack)也称为MPLS多层标签,是指MPLS标签的排序集合,如下图所示。靠近二层首部的标签称为栈顶标签或外层标签;靠近IP首部的标签称为栈底标签,或内层标签。MPLS标签栈按后进先出(Last In First Out)方式组织标签,从栈顶开始处理标签。
MPLS标签的基本操作包括标签压入(Push)、标签交换(Swap)和标签弹出(Pop),它们是标签转发的基本动作,是标签转发信息表的组成部分。
MPLS标签的基本操作详解如下:
在最后一跳的节点上,MPLS标签实际已没有使用价值。这种情况下,可以利用PHP(Penultimate Hop Popping,倒数第二跳弹出)特性,在倒数第二跳的节点上就将标签弹出,这样最后一跳的节点可直接进行IP转发或者下一层标签转发,从而减少最后一跳的处理负担。
PHP特性是通过分配特殊的标签值3来实现的。标签值3表示隐式空标签(implicit-null),这个值不会出现在标签栈中。当倒数第二跳节点发现自己被分配了标签值3时,它并不用这个值替代栈顶原来的标签,而是直接执行Pop操作,使最后一跳节点直接进行IP转发或下一层标签转发。
在MPLS域内承担标签产生,转发和移除任务的路由器。其共有3种类型:
指的是在MPLS域内,一个数据报文从源头到目的地所需要经过的具体路径,在该路径中所传输的数据报文是要被多次修改标签的。LSP是LSR在MPLS网络中转发标签数据后产生的,是标签报文穿越MPLS网络的路径。
LSP是一条从入口到出口的单向通道,包含以下角色:
MPLS是一种依靠标签交换来指导转发的技术,因此,LSP的建立过程实际上就是沿途LSR为特定FEC确定标签的过程。
MPLS标签由下游分配,按照从下游到上游的方向进行分发。如下图所示,下游LSR根据IP路由的目的地址进行FEC划分,并将标签分配给对应指定目的地址的FEC,再将标签发送给上游LSR,触发上游LSR建立标签转发信息表,最终使一系列LSR形成一条LSP。
LSP按建立方式可以分为静态LSP和动态LSP两种:
以支持PHP特性的LSP为例,MPLS报文在该LSP中的基本转发过程描述如下:
主要是来控制三层路由信息(比如EIGRP,OSPF,BGP等)和标签(比如TDP,LDP,BGP等)。
主要是以标签为基准来进行数据转发。MPLS两个层面的具体工作流程可以通过图2.2来详细说明:
部分参考自: https://info.support.huawei.com/info-finder/encyclopedia/zh/MPLS.html
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。