内容简介:深入理解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示例
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
精通Git(第2版)
Scott Chacon、Ben Straub / 门佳、刘梓懿 / 人民邮电出版社 / 2017-9 / 89.00元
Git 仅用了几年时间就一跃成为了几乎一统商业及开源领域的版本控制系统。本书全面介绍Git 进行版本管理的基础和进阶知识。全书共10 章,内容由浅入深,展现了普通程序员和项目经理如何有效利用Git提高工作效率,掌握分支概念,灵活地将Git 用于服务器和分布式工作流,如何将开发项目迁移到Git,以及如何高效利用GitHub。一起来看看 《精通Git(第2版)》 这本书的介绍吧!