APP下载

基于IP FRR的MPLS快速重路由实现

2013-09-26骏,曹

电子测试 2013年21期
关键词:表项链表通告

李 骏,曹 敏

(1.武汉邮电科学研究院,湖北武汉 430074; 2.武汉烽火网络有限责任公司,湖北武汉 430074)

0 引言

多协议标签交换技术[1](MPLS-Multiprotocol Label Switching)属于第三代网络架构,是新一代IP高速骨干网络交换的标准。现在各大运营商用MPLS技术承载骨干网的VPN业务,对网络可靠性有很高的要求,实时业务的恢复时间要求是50ms以内,因此,满足恢复时间要求的基于MPLS的故障恢复方法引起了人们的关注。

现有的MPLS故障恢复模型有很多,如Haskin[2]、Makam[3]等,基于这些模型,人们也提出了许多改进,为了满足恢复时间的要求,一般采用快速重路由方式进行保护,即在故障之前建立备份路径,故障发生时直接切换到备份路径的保护方式,本地保护具有较短的故障发现时间,是理想的保护方式。基于LFA(Loop Free Alternate无环)的IP FRR[4]的标准已经出台了几年,而IP FRR已经被许多厂商实现,本文提出一种基于IP FRR的MPLS快速重路由简单软件实现方法,有效地保护MPLS流量。详细介绍了信令模块——LDP[5]模块和路由协议模块以及MPLS模块的交互和处理方式,并对典型的MPLS网络进行组网测试,以验证该实现的可行性。

1 功能模块结构图

图1 系统模块间关系图

图1所示为组成系统的各模块之间关系图。

(1)路由模块即实现路由协议功能的模块,该模块实现了IP FRR功能,在计算主用路由的同时,还会根据LFA计算该路由的备份路由;根据不同的实现,使能了IP FRR的路由模块通告的路由信息可能有两类,一类是路由信息中有专门标识主用路由和备用路由的标志(例如专门设置标志位,表明通告的是主用路由还是备用路由),另一类是没有专门标志的(例如主用和备用路由通过cost路由属性区分,cost即开销,开销小的为主用,开销大的为备用),本文的实现基于第二类路由信息,信息主要包括目的网段D,下一跳NH,出接口I和开销C。

(2)LDP模块,LDP协议是MPLS的信令协议,管理标签的分发与回收,LDP模块实现LDP协议的功能,标签信息主要有FEC(转发等价类,在本文中指路由协议中的目的网段),入标签IN和出标签OUT,下一跳NH’,出接口I’,本文中LDP模块工作于自由标签保留模式。

(3)MPLS模块,实现标签交换的模块,根据LDP模块通告的标签信息,生成转发表项,主要表项有ILM、NHLFE、FTN[6]。

(4)故障检测模块,实现快速检测故障的功能,本文使用BFD(双向转发检测),故障信息主要包括故障接口。

2 原理与设计方案

本文中MPLS的重路由路径与IP FRR的路径是完全相同的,所以保护性能和IP FRR一样。

如图2所示,交换机A到达3.3.3.3有两条路由,下一跳分别为10.1.1.2和10.1.2.2,设前者cost为5后者为10,则前者为主用路由后者为备用。LDP模块工作于自由标签保留模式,因此,交换机A既保留C发送的关于3.3.3.3的标签L1也会保留B发送的关于3.3.3.3的标签L2,按照之后描述的LDP模块和MPLS模块处理方式,LDP模块会把标签信息通告给MPLS模块,使得MPLS模块使用L1作为主用标签,L2为备用(C是主用路由的下一跳,B是备用路由的下一跳)。故障前使用L1转发,故障后,MPLS收到BFD模块的故障通告,使用L2转发MPLS流量到B,B发现是自己为3.3.3.3分配的标签L2,按照从B到C的主LSP进行转发,故障恢复后,LDP模块根据路由模块的通告决定继续使用L2作为主用标签,还是使用新的标签。

2.1 LDP模块的扩展设计

LDP模块只需扩展与路由模块的接口(在下面介绍)和与故障检测模块的接口(接收故障消息即可),其它的协议流程处理,如会话建立和标签分配不变。

