MPLS 2个转发平面

Technorati 标签: MPLS,LDP,标签,labelide

01-MPLS标签报文的格式.oop

clip_p_w_picpath002

实际上,之因此要叫MPLS 为2.5层协议,是由于标签是处于IP报文头和二层报头之间的.图中是嵌套了三层标签.性能

靠近二层头的标签叫顶部,考近IP报文头的标签叫底部.设计

若是有多个标签,数据报文在被转发的时候是利用顶部标签进行转发.当顶部移除之后,再利用下一层标签进行转发.3d

而每一个标签的格式为:blog

每一个标签为32 bit(4个字节). 分为4个字段,每一个字段都有分工.ip

clip_p_w_picpath004

LABEL: 头20个bit,是标签范围.cisco定义的标签的是<16-1048575>.ci

0-15是保留为系统用.资源

EXP: 3 bit. 用于IP precedence字段值的携带,用于QOS. 范围0-7.路由

S: 1 bit, 为了标示该标签是否为最后一个标签再IP头中.

前面已经说明,最靠近二层帧头的,那么最早被转发。最靠近IP包头的,最后被转发使用.

S bit就是提供了这样一个功能.

S=1, 栈底. S=0,非栈底.从下面的抓包也能看到,S=0的话,靠近二层帧头,S=1,靠近3层IP报文头.

TTL: 8 bit, 范围0-255,这个定义和IP里面的time to live是同样的。

和IP不一样的是,MPLS的TTL,

有可能初始化的时候就是255.

也有多是从IP包头中直接复制过来的.

下面是一个MPLS报文的抓包.能够看到这里嵌套了2层标签.

clip_p_w_picpath006

02-LDP协议的做用

LDP-label distribute protocol.

标签分发协议,前身是TDP.cisco私有.

----------一直都在说, LDP标签分发,必须基于IGP(ospf,RIP,EIGRP),由于标签分发表,其实就是IGP路由表的一个映射.因此必须现有IGP,才会有标签转发表.

路由表与标签之间存在的映射关系-----FEC.

LDP要工做,必需要有底层的IGP.

CISCO的行为是,IGP路由表里面每一条路由,都会有一个对应的标签存在于标签转发表.

03-MPLS 标签报文转发过程的相关动做

下面的图,R1--R2--R3--R4为MPLS域,左边和右边都为IP域.

在IP域中数据包是没有携带标签的。而在MPLS域中数据包是携带了标签的.

clip_p_w_picpath008

接下来讲明一下一个数据包从左到右的过程:IP:A-->R1-->R2-->R3-->R4-->IP:B

须要说明的是,本地收到的标签,始终是上游或者下游路由器分配过来的。

这样说吧,若是本地路由器有一个路由明细达到1.1.1.0/24. 那么从对端就会逐跳向我本端分配相关的标签.因此,标签永远是别人发给个人。我把本地的直连路由映射成本地标签,再分发给个人上下游路由器。那么,一个双向的标签FEC就创建好了。

04-数据平面和控制平面.

这是理解MPLS转发的重要基础.

clip_p_w_picpath010

Control plane:控制平面.

简单来讲,就是凡是处理协议,路由表,标签交换表,这些内部表项和协议的时候都是用的控制平面.

Data plane:数据平面.

而数据平面,意思是说,IP转发,标签转发报文的时候,会用数据平面。

对于数据平面的理解以下:

clip_p_w_picpath012

这里,有几种状况组合:

1, 收到IP,转发出之后依然是IP.是纯IP报文转发,那么用的是FIB表项.(CISCO的CEF表)

2, 收到MPLS 报文,转发出去依然是MPLS 报文,走的是LFIB.标签转发表.

3, 有可能收到IP报文,可是须要路由器压标签转发. 那么依然走FIB(CEF)表---因此为何CEF标是会携带标签的.

4, 收到MPLS 报文, 转出是IP报文,这种状况用于次莫节点弹出,input走LFIB表,output会使用FIB(CEF)表.

关于cisco的流程:

以前我一直都不知道为何CEF表会有标签.通过和老师确认,设计的确实颇有道理.

若是接收到一个IP报文,转出去的时候是MPLS标签报文。这个时候首先路由器收到之后会查CEF表,cisco会将LFIB中须要压入标签的条目,将标签复制到CEF表中,这样收到IP报文,只须要查一次CEF表就知道应该压入哪一个标签进行转发,而不是说首先查CEF表,知道了须要压标签,可是CEF表中又没有标签,从而进一步查询LFIB表,查两次表项和查一次表项,对于节约路由器的性能资源的意义是彻底不同的。

连老师总结版:

LIB------show mpls ldp binding 查看LIB表项.

FIB------show ip cef detail 查看FIB.注意,必定要加上detail,不然不能看到label的分发状况.

LFIB-----show mpls forwarding table.

在故障排查的时候.外层标签交换,查的必定是mpls forwarding table(LFIB表)

好比.R1-----R2----R3----R4.

R1将mpls 报文转给R2,R2要查的就是LFIB.若是LFIB(mpls forwarding table)没有标签,这个时候,根据两个层面的映射原理,你须要查看LIB表(show mpls ldp binding),在那里面会有缘由为何R2的mpls forwarding table没有分发标签.

例如,你们都知道,LDP的tranport ID是会用loopback来作的.若是IGP是OSPF.无论你环回口配置为32位掩码,仍是24位掩码,ospf都会将其通告为32位掩码出去(除非修改ip ospf network point-to-point)才会通告真实掩码.

这个时候,本地是24位掩码,通告到对端是32位。上游路由器为本端的32位分发标签.明显是错的.由于24位掩码的没有获得标签,而32位的获得了。转发的时候,mpls forwarding table必定有问题.由于LFIB是基于LIB创建的,因此最后必定得查LIB才能找初真实的缘由.

clip_p_w_picpath014

将3个路由器的环回口掩码都修改成24位的.

而后在R2上面,看到3.3.3.3的标签是:

clip_p_w_picpath016

这个时候,R2上面,3.3.3.3的outgoing不是pop label.是no-label.

而后再show LIB表,根本就没有标签,正常的状况下,对端R3应该分配一个implit-label过来.问题就已经出来了.

这就是传的32位路由,分的是32位路由。没有对24位路由分配标签.

缘由在于,R3上面,对本身的3.3.3.3分了implit-null,24位的标签. 到R2就变成32位的标签了。已经错位了.

clip_p_w_picpath018

方案:

1, 建议环回都是用loopback /32的掩码.

2, 要不在loop interface下面加上ip ospf network point-to-point.

相关文章
相关标签/搜索