浅谈双层标签的VPN 第一篇 MPLS标签初识

MPLS

  • 一、MPLS的起源
  • 二、MPLS武功心法——基于标签转发
    • 1、MPLS阵法图
    • 2、报文结构
    • 3、标签产生
    • 4、MPLS报文转发过程
    • 5、MPLS高阶心法――PHP倒数第二跳弹出

如果说MPLS技术是通信业的一颗明珠,那么使用两层MPLS标签技术的VPN功能则更加光彩夺目。内层标签用于提供VPN服务,而外层标签则为骨干网上传输提供了便捷。
为什么这么说?两层标签又有什么奥妙可言?让我们一起来探索两层标签的VPN的奥秘。
说标签,道标签,我们先从MPLS的起源说起……

一、MPLS的起源

90年代中期,TCP/IP技术日益成熟,推动了互联网的飞速发展。在TCP/IP协议体系中,IP报文的转发主要依靠路由器查找路由表来实现。在大型网络中,路由器中的路由表都非常庞大,并且路由表的查找算法是最长匹配算法,所以在路由表中查找到精确路由的计算量非常大。而当时由于硬件技术的限制,路由器主要通过软件方式来查找路由表,效率很低,这就导致路由器的IP转发性能低下,这也成为了当时限制互联网发展的主要瓶颈。

为了适应网络的发展,ATM(Asynchronous Transfer Mode)技术应运而生。ATM采用定长标签,并且只需要维护比路由表规模小得多的标签表,能够提供比IP路由方式高得多的转发性能。然而,ATM协议相对复杂,且ATM网络部署成本高,这使得ATM技术很难普及。

ATM技术虽然没有成功,但其中的几点心法口诀却属创新:

  • 摒弃了繁琐的路由查找,改为简单快速的标签交换;
  • 将具有全局意义的路由表改为只有本地意义的标签表。

MPLS的创始人“label大师”充分吸取了ATM的精华,将自己定位在第2. 5层的位置。为了不得罪其他帮派,宣称本帮是“multiprotocol”,来者不拒,也可以承载其他帮派的报文。在经过一年多的招兵买马、上下打点之后,于1997年的武林大会上正式宣布本帮成立,并命名为MPLS(Multiprotocol Label Switching)。

二、MPLS武功心法——基于标签转发

1、MPLS阵法图

浅谈双层标签的VPN 第一篇 MPLS标签初识_第1张图片
MPLS帮的弟子一直修炼一套独有阵法,所有进入该阵的报文必须领得通关令牌(标签)。该阵法分为内外两层,外层由功力较低的入门弟子担当(LER),在IP报文冲阵时负责接收IP报文,查找标签转发表后给IP报文分配令牌(打标签,PUSH),在IP报文出阵时对报文进行令牌回收(弹出标签,POP),按IP路由进行转发。

内层由功力高强的弟子组成(LSR),负责对标签报文进行快速的令牌交换操作(标签交换,SWAP)。

该阵法所使用的令牌(标签Label)是一个只具有本地意义的标识符,通过绑定过程与FEC相映射。MPLS标签的长度为4个字节,封装在链路层和网络层之间,可以支持任意的链路层协议。这里提到的FEC是在转发过程中以相同方式处理的一组数据分组, MPLS创始人在秘笈中本来规定:可以通过地址、隧道、COS等来标识创建FEC,只可惜后辈弟子大多资质愚钝,不能理解其中的精妙之处,所以我们现在看到的MPLS中只是一条路由对应一个FEC。通常在一台设备上,对一个FEC分配相同的标签。举个例子,匹配3.3.3.9/32路由的报文,MPLS会为其分配一个标签。所有使用该路由进行转发的报文,都将被封装同一个标签值,然后进入MPLS网络进行转发。

需要明确的是,在MPLS阵法中,数据流所走的路径就是标签交换通道LSP(Label Switched Path)。

2、报文结构