路由协议模块通告的路由信息要么是添加路由信息,要么是删除路由信息,主备通过路由信息里的cost字段区分,cost小为主用,cost大为备用,所以LDP模块跟路由协议模块的交互由对路由添加和路由删除这两种事件的处理来描述。路由协议通告路由消息有5种情况(D表示某个目的网段):

(1)之前没有通告过关于D的路由添加消息,现在通告关于D的路由添加消息给LDP模块;

(2)在通告关于D的路由删除消息前,LDP模块中只有一条关于D的路由记录,现在通告关于D的路由删除消息;

(3)主用和备用路由已经通告,现在通告关于D的备份路由删除消息,然后再通告关于D的备份路由添加消息;

(4)主用和备用路由已经通告,现在通告关于D的主用路由删除消息,然后再通告关于D的主用路由添加消息;

(5)主用和备用路由已经通告,现在通告关于D的主用路由删除消息,然后再通告关于D的备用路由添加消息。

这里的主备并没有标识,只通过cost值区分。

上面的这5种情况是在网络拓扑改变的情况下,使能IP FRR的路由协议根据计算得到主备路由并通告给LDP模块的情况,根据这些情况,设计出LDP模块对路由添加和路由删除事件处理流程图如下,图3和图4分别为路由添加消息和删除消息的处理流程(这两个流程图可以正确处理上述的5种情况):

(1)FEC_RT变量记录了与FEC相关的信息,包括路由信息和标签信息,route_list是FEC_RT变量中的一个链表头,所有关于FEC的路由(主用和所有备用)信息,都存在该表中,链表根据路由信息中的cost属性从小到大排序(路由协议可能会通告若干关于某个目的网段但cost相等的路由,即ECMP,这时,需要选择链表添加方式,使得若链表中存在某个cost值的表项,新加的cost值相同的表项在原来表项的后面),这样,主用路由总是为链表头结点;

(2)FEC_RT->nexthop,指明主用路由的下一跳,每次收到路由添加或删除消息时,若route_list的头结点发生变化,则修改该值以保证该值为当前主用路由的下一跳,发生故障时,该值在LDP的标签分发流程中会被用到(可参见RFC5036中的A.1.1,A.1.2等),FEC_RT->if_unit是对应于nexthop的出接口,它与nexthop同时修改,故障时,BFD模块发送故障通告,包含接口信息,对于某个FEC_RT,若if_unit等于通告的值,则该FEC_RT的route_list的头结点被加入到链表尾,第二的节点成为头结点,这一点与之后描述的MPLS模块中的处理方式对应;

(3)记录被添加到FEC_RT-> need_label_from_peer链表中,添加记录是应对收到路由添加通告时,还没有收到对应peer关于FEC的标签的情况,当收到某个peer的标签信息时,查找记录,记录存在,则封装标签信息通告MPLS模块,并删除该记录,在收到peer的标签信息之前,如果收到路由模块的相应路由删除消息时也删除该记录。

流程图中一些数据结构:

(1)FEC_RT变量的结构类型

sLdpFecRt{

PREFIX route; //路由消息中的目的网段

SOCK_IN_ADDR nexthop; //主用路由的下一跳

UINT4 if_unit; //主用路由的出接口

struct sLdpLblMap *local_label_map; //本地分配的标签

struct tree remoteLblMapAvl; //peers为该FEC分配的标签

struct list route_list; //路由信息链表

struct list need_label_from_peer; //需要来自peer的标签记录链表

}tLdpFecRt;

(2) route_list中的节点

sLdpFecRouteInfo{

SOCK_IN_ADDR nexthop; //路由信息中的下一跳

UINT4 if_unit; //路由信息中的出接口

UINT4 cost; //路由信息中的开销属性

struct sLdpLblMap * label_map; //nexthop对应peer分配的标签

};

(3)封装的标签信息

sLdpLabelInfo{

PREFIX route; //目的网段即FEC

SOCK_IN_ADDR nexthop; //标签对应的下一跳

UINT4 if_unit;//标签对应的出接口

UINT4 cost; //路由信息中的开销属性

struct sLdpLblMap * inlabel; //本地分配的标签

struct sLdpLblMap * outlabel; //peer分配的标签

};

