内容简介:深入理解MPLS标签动作及应用示例
在 MPLS 基本转发过程中涉及到一些标签操作,主要包括标签压入( Push )、标签交换( Swap )和标签弹出( Pop )这三个动作。
- Push :标签压入动作,可能会在 Ingress 或 Transit 节点上发生。
标签压入动作是指在 IP 报文的二层协议头和 IP 报头之间插入一个 MPLS 标签(如图 1-13 的上图所示),或者是在现有标签栈顶部再增加一个新的出标签(如图 1-13 的下图所示),即标签嵌套封装,如在 BGP/MPLS IP VPN 的 Ingress 节点可能会在一个 IP 报文中同时压入多层公网或私网 MPLS 标签。
图 1-13 标签压入动作的两种情形
- Swap :标签交换动作,会在 Transit 节点发生。
当 MPLS 报文在 MPLS 域内转发时, Transit 节点根据标签转发表 LFIB 的查找,匹配到相应的表项后,用下一跳分配的出标签交换 MPLS 报文中原有的栈顶标签。原有 MPLS 报文中可以携带有一层或多层 MPLS 标签,但仅交换最外层的标签。如图 1-14 中上、下图所示分别是对携带单层标签、双层标签 MPLS 报文中的栈顶标签进行交换的示例。
图 1-14 标签交换动作的两种情形
- Pop :标签弹出动作,会在倒数第二跳 Transit 节点或 Egress 节点发生。
当 MPLS 报文离开 MPLS 域时, Egress 节点将 MPLS 报文外层的标签剥离掉,使后续的报文转发按照 IP 路由进行(当弹出标签后报文中无标签时,如图 1-15 中的上图所示),或者按照余下的标签进行(当弹出标签后报文仍有其他标签时,如图 1-15 中的下图所示)。也可以利用 PHP ( Penultimate Hop Popping ,倒数第二跳弹出)特性,在倒数第二跳节点处将标签弹出,减少最后一跳的负担,使最后一跳节点直接进行 IP 路由转发或者下一层标签转发。
图 1-15 标签弹出动作的两种情形
默认情况下,华为设备支持 PHP 特性,支持 PHP 的 Egress 节点分配给倒数第二跳节点的标签值为 3 。
以下以支持 PHP 的 LSP 为例,说明 MPLS 报文的基本转发过程。在单纯的 LDP LSP 隧道环境下, MPLS 报文最多仅带一层 MPLS 标签,从上游节点进入本地节点的入接口时携带的是上游节点分配给该 FEC 的出标签(也是本地节点对应的入标签),从本地节点出接口向下游节点发送时携带的是本地节点分配给对应 FEC 的出标签。
下面举一个关于以上介绍的几种标签动作应用于MPLS报文转发的示例。如图 1-16 所示, MPLS 标签已分发完成,建立了一条 LSP ,其目的地址为 4.4.4.2/32 , MPLS 报文在转发过程中的标签动作如下:
( 1 ) Ingress 节点收到目的地址为 4.4.4.2 的 IP 报文后,首先根据 FIB 找到对应的下一跳,发现下一跳是 LSR 标签设备(如果发现下一跳是 IP 设备时会直接按 FIB 表项进行 IP 转发),并且因为本节点是入节点,所以在进行报文转发前需要进行标签压入动作,需压入的标签是根据 FEC 4.4.4.2 与标签的映射关系找到的(为 Z ,作为出标签),然后把 MPLS 报文从压入的标签所映射的出接口转发出去。
图 1-16 MPLS 报文基本转发示例
( 2 ) Transit 节点收到该标签的 MPLS 报文后,根据 LFIB 找到对应入标签(上一节点的出标签就是本节点的入标签)所映射的出标签、出接口,先进行标签交换(无需查看 IP 报头的目的地址),即用本地为 FEC 4.4.4.2/32 分配的出标签( Y )替换报文中原来的 MPLS 标签( Z ),然后从以上找到的出标签所映射的出接口转发出去。
( 3 )倒数第二跳 Transit 节点收到 MPLS 报文后,同样根据 LFIB 找到对应入标签所映射的出标签、出接口,先用本地为 FEC 4.4.4.2/32 分配的出标签(通常为 3 )替换原来的 MPLS 标签,然后打算从出标签 3 所映射的出接口转发出去。但是因为 Egress 分给他的出标签值为 3 (这是一个特殊的标签,必须弹出,参见表 1-1 说明),所以需要先进行 PHP 操作,弹出出标签(此时报文已不带 MPLS 标签了),并根据自己出标签 3 所映射的接口转发报文。
( 4 ) Egress 节点收到无 MPLS 标签的 IP 报文后,直接根据对应的 IP 路由表项把数据传输给目的主机 4.4.4.2/32 。
【说明】以上内容摘自由笔者编著、于2018年1月最新出版、国家十三五重点图书、华为官方培训教材《 华为MPLS技术学习指南 》一书,同时出版的配套图书还有《 华为MPLS VPN学习指南 》,京东、当当等各大网店均有销售。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- Golang的反射reflect深入理解和示例
- 深入讲解Flutter应用模板源码:计数器示例
- 这几个示例,帮你深入理解 cgroup 中的 cpuset
- 这几个示例,帮你深入理解 Cgroup 中的 cpuset
- 粒子滤波Matlab示例
- transformers示例
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
图形程序开发人员指南
Michael Abrash / 前导工作室 / 机械工业出版社 / 1998 / 128
Michael Abrash's classic Graphics Programming Black Book is a compilation of Michael's previous writings on assembly language and graphics programming (including from his "Graphics Programming" column......一起来看看 《图形程序开发人员指南》 这本书的介绍吧!