欢迎光临
我们一直在努力

MPLS数据层面的封装和标签转发过程

 

 

环境:2345跑IGP(OSPF)协议,25跑IBGP,12跑EBGP,56跑EBGP。把AS内部的接口都启用MPLS。

如果R1去往172.16.1.1,先从f0/0发出去

到达路由器R2后,依靠5.5.5.5转发,然后递归查询给5.5.5.5,下一跳23.1.1.3 从f0/0发出去。

然后从f0/0口发出去的时候,发现f0/0口运行了mpls。运行了mpls,他就会给这个数据包插入一个标签。但是这一条是BGP路由,不会给BGP路由插入标签,这个时候就会借用bgp路由下一跳的标签,。下一跳的标签是5.5.5.5

标签是302,会插入302标签,路由器R3产生的标签,把这个标签封装好发出去。

LFIB & FIB的联动

为了在减少在边界路由器上出现多次查表的情况.

当形成LFIB(标签转发表)时, 依靠FIB(cef表)提供出下游节点信息以及出接口.

FIB也针对表项中的每一个目的网段查询LFIB, 从而将要使用的标签信息提前写入FIB.

CEF表就是FIB表,FIB表里面自动关联了LFIB(标签转发信息库)

直接查看cef表,省去了查看路由表递归的过程。

302标签插在帧头和IP包头之间。通过f0/0接口发出去,发给路由器3.

路由器3查看标签转发表。

路由器3把302标签换成402标签,然后通过f0/0口发出去

路由器把402标签弹出。不会再插入502标签,就是为了让边缘设备少查一次表,php(次末跳弹出机制)出现了。

怎么知道倒数第二跳(次末跳),用到了隐式空标签(标签数值3)。

PHP (Penultimate Hop Popping) 次末跳弹出技术

假设IP数据包的目的地址为某一节点的直连网段, 那么意味着该节点就是数据的末端, 也就是最末跳设备.

当运行MPLS后, 该节点会为自己的直连路由产生implicit-null标签, 并且分发给自己的上游节点, 也就是次末跳节点.

次末跳节点收到后, 在本地的LFIB中会将对应的FEC Outgoing tag设置为pop, 表示对于这一类FEC的数据转发来讲, 在数据离开本地前需要弹出最外层的标签, 将IP数据包交给最末跳节点处理. 这样可以减少最末跳路由器的查表次数.

因此Pop产生的原因就是因为PHP.

如果使用命令mpls ldp explicit-null, 那么导致次末跳节点收到的是标签值为0的保留标签, 那么将无法形成PHP.

 

从R4上抓包看

LDP协议的hello包是基于TCP去发的。标签封装在TCP的646端口里面。

在路由器R5上使用命令mpls ldp explicit-null,则无法形成PHP。

 

数据包经过MPLS Domain的转发过程

1.边界路由器收到IP数据包, 通过FIB查询到出接口以及下游设备提供的标签信息.

2.边界路由器在包头前插入标签后通过对应出口转发该数据包进入MPLS Domain.

3.核心区域内的LSR直接通过LFIB查询完成对标签数据包的转发.

4.MPLS Domain的次末跳节点通过LFIB查询弹出标签后, 用对应的出口转发给Domain内的最末跳节点, 也就是对端边界点.

5.对端边界点收到IP数据包, 直接查询对应的FIB转发该数据.

 

LSR (Label Switching Router)标签转发路由器

所有启用了标签协议的路由器都称之为LSR.(例如:R2,R3,R4,R5)

Edge LSR边界标签转发路由器

启用了标签协议,并且用于连接非标签域设备的路由器(例如:R2,R5)

 

LSR与Edge LSR结构以及组成部分没有任何区别,仅仅对查询的表项有区别.

LSR接收或发出的都是标签数据包,因此只需要查询LFIB即可

Edge LSR接收或发出均存在IP数据包,因此除LFIB以外还会对路由表的查询。

 

LDP (Label Distribution Protocol)

公有标签分发协议, 用于产生和分发标签

TDP (Tag Distribution Protocol)

Cisco私有标记分发协议, 用于产生和分发标记. (标记=标签)

 

标签的格式与产生的协议无关, 因此无论是LDP还是TDP产生的标签都是通用的

LDP & TDP配置命令不同, 但是工作原理非常类似. 早期依靠命令区分选择的协议.

现今Cisco设备上为了更好的管理和兼容其它厂商的设备, 不再依靠命令本身来区分选择的协议. 即不管使用LDP的命令还是TDP的命令, 最终在running-config中显示的的都是LDP的命令格式.

协议的确定依靠全局指令: mpls label protocol [ldp | tdp] 或是接口指令: mpls label protocol [ldp | tdp | both] 来指定开启的协议是什么.

接口指令只针对本接口有效, 全局指令针对所有启用了mpls的接口有效. 因此按照个性大于共性的原则, 接口指令级别更高.

接口指令中的选项both 通常用于MA网络接口, 保证邻居不管使用LDP还是TDP,都能正常建立邻居关系.

TDP协议抓包

赞(5) 打赏
未经允许不得转载:知行合一 » MPLS数据层面的封装和标签转发过程
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

知行合一

清华大学万门大学

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