2.2 MPLS模块的扩展设计

MPLS模块原来的表项是,一个ILM对应一个NHLFE,表项通过处理LDP模块通告的标签信息得到,扩展支持快速重路由可以仿照LDP模块中的route_list方式,即一个ILM对应一个NHLFE链表,在NHLFE中添加cost字段保存sLdpLabelInfo中的cost信息,链表按cost值从小到大排序,对于ECMP也采用LDP模块中的处理方式,减少路劲切换,主用转发条目始终为链表的头结点,这样,当一个打了标签的MPLS包送到MPLS模块,根据标签找到ILM表项,ILM表项对应一个NHLFE链表,使用这个链表的头节点指示的方式进行标签操作(交换标签、压入标签),然后继续转发。

当发生故障时,BFD模块通告故障信息给MPLS模块,信息中包含故障对应的接口,所有以该接口为出接口的主用NHLFE将被替换,替换方式是把主用NHLFE加入到NHLFE链表的尾部,原来的第二个表节点自动成为头结点,作为主用转发条目。为了降低故障恢复时间,需要为每一个接口建立一个链表,主用NHLFE条目的出接口是该接口的条目所在的链表头(route_list)作为该链表的节点,这样,发生故障时,不用遍历所有的NHLFE链表,只用对该故障对应接口的链表中的每一个route_list做替换即可,减少完成所有替换的时间,从而减少故障恢复时间。

MPLS模块收到删除的标签信息时,根据route和nexthop两个字段即可找到NHLFE节点,删除即可。

3 验证

图5为测试用拓扑图,A、B、C为交换机,接口配置在图上标明,仪表从I1接口发送不带MPLS标签的流量,经过中间的环形MPLS网络,由I2接口接收,发流的速率为100Mbps,包长为1024Bytes。测试时,在交换机A上经过路由协议计算,得到到达接口I2的主用路由下一跳是C,备用路由下一跳为B,拔掉AC之间的网线以模拟故障,在此期间,仪表统计得到的丢包数为728个,之后重复测试5次得到的丢包数为688、701、715、734、690。下面估计一下故障恢复时间:

发包速率为100Mbps/1024Bytes = 12800Packets/s,那么每10ms应该发送128个包,计算6次测试的平均丢包数为709,709/128的值在5和6之间,即恢复时间在50ms到60ms之间。

4 结束语

本文给出了一种基于IP FRR的MPLS快速重路由的软件实现方法,以流程图的方式说明了LDP模块对路由消息的处理过程,给出了关键表节点的定义,给出以链表来组织MPLS的转发表项的思路,最后组网验证该设计的可行性,结果表明MPLS流只中断了50ms到60ms,该设计具有故障恢复功能,对实现基于IP FRR的MPLS快速重路由有一定参考价值。

[1] 华为3com公司.网络之路N03MPLS技术专刊[DB/OL].

[2] D. Haskin,R.Krishnan. A Method for Setting an Alternative Label Switched Paths to Handle Fast Reroute. draft-haskin-mpls-fast-reroute-05.txt,2000.

[3] S. Makam,V.Sharma,et al. Protection/Restoration of MPLS Networks. draft-makam-mplsprotection-00.txt,1999.

[4] A. Atlas,A. Zinin. Basic Specification for IP Fast Reroute: Loop-Free Alternates[S]. RFC5286,2008.

[5] L. Andersson , I. Minei, B. Thomas. LDP Specification[S]. RFC 5036,2007.

[6] E. Rosen,A. Viswanathan,R. Callon. Multiprotocol Label Switching Architecture[S].RFC 3031,2001.

猜你喜欢

表项链表通告
一种改进的TCAM路由表项管理算法及实现
国家药监局关于7批次药品不符合规定的通告
基于ARMA模型预测的交换机流表更新算法
基于二进制链表的粗糙集属性约简
跟麦咭学编程
基于链表多分支路径树的云存储数据完整性验证机制
SDN数据中心网络基于流表项转换的流表调度优化
一种基于有序双端链表的高效排序算法
关于实行参考文献新规范的通告
关于实行参考文献新规范的通告