浅谈双层标签的VPN 第一篇 MPLS标签初识_第2张图片
MPLS标签共有4个字段:

  • Label:20bit,标签值域。
  • Exp:3bit,用于扩展。现在通常用做CoS(Class of Service),当设备阻塞时,优先发送优先级高的报文。
  • S:1bit,栈底标识。MPLS支持多层标签,即标签嵌套。S值为1时表明为最底层标签。
  • TTL:8bit,和IP报文中的TTL意义相同。

标签栈(Label Stack)是指标签的排序集合。如下图所示,靠近二层首部的标签称为栈顶MPLS标签或外层MPLS标签(Outer MPLS label);靠近IP首部的标签称为栈底MPLS标签或内层MPLS标签(Inner MPLS label)。理论上,MPLS标签可以无限嵌套,从而提供无限的业务支持能力。这是MPLS技术最大的魅力所在。
在这里插入图片描述

3、标签产生

有了标签,转发是很简单的事,但是如何生成标签,却是MPLS中最难修练的部分。在MPLS中,有一个叫LDP(Label Distribution Protocol)的秘笈,是一个动态的生成标签的协议。下面我们来介绍一下LDP如何生成标签。
浅谈双层标签的VPN 第一篇 MPLS标签初识_第3张图片
上图是比较常见的一种标签分配方式。标签由数据流经的LSP上的下游LSR分配,按从下游到上游的方向分发。如上图,Egress告诉Transit说:如果你要转发到3.3.3.9/32的数据给我,你就为报文加上标签X。接着Transit又向Ingress说:如果你要转发到3.3.3.9/32的数据给我,你就为报文加上标签Z。

LSR(Transit)设备上的标签转发信息:

IN interface IN label Prefix/MASK OUT interface (nexthop) OUT label
If0 Z 3.3.3.9/32 if1 X

这里的IN和OUT,是相对于标签转发设备而言,不是相对于标签分配设备,总结一个心法口诀就是:

  • 入标签是我分给上游设备的,出标签是下游设备分给我的。
  • 我分配的标签是给上游设备用的,由上游设备添加到报文中。

4、MPLS报文转发过程

浅谈双层标签的VPN 第一篇 MPLS标签初识_第4张图片
在MPLS标签分配完毕之后,一条转发报文的LSP就建立完成了。LSP上的每个设备在收到报文之后根据标签进行转发。还是用上面这个例子,Ingress节点收到目的地址为3.3.3.9的IP报文,压入标签Z并转发。Transit节点收到带标签Z的报文,进行标签交换,替换为标签X并转发报文。Egress节点收到该报文后弹出标签,变为IP报文,而后将其转发给目的地3.3.3.9/32。

5、MPLS高阶心法――PHP倒数第二跳弹出

MPLS帮派中有个弟子PHP,他天资聪颖且富有创新精神,他经过对MPLS阵法的深入研究,发现本帮的这门绝学虽然暗合天数、精妙无比,但并非没有可改进之处。

在阵法的出口处,Egress LSR本应变MPLS转发为IP路由查找,但是他收到的仍旧是含有标签的MPLS报文,按照常规,这个报文应该送交MPLS模块处理,而此时MPLS模块不需要标签转发,能做的只是去掉标签,然后送交IP层。所以对于Egress LSR来说,处理MPLS报文是没有意义的,最好能够保证他直接收到的就是IP报文。这就需要在Egress LSR的上游(倒数第二跳)就把标签给弹出来。

但关键问题是:上游设备如何知道自己是倒数第二跳呢?其实很简单,在倒数第一跳为其分配标签时做一下特殊说明即可(分配一个特殊的标签值3)。

经过几次实战检验,效果很好,遂正式以自己的名字命名为:PHP(Penultimate Hop Popping),倒数第二跳弹出。

设备 分配标签值(改进前) 分配标签值(改进后) 转发方式(改进前) 转发方式(改进后)
倒数第一跳 随机分配 分配特定的标签3 标签弹出,IP路由转发 IP路由转发
倒数第二跳 随机分配 随机分配 标签交换 标签弹出

你可能感兴趣的:(计算机网络,HCIP,网络,智能路由器,前端,网络协议,web安全,https,MPLS)