标签:记录 自己 出接口 连通 end 静态 流程 连通性 质量
一、MPLS 基本结构1、网络结构
MPLS 网络的典型结构如图,可以进行 MPLS 标签交换和报文转发的网络设备称为标签交换路由器 LSR(Label Switching Router);
由 LSR 构成的网络区域称为 MPLS域(MPLS Domain);
位于 MPLS 域边缘、连接其它网络的 LSR 称为边缘路由器 LER(Label EdgeRouter);
区域内部的 LSR 称为核心 LSR(Core LSR)。
图MPLS 网络结构
在 IP 网络内进行传统的 IP 转发,在 MPLS 域内进行标签转发。
LER 负责从 IP 网络接收 IP 报文并给报文打上标签,然后送到 LSR,反之,也负责从 LSR 接收带标签的报文并去掉标签然后转发到 IP 网络;LSR 只负责按照标签进行转发。
IP 报文在 MPLS 网络中经过的路径称为标签交换路径 LSP(Label Switched Path),这条路径是在转发报文之前就已经通过各种协议确定并建立的,报文会在特定的 LSP 上传递。
LSP 是一个单向路径,与数据流的方向一致。
LSP 的入口 LER 称为入节点(Ingress);位于 LSP 中间的 LSR 称为中间节点(Transit);LSP 的出口 LER 称为出节点(Egress)。
一条 LSP可以有 0 个、 1 个或多个中间节点,但有且只有一个入节点和一个出节点。以指定的 LSR 为视角,根据数据传送的方向,所有往本 LSR 发送 MPLS 报文的 LSR 都可以称为上游 LSR,本 LSR 将 MPLS 报文发送到的所有下一跳 LSR 都可以称为下游 LSR。
如图,对于发往 192.168.1.0/24 的数据流来说, Ingress 是 Transit 的上游节点, Transit 是 Ingress 的下游节点。同理, Transit 是 Egress 上游节点。Egress 是 Transit 的下游节点。
图上游 LSR 和下游 LSR 概念
2、体系结构
MPLS 的体系结构由控制平面(Control Plane)和转发平面(Forwarding Plane)组成。
图MPLS 体系结构示意图
控制平面是无连接的,主要功能是负责产生和维护路由信息以及标签信息。
控制平面中 IP 路由协议(IP Routing Protocol)模块用来传递路由信息,生成路由信息表;标签分发协议(Label Distributiion Protocol)模块用来完成标签信息的交换,建立标签转发路径。
转发平面也称为数据平面(Data Plane),是面向连接的, 主要功能是负责普通 IP 报文的转发以及带 MPLS 标签报文的转发。
数据平面包括 IP 转发信息表(Forwarding Information Base)和标签转发信息表(Label Forwarding Information Base),当收到普通 IP 报文时,如果是普通 IP 转发,则查找 IP 路由表转发,如果需要标签转发,则按照标签转发表转发;当收到带有标签的报文时,如果需要按照标签转发,根据标签转发表转发,如果需要转发到 IP 网络,则去掉标签后根据 IP 转发表转发。
二、MPLS 标签
1、转发等价类
MPLS 将具有相同特征的报文归为一类,称为转发等价类 FEC(Forwarding Equivalence Class)。
属于相同 FEC 的报文在转发过程中被 LSR 以相同方式处理。
FEC 可以根据地址、掩码等要素进行划分。例如,在传统的采用最长匹配算法的 IP 转发中, 到同一条路由的所有报文就是一个转发等价类。
2、标签
标签(Label)是一个短而定长的、只具有本地意义的标识符,用于唯一标识一个分组所属的 FEC。
在某些情况下,例如要进行负载分担,对应一个 FEC 可能会有多个入标签,但是一台设备上,一个标签只能代表一个 FEC。
标签长度为 4 个字节,封装结构如图所示
MPLS 报文首部结构
标签共有 4 个字段:
Label:20bit,标签值域。
Exp:3bit,用于扩展。现在通常用做 CoS(Class of Service),其作用与 Ethernet802.1p 的作用类似。
S:1bit,栈底标识。MPLS 支持多层标签,即标签嵌套。S 值为 1 时表明为最底层标签。
TTL:8bit,和 IP 分组中的 TTL(Time To Live)意义相同。
标签封装在链路层和网络层之间。这样,标签能够被任意的链路层所支持。标签在分组中封装位置如图所示。
标签在分组中的封装位置
3、标签空间
标签空间就是指标签的取值范围。
标签空间划分如下:
0~15:特殊标签。
16~1023:静态 LSP 和静态 CR-LSP 共享的标签空间。
1024 以上:LDP、 RSVP-TE、 MP-BGP 等动态信令协议的标签空间。
4、标签栈
标签栈(Label Stack)是指标签的排序集合。MPLS 报文支持同时携带多个标签,靠近二层首部的标签称为栈顶标签或外层标签;靠近 IP 首部的标签称为栈底标签或内层标签。理论上, MPLS 标签可以无限嵌套。
标签栈
标签栈按后进先出(Last In First Out)方式组织标签,从栈顶开始处理标签。
5、标签操作类型
标签的操作类型包括标签压入(Push)、标签交换(Swap)和标签弹出(Pop),它们是标签转发的基本动作,是标签转发信息表的组成部分。
Push:指当 IP 报文进入 MPLS 域时, MPLS 边界设备在报文二层首部和 IP 首部之间插入一个新标签;或者 MPLS 中间设备根据需要,在标签栈顶增加一个新的标签(即标签嵌套封装)。
Swap:当报文在 MPLS 域内转发时,根据标签转发表,用下一跳分配的标签,替换 MPLS 报文的栈顶标签。
Pop:当报文离开 MPLS 域时,将 MPLS 报文的标签去掉。
在最后一跳节点,标签已经没有使用价值。这种情况下,可以利用倒数第二跳弹出特性 PHP(Penultimate Hop Popping),在倒数第二跳节点处将标签弹出,减少最后一跳的负担。最后一跳节点直接进行 IP 转发或者下一层标签转发。
PHP 在 Egress 节点上配置。支持 PHP 的 Egress 节点分配给倒数第二跳节点的标签值为 3。
三、LSP 的建立
1、LSP 的基本建立过程
MPLS 需要为报文事先分配好标签,建立一条 LSP,才能进行报文转发。
标签由下游分配,按从下游到上游的方向分发。如图,由下游 LSR 基于目的地址进行 FEC 的划分,并将标签分配给特定 FEC, LSR 记录该标签和 FEC 的对应关系,并将该对应关系封装成消息报文,通告给上游的 LSR,以便建立标签转发表和 LSP。
LSP 建立
LSP 分为静态 LSP 和动态 LSP 两种。静态 LSP 由管理员手工配置,动态 LSP 则利用路由协议和标签发布协议动态建立。
2、静态 LSP 的建立
静态LSP是用户通过手工为各个转发等价类分配标签而建立的。
手工分配标签需要遵循的原则是:
上游节点出标签的值就是下游节点入标签的值。
由于静态 LSP 各节点上不能相互感知到整个 LSP 的情况,因此静态 LSP 是一个本地的概念。
静态 LSP 不使用标签发布协议,不需要交互控制报文,因此消耗资源比较小,适用于拓扑结构简单并且稳定的小型网络。但通过静态方式分配标签建立的 LSP 不能根据网络拓扑变化动态调整,需要管理员干预。
3、动态 LSP 的建立
动态 LSP 通过标签发布协议动态建立。标签发布协议是 MPLS 的控制协议(也可称为信令协议),负责 FEC 的分类、标签的分发以及 LSP 的建立和维护等一系列操作。
MPLS 可以使用多种标签发布协议:
LDP
LDP(Label Distribution Protocol)是专为标签发布而制定的协议,用来动态建立 LSP。通过LDP, LSR 可以把网络层的路由信息映射到数据链路层的交换路径上。
RSVP-TE
RSVP-TE(Resource Reservation Protocol Traffic Engineering)是对 RSVP 的扩展,用于基于约束的 LSP 的建立和删除。
MP-BGP
MP-BGP(Multiprotocol Border Gateway Protocol)是在 BGP 协议基础上扩展的协议。
MP-BGP支持为 MPLS *** 业务中私网路由和跨域 *** 的标签路由分配标签。
四、MPLS 转发
1、MPLS 报文的基本转发原理
以支持 PHP 的 LSP 为例,说明 MPLS 报文的基本转发原理。
MPLS 标签分发和报文转发
如图, MPLS 建立了一条 LSP,其目的地址为 4.4.4.2/24。则 MPLS 报文基本转发原理如下:
Ingress 节点收到目的地址为 4.4.4.2 的 IP 报文,添加标签 Z 并转发。
Transit 节点收到该标签报文,进行标签交换,将标签 Z 弹出,换成标签 Y。
倒数第二跳 Transit 节点收到带标签 Y 的报文。因为 Egress 分给它的标签值为 3,所以进行PHP 操作,弹出标签 Y 并转发报文。从倒数第二跳转发给 Egress 的报文以 IP 报文形式传输。
2、MPLS 详细转发过程
NHLFE
下一跳标签转发表项 NHLFE(Next Hop Label Forwarding Entry)用于指导 MPLS报文的转发。NHLFE 包括:Tunnel ID、出接口、下一跳、出标签、标签操作类型等信息。
FTN
FEC 到一组 NHLFE 的映射称为 FTN(FEC-to-NHLFE)。
通过查看 FIB 表中 Tunnel ID 值不为 0x0 的表项,能够获得 FTN 的详细信息。FTN 只在 Ingres存在。
ILM
入标签到一组下一跳标签转发表项的映射称为入标签映射 ILM(Incoming Label Map)。
ILM 包括:Tunnel ID、入标签、入接口、标签操作类型等信息。
ILM 在 Transit 节点的作用是将标签和 NHLFE 绑定。通过标签索引 ILM 表,就相当于使用目的 IP 地址查询 FIB,能够得到所有的标签转发信息。
Tunnel ID
为了给使用隧道的上层应用(如 ***、路由管理)提供统一的接口,系统自动为隧道分配了一个 ID,也称为 Tunnel ID。该 Tunnel ID 的长度为 32 比特,只是本地有效。
MPLS 详细转发过程如图所示。
当 IP 报文进入 MPLS 域时,首先查看 FIB 表,检查目的 IP 地址对应的 Tunnel ID 值是否为 0x0。
如果 Tunnel ID 值为 0x0,则进入正常的 IP 转发流程。
如果 Tunnel ID 值不为 0x0,则进入 MPLS 转发流程。
MPLS 详细转发过程
在报文转发过程中:
在 Ingress,通过查询 FIB 表和 NHLFE 表指导报文的转发。
在 Transit,通过查询 ILM 表和 NHLFE 表指导 MPLS 报文的转发。
在 Egress,通过查询 ILM 表指导 MPLS 报文的转发或查询路由表指导 IP 报文转发。
在 MPLS 转发过程中, FIB、 ILM 和 NHLFE 表项是通过 Tunnel ID 关联的。
Ingress 的处理
查看 FIB 表,根据目的 IP 地址找到对应的 Tunnel ID。
根据 FIB 表的 Tunnel ID 找到对应的 NHLFE 表项,将 FIB 表项和 NHLFE 表项关联起来。
查看 NHLFE 表项,可以得到出接口、下一跳、出标签和标签操作类型,标签操作类型为 Push。
Transit 的处理
根据 MPLS 的标签值查看对应的 ILM 表,可以得到 Tunnel ID。
根据 ILM 表的 Tunnel ID 找到对应的 NHLFE 表项。
查看 NHLFE 表项,可以得到出接口、下一跳、出标签和标签操作类型
如果标签值>=16,则用新标签替换 MPLS 报文中的旧标签,同时处理 EXP 和TTL,然后将替换完标签的 MPLS 报文发送给下一跳。
如果标签值为 3,则直接弹出标签,同时处理 EXP 和 TTL,然后进行 IP 转发或下一层标签转发。
Egress 的处理
如果 Egress 收到 IP 报文,则查看路由表,进行 IP 转发。
如果 Egress 收到 MPLS 报文,则查看 ILM 表获得标签操作类型,同时处理 EXP 和 TTL。
如果标签中的栈底标识 S=1,表明该标签是栈底标签,直接进行 IP 转发。
如果标签中的栈底标识 S=0,表明还有下一层标签,继续进行下一层标签转发。
五、MPLS 对 TTL 的处理
MPLS 对 TTL 的处理包括 MPLS 对 TTL 的处理模式和 ICMP 响应报文这两个方面。
1、MPLS 对 TTL 的处理模式
MPLS 标签中包含一个 8 位的 TTL 字段,其含义与 IP 头中的 TTL 域相同。MPLS 对 TTL 的处理除了用于防止产生路由环路外,也用于实现 Traceroute 功能。
RFC3443 中定义了两种 MPLS 对 TTL 的处理模式:Uniform 和 Pipe。缺省情况下, MPLS 对 TTL的处理模式为 Uniform。
Uniform 模式
IP 报文经过 MPLS 网络时,在入节点, IP TTL 减 1 映射到 MPLS TTL 字段,此后报文在 MPLS网络中按照标准的 TTL 处理方式处理。在出节点将 MPLS TTL 减 1 后映射到 IP TTL 字段。
Uniform 模式下 TTL 的处理
Pipe 模式
在入节点, IP TTL 值减 1, MPLS TTL 字段为固定值,此后报文在 MPLS 网络中按照标准的TTL 处理方式处理。在出节点会将 IP TTL 字段的值减 1。即 IP 分组经过 MPLS 网络时,无论经过多少跳, IP TTL 只在入节点和出节点分别减 1。
Pipe 模式下 TTL 的处理
在 MPLS *** 应用中,出于网络安全的考虑,需要隐藏 MPLS 骨干网络的结构,这种情况下,对于私网报文, Ingress 上使用 Pipe 模式。
2、ICMP 响应报文
在 MPLS 网络中, LSR 收到含有标签的 MPLS 报文,当 MPLS 报文的 TTL 超时时, LSR 会生成 ICMP的 TTL 超时消息。
LSR 将 TTL 超时消息回应给报文发送者的方式有两种:
如果 LSR 上存在到达报文发送者的路由,则可以通过 IP 路由,直接向发送者回应 TTL 超时消息。
如果 LSR 上不存在到达报文发送者的路由,则 ICMP 响应报文将按照 LSP 继续传送,到达LSP 出节点后,由 Egress 节点将该消息返回给发送者。
通常情况下,收到的 MPLS 报文只带一层标签时, LSR 可以采用第一种方式回应 TTL
超时消息;
收到的 MPLS 报文包含多层标签时, LSR 采用第二种方式回应 TTL 超时消息。
但是,在 MPLS *** 中, ASBR(Autonomous System Boundary Router,自治系统边界路由器)、Ho*** 组网应用中的 SPE(Superstratum PE or Sevice Provider-end PE,上层 PE 或运营商侧 PE)和嵌套 *** 应用中的运营商骨干网 PE,接收到的承载 *** 报文的 MPLS 报文可能只有一层标签,此时,这些设备上并不存在到达报文发送者的路由,则采用第二种方法回应 TTL 超时消息。
六、MPLS QoS 的实现
MPLS QoS 是部署 QoS 业务的重要组成部分,在实际的 MPLS 组网方案中往往通过差分服务(DiffServ)模型来实施 QoS。MPLS QoS 则需要根据 EXP 的值来区分不同的数据流,实现差别服务,保证语音,视频数据流的低延时、低丢包率,保证网络的高利用率。
MPLS DiffServ
DiffServ 的基本机制是在网络边缘,根据业务的服务质量要求将该业务映射到一定的业务类别中,利用 IP 分组中的 DS 字段(由 ToS 域而来)唯一的标记该类业务,然后骨干网络中的各节点根据该字段对各种业务采取预先设定的服务策略,保证相应的服务质量。
DiffServ 的这种对服务质量的分类和标签机制与 MPLS 的标签分配十分相似,事实上,基于 MPLS 的 DiffServ 就是通过将 DS的分配与 MPLS 的标签分配过程结合来实现的。
MPLS DiffServ 通过 MPLS 报文头中的 EXP 值携带 DiffServ PHB(Per-Hop Behavior)实现, LSR在做出转发决策时要考虑 MPLS EXP 值。
DiffServ PHB 承载在 EXP 字段中, MPLS DiffServ 提供了两种方案:
E-LSP 路径,即由 EXP 位决定 PHB 的 LSP。该方法适用于支持少于 8 个 PHB 的网络,特定的 DSCP(Differentiated Service Code Point)直接映射为特定的 EXP,标识到特定的 PHB。在转发过程中,报文根据标签转发,而由 EXP 决定在每一跳 LSR 上的调度和丢弃优先级,因此同一条 LSP 可以承载 8 类不同 PHB 的流,通过 MPLS 头部的 EXP 域来进行区分。EXP 可以直接由运营商配置决定,也可以从报文的 DSCP 直接映射得到。这种方法不需要信令协议传递 PHB 信息,而且标签使用率较高,状态易于维护。
L-LSP 路径,即由标签和 EXP 共同决定 PHB 的 LSP。该方法适用于支持任意数量 PHB 的网络。在转发过程中,标签不仅用于决定转发路径而且决定在 LSR 上的调度行为,而 EXP 位则用于决定数据报文的丢弃优先级。由于通过标签来区分业务流的类型,因此需要为不同的流建立不同的 LSP。这种方法需要使用更多的标签,占用大量的系统资源。
说明:目前设备只支持 E-LSP。
MPLS DiffServ 的隧道化模式
MPLS 网络实质上是为其承载的业务提供了一种隧道化服务, MPLS L3*** 的 DiffServ 模式包含三种模式:Pipe、 Short pipe、 Uniform。
Pipe 模式:在 Ingress 上报文压入 MPLS 标签的 EXP 值由用户指定。如果报文在 MPLS 网络中改变了 EXP 字段的值,只在 MPLS 网络中有效。在 Egress 上,报文会根据 EXP 字段的值选择 PHB。当报文离开 MPLS 网络后,报文之前携带的 DSCP 字段继续有效。
Short pipe 模式:在 Ingress 上报文压入 MPLS 标签的 EXP 值由用户指定。如果报文在 MPLS网络中改变了 EXP 字段的值,只在 MPLS 网络中有效。在 Egress 上,报文会根据 DSCP 字段的值选择 PHB。当报文离开 MPLS 网络后,报文之前携带的 DSCP 字段继续有效。
Uniform 模式:报文在 IP 网和 MPLS 网中的优先级标识是统一定义的,即两种网络对报文的优先级标识都是全局有效的。在 Ingress 上,报文被加上标签, DSCP 字段的低三位映射到 EXP字段。如果报文在 MPLS 网络中改变了 EXP 字段的值,会影响报文离开 MPLS 网络后采用的PHB。即在出节点会将 EXP 字段映射到 DSCP 字段。
对于 L2***,借鉴 L3*** 的 Pipe/Short Pipe/Uniform 模型, MPLS 标签居于封装报文的最外层,需要考虑 VLAN 802.1P 和 MPLS EXP 的映射实现。
七、MPLS Ping/MPLS Tracert
介绍
在 MPLS 网络中,如果通过 LSP 转发数据失败,负责建立 LSP 的 MPLS 控制平面将无法检测到这种错误,加大了网络维护的难度。MPLS Ping/MPLS Tracert 为用户提供了发现 LSP 错误、并及时定位失效节点的机制。
MPLS Ping 主要用于检查网络连接及主机是否可达。MPLS Tracert 在检查网络连接以及主机是否可达的同时,还可以分析网络什么地方发生了故障。类似于普通 IP 的 Ping/Tracert, MPLS Ping/MPLS Tracert 使用 MPLS 回显请求(Echo Request)报文和 MPLS 回显应答(Echo Reply)报文检测 LSP的可用性。这两种消息都以 UDP 报文格式发送,其中 Echo Request 的 UDP 端口号为 3503,该端口号只有使能 MPLS 功能的设备才能识别。
MPLS Echo Request 中携带需要检测的 FEC 信息,和其他属于此 FEC 的报文一样沿 LSP 发送,从而实现对 LSP 的检测。MPLS 回显请求报文通过 MPLS 转发给目的端,而 MPLS 回显应答报文则通过 IP 转发给源端。另外为了防止 LSP 断路时 Echo Request 进行 IP 转发,从而保证 LSP 的连通性测试,将 Echo Request 消息的 IP 头中目的地址设置为 127.0.0.1/8(本机环回地址), IP 头中的TTL 值为 1。
MPLS Ping
如图, RouterA 上建立了一条目的地为 RouterD 的 LSP。从 RouterA 对该 LSP 进行 MPLS Ping 时的处理如下:
RouterA 查找该 LSP 是否存在(对于 TE 隧道,查找 Tunnel 接口是否存在且 CR-LSP 是否建立成功)。如果不存在,返回错误信息,停止 Ping。如果存在,则继续进行以下操作。
RouterA 构造 MPLS Echo Request 报文, IP 头中的目的地址为 127.0.0.1/8, IP 头中的 TTL 值为 1,同时将 4.4.4.4 填入 Echo Request 报文中的目的 FEC 堆栈中。然后查找相应的 LSP,压入 LSP 的标签,将报文发送给 RouterB。
中间节点 RouterB 和 RouterC 对 MPLS Echo Request 报文进行普通 MPLS 转发。如果中间节点 MPLS 转发失败,则中间节点返回带有错误码的 MPLS Echo Reply 报文。
MPLS Tracert
如图,从 RouterA 对 4.4.4.4/32 进行 MPLS Tracert 时的处理如下:
RouterA 检查 LSP 是否存在(对于 TE 隧道,查找 Tunnel 接口是否存在且 CR-LSP 是否建立成功)。如果不存在,返回错误信息,停止 Tracert,否则继续进行如下处理。
RouterA 构造 MPLS Echo Request 报文, IP 头中的目的地址为 127.0.0.1/8,同时将 4.4.4.4 填入 Echo Request 报文中的目的 FEC 堆栈中,然后查找相应的 LSP,压入 LSP 的标签并且将TTL 设置为 1,将报文发送给 RouterB。此 Echo Request 报文中包含 Downstream Mapping TLV(用来携带 LSP 在当前节点的下游信息,主要包括下一跳地址、出标签等)。
RouterB 收到 RouterA 发送来的报文后,将 Echo Request 中 TTL 减 1 为 0 后发现 TTL 超时,然后 RouterB 需要检查是否存在该 LSP,同时检查报文中 Downstream Mapping TLV 的下一跳地址、出标签是否正确,如果两项检查都为真,返回正确的 MPLS Echo Reply 报文,并且报文中必须携带 RouterB本身的包含下一跳和出标签的Downstream Mapping TLV 给 RouterA。如果检查不为真,则返回错误的 MPLS Echo Reply 报文。
RouterA 收到正确的 MPLS Echo Reply 报文后再次发送 MPLS Echo Request 报文,报文的封装方式跟步骤 2 类似,只是将 LSP 标签的 TTL 设置为 2,此时的 Echo Request 报文中的Downstream Mapping TLV 是从 Echo Reply 报文中复制过来的。然后 RouterB 收到该报文后进行普通 MPLS 转发。RouterC 收到此报文,标签的 TTL 超时,跟步骤 3 同样的处理方式后返回 MPLS Echo Reply 报文。
通过上述步骤中返回携带下游信息的 MPLS Echo Reply 报文,在 RouterA 上就获取了该 LSP 沿途每一个节点信息。
标签:记录 自己 出接口 连通 end 静态 流程 连通性 质量
原文地址:https://blog.51cto.com/15023282/2559340