• 互联网协议 — MPLS 多协议标签交换协议


    目录

    MPLS

    MPLS(Multi-Protocol Label Switching,多协议标签交换)是一种 IP 骨干网技术。MPLS 在无连接的 IP 网络上引入面向连接的标签交换概念,将第三层路由技术和第二层交换技术相结合,充分发挥了 IP 路由的灵活性和二层交换的简捷性。

    MPLS 起源于 IPv4,其核心技术可扩展到多种网络协议,包括 IPv6、IPX(Internet Packet Exchange)和 CLNP(Connectionless Network Protocol)等。MPLS 中的 “Multiprotocol” 指的就是支持多种网络协议。

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

    MPLS 解决了什么问题?

    传统的路由网络里面,当一个(无状态的)网络层协议数据包(e.g. IP 报文)在路由器之间游荡时,每个路由器都是独立的对这个数据包做出路由决策,决定数据包如何路由转发。

    路由决策指:每个路由器都需要分析报文的包头,根据网络协议层的数据进行运算,再基于这些分析和运算,独立的为数据包选择下一跳(Next Hop),最后通过 Next Hop 将数据包发送出去。以 IP 报文为例,路由决策是基于 dstIP 地址的,路由器根据 dstIP 地址,选择路由条目,再做转发。路由决策可以认为是由两部分组成:

    • 分类:将特定的数据包归属为一个 FEC(Forwarding Equivalence Classes,等价转发类)。
    • 查找:查找 FEC 对应的下一跳。

    在这里插入图片描述

    对于同一个路由器来说,同一个 FEC 必然对应同一个 Next Hop,那么属于同一个 FEC 的所有网络数据包必然会走同一条路径转发出去(注:在多链路负载均衡的情况下,一个 FEC 也可能对应一组 Next Hop,但是逻辑上还是能看成是一个 Next Hop)。

    具体到 IP 报文,当多个 IP 报文的 dstIP 都对应路由器的一条路由,且这条路由是所有路由里面最长匹配(Longest Match)的路由,那么对于这个路由器来说,就会认为这两个 IP 报文属于一个 FEC。因此,这两个数据包就会走同一条路径出这个路由器。这就是我们最常见到的路由转发。

    需要注意的是,这里的 FEC 是针对某个路由器的,而不是指全局路由器的。举个例子,目的地址为 192.168.31.1 和 192.168.31.100 的两个 IP 报文,第一个路由器具有 192.168.31.0/24 这条路由,那么在第一个路由器它们属于同一个 FEC,都会被转发到第二个路由器。而第二个路由器具有 192.168.31.0/26 和 192.168.31.0/24 两条路由,并且两条路由的 Next Hop 不一样。那么,因为 192.168.31.0/26 能更精确的匹配 192.168.31.1,所以 192.168.31.1 匹配第一条路由,而 192.168.31.100 匹配第二条路由,最终,这两个 IP 协议报文在第二个路由器被认为是不同的 FEC,从不同的路径出去。这就是每个路由器都需要独立的做路由决策的原因之一。

    在这里插入图片描述
    由于每个路由器都需要独立的路由决策(虽然会有这样那样的缓存机制加速决策),而路由器的收发队列一旦满了,就会丢包。所以在一个高流量,高容量的网络里面,无疑对每个路由器的要求都很高。

    针对这个问题,MPLS 提出了类似的,但是更简单的另外一种路由决策的方法:传统的路由决策,路由器需要对网络数据包进行解包,再根据 dstIP 地址计算归属的 FEC。而 MPLS 提出,当网络数据包进入 MPLS 网络时,对网络数据包进行解包,计算归属的 FEC,生成标签(Label)。当网络数据包在 MPLS 网络中传输时,路由决策都是基于 Label 而非基于路由表,所以路由器不再需要对网络数据包进行解包。并且 Label 是个整数作为 key,可以达到 O(1) 的查找时间。大大减少了路由决策的时间。这里的 Label 就是 MPLS 里面的 “Label”。需要注意的是 Label 在 MPLS 网络里面,是作为网络数据包的一部分,随着网络数据包传输的。

    也就是说,在 MPLS 网络里面,数据被封装在了盒子里,上面贴了标签,每个经手的人只需要读标签就知道盒子该送到哪。而传统的路由网络里面,每个经手的人都需要打开盒子,看看里面的内容,再决定送往哪。

    这里提到了 MPLS 网络,这是一个由相连的,支持 MPLS 的设备组成的网络。打上 MPLS 标签的数据可以在这个网络里面传输。MPLS 的核心就是,一旦进入了 MPLS 网络,那么网络数据包的内容就不再重要,路由决策(包括 FEC 归属的计算,Next Hop 的查找)都是基于 Label 来进行的。

    从目前看,MPLS 带来的好处是:在 MPLS 网络里面,除了边界路由器,其他路由器可以由一些支持 Label 查找替换的低性能的交换机,或者路由器来完成。这一方面降低了组网的成本,另一方面提升了同样性能设备的转发效率。不过,随着路由器的发展,这方面的优势弱化了,而且,类似的问题,也不一定需要 MPLS 来解决。MPLS 的价值更多的在于其他方面。不过初步理解 MPLS,就先说这些。

    到目前为止,MPLS 里面的 M,P,L 都介绍过,S 其实也隐含的介绍过,S 是 Switching 的意思,即基于 Label 做路由决策的意思,或者说标签交换里面的交换。相信大家也明白了为什么说 MPLS 是一种高效的数据传输的技术。

    MPLS 的术语

    • FEC(Forwarding Equivalence Class):交换等价类,前面描述过,同样的转发路径的网络数据包的集合。

    • MPLS Network:由支持 MPLS 的、相连的网络设备的构成。

    • LSH(Label Switching hop):IP 报文从一个 MPLS 设备发送到另一个 MPLS 设备,区别于传统的路由交换,LSH 是基于 Label 的转发。

    • LER(Label Edge Router):有的地方也叫做 MPLS edge node。顾名思义,MPLS 网络的边缘设备。

      • MPLS ingress node:进入 MPLS 网络的节点,也就是 MPLS 网络的入口路由器。该设备计算出 IP 协议报文归属的 FEC,并把相应的 Label 放入 IP 报文。
      • MPLS egress node:出 MPLS 网络的节点,也就是 MPLS 的出口路由器。IP 报文在这里回到传统的路由系统中。
    • LSR(Label Switching Router):支持 MPLS 转发的路由器。如果一个 LSR 有一个邻接的节点在 MPLS 网络之外,那么这个 LSR 就是 LER。注意,这里的 MPLS 网络之外可以是:1. 传统路由网络,2. 另一个 MPLS 网络。

    • LSP(Label Switching Path):特定的 FEC 中的 IP 报文所经过的 LSR 的集合。LSP 通常也被称为 MPLS tunnel。
      在这里插入图片描述

    • NHLFE(Next Hop Label Forwarding Entry):LSR 中用来转发条目,相当于路由表之于路由器。

    NHLFE 包含了 Next Hop 和对数据包的当前 Label 需要做的操作,包括了:

    • 替换(SWAP)
      在这里插入图片描述

    • 删除(POP)
      在这里插入图片描述

    • 添加(PUSH)
      在这里插入图片描述

    MPLS 的协议头

    前面说了,MPLS 把 Label 作为 IP 报文的一部分,存储在 IP Header 中。通常情况下,MPLS 操作在 L2 层和 L3 层之间,因此也常常被认为是 L2.5 协议。这也就是 MPLS 能支持 Multi-Protocol 的原因。Label 不依赖于任何协议,直接定义在 L2-3 层之间。

    在这里插入图片描述

    • Label:20bit 的整数,也就是说 Labe 的容量是百万级的。虽然不是无限的,但是也很多了。
    • TC:之前的 EXP,改名成 TC,由 RFC5462 定义。
    • S:bottom of stack,Stack 是一种常见的数据结构类型,特点是后进先出。S 为 1 表明这已经是栈底了,即当前 Label 是 IP 报文最后一个 MPLS 标签。再执行一个 POP 操作,就能变成正常的 IP 报文了。
    • TTL:在 IP 协议里面 TTL 的作用主要是防止环路和用于 Traceroute 等工具。MPLS 里面的 TTL 作用是一样的。当数据包进入 MPLS 网络,L3 的 TTL 会被拷贝至 MPLS 的 TTL,每一次 LSH,TTL 减 1,数据包出 MPLS 网络,MPLS 中的 TTL 会再次拷贝至 L3。

    在这里插入图片描述

    实际上,MPLS 中的 Label 不是指一个 Label,而是由多个 Label 构成的 Label Stack。

    在这里插入图片描述
    从前面的描述看,MPLS 似乎用一个 Label 就可以满足要求了。多 Label 的一个应用场景就是嵌套的 LSP。直接看图吧:

    在这里插入图片描述

    对于 IP1 的报文来说,上层 LSP 就是由 A->B 组成。但是 A 并非直接转发给 B 的,而是通过另一个 Sub LSP C1->C2->C3 转发给的 B。这么做,首先是因为 A 和 B 没有直接相连,没有办法直接转发。另一方面,因为 IP1 和 IP2 有一部分重合的路径,通过定义子 LSP 可以复用这部分路径。对于 IP1 和 IP2 来说,C1,C2,C3 只需要存储一套 NHLFE 即可。

    MPLS 的网络拓扑

    在这里插入图片描述

    IP 报文进入 MPLS 网络时,MPLS 入口的 LER 分析会 IP 报文的内容并且为这些 IP 报文添加合适的标签,所有 MPLS 网络中的 LSR 根据标签转发数据。当该 IP 报文离开 MPLS 网络时,标签由出口 LER 弹出。

    MPLS 的体系结构

    在这里插入图片描述

    MPLS 由控制平面(Control Plane)和转发平面(Forwarding Plane)组成。

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

    • 路由信息表 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):简称标签转发表,由标签分发协议在 LSR 上建立 LFIB,负责带 MPLS 标签报文的转发。

    LSP 的建立

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

    静态 LSP 的建立

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

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

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

    动态LSP的建立

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

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

    在这里插入图片描述

    MPLS 的转发过程

    基本转发过程

    以支持 PHP 的 LSP 为例,说明 MPLS 基本转发过程。

    在这里插入图片描述

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

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

    详细转发过程

    在这里插入图片描述

    相关阅读:

  • 相关阅读:
    数组
    字符对象的方法
    事件
    判断数据类型
    数据类型和变量
    语法
    快速入门
    JavaScript简介
    Spring init-method和destroy-method属性的使用
    spring3后提供了的context:property-placeholder/元素
  • 原文地址:https://www.cnblogs.com/hzcya1995/p/13309302.html
Copyright © 2020-2023  润新知