APP下载

一种实现BFD报文处理的方法

2019-06-09王一九

科技创新与应用 2019年7期

王一九

摘  要:随着网络速度的不断提高,对网络的可靠性和健壮性的要求也越来越高。当链路发生故障时,希望能尽快检测到故障并将业务快速切换到备份链路。文章首先阐述了BFD的应用场景,存在的问题及传统的BFD报文处理过程。然后,针对传统BFD报文处理过程中存在的缺陷,提出一种实现BFD报文处理的方法。在该方法中,核心思想是对BFD报文进行封装预处理,并引入双内核协同处理。

关键词:BFD;报文封装;双内核

中图分类号:TP393.0        文献标志码:A         文章编号:2095-2945(2019)07-0125-02

Abstract: With the continuous improvement of network speed, the requirements for the reliability and robustness of the network are getting higher and higher. When the link fails, it is hoped that the failure can be detected as soon as possible and the service can be quickly switched to the backup link. Firstly, this paper describes the application scenario of BFD, the existing problems and the traditional BFD message processing process. Then, in view of the defects existing in the traditional BFD message processing process, a method to realize BFD message processing is proposed. In this method, the core idea is to encapsulate and preprocess BFD packets and introduce dual-kernel cooperative processing.

Keywords: BFD; message encapsulation; dual kernel

1 BFD的应用场景及存在的问题

1.1 BFD的应用场景

在当前网络中,如果系统通讯过程中发生故障,需要快速的建立替代通道,并将业务倒换到其他链路上。有些链路通过硬件检测信号,但并不是所有的介质都能够提供硬件检测,此时,就需要依靠上层路由协议自身的Hello报文机制来进行故障检测[1]。但是,这种检测方式的弊端是检测时间太差。例如OSPF需要2秒的检测时间,ISI需要1秒的检测时间。这对于用户及某些应用来说,都是无法忍受的。随着网络速度的不断发展,线路中断时间越长,意味着丢包越多,对业务的影响越大。在电信级以太网中,很多业务场景要求,故障发生时业务的切换时间在50毫秒以内。这时,必须通过BFD双向转发检测技术进行检测。BFD是一种协议无关的IP网络故障快速检测机制,能够提供毫秒级的故障检测时间,加快网络路由收敛速度,缩短通信中断时间,提高IP承载网络的可靠性和健壮性[2]。BFD通过建立会话的通道周期性地发送检测报文。如果某个系统在一定时间内没有收到对端的检测报文,那么通信链路可能发送故障。BFD会话的发送和接收速率可以协商。

1.2 BFD实现中存在的问题

在实际应用中,由于对网络快速检测的要求越来越高,应用场景也越来越多。随着网络数据量的急剧增加,需要的BFD检测数量也随着增加。这时,由于芯片处理的能力及策略的不同,导致BFD的整体性能不同。当芯片处理能力达到极限时,BFD就会出现丢包。如果长时间无法收到某一BFD报文,那么BFD就会震荡。因此,在芯片处理能力有限的情况下,只能在处理的策略上进行调整。

1.3 传统的BFD报文处理过程

下面基于图1,传统的BFD报文处理过程解析图示。对传统的BFD报文处理过程进行详细说明。

首先,对BFD报文进行封装处理;其次,上送CPU内核处理,将BFD报文不加区分的上送一个队列进行处理;BFD模块整合MUX下发的参数并调用驱动写芯片;最后,完成BFD报文的快速发送和接收检测、报文或告警上送CPU。该过程中,虽然将BFD报文都上送一个较高优先级的队列,看似对报文进行了优先处理。但是,随着BFD的session数量增加时,同时在一个队列处理的报文也会迅速增加。这样就会导致传统的BFD报文处理过程中,某些session的BFD处理过程中丢失或处理不及时等,造成BFD会话震荡。

2 一种实现BFD报文处理的方法

基于这种背景,提出一种实现BFD报文处理的方法。该方法的主要目的是在于提供一种实现BFD报文处理的方法。首先,进行BFD报文封装的预处理;其次,引入双内核协同处理。

2.1 BFD报文处理的技术方案

为达到上述目的,下面介绍一下该方法的技术方案。基于图2:改进的BFD报文处理过程解析图示。一方面,当配置BFD的類型和协商参数后,对BFD报文进行预处理,根据BFD的类型和协商参数对BFD报文进行优先级的区分。另一方面,根据BFD报文操作方式的不同,上送不同的CPU芯片处理。步骤1 进行BFD报文封装的预处理,根据BFD的类型及协商参数将BFD报文在封装时添加报文优先级,根据BFD报文被添加的优先级高低决定BFD报文处理的先后顺序。

