• 二、帧模式 MPLS 操作


            在第1章中,本书介绍了 MPLS 的整体架构及基本概念。本章将会着重讲述这一特定应用:即在纯路由器环境下基于目的的单播 IP 路由(也称帧模式 MPLS,这是 因为在这种环境中,打上标签的数据包会作为第2层的数据帧来进行交换)。第3章则会重点介绍在 ATM 环境下基于目的的单播 IP 路由(也称信元模式 MPLS,这是因为在这种环境中,打上标签的数据包会作为 ATM 信元来进行交换)。

            本章首先介绍的内容是 MPLS 数据层,在介绍这一部分的内容时,我们会假定路由器之间已经完成了标签的协商。接下来,本章会详细介绍用于在路由器之间转发标签的机制。在这一章的最后,还会介绍服务提供商网络中,标签转发协议与内部网关协议(IGP)、边界网关协议(BGP)之间的交互方式。

            图 2-1 和图 2-2 提供的信息会 贯穿这一章的始终:图 2-1 所示为 MPLS 标签交换路由器(LSR)的一般 架构;而图 2-2 提供的服务提供商(叫做 SuperNet)拓扑则是本章所有配置和排错信息的范例网络。

            在 SuperNet 服务提供商网络中使用了基于环回接口的无编号串行链路,这些接口的 IP 地址如表 2-1 所示。

                    表 2-1

    服务提供商SuperNet网络中的环回地址
    路由器环回接口
    圣何赛172.16.1.1/32
    山景城172.16.1.2/32
    圣克拉拉172.16.1.3/32
    旧金山172.16.1.4/32
    达拉斯172.16.2.1/32
    华盛顿172.16.3.1/32
    纽约172.16.3.2/32
    MAE-East172.16.4.1/32

     

    2.1 帧模式 MPLS 数据层操作

             第1章中简要介绍了 IP 数据包穿越 MPLS 骨干网的转发情况,在这一过程中有三个主要步骤。

    • 入方向上的边界 LSR 收到一个 IP 数据包,将该数据包分类进一个 FEC(转发等价类),并根据 FEC 为数据包粘贴上一个出站标签栈。对基于目的的单播 IP 路由来说,为数据包选择 FEC 是根据目的子网进行的,也就是说,分类数据包就是在转发表中执行传统的第3层查找工作。
    • 核心 LSR 收到带有标签的数据包,并使用标签转发表来根据同样的 FEC (在这个例子中是根据 IP 子网)将入站数据包的入站标签替换为出站标签。
    • 当这一特定 FEC 的出方向边界 LSR 收到了这个带有标签的数据包,它会将标签移除,并为这个移除了标签的 IP 数据包执行传统的第3层查找工作。

     图 2-3 所示为上述步骤在范例服提供商网络 SupetNet 中的执行过程。在这个例子中,数据包从圣何赛 POP 进入网络,并最终到达与纽约 POP 相连的客户,在此过程中,访数据包会穿越这一网络。

    圣何赛 POP 路由器收到了一个目的地址为 192.168.2.2 的 IP 数据包,并通过 IP 转发表(也称为转发信息库[FIB])执行传统的第3层查找工作。注释:鉴于 Cisco快速转发(CEF)是唯一使用 FIB 表的第3层交换机制,因此必须 在所有运行 MPLS 的路由器上启用 CEF,而且所有接收未打标 IP 数据包,并将这些数据包作为打标数据包来进行传输的入站接口,也必须支持 CEF 交换。核心路由器并不执行 CEF 交换 ---- 它们只负责交换已经打上了标签的数据包 ---- 但为了进行标签分配,也必须在这些路由器上全局启用 CEF。 

             FIB 条目(见例 2-1) 表示圣何赛 POP 路由器应该将它刚刚收到的 IP 数据包作为打标数据包进行转发。因此,圣何赛路由在将数据包转发给旧金山路由器之前 ,会为它粘贴上标签“30”,这就引出了第一个问题,这个标签应该添加在哪里,而旧金山路由器又怎么知道自己收到的数据包是一个打了标签的数据包,而不是一个目标纯 IP 数据包呢?

     

    2.1.1  MPLS 标签栈头部

           在实现帧模式的  MPLS 架构时,MPLS 标签必须在打标数据的开始,这样做的理由有很多,其中之一是确保交换的性能。因此,MPLS 标签放在了二层帧的第 2 层头部和第 3 层内容之间,如图 2-4 所示。

     由于 MPLS 标签被置于第 3 层数据包和第 2 层头部之间,因此 MPLS 标签头部也称为填充头部(shim header)。MPLS 标签头部(详见图 2-5)中包含 MPLS 标签(20 比特)、服务类别信息(3比特,这一部分在 IETF MPLS 文档中也称为实验比特位[experimental bits])、8比特生存时间(TTL)字段(在环路检测方面,这部分的功能和 IP TTL 字段相同)和 1 比特的栈底(Bottom-of-Stack)位。

            在第 1 章中将 MPLS 标签栈定义为在一个数据包上粘贴的,由两个以上的 标签头部所构成的组合,而栈底(Bottom-of-Stack)位的作用就是实现这种标签栈的设计。简单的单播 IP 路由并不会用到标签栈,但是其他的一些 MPLS 应用,包括基于 MPLS 的虚拟专用网或者 MPLS 流量工程,则在很大程度上老板娘依赖标签栈技术。

            MPLS 标签栈头部被放在了第 2 层头部和第 3 层载荷之间,现在发送它的路由器必须通过某种方式告诉接收方路由器,这个发送的数据包并非一个纯 IP 数据报文,而是一个打上了标签的数据包(即一个 MPLS 报文)。要实现这个功能,要实现这个功能,必须在第 2 层之上定义如下 新的协议类型。

    •  在 LAN 环境中,带有标签的数据包使用以太网类型值为 0x8847 和 0x8848 携带单播和多播第 3 层数据包。这些以太网类型值可以直接用于以太网媒介(包括 Fast Ethernet 和 Gigabit Ethernet)以及其他 LAN 媒介的 SNAP 头部。
    • 在点到点链路中使用 PPP 协议进行封装时,有一种新的网络控制协议(NCP),这种协议叫做 MPLS 控制 协议(MPLSCP)。MPLS 数据包以 PPP 协议字段值 8281 进行标记。
    • 通过帧中继 DLCI 在两台路由器之间传输的 MPLS 数据包会被 封装上一个 SNAP 头部,这个头部所使用的以太网类型值与 LAN 环境下使用的值相同。

            注释:若想了解更多关于在非 MPLS WAN 媒介上传递 MPLS 的具体内容,请见第 4 章。

    图 2-6 所示为所有 MPLS 封装方式的汇总。

    图 2-3 中的例子中,圣何赛路由器在其刚刚收到的 IP 数据包开头部分粘贴上 MPLS 标签,接着,它将这个打上了标签的数据包封装进一个 PPP 帧中,访帧 PPP 协议字段值为 8281。最后,路由器把这个帧转发给旧金山路由器。

    2.1.2  帧模式 MPLS 的标签交换

             在收到圣何赛路由器发来的二层 PPP 帧之后 ,旧金山路由器会立刻通过数据帧的 PPP 协议字段值判断出是一个带标签的数据包 ,于是路由器会在自己的标签转发信息库(LFIB)中进行标签查找。注释:在过去的 Cisco 文档中,LFIB 也 称为标记转发信息库(TFIB,Tag Forwarding Information Base)。

            通过与标签 30 (见例 2-2)相对应的 LFIB 条目,旧金山路由器将标签 30 替换为出站标签 28,然后把数据包转发给华盛顿路由器。

             带有标签的数据包遵循同样的转发原则被路由器进行转发,穿越 SuperNet 骨干网,并到达纽约 POP。在纽约 POP 中的 LFIB 条目告诉路由器,它需要移除这个数据包的标签并将不带有标签的数据包转发出去(见例 2-3)

     运行 Cisco IOS 软件,并在帧模式 MPLS 环境中充当 MPLS LSR 的路由器能够对带有标签的数据包执行以下一系列的操作。

    • Pop tag (弹出标记) ----- 移除 MPLS 标签栈中最顶部的标签并将其余部分作为带有标签的数据包(若栈底比特位为0)或者作为不带有标签的数据包(LFIB中的Tag Stack字段为空)转发出去
    • Swap tag(交换标记)----- 将 MPLS 标签栈中顶部的标签替换为另一个值(LFIB 中的 Tag Stack 字段长度为一个标签)。
    • Push tag(压入标记)----- 用一系列标签替换 MPLS 标签栈中最顶部的标签(FLIB 中的Tag Stack 字段包含多个标签)。
    • Aggregate(聚集)----- 移除 MPLS 标签栈最顶部的标签并对去除了这个标签之后 的 IP 数据包执行第 3 层查找 。被移除的标签应是 MPLS 标签栈最底部的标签,否则,设备就会删除这个数据包。
    • Untag ----- 移除 MPLS 标签栈最顶部的标签并将去除了这个标签之后的IP 数据包转发给特定的下一跳设备。被移除的标签应是 MPLS 标签栈最底部的标签,否则,设备就会删除这个数据包 。
  • 相关阅读:
    ROS学习笔记(四)---使用 VScode 启动launch文件运行多个节点
    Linux 命令(182)—— fg 命令(builtin)
    VScode(1)之内网离线安装开发环境(VirtualBox+ubuntu+VScode)
    如何不引入第三个中间变量进行两数交换
    使用html+css+js实现一个静态页面(含源码)
    Python和Java代码实现:切线法求解一维最优化问题
    mybatis的问题
    前端日期减一天的笑话
    【Linux】 reboot 命令使用
    在OpenWRT上自动重拨号获取公网IP(手记)
  • 原文地址:https://blog.csdn.net/tianyexing2008/article/details/125511151