APP下载

基于多核处理器BFD协议的设计与实现

2016-10-14邓嘉吉萌雷升平

电子设计工程 2016年12期
关键词:表项会话哈希

邓嘉,吉萌,雷升平

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

基于多核处理器BFD协议的设计与实现

邓嘉1,2,吉萌2,雷升平2

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

BFD是一种双向转发快速检测机制,为解决协议软件BFD在链路检测中响应慢的问题,本文提出并实现了一种在多核处理器平台下基于底层驱动实现的BFD机制。该机制下所有的收发包处理都由底层驱动实现,上层只负责向底层下发配置命令和接受底层的通告信息;会话表中通过哈希算法查找相应的会话并对相关字段进行匹配。实验证明,该机制的链路检测响应时间可达20毫秒左右,满足高性能网络设备可靠性的要求。

BFD;多核处理器;链路状态;哈希表

随着IP数据业务的发展,网络链路的可靠性越来越受到人们的重视,其中设备之间的链路状态检测成为了关注的焦点。相邻系统之间通信故障快速检测功能最早应用于传输网的SDH(Synchronous Digital Hierarchy,同步数字体系)设备中,而作为联通网的路由器、交换机设备并没有类似的检测机制。BFD[1](Bidirectional Forwarding Detection,双向转发检测)协议的出现,填补了网络设备之间故障检测协议的空白,各大设备厂商也纷纷致力于BFD的研究和实现。基于软件层的BFD,当对端发来BFD报文后,由底层送到软件层,然后进协议栈解析和匹配,一旦检测到链路故障,需要通告底层切换备用路由,整个过程反应比较迟钝,无法满足高端路由器链路快速倒换的要求。因此,实现一种能够对链路故障快速检测并响应的BFD机制显得尤为重要。本文提出的基于驱动实现的BFD,能够在30毫秒内检测出链路故障并做出响应,为快速路由倒换并恢复链路争取了时间,提升了整个网络链路的可靠性。

1 BFD表项设计

BFD的表项设计是通过哈希表来实现的,将源IP和目的IP作为参数输入SDK中所提供的一个函数,生成一个数字X,因为本哈希表的大小为1K,所以哈希值的大小必须在0到1023之间,所以再将X除以1024取余,得出一个大小在0到1023之间的哈希值。如果两对不同的源目的IP但是算出来的哈希值相同的话则会产生哈希冲突,解决哈希冲突这一问题,在这里采用链地址的方式,就是通过next指针将冲突的表项链接在已存在表项的后面,从BFD的列表[2]中抽象出3个部分:标志位部分(flag),条件匹配部分(match),协商部分(consult)

Flag={flag1,flag2,..,flagn},flagn属于集合Flag,flagn则是表项中第n个标志位;Match={match1,match2,...,matchn},matchn属于集合Match,matchn则是表项中第n个匹配字段位;Consult={consult1,consult2,..,consultn}consultn属于集合Consult,consultn则是第n个协商字段。如图1所示。

2 BFD发包模块设计

图2是整个发包模块的流程图,发包模块的定时器是采用轮训的方式,core8每隔10 ms,扫描整张hash表,也就是说扫描的范围是从0一直到1023,在表项中有一项为sessionid,如果session-id的值为0则表示该表项没有会话,则跳过,如果不为空,首先查看是否存在冲突域,如果存在的话,说明在一个hash表项中存在多个会话session[3-4],需要对其遍历,并对冲突域中的每一个会话都要对其进行处理,对每一个会话的操作与表项不存在冲突域是对会话的操作相同。当对某一个会话进行处理时,首先要判断其会话模式是主动模式,被动模式,或者是回声模式。主动模式和被动模式的主要区别是当会话状态是down的时候,主动模式会不断的送down包,而被动模式则什么也不做。当会话处于init和up状态的时候,主动模式和被动模式的实现过程相同。Core8每扫一次hash表的时候,时间计数器的数值会被累加。所以当时间计数器的值余1 000 ms为0的时候,如果会话的状态为down或者init时,则发送相应状态的数据包出去。同当会话状态为init时,除了发送init出去以外,还会依据flag位和detect_multi来判定是否超时。如果超时则将当前会话设置为down,同时上报主控。

如果会话的状态是为up的话,发送up包并将flag位加1的条件是时间计数器的值余协商发包间隔为0的时候,当时间计数器的值余协商收包间隔为0的时候,则判断flag的值是否大于预先设定的detect_multi[5-6]发包重复次数。依据flag位和detect_multi来判定是否超时。如果超时则将当前会话设置为down,同时上报主控

由于是在多核下实现发包,考虑到线程安全问题,当进入发包模块的时候,会给相应表项资源上锁。从而避免对同一表项,在发送数据包的同时修改数据包。

图1 BFD表项结构图

图2 发包模块设计流程图

图3 收包模块设计流程图

3 BFD收包模块设计

收包是非常关键的一部分,系统流程如图3所示,首先,当接受了一个数据包过来,要收包模块要从主干道将它提取出来,这个数据包要符合两个条件,第一个是其协议号要是17,说明采用udp,第二个是其端口号为3704。提取出数据包以后,首先要判断这个数据包是不是合法的,有两个条件:第一是将数据包的源IP和目的IP提取出来,通过多核处理器上的SDK依据源目的IP算出hash值,到hash表中去查找对应的session,如果查找到对应的表项为空时,则表明这个数据包不是合法的,则丢弃。第二,如果找到了对应的表项,则再去比对其中的字段,首先看有没有认证,如果有则进行认证。否则查看表项里面唯一的标识符,如果标识符不完全,则将会话双发的标识符补全,如果会话双方的标识符齐全,则判断数据包和表项对应的标示符是否一致。如果不一致则说明数据包是不合法的,可能是别人伪造的或者被改过了的,则丢掉。当所有这些条件判断过后,证明这个数据包已经合法之后,再依据数据包中的状态来修改表项中会话的状态,如果数据包的状态为UP,还需要进一步判断是否需要重新协商发包间隔和收包间隔。

收包的话就可以用core1到core7都可以,收发包是并行工作的,当收包后,数据包在修改表项数据的时候该表项则会上锁,这时如果发包的核在这是后来读取的话,则会等待,等锁释放以后再读取表项,将包发出去,所以一定要设一个LOCK,不然一个再改一个在发,则会出现错误,因为修改表项相对于扫描表项的时间是非常短的,所以当遇到锁的时候核core8等待。

4 实验与结果分析

本实验是在高端路由器上进行,实验仪表为Spirent FestCenter,用仪表模拟一台路由器设备,建立BFD会话。高端路由器中的核卡则采用多核处理器,单核主频为1.2 GHz。

图4 实验拓扑图

按图4连接设备,配置IP地址并保证设备之间能ping通,路由器设备的ip配置为5.5.5.1/24,仪表的IP设置为5.5.5.5/24.在设备上开启BFD功能。在连接链路接口上使能BFD,设置为主动模式,且两端都为主动方。BFD的主要操作模式称为主动模式(异步模式)。在这种模式下,系统之间相互周期性地发送BFD控制报文,如果某个系统连续几个报文都没有接收到,就认为此BFD会话的状态是Down。当两端都为主动角色时,两端的系统都要向对端发送Your Discriminator为0的BFD控制报文,直到两端学到对端的Discriminator,然后开始建立会话查看BFD会话。通过主控将其配置到将最小发送间隔和接受间隔都设置为最小的10 ms,检测次数设为2次,因为发送数据包的core8的循环间隔为10 ms,因此该值为发包的极限值。

5 主控配置建立会话

当bfd配置好之后,通过仪表连接设备,建立会话session如图5所示,会话的状态有down转变为up状态,说明会话建立成功。

图5 会话状态图

6 最后结果分析

通过对途中数据的分析得出10组以5.5.5.1位源IP的数据的发送时间进行了统计。依据图6统计结果所得数据(数据已秒为单位),分析得出单次发包所用平均时间10.485 845 ms。发包间隔大于10 ms的部分是多核在构造数据包上所用时间。由于检测次数至少为两次,所以该机制的链路检测响应时间可达30 ms以内,满足高端路由器可靠性的要求。

图6 BFD响应时间测试结果

7 结束语

基于驱动层的BFD,对整个BFD报文的收发处理都在线卡上完成,当会话状态发生改变时,只需要向主控通告相应的会话状态信息。这种方式的BFD对链路状态的感知比较快,当检测到链路故障后,可以在第一时间通告切换备用路由。这种机制避免了链路出现故障时主控与线卡之间多次通告的耗时过程,为快速路由倒换节约了时间。运用这种BFD机制与FRR联动,链路故障恢复时间可实现50 ms以内,满足骨干网中高端路由器可靠性的要求。但是,随着各种数据业务的发展,整个网络的组网结构也愈发复杂,人们对链路的检测的要求已不仅仅满足于能够发现故障并快速恢复链路,而且还要求能够检测具体哪条链路出现故障,造成故障的原因是什么。因此,如何利用现有的BFD协议精确检测链路状态,是今后需要进一步研究的方向之一。

[1]王晨.BFD技术在H-VPLS网络上的实现[D].南京大学,2012.

[2]蔡素梅,刘莲花,陈强.BFD的研究及在3G网络中的应用设计[J].广东通信技术,2011(3):25-29.

[3]韩韬略.分布式BFD系统中驱动模块的设计与实现[D].南京大学,2013.

[4]陈瑞森.基于BFD的IP快速重路由的研究与实现[D].杭州电子科技大学,2012.

[5]何燕.基于BFD的MPLS隧道故障检测及恢复技术的研究与实现[D].杭州电子科技大学,2010.

[6]陶润泽.基于BFD协议的40G的以太网链路检测模块的设计与实现[D].华中科技大学,2013.

Design and implementation of BFD protocol based on multi-core processor

DENG Jia1,2,JI Meng2,LEI Sheng-ping2
(1.Wuhan Research Institue of Posts and Telecommunications,Wuhan 430074,China;2.Wuhan FiberHome Networks,Wuhan 430074,China)

BFD is a bidrectional forwarding fast detection.To solve the problem of slow-forward detection,this paper presents and implements BFD protocol on a multi-core processor platform.sending and processing packets in this mechanism are implements by bottom-driver.bottom-driver receive and send commands through notification to up level.A session is find and matched by hash value.The experiment prove that the time of fast-forward detection is about 20 ms,and it can satisfy the request of rooter.

BFD;multi-core processor;state of link;hash table

TN 915

A

1674-6236(2016)12-0090-03

2015-06-04稿件编号:201506055

邓嘉(1989—),男,湖南长沙人,硕士研究生。研究方向:通信技术。

猜你喜欢

表项会话哈希
一种改进的TCAM路由表项管理算法及实现
哈希值处理 功能全面更易用
QQ和微信会话话轮及话轮转换特点浅析
文件哈希值处理一条龙
基于ARMA模型预测的交换机流表更新算法
SDN数据中心网络基于流表项转换的流表调度优化
基于集群节点间即时拷贝的会话同步技术研究①
基于OpenCV与均值哈希算法的人脸相似识别系统
巧用哈希数值传递文件
交换机的FDB地址