步骤2 进行双内核的协同处理,首先通过BFD的session判断该会话是否为新增会话。如果是新增会话,通过CPU内核1处理后,进行下一步处理,同时将该BFD的会话信息拷贝一份到CPU内核2备用;如果不是新增会话,则直接转到CPU内核2进行查找相关session信息,并进行下一步处理。步骤3 BFD模块整合MUX下发的参数并调用驱动写芯片。步骤4 完成BFD报文的快速发送和接收检测报文或告警上报CPU。与现有技术相比较,该方法将BFD报文进行优先级的处理,并对新增及原有会话进行区分处理,大大降低了BFD报文处理过程中丢包的风险,同时降低了CPU的负荷,保证了BFD会话的稳定性。

2.2 改进的BFD处理过程的实例解析

下面结合图2:改进的BFD报文处理过程解析图示,图3:CPU内核2处理细化图示,对该方法进行说明。假设新增10条BFD会话session 1-10,该BFD为LINK BFD,要求BFD配置的参数如下:interval(发送检测报文的时间间隔)为10ms,min-rx-interval(接收检测报文的最小时间间隔)为10ms,multiplier(检测倍数)为3。新增1条BFD会话session 11,该BFD为VRRP BFD,要求BFD配置的参数如下:interval为50ms,min-rx-interval为50ms,multiplier为3。修改1条BFD会话session 12,该会话为LINK BFD,要求修改BFD配置的参数如下:interval为20ms,min-rx-interval为20ms,multiplier为3。

步骤1 根据预先约定的BFD类型及协商参数对应表,将session 1-10的BFD报文优先级设置为Priority1,将session 11的BFD报文优先级设置为Priority2。步骤2.1参照图2,改进的BFD报文处理过程解析图示,判断BFD session1-11为新增。步骤2.1.1 上送CPU内核1处理,同时拷贝一份相同的session信息到CPU内核2备用。当CPU内核1将报文转发后,即清除相应的session信息。后续需要更新或删除相应的BFD session时,按照BFD session在CPU内核2内进行查找并进行相应的参数更新及删除操作。步骤2.1.2 参照图3,CPU内核2处理细化图示。当BFD报文上送CPU内核2后,解析BFD报文中包含的标志位,此时上述BFD报文不存在标志位,即表示该报文为新增报文,进行BFD session信息的拷贝。步骤2.2 参照图2,改进的BFD报文处理过程解析图示,判断BFD session 12为更新。步骤2.2.1 参照图示3,CPU内核2处理细化图示。當BFD报文上送CPU内核2后,解析BFD报文中包含的标志位,此时上述BFD报文存在标志位,即表示该报文为待更新或删除报文。步骤2.2.2 按照BFD的session号进行查找,查找到相应的表项,进行更新。步骤3 BFD模块整合MUX下发的参数并调用驱动写芯片。步骤4 完成BFD报文的快速发送和接收检测、报文或告警上送CPU。本方法的重点在于步骤1和步骤2。步骤1根据BFD报文的类型及参数划分优先级,这样对报文可以区分对待。例如本例中VRRP BFD由于要求协商参数较低,因此,将该报文的优先级设置偏低。这样使CPU在能力有限的情况下,优先处理协商参数要求高的LINK BFD,确保LINK BFD不会由于处理不及时导致震荡。同时也可以满足VRRP BFD的要求。步骤2中将CPU内核1与CPU内核2进行任务分工。当新增BFD session时,首先通过CPU内核1进行处理,并拷贝相应的信息到CPU内核2,这样后续的更新、删除操作由CPU内核2进行处理。CPU内核1删除已拷贝给CPU内核2的内容,以免造成CPU内核1的内容冗余及不必要的处理。同时,在CPU内核2在进行更新、删除操作时,不再需要同步相应的session信息给CPU内核1处理。这样通过CPU内核1和CPU内核2的相互协同,在BFD报文的处理上大大降低了BFD报文处理过程中丢包的风险,同时,降低了CPU的负荷,保证了BFD会话的稳定性。

3 结束语

总而言之,BFD是实现双向快速检测的有效方法。随着BFD检测数量的增加,芯片处理能力达到极限时,可能导致BFD震荡。为解决该问题,根据BFD报文的优先级,通过双内核协同处理机制,提高网络的可靠性和健壮性。

参考文献:

[1]张韬,王俊.用BFD技术检测网络故障[J].网络安全和信息化,2017(10):141-145.

[2]王坦,仝磊,郭学义,等.基于BFD检测的静态路由切换研究[J].自动化技术与应用,2015(8):42-46.