MPLS 简介

MPLS 全称是 Multi-Protocol Label Switching —— 多协议标签交换;MPLS 从中文名字中就可以看出两个重点,分别是多协议和标签交换。

多协议:MPLS 基于二层,在二层之上三层之下。同时该协议可以与其他上层协议互相配合。

标签交换:MPLS 在三层之下意味著不需要数据进行三层转发,同时 MPLS 会分配标签,通过标签来实现转发平面的决策。

MPLS 产生背景

MPLS 早期是为了解决数据包转发效率低下的问题而出现的。早期的路由器都是通过软体的方式来进行报文转发处理,并且硬体性能较差(现在的路由器会用CPU计算出一个不用递归下一跳的 FIB 表,然后用专门的硬体来根据 FIB 转发数据)。而早期还有一种解决方案是 ATM 技术(此处不是指提款机(╯▔皿▔)╯),这种技术虽然转发效率还不错,但是技术比较复杂,部署难度和维护成本都很高。

于是 MPLS 在这种背景下横空出世,MPLS 借鉴了 ATM 的标签转发和面向连接特点。凭著转发效率的优势 MPLS 很受客户的欢迎。但是随著晶元技术、硬体性能的提升,MPLS 的优势渐渐褪去,转发效率渐渐与 IP 转发拉不开差距。现在,MPLS 已经被扩展到了新的应用领域,为网路提供其他的帮助,最常见的有 MPLS VPN 或 MPLS TE (流量工程)。

MPLS 网路结构

LSR (Label Switching Router)是标签交换路由器,LSR 具有标签分配和基于标签转发数据报文的能力。用户的 IP 数据流进入 MPLS 域之后,报文会以标签的方式经过每一台 LSR。为了转发标签的数据报文,每台 LSR 都会建立一张标签转发表,标签转发表就是通过标签分发协议依据路由表产生和建立的。

LER (Label Edge ROuter)是标签边界路由器,LER 具有标签分配能力。LER 有入站的 LER 和出站的 LER。入站 LER 负载对数据报文压入标签,然后转发进入 MPLS 网路;出站的 LER 负责给离开 MPLS 网路的数据报文移除标签,然后根据 IP 转发表进行转发。

LSP(Label Switching Path)是标签转发路径。LSP 就是流量在进入 MPLS 后以及出 MPLS 之前所经过的隧道路径,一条 LSP 的开端是入站 LER,结尾是出站 LER。这里所说的 LSP 是一条单向的,也就是说数据回来的时候所走的 LSP 又是一条另外的 LSP。而 LSP 是支持嵌套的,即一个 LSP 可以建立在 另一条 LSP 的里面。这种操作通常会在 ISP 运营商网路中使用,即数据报文中压一层私网标签,然后再压一条公网标签使其可以利用公网 MPLS 传输。LSP 有动态和静态两种建立方式,下文详解。

FEC(Forwarding Equivalent Class)是转发等价类,用来描述具有相同特征的报文在转发过程中被 LSR 以相同方式处理,也就是说一个 FEC 的数据报文走的是同一条 LSP。划分 FEC 的方式又很多,比如去往相同目的前缀的报文就是一个 FEC ,还有五元组(原目IP、原目埠、协议)、VPN等。

MPLS 报文格式

MPLS 的报文格式很简单,由 Label Value 、Exp 、 S 、 TTL 一共四个栏位组成,整个MPLS 栏位介于二层封装和网路层封装中间,一共 32 位。

Label Value 顾名思义用来表示标签值,这个栏位由 20 位,意味著标签值大小可表达范围在 0 到 1048575 ,标签值 0 到 15 是特殊用途的标签,这里不作详细讨论。

Exp 是一个 3 bit 的实验栏位,在 MPLS 设计之初还没有确定该栏位的作用,现在主要用来做 QoS。

S 位叫栈底位(BoS,Bootom of Stack)。只有在最靠近网路层封装的 MPLS 栏位,S 位才会置为 1 ,其余时候都是0。这种情况一般都是多个标签嵌套,如前文 LSP 中的描述。而多层嵌套并不是 Label Value 栏位有多个,而是多个整体的 MPLS 栏位有多个,理论无限叠加。

TTL(Time to Live)该栏位与 IP 报头中的 TTL作用、大小是一样的,在 MPLS 网路中每进行一次标签交换操作,最外层标签中的 TTL 就减一,TTL 一旦减为 0,报文就因为防止环路的原因会被丢弃。IP 报文进入 MPLS 网路后,标签的 TTL 值可以初始化为 255,也可以直接复制 IP 头中的 TTL 值。

LSP 建立

LSP 可以静态和动态建立。动态建立 LSP 是使用标签分发协议(比如 LDP)建立,静态就是手工配置,所以静态 LSP 不需要使用任何标签分发协议,没有必要交互任何控制信息,资源开销小。由于静态 LSP 是由手工配置的,无法随著网路拓扑变化而收敛,当网路出现故障后还需要管理员干预,管理相对比较麻烦。也许你会心想,既然显得毫无用处,我为什么还要写这么多来描述静态的方式。这是因为静态 LSP 可以避免像 LDP 故障导致 MPLS 业务流量丢失的情况,静态可以保障 MPLS 中关键应用的数据业务连续性。

静态 LSP:一条静态 LSP 有三种角色,Ingress、Transit、Egress。Ingress 节点负责为接收到的 IP 报文压入标签并送入 LSP 隧道,Transit 节点负责以标签交换的方式转发报文,Egress节点负责一处报文中的标签并将报文转发至 IP 网路。手工配置的时候,前一节点出标签的值等于下一个节点入标签的值。

  • 在 Ingress 节点配置此 LSP 的目的地址、下一跳和出标签的值。
  • 在 Transit 配置 LSP 的入介面、与上一节点出标签相等的入标签的值、对应的下一跳和出标签的值。
  • 在 Egress 配置此 LSP 的入介面及与上一届点出标签相等的入标签的值

从配置方法来说就可以看出,当为多条 LSP 以静态的方式建立时,操作会相当的复杂和麻烦,所以静态 LSP 配置只适合为关键业务提供保障。

当同一条 FEC 的 LSP 被静态和动态的方式同时建立,这个时候会优先走动态,即使动态切换了线路,除非动态故障,否则只会按动态建立的 LSP 去转发流量


LDP 的内容较多,留到下一章去写;如果可能的话,下一章可能会把 MPLS VPN 和 三种跨域解决方案也写上


推荐阅读:
相关文章