概述
MPLS(Multiprotocol Label Switching)也称作多协议标签交换,是一种IP骨干网技术,MPLS在无连接的IP网络上引入面向连接的标签交换概念,将第三层路由技术和第二层交换技术相结合,充分发挥了IP路由的灵活性和二层交换的简捷性。MPLS起源于IPv4,其核心技术可扩展到多种网络协议,包括IPv6、IPX和CLNP等。
由此可见,MPLS并不是一种业务或者应用,它实际上是一种隧道技术。这种技术不仅支持多种高层协议与业务,而且在一定程度上可以保证信息传输的安全性。
起源
90年代中期,随着IP技术的快速发展,Internet数据海量增长。但由于硬件技术存在限制,基于最长匹配算法的IP技术必须使用软件查找路由,转发性能低下,因此IP技术的转发性能成为当时限制网络发展的瓶颈。MPLS最初是为了提高路由器的转发速度而提出的。与传统IP路由方式相比,它在数据转发时,只在网络边缘分析IP报文头,而不用在每一跳都分析IP报文头,节约了处理时间。
随着专用集成电路ASIC技术的发展,路由查找速度已经不是阻碍网络发展的瓶颈。这使得MPLS在提高转发速度方面不再具备明显的优势。但是MPLS支持多层标签和转发平面面向连接的特性,使其在VPN、QoS等方面得到广泛应用。
MPLS体系
一、控制平面:负责产生和维护路由信息以及标签信息。
- 路由信息表RIB(Routing Information Base):由IP路由协议(IP Routing Protocol)生成,用于选择路由。
- 标签分发协议LDP(Label Distribution Protocol):负责标签的分配、标签转发信息表的建立、标签交换路径的建立、拆除等工作。
- 标签信息表LIB(Label Information Base):由标签分发协议生成,用于管理标签信息。
二、转发平面:即数据平面(Data Plane),负责普通IP报文的转发以及带MPLS标签报文的转发。
- 转发信息表FIB(Forwarding Information Base):从RIB提取必要的路由信息生成,负责普通IP报文的转发。
- 标签转发信息表LFIB(Label Forwarding Information Base):简称标签转发表,由标签分发协议建立LFIB,负责带MPLS标签报文的转发。
MPLS路由器上,报文的转发过程:
- 当收到普通IP报文时,查找FIB表,如果Tunnel ID为0x0,则进行普通IP转发;如果查找FIB表,Tunnel ID为非0x0,则进行MPLS转发。
- 当收到带标签的报文时,查找LFIB表,如果对应的出标签是普通标签,则进行MPLS转发;查找LFIB表,如果对应的出标签是特殊标签,如标签3,则将报文的标签去掉,进行IP转发。
MPLS报文格式
MPLS标签封装在链路层和网络层之间,可以支持任意的链路层协议,MPLS标签的封装结构如图所示
Label Value:标签的前20bit表示标签值(标签的数字标识),所以标签值的范围为0到1048575,但是,标签值0到15是特殊用途的标签,这里列举几个常见的特殊标签的用途:
- 标签0:IPv4显式空标签;标签1:路由器报警标签;标签2:IPv6显式空标签。
- 标签3:隐式空标签。
- 标签14:OAM路由器报警标签。
- 其他0~15之间的被保留标签的功能目前暂时没有定义。
EXP:EXP是一个3bit的实验字段,之所以这么叫实验字段,是因为在 MPLS设计之初还没确定该字段的作用,现在主要用来做QoS。
S:S位叫栈底位(BoS,Bottom of Stack)。某些特殊应用场景(比如 MPLS VPN、AToM)下,需要一个 MPLS报文携带多个标签(理论上可携带的标签数量是没有限制的)。这些标签组成一个堆栈,堆栈底部的标签(紧挨着IP报头)S位的值为1,其他标签的S位的值都为0,如图所示:
TTL:最后8bit叫 TTL,作为报文的生存周期,作用跟IP报头中的TTL是一样的,在MPLS网络中每进行一次标签交换操作,最外层标签中的TTL就减1,TTL一旦减为0,报文就被丢弃,从而预防数据包的转发环路。IP报文进入MPLS网络后,标签的TTL值可以使用初始值255,也可以直接拷贝IP头中的TTL值
注意:数据链路层发现上层报文是0x8847表示上层为MPLS标签层。
MPLS网络整体模型
- LSR(标签交换路由器):运行了MPLS,具有标签分配和标签转发能力的路由器。
- LER(标签边界路由器):具有标签分配能力,并且同时连接IP和 MPLS 网络的路由器。分入站的LER和出站的LER。入站的LER负责对接收到的IP报文压入标签,然后转发进 MPLS 网络;出站的LER负责给离开MPLS网络的报文移除标签,然后根据IP转发表进行转发。
- FEC(转发等价类):用来描述具有相同特征的报文在转发过程中被LSR以相同方式处理。在MPLS 中,一个FEC使用同一个标签来标记(也就是说一个FEC 的报文走的是同一条LSP)。划分FEC的方式有很多,比如去往相同目的前缀的报文就是一个FEC,也可以使用源地址、目的地址、源端口、目的端口、协议类型、VPN等要素任意组合来划分一个FEC。
- LSP(标签转发路径):MPLS报文经过的路径。一条LSP起始LSR 叫入站的LER,最后一台LSR叫出站的LER,可以把一条LSP理解为一个单向的隧道。LSP还支持嵌套,也就是一条LSP可以在另一条LSP内部,这被用于运营商的一些应用场景,比如CSC。
根据数据传送的方向,LSR可以分为上游和下游设备:
上游:以指定的LSR为视角,根据数据传送的方向,所有往本LSR发送MPLS报文的LSR都可以称为上游LSR。
下游:以指定的LSR为视角,根据数据传送的方向,本LSR将MPLS报文发送到的所有下一跳LSR都可以称为下游LSR。
建立LSP的方式
首先了解LSP中节点类型:(按标签转发功能划分)
Ingress:入节点,负责为接收到的IP报文压入标签并送入LSP隧道。
Transit:中间节点,节点负责以标签父撰的万式转发报文。
Egress:出节点,负责移除报文中的标签并将报文转发至IP网络。
一、静态LSP:
管理员通过手工方式为各个转发等价类分配标签建立转发隧道。(很少情况较少,标签使用范围16~1023)
建立静态LSP时,管理员为各LSR手工分配标签时需要遵循的原则是:前一节点(上游节点)出标签的值等于下一个节点(下游节点)入标签的值,具体要进行以下操作。在 Ingress节点配置此LSP的目的地址、下一跳和出标签的值。
在Transit配置此LSP的入接口、与上一节点出标签相等的入标签的值、对应的下一跳和出标签的值。在Egress配置此LSP的入接口及与上一节点出标签相等的入标签的值。
二、动态LSP:
通过标签发布协议(LDP)动态建立转发隧道。(一般使用,标签范围为1024即以上)
Egress路由器RTD为本地存在的路由分配标签,并将路由和标签的绑定关系主动发送给上游邻居路由器RTC。
路由器RTC收到下游邻居路由器RTD的路由和标签的绑定关系后,将其记录到LIB中,并将自己分配的标签和路由的绑定关系发送给上游邻居路由器RTB。
RTB执行相同的动作将标签和路由的绑定关系发送给上游邻居路由器RTA,RTA为Ingress路由器,没有上游邻居,因此动态的LSP完成建立。
参考资料:华为R&S培训资料、《HCIE路由交换培训指南》