MPLS 物种起源 / 报文格式
IP 的危机
在 90 年代中期, 当时路由器技术的发展远远滞后于网络的发展速度与规模, 主要表现在转发效率低下, 无法提供 QOS 保证. 原因是: 当时路由查找算法使用最长匹配原则, 必须使用软件查找; 而 IP 的本质就是 "只关心过程, 不注重结果" 的 "尽力而为". 当时江湖上流行一种论调: 过于简单的 IP 技术无法承载网络的未来, 基于 IP 技术的因特网必将在几年之后崩溃.
ATM 的野心
此时 ATM 跳了出来, 欲收编所有帮派, 一统武林. 不幸的是: 信奉唯美主义的 ATM 走向了另一个极端, 过于复杂的心法与招式导致没有任何厂商能够完全修练成功, 而且无法与 IP 很好的融合. 在与 IP 的大决战中最终落败, ATM 只能寄人篱下, 沦落到作为 IP 链路层的地步.
ATM 技术虽然没有成功, 但其中的几点心法口诀, 却属创新
屏弃了繁琐的路由查找, 改为简单快速的标签交换
将具有全局意义的路由表改为只有本地意义的标签表
这些都可以大大提高一台路由器的转发功力.
MPLS 的创始人 "label 大师" 充分吸取了 ATM 的精华, 但也同时认识到 IP 为江湖第一大帮派, 无法取而代之. 遂主动与之修好, 甘当 IP 的承载层, 但为了与一般的链路层小帮有所区别, 将自己定位在第 2. 5 层的位置."label 大师" 本属于八面玲珑之人, 为了不得罪其他帮派, 宣称本帮是 "multiprotocol", 来者不拒, 也可以承载其他帮派的报文. 在经过一年多的招兵, 上下打点之后, 于 1997 年的武林大会上, 正式宣布本帮成立, 并命名为 MPLS(MultiProtocol label Switch) MPLS 可以扩展到多种网络协议(如 IPv6,IPX 等)
MPLS 在 TCP/IP 模型里面的位置
MPLS 包头结构
通常, MPLS 包头有 32Bit, 其中有:
20Bit 用作标签 (Label) 在本地有意义
3 个 Bit 的 EXP, 协议中没有明确, 通常用作 COS QOS 打标用的
1 个 Bit 的 S, 用于标识是否是栈底, 表明 MPLS 的标签可以嵌套, S 值为 1 时表明为最底层标签
8 个 Bit 的 TTL
二层首部的标签称为栈顶 MPLS 标签或外层 MPLS 标签
靠近 IP 首部的标签称为栈底 MPLS 标签或内层 MPLS 标签
理论上, 标记栈可以无限嵌套, 从而提供无限的业务支持能力. 这是 MPLS 技术最大的魅力所在.
标签空间
0~15: 特殊标签. 如标签 3, 称为隐式空标签, 用于倒数第二跳弹出;
16~1023: 静态 LSP 和静态 CR-LSP(Constraint-based Routed Label Switched Path, 基于约束的标签交换路径)共享的标签空间;
1024 及以上: LDP,RSVP-TE(Resource Reservation Protocol-Traffic Engineering, 资源预留协议流量工程),MP-BGP(MultiProtocol Border Gateway Protocol, 多协议边界网关协议)等动态信令协议的标签空间.
抓包现象
MPLS 术语
LSP
LSP(Label Switched Path): 标签交换路径, 报文在 MPLS 网络中经过的路径, 数据流所走的路径就是 LSP.
LSR
LSR:
Label Switching Router, 用于标签的交换
LER:
Label Switching Edge Router, 在 MPLS 的网络边缘, 在 MPLS 网络中, 用于标签的压入或弹出
Ingress,Transit, Egress
LSP 的入口 LER 被称为入节点(Ingress)
位于 LSP 中间的 LSR 被称为中间节点(Transit)
LSP 的出口 LER 被称为出节点(Egress)
一条 LSP 可以有 0 个, 1 个或多个中间节点, 但有且只有一个入节点和一个出节点
MPLS 北斗阵法图
该阵法分为内外两层, 外层由功力高强的弟子担纲 (至少是个堂主(LER), 在 IP 报文冲阵时负责接收 IP 报文, 查找标签转发表, 给 IP 报文打标签操作(PUSH) 在 IP 报文出阵时对标签报文进行弹出操作(POP), 按 IP 路由进行转发.
内层由功力较低的入门弟子组成, 负责对标签报文进行快速的标签交换操作(SWAP)
上游, 下游
下游给上游分发标签
FEC
Forwarding Equivalence Class,FEC(转发等价类), 是在转发过程中以等价的方式处理的一组数据分组, MPLS 创始人在秘笈本来规定: 可以通过地址, 隧道, COS 等来标识创建 FEC, 只可惜后辈弟子大多资质愚钝, 不能理解其中的精妙之处, 所以我们现在看到的 MPLS 中只是一条路由对应一个 FEC. 通常在一台设备上, 对一个 FEC 分配相同的标签.
LSP 的建立方式
建立 LSP 的方式有两种:
静态 LSP: 用户通过手工方式为各个转发等价类分配标签建立转发隧道;
动态 LSP: 通过标签发布协议动态建立转发隧道
in 标签是我分给别人的
Out 标签是别人分给我的
实验模拟
实验查看 5.5.5.5 分配标签的过程
MPLS 网络模型
控制平面: 负责产生和维护路由信息以及标签信息.
路由信息表 RIB(Routing Information Base): 由 IP 路由协议 (IP Routing Protocol) 生成, 用于选择路由.
标签分发协议 LDP(Label Distribution Protocol): 负责标签的分配, 标签转发信息表的建立, 标签交换路径的建立, 拆除等工作.
标签信息表 LIB(Label Information Base): 由标签分发协议生成, 用于管理标签信息.
转发平面: 即数据平面(Data Plane), 负责普通 IP 报文的转发以及带 MPLS 标签报文的转发.
转发信息表 FIB(Forwarding Information Base): 从 RIB 提取必要的路由信息生成, 负责普通 IP 报文的转发.
标签转发信息表 LFIB(Label Forwarding Information Base): 简称标签转发表, 由标签分发协议建立 LFIB, 负责带 MPLS 标签报文的转发.
MPLS 路由器上, 报文的转发过程:
当收到普通 IP 报文时, 查找 FIB 表, 如果 Tunnel ID 为 0x0, 则进行普通 IP 转发; 如果查找 FIB 表, Tunnel ID 为非 0x0, 则进行 MPLS 转发.
路由信息表 RIB
转发信息表 FIB
标签信息表 LIB
标签转发信息表 LFIB
Tunnel ID 为非 0x0
MPLS 基础配置
配置 LSR ID
LSR ID 用来在网络中唯一标识一个 LSR.LSR 没有缺省的 LSR ID, 必须手工配置. 为了
提高网络的可靠性, 推荐使用 LSR 某个 Loopback 接口的地址作为 LSR ID
执行命令 mpls lsr-id lsr-id, 配置本节点的 LSR ID
如果要修改已经配置的 LSR ID, 必须先在系统视图下执行 undo mpls 命令
执行 undo mpls 命令会删除所有 MPLS 配置, 导致 MPLS 业务中断. 因此, 请配置前对
网络中每个 LSR 的 LSR ID 进行统一规划, 避免出现修改 LSR ID 的情况
使能 MPLS
执行命令 system-view, 进入系统视图.
执行命令 mpls, 使能本节点的 MPLS, 并进入 MPLS 视图.
缺省情况下, 节点的 MPLS 能力处于未使能状态.
执行命令 interface interface-type interface-number, 配置需要转发 MPLS 报文的接口.
执行命令 mpls, 使能接口的 MPLS.
缺省情况下, 接口的 MPLS 能力处于未使能状态.
来源: http://blog.51cto.com/13817711/2462203