PHP规则
次末跳弹出机制
什么是次末跳弹出机制,为什么会有这样的机制产生?具体有什么作用呢?
假设现在没有PHP
在RC上发布一个前缀更新到RA上,且全网运行MPLS,
RC给邻居RB分发标签使用的是300,
RB给邻居RA分发标签使用的是300,
RA给这个前缀分发的标签是可以不记
以上是控制层面,由始发端向LDP邻居分发自己的LDP标签
最主要的是下面的数据层面
此时RA左侧有数据进行访问30.0,
RA要为数据压入200的标签进行outgoing
RB一看,是标签数据,再对比LFIB表,直接进行转换200-300即可,走你
到了RC,再一看,先查看LFIB表,300-对应的outgoing动作是弹出,弹出之后再查看FIB表,因为弹出标签以后就是一个普通 的IP包了,
那么此时,聪明的你不难发现一个问题
对于RC而言,这本来就是到我的数据,是我的直连接口,那么我再进行一次拆标签还有意义吗?
有没有像脱了裤子放屁的节奏?
话虽然是粗糙了一些,但是理儿就是这么个理,
为了能够使标签在转发的过程中,不浪费这样的过程,所以MPLS在开发初期设置了这样的机制,次末跳弹出机制
PHP机制
有了PHP机制之后,再来看上图,
RC再给RB分发标签的时候,就不是分发300了,而是直接发分POP{imp-null}(空标签)
注:
运行了MPLS的设备,当向LDP 通行自己的直连网段标签时,会默认通行标签类型为POP,
这样一来,就会发生和上面不同的情况
当RA再有数据请求RC时,是这样的
RA查看FIB表,压入标签200 走你
RB一看标签包,查LFIB表,200—POP,弹出了,好,直接给你弹出,
由原来的标签包变成了普通的IP包。直接查询FIB表就可以了。
一定意义上,节省了一步查询,
两种标签类型
次末跳弹出机制中的两种标签类型
Implicit null 隐式空标签
Explicit-null 显式空标签
这二者有什么区别呢?
这要从一个IP包的整体结构来看起
其中一项为服务类型,也可以叫做服务质量,用于流量工程QOS的,
如果在MPLS的环境中,使用默认的PHP机制,将无法部署QOS,
因为在impolicit null 中将不会显示服务类型这一项,它的标签值为3,当我收到邻居给我发的标签值为3时,那么我有数据到该邻居时,我将直接进行弹出动作,
这个我们上面讲过
但是不同的是
Explicit null 在LDP的标签中值为0,我针对本地产生的路由条目发送给LDP邻居时会携带这一值,
??
两者听起来好像没有什么不同,但是要注意的是,3 和 0 是有着本质的区别的,
那就是0 支持QOS,3 则不支持,
如果想要部署MPLS 的QOS的话,那必须要使用标签0 的次末跳弹出机制
怎么做?
R1(config)#mpls ldp explicit-null
咱们先来查看一下,这个所谓的implicit/explicit具体显示在哪里吧
网络拓扑如下
如果想发查看具体的隐式空或者是显式空,需要查询的表项是ldp bindings------LIB表
我们都知道,本地产生的tag 是为自己的LDP邻居所使用,那么我们在R2是看R1发给R2的本地TAG是什么?(为一点想都不用想,肯定是空的)但是是哪种空呢?
图上显示为implicit-null(隐式空) IMP-NULL
此时我们用mpls ldp explicit-null的命令在始发路由器上来做一下看看
(注意这个用词,始发者,即所指为1.1.1.0这个前缀的始发路由器LSR为R1)
所以我们应该在R1上配置这个命令
再来R2上看一下
此时,可以看到在R2上查看1.1.1.1这个邻居发过来tag中,1.1.1.0这个前缀所携带的tag 为exp-null。
MPLS中保留的标签
在最初我们配置MPLS的时候,并没有指定 mpls label range 100 199 这样的类似命令,
所以MPLS默认以最初的TAG进行捆绑
那么MPLS中的第一个可用标签是多少呢?
16
0-15为保留标签。
其中就包含了我们刚刚提到的
隐式空标签: 3
显式空标签: 0
路由报警标签: 1
OAM报警标签: 14
---------------------------------------
CCIE成长之路 --- 梅利