摘要:MPLS(Multi-Protocol Label Switching,多协议标签交换)位于TCP/IP协议栈中的链路层和网络层之间,以标签交换替代IP转发。用于向IP层提供连接服务,同时又从链路层得到服务。
MPLS多协议标签交换技术原理介绍
MPLS(Multi-Protocol Label Switching,多协议标签交换)位于TCP/IP协议栈中的链路层和网络层之间,以标签交换替代IP转发。用于向IP层提供连接服务,同时又从链路层得到服务。
MPLS不局限于特定的链路层协议,能够使用任意二层介质传输网络分组。MPLS的核心技术可扩展到多种网络协议,包括IPv6、IPX、Appletalk、DECnet、CLNP等。它不仅支持多种高层协议与业务,而且在一定程度上可以保证信息传输的安全性。
MPLS基本概念
MPLS网络的典型结构如图1所示,其基本组成单元是标签交换路由器LSR(Label Switching Router)。LSR是指可以进行MPLS标签交换和报文转发的网络设备,也称为MPLS节点。
图1 MPLS网络结构
由LSR构成的网络区域称为MPLS域,根据LSR在MPLS域中位置的不同,可将LSR分为边沿路由器LER和核心LSR(Core LSR)。
LER:位于MPLS域边缘、连接其它网络的LSR称为边缘路由器LER(Label Edge Router)。如果一个LSR有一个不运行MPLS的相邻节点,那么该LSR就是LER。
Core LSR:区域内部的LSR称为核心LSR(Core LSR),如果一个LSR的相邻节点都运行MPLS,则该LSR就是核心LSR。
转发等价类FEC(Forwarding Equivalence Class)是一组具有某些共性的数据流的集合。这些数据流在转发过程中被LSR以相同方式处理。
FEC可以根据地址、业务类型、QoS等要素进行划分。例如,在传统的采用最长匹配算法的IP转发中,到同一条路由的所有报文就是一个转发等价类。
标签(Label)是一个短而定长的、只具有本地意义的标识符,用于唯一标识一个分组所属的FEC。在某些情况下,对应一个FEC可能会有多个入标签,但是一台路由器上,一个标签只能代表一个FEC。
标签长度为4个字节,封装结构如图2所示。
图2 MPLS报文首部结构
标签共有4个域:
Label:20bit,标签值域。
Exp:3bit,用于扩展。现在通常用做CoS(Class of Service),其作用与Ethernet802.1p的作用类似。
S:1bit,栈底标识。MPLS支持多层标签,即标签嵌套。S值为1时表明为最底层标签。
TTL:8bit,和IP分组中的TTL(Time To Live)意义相同。
标签封装在链路层和网络层之间。这样,标签能够被任意的链路层所支持。标签在分组中的封装位置如图3所示。
图3 标签在分组中的封装位置
标签栈(Label stack)是指标签的排序集合。MPLS报文支持同时携带多个标签,靠近二层首部的标签称为栈顶标签或外层标签;靠近IP首部的标签称为栈底标签,或内层标签。理论上,MPLS标签可以无限嵌套。
图4 标签栈
标签栈按后进先出方式组织标签,从栈顶开始处理标签。
标签的操作类型包括标签压入(Push)、标签交换(Swap)和标签弹出(Pop)。
Push:指当IP报文进入MPLS域时,MPLS边界设备在报文二层首部和IP首部之间插入一个新标签;或者MPLS中间设备根据需要,在标签栈顶增加一个新的标签。
Swap:当报文在MPLS域内转发时,根据标签转发表,用下一跳分配的标签,替换MPLS报文的栈顶标签。
Pop:当报文离开MPLS域时,将MPLS报文的标签去掉;或者MPLS倒数第二跳节点处去掉栈顶标签。
标签交换路径:一个转发等价类在MPLS网络中经过的路径称为标签交换路径LSP(Label Switched Path)。
LSP是从入口到出口的一个单向路径。如图5所示,LSP中的LSR可以分为入节点、中间节点和出节点
图5 MPLS LSP
入节点(Ingress):LSP的起始节点,一条LSP只能有一个Ingress。Ingress的主要功能是给报文压入一个新的标签,封装成MPLS报文进行转发。
中间节点(Transit):LSP的中间节点,一条LSP可能有多个Transit。Transit的主要功能是查找标签转发信息表,通过标签交换完成MPLS报文的转发。
出节点(Egress):LSP的末节点,一条LSP只能有一个Egress。Egress的主要功能是弹出标签,恢复成原来的报文进行相应的转发。
其中Ingress和Egress既是LSR,又是LER;由此可见,由LER负责对进入MPLS域的报文划分FEC,并为这些FEC压入标签,进行MPLS转发。当报文离开MPLS域时弹出标签,恢复成原来的报文,再进行相应的转发。
倒数第二跳弹出在最后一跳节点,标签已经没有使用价值,所以可以利用倒数第二跳弹出特性PHP(Penultimate Hop Popping),在倒数第二跳节点处将标签弹出,最后一跳节点直接进行IP转发或者下一层标签转发,从而减少最后一跳的负担。
PHP在Egress节点上配置。PHP的Egress节点分配给倒数第二跳节点一个特殊的标签:标签值3。当一个LSR发现自己被分配了标签值为3时,它并不用这个值替代栈顶原来的标签,而是直接执行Pop操作。Egress节点直接进行IP转发或下一层标签转发。
上游和下游根据数据传送的方向,LSR可以分为上游和下游。
上游:以指定的LSR为视角,根据数据传送的方向,所有往本LSR发送MPLS报文的LSR都可以称为上游LSR。
下游:以指定的LSR为视角,根据数据传送的方向,本LSR将MPLS报文发送到的所有下一跳LSR都可以称为下游LSR。
如图6所示,对于发往192.168.1.0/24的数据流来说,LSR-A是LSR-B的上游节点,LSR-B是LSR-A的下游节点。同理,LSR-B是LSR-C上游节点。LSR-C是LSR-B的下游节点。
图6 上游和下游概念
将目的地址相同的分组报文划分为一个FEC,然后从MPLS标签资源池中取出一个标签,分配给这个FEC。LSR记录该标签和FEC的对应关系,并将该对应关系封装成消息报文,通告给上游的LSR,这个过程称为标签分发。
图7 标签分发示意图
如图7,LSR-B和LSR-C对去往192.168.1.0/24的报文划分为一个FEC,然后为该FEC分配标签,并向上游通告。由此可见,标签是由下游向上游分配的。
来源:法律联讯