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