MPLS 的工作原理IETF于1997年成立了 MPLS 工作组,开发出一种新的协议——多协议标记交换 MPLS (MultiProtocol Label Switching)。
“多协议”表示在 MPLS 的上层可以采用多种协议,例如:IP,IPX;可以使用多种数据链路层协议,例如:PPP,以太网,ATM 等。
“标记”是指每个分组被打上一个标记,根据该标记对分组进行转发。
为了实现交换,可以利用面向连接的概念,使每个分组携带一个叫做标记 (label) 的小整数。当分组到达交换机(即标记交换路由器)时,交换机读取分组的标记,并用标记值来检索分组转发表。 这样就比查找路由表来转发分组要快得多。
MPLS 特点MPLS 并没有取代 IP,而是作为一种 IP 增强技术,被广泛地应用在互联网中。
MPLS 具有以下三个方面的特点:支持面向连接的服务质量;
支持流量工程,平衡网络负载;
有效地支持虚拟专用网 ***。
MPLS 的工作原理
基本工作过程IP 分组的转发
(1) 在传统的 IP 网络中,分组每到达一个路由器后,都必须提取出其目的地址,按目的地址查找路由表,并按照“最长前缀匹配”的原则找到下一跳的 IP 地址(请注意,前缀的长度是不确定的)。
(2) 当网络很大时,查找含有大量项目的路由表要花费很多的时间。
(3) 在出现突发性的通信量时,往往还会使缓存溢出,这就会引起分组丢失、传输时延增大和服务质量下降。
IP 分组的转发
MPLS 协议的基本原理在 MPLS 域的入口处,给每一个 IP 数据报打上固定长度“标记”,然后对打上标记的 IP 数据报用硬件进行转发。
采用硬件技术对打上标记的 IP 数据报进行转发就称为标记交换。
“交换”也表示在转发时不再上升到第三层查找转发表,而是根据标记在第二层(链路层)用硬件进行转发。
MPLS 域 (MPLS domain) 是指该域中有许多彼此相邻的路由器,并且所有的路由器都是支持 MPLS 技术的标记交换路由器 LSR (Label Switching Router)。
LSR 同时具有标记交换和路由选择这两种功能,标记交换功能是为了快速转发,但在这之前LSR 需要使用路由选择功能构造转发表。
MPLS 的基本工作过程
(1) MPLS 域中的各 LSR 使用专门的标记分配协议 LDP 交换报文,并找出标记交换路径 LSP。各 LSR 根据这些路径构造出分组转发表。
(2) 分组进入到 MPLS 域时, MPLS 入口结点把分组打上标记,并按照转发表将分组转发给下一个 LSR。给 IP 数据报打标记的过程叫做分类 (classification)。
(3) 一个标记仅仅在两个标记交换路由器 LSR 之间才有意义。分组每经过一个 LSR,LSR 就要做两件事:一是转发,二是更换新的标记,即把入标记更换成为出标记。这就叫做标记对换 (label swapping)。
项目含义:从入接口 0 收到一个入标记为 3 的IP 数据报,转发时,应当把该IP数据报从出接口 1 转发出去,同时把标记对换为 1。
(4) 当分组离开 MPLS 域时,MPLS 出口结点把分组的标记去除。再以后就按照一般分组的转发方法进行转发。
上述的这种“由入口 LSR 确定进入 MPLS 域以后的转发路径”称为显式路由选择 (explicit routing),它和互联网中通常使用的“每一个路由器逐跳进行路由选择”有着很大的区别。
转发等价类 FECMPLS 有个很重要的概念就是转发等价类 FEC (Forwarding Equivalence Class)。
“转发等价类”就是路由器按照同样方式对待的分组的集合。
“按照同样方式对待”表示:从同样接口转发到同样的下一跳地址,并且具有同样服务类别和同样丢弃优先级等。
划分 FEC 的方法不受什么限制,这都由网络管理员来控制,因此非常灵活。
入口结点并不是给每一个分组指派一个不同的标记,而是将属于同样 FEC 的分组都指派同样的标记。
FEC 和标记是一一对应的关系。
FEC 用于负载平衡
流量工程
(1) 网络管理员采用自定义的 FEC 就可以更好地管理网络的资源。
(2) 这种均衡网络负载的做法也称为流量工程 TE (Traffic Engineering) 或通信量工程。
MPLS 首部的位置与格式MPLS 并不要求下层的网络都使用面向连接的技术。
下层的网络并不提供打标记的手段,而 IPv4 数据报首部也没有多余的位置存放 MPLS 标记。
这就需要使用一种封装技术:在把 IP 数据报封装成以太网帧之前,先要插入一个 MPLS 首部。
从层次的角度看,MPLS 首部就处在第二层和第三层之间。
MPLS 首部的格式
“给 IP 数据报打上标记”其实就是在以太网的帧首部和 IP 数据报的首部之间插入一个 4 字节的 MPLS 首部。
MPLS 首部共包括以下四个字段:
(1) 标记值(占 20 位)。可以同时容纳高达 220 个流(即 1048576 个流)。实际上几乎没有哪个 MPLS 实例会使用很大数目的流,因为通常需要管理员人工管理和设置每条交换路径。
(2) 试验(占 3 位)。目前保留用作试验。
(3) 栈S(占 1 位)。在有“标记栈”时使用。
(4) 生存时间TTL(占 8 位)。用来防止 MPLS 分组在 MPLS 域中兜圈子。