早期传统IP报文依赖路由器查询路由表转发,但由于硬件技术存在限制导致转发性能低,路由器的查表转发成为了网络数据转发的瓶颈。因此旨在提高路由器转发速度的MPLS(Multi-Protocol Label Switching,多协议标签交换) 被提出。
随着设备硬件性能不断提升,MPLS在提高数据转发速度上的优势逐渐弱化,但其支持多层标签嵌套和设备内转控分离的特点,使其在VPN(Virtual Private Network,虚拟私有网络)、QoS(Quality of Service,服务质量) 等新兴应用中得到广泛应用。
一、MPLS概述
1.1 传统IP路由转发的痛点
在传统IP路由中,数据报文经过每一台路由器时,都需要逐跳解封装并查找路由表,这一过程不仅重复且效率低下。具体特点如下:
- 全网路由依赖:所有路由器必须知道全网路由信息。
- IP头部处理效率低:IP头部不定长,处理效率低下。
- 无连接性:传统IP转发面向无连接,无法提供良好的端到端QoS保证。
正是由于IP路由转发的这些特点,因此出现了MPLS多协议标签交换协议。
1.2 MPLS基本概念
MPLS位于TCP/IP协议栈中的数据链路层和网络层之间,可以向所有网络层提供服务。通过在数据链路层和网络层之间增加额外的MPLS头部,基于MPLS头部实现数据快速转发。
MPLS以标签交换替代IP转发。标签是一个短而定长的、只具有本地意义的标识符。
MPLS起源于IPv4(Internet Protocol version 4),其核心技术可扩展到多种网络协议,包括IPv6(Internet Protocol version 6)、IPX(Internet Packet Exchange)、Appletalk、DECnet、CLNP(Connectionless Network Protocol)等。MPLS中的"Multiprotocol"指的就是支持多种网络协议。
1.3 MPLS基础术语概念
1.3.1 MPLS域与LSR
MPLS域(MPLS Domain):一系列连续的运行MPLS的网络设备构成的区域。
LSR(标签交换路由器):支持MPLS的路由器或交换机等网络设备。
- LER(边沿路由器):位于MPLS域边缘,连接其他网络。
- Core LSR(核心LSR):位于MPLS域内部。
就是支持MPLS的网络设备称为LSR,然后又类似OSPF区分了那些是在MPLS的边缘,那些是在MPLS内部分为LER边缘路由器和核心LSR,所有这些设备组成MPLS域。
1.3.2 LSR分类
除了安装设备的位置还可以安装对标签的处理方式进行划分,根据LSR在MPLS域中的位置和数据处理方式,可分为:
- 入站LSR(Ingress LSR):负责向IP报文中压入MPLS头部。
- 中转LSR(Transit LSR):负责标签置换操作,继续转发报文。
- 出站LSR(Egress LSR):负责移除MPLS头部,还原为IP报文。
1.3.3 FEC(转发等价类)
FEC(Forwarding Equivalence Class):是一组具有某些共性的数据流的集合,这些数据流在转发过程中被网络节点以相同方式处理。
- 在MPLS网络中,FEC可以通过多种方式划分,例如基于目的IP地址及网络掩码、DSCP等特征来划分。
- 数据属于哪一个LSP,由数据进入MPLS域时的Ingress LSR决定。
- MPLS标签通常是与FEC相对应的,必须有某种机制使得网络中的LSR获得关于某FEC的标签信息。
在传统的采用最长匹配算法的IP转发中,匹配到同一条路由的所有报文就是一个转发等价类。在MPLS中,关于FEC最常见的例子是:目的IP地址匹配同一条IP路由的报文被认为属于同一个FEC。
关于FEC如果单看概念是不容易理解,可以理解为FEC简单的就是到达某个相同目的路由的一类数据包。在IP路由中通过静态路由ip route-static 192.168.1.0 24 10.0.0.1
表示到达192.168.1.0/24
网段的数据依据下一跳10.0.0.1
进行转发,而在MPLS中也是类似的,匹配到目的地址192.168.1.0/24就分为一类FEC,这是最简单的表示,也可以进行细分。
1.3.4 LSP(标签交换路径)
LSP(Label Switched Path,标签交换路径) 是标签报文穿越MPLS网络到达目的地所走的路径。与上面的FEC进行相关联。同一个FEC的报文通常采用相同的LSP穿越MPLS域,所以对同一个FEC,LSR总是用相同的标签转发。
- 一条LSP包含一台入站LSR、一台出站LSR以及数量可变的中转LSR,因此LSP也可以看做是这些LSR的有序集合。
- LSP需要在数据转发开始前建立完成,只有这样报文才能顺利穿越MPLS域。
- LSP可通过静态和动态两种方式建立。
- 需要注意的是,LSP是一个从"起点"到"终点"的单向路径,若需要双向数据互通,则需要在双方之间建立双向的LSP。
缺省情况下MPLS的每个LSR路由器都对标签进行处理也就是每个路由器都验证标签,LSP就是每一个LSR路由器处理过程的路径,而且标签是没有方向的,也就是来回数据都需要LSP。
小结:从上面我们可以知道运行MPLS的网络设备组成MPLS域,而这些MPLS的设备称为LSR,根据对标签的处理分为入站LSR、出站LSR和中转LSR。到达同一目的网络的LSR路径的有序集合称为LSP(标签转发路径),LSP关联到FEC转发等价类进行分类,而且LSP是单向的,如果需要互相通信需要双向建立LSP。
二、MPLS标签
IP报文进入MPLS域之前,会被入站LSR压入MPLS头部(又叫MPLS标签),形成一个MPLS标签报文。一个标签报文可以包含一个或多个MPLS标签。
2.1 标签结构
MPLS标签位于二层帧头部和IP头部之间,包含以下字段:
- Label(标签值):20bit,用于标识FEC。
- EXP(实验用途):3bit,主要用于CoS(服务质量)。
- S(栈底位):1bit,栈底位,用于指示该标签头部是否为最后一层标签,长度1bit。如果该字段为1,则表示当前标签头部为栈底;如果该字段为0,则表示当前标签头部之后依然还有其他标签头部。
- TTL(生存时间):8bit,防止报文在网络中无限循环。
2.2 标签栈
- MPLS支持一层或多层标签头部,这些标签头部的有序集合被称为标签栈(Label Stack)。
- 当标签栈中存在多个标签时,这些标签的顺序是非常讲究的:
- 栈顶标签:最靠近二层头部的标签,S字段为0。
- 栈底标签:最靠近IP头部的标签,S字段为1。
通过前面标签结构中的S栈底为确定是否为栈顶或者栈底。当上层为MPLS标签栈时,以太网头部中的Type字段为0x8847,PPP头部中的Protocol字段为0x8281。
2.3 标签空间
前面我们讲了那么多的标签,那么标签究竟是怎样的呢?标签是一个短而定长的、只具有本地意义的标识符。标签空间就是指标签的取值范围,简单说标签就是一个数字,具有本地意义的数字。标签值的范围及规划如下:
2.4 MPLS标签的处理
LSR对标签的操作类型包括标签压入(Push)、标签交换(Swap) 和标签弹出(Pop)。
- LSR对标签的操作类型包括:
- Push(标签压入):在报文进入MPLS域时,压入新的标签。
- Swap(标签交换):在MPLS域内转发时,替换标签。
- Pop(标签弹出):在报文离开MPLS域时,移除标签。
结合前面的入站LSR和出站LSR和转发LSR可以理解各个标签路由器对于标签的压入、转发、弹出,然后在最后一跳转换为平台的IP数据包。
总结:
- MPLS通过标签转发显著提升了数据转发速度。
- MPLS术语(如MPLS域、LSR、FEC、LSP)是理解MPLS的关键。
- MPLS标签的结构和操作机制是实现高效转发的核心。
通过本章的学习,我们对MPLS的基本概念、术语和标签有了全面的了解,可以知道传统IP转发路由器需要每次进行查找路由表匹配到数据包然后进行转发,而MPLS只要规划好LSP和FEC只对标签进行处理即可,是执行压入标签、转发标签还是弹出标签就行相对来说效率更高。