MPLS学习笔记

多协议标签交换MPLS(Multiprotocol Label Switching)是一种IP(Internet Protocol)骨干网技术。MPLS在无连接的IP网络上引入面向连接的标签交换概念,将第三层路由技术和第二层交换技术相结合,充分发挥了IP路由的灵活性和二层交换的简捷性。
MPLS起源于IPv4(Internet Protocol version 4),其核心技术可扩展到多种网络协议,包括IPv6(Internet Protocol version 6)、IPX(Internet Packet Exchange)和CLNP(Connectionless Network Protocol)等。MPLS中的“Multiprotocol”指的就是支持多种网络协议。

由此可见,MPLS并不是一种业务或者应用,它实际上是一种隧道技术。这种技术不仅支持多种高层协议与业务,而且在一定程度上可以保证信息传输的安全性。

MPLS学习

网络结构

LSR 标签交换路由器 ———— 进行MPLS标签交换和报文转发
MPLS 域 ———— 由LSR构成的网络区域
LER 边缘路由器 ———— 位于MPLS域边缘,连接其他网络的LSR
LSP 标签交换路径 ———— 单项路径,与数据流方向一致

MPLS传输图当IP报文进入MPLS网络时,MPLS入口LER分析报文内容并添加标签。当IP报文离开时,标签由出口LER弹出

体系结构

平面分布
控制平面:负责产生和维护路由信息以及标签信息

  路由信息表RIB:由IP路由协议生成,用于选择路由

  标签分发协议LDP:负责标签的分配,标签转发信息表的建立,标签交换路径的建立,拆除等工作。

  标签信息表LIB:由标签分发协议生成,用于管理标签信息

转发平面:就是数据平面。负责IP报文和MPLS标签报文的转发

  转发信息表FIB:从RIB提取路由信息生成,负责IP报文的转发

  标签转发信息表LFIB:由标签分发协议在LSR上建立LFIB,负责带MPLS标签报文的转发

转发等价类FEC:

MPLS将具有相同特征的报文归一类,称为转发等价类FEC(Forwarding Equivalence Class),属于同FEC的报文在转发过程中被LSR以相同方式处理。

标签

标签是只具有本地意义的标识符,用于唯一标识一个分组所属的FEC。
        ———————— 一个标签代表一个 FEC
MPLS标签长度为4个字节。封装在链路层和网络层之间,可支持任意链路层协议

标签
Label : 标签值域 20bit
Exp : 用于扩展 3bit 常用于做CoS ,当设备阻塞时,优先发送优先级高的报文
S : 栈底标识 1bit MPLS支持多层标签 S=1 时为最底层标签

标签栈(Label Stack)是指标签的排序集合。靠近二层首部的标签称为栈顶MPLS标签或外层MPLS标签(Outer MPLS label);靠近IP首部的标签称为栈底MPLS标签或内层MPLS标签(Inner MPLS label)。理论上,MPLS标签可以无限嵌套。目前MPLS标签嵌套主要应用在MPLS VPN、TE FRR(Traffic Engineering Fast ReRoute)中。

标签栈按先出后进方式组织标签,从栈顶开始处理标签。

LSP建立

MPLS需要事先为报文分配好标签,建立一条LSP才能进行报文转发。
LSP 分为静态LSP和动态LSP两种。

静态LSP

静态LSP是用户通过手工为各个转发等价类分配标签而建立的。由于静态LSP各节点上不能相互感知到整个LSP的情况,因此静态LSP是一个本地的概念。

静态LSP不使用标签发布协议,不需要交互控制报文,因此消耗资源比较小,适用于拓扑结构简单并且稳定的小型网络。但通过静态方式分配标签建立的LSP不能根据网络拓扑变化动态调整,需要管理员干预。

配置静态LSP时,管理员需要为各LSR手工分配标签,需要遵循的原则是:前一节点出标签的值等于下一个节点入标签的值。

动态LSP

动态LSP的标签发布协议

动态LSP通过标签发布协议动态建立。标签发布协议是MPLS的控制协议(也可称为信令协议),负责FEC的分类、标签的分发以及LSP的建立和维护等一系列操作。

动态LSP的基本建立过程

标签由下游LSR分配,按从下游到上游的方向分发。如下图,由下游LSR在IP路由表的基础上进行FEC的划分,并根据FEC分配标签,通告给上游的LSR,以便建立标签转发表和LSP。

转发(浅层)

基本概念

标签操作类型包括 标签压入 Push,标签交换 Swap和标签弹出 Pop

Push:当报文进入MPLS域时,LER在报文二层和IP首部之间插入新标签
Swap:当报文在MPLS域中转发时,根据标签转发表,用下一跳分配的标签,替换MPLS报文的栈顶标签
Pop:当报文离开MPLS域时,将MPLS报文的标签剥掉
PHP:弹出特性PHP penultimate Hop Popping。在最后一跳节点,标签已经没有使用价值。可以利用倒数第二跳特性PHP,在倒数第二跳节点处将标签弹出,减少最后一跳负担。默认情况下,支持PHP的Egress节点分配给倒数第二跳节点的标签值为3

转发过程

转发过程.浅
如上图所示,MPLS标签已分发完成,建立了一条LSP,其目的地址为4.4.4.2/32。则MPLS基本转发过程如下:

    1) Ingress节点收到目的地址为4.4.4.2的IP报文,压入标签Z并转发。
    2) Transit节点收到该标签报文,进行标签交换,将标签Z换成标签Y。
    3) 倒数第二跳Transit节点收到带标签Y的报文。因为Egress分给它的标签值为3,所以进行PHP操作,弹出标签Y并转发报文。从倒数第二跳转发给Egress的报文以IP报文形式传输。
    4) Egress节点收到该IP报文,将其转发给目的地4.4.4.2/32。

转发(深层)

基本概念

在MPLS详细转发过程中涉及的相关概念如下:

Tunnel ID:

    为了给使用隧道的上层应用(如VPN、路由管理)提供统一的接口,系统自动为隧道分配了一个ID,也称为Tunnel ID。该Tunnel ID的长度为32比特,只是本地有效。

NHLFE:

    下一跳标签转发表项NHLFE(Next Hop Label Forwarding Entry)用于指导MPLS报文的转发。

    NHLFE包括:Tunnel ID、出接口、下一跳、出标签、标签操作类型等信息。

    FEC到一组NHLFE的映射称为FTN(FEC-to-NHLFE)。通过查看FIB表中Tunnel ID值不为0x0的表项,能够获得FTN的详细信息。FTN只在Ingress存在。

ILM

    入标签到一组下一跳标签转发表项的映射称为入标签映射ILM(Incoming Label Map)。

    ILM包括:Tunnel ID、入标签、入接口、标签操作类型等信息。

    ILM在Transit节点的作用是将标签和NHLFE绑定。通过标签索引ILM表,就相当于使用目的IP地址查询FIB,能够得到所有的标签转发信息。

详细转发过程

转发过程.深

    当IP报文进入MPLS域时,首先查看FIB表,检查目的IP地址对应的Tunnel ID值是否为0x0。

            1) 如果Tunnel ID值为0x0,则进入正常的IP转发流程。
            2) 如果Tunnel ID值不为0x0,则进入MPLS转发流程。
            
    在MPLS转发过程中,FIB、ILM和NHLFE表项是通过Tunnel ID关联的。

        § Ingress的处理:通过查询FIB表和NHLFE表指导报文的转发。

            1) 查看FIB表,根据目的IP地址找到对应的Tunnel ID。
            2) 根据FIB表的Tunnel ID找到对应的NHLFE表项,将FIB表项和NHLFE表项关联起来。
            3) 查看NHLFE表项,可以得到出接口、下一跳、出标签和标签操作类型。
            4) 在IP报文中压入出标签,同时处理TTL,然后将封装好的MPLS报文发送给下一跳。
        § Transit的处理:通过查询ILM表和NHLFE表指导MPLS报文的转发。

            1) 根据MPLS的标签值查看对应的ILM表,可以得到Tunnel ID。
            2) 根据ILM表的Tunnel ID找到对应的NHLFE表项。
            3) 查看NHLFE表项,可以得到出接口、下一跳、出标签和标签操作类型。
            4) MPLS报文的处理方式根据不同的标签值而不同。
                a) 如果标签值>=16,则用新标签替换MPLS报文中的旧标签,同时处理TTL,然后将替换完标签的MPLS报文发送给下一跳。
                b) 如果标签值为3,则直接弹出标签,同时处理TTL,然后进行IP转发或下一层标签转发。
        § Egress的处理:通过查询ILM表指导MPLS报文的转发或查询路由表指导IP报文转发。

            1) 如果Egress收到IP报文,则查看路由表,进行IP转发。
            2) 如果Egress收到MPLS报文,则查看ILM表获得标签操作类型,同时处理TTL。
                a) 如果标签中的栈底标识S=1,表明该标签是栈底标签,直接进行IP转发。
                b) 如果标签中的栈底标识S=0,表明还有下一层标签,继续进行下一层标签转发。

参考

MPLS基础