BFD会话连接建立方法及装置与流程

文档序号:13534192阅读:1281来源:国知局
BFD会话连接建立方法及装置与流程

本申请涉及网络通信技术领域,特别涉及一种bfd会话连接建立方法及装置。



背景技术:

bfd(bidirectionalforwardingdetection,双向转发检测)是一种通用的、标准化的、介质无关、协议无关的快速故障检测机制,bfd在两台设备上建立会话,用来监测这两台设备间的双向转发路径,为上层协议服务。bfd协议上规定了bfd会话连接建立的三种状态:down(未就绪)、init(已就绪)和up(已建立)。



技术实现要素:

有鉴于此,本申请提供一种bfd会话连接建立方法及装置。

具体地,本申请是通过如下技术方案实现的:

一方面,提供了一种bfd会话连接建立方法,包括:

在bfd会话的状态为down时,若接收到了对端设备发来的状态为init的bfd报文,则将该bfd会话的状态切换为pre-up;

在该bfd会话的状态为init时,若接收到了对端设备发来的状态为init或up的bfd报文,则将该bfd会话的状态切换为pre-up;

在该bfd会话的状态为pre-up时,向对端设备发送状态为up的bfd报文;

若接收到了对端设备发来的状态为up的bfd报文,并且满足预设条件, 则将该bfd会话的状态切换为up,该预设条件为连续接收到了n个状态为up的bfd报文、并且这n个状态为up的bfd报文中的相邻2个bfd报文之间的接收时间间隔在预设时间范围内,其中,n为正整数。

另一方面,还提供了一种bfd会话连接建立装置,包括:

接收模块,用于接收bfd会话的对端设备发来的bfd报文;

第一切换模块,用于在该bfd会话的状态为down时,若接收模块接收到了对端设备发来的状态为init的bfd报文,则将该bfd会话的状态切换为pre-up;

第二切换模块,用于在该bfd会话的状态为init时,若接收模块接收到了对端设备发来的状态为init或up的bfd报文,则将该bfd会话的状态切换为pre-up;

发送模块,用于在该bfd会话的状态为pre-up时,向对端设备发送状态为up的bfd报文;

第三切换模块,用于在该bfd会话的状态为pre-up时,若接收模块接收到了对端设备发来的状态为up的bfd报文,并且满足预设条件,则将该bfd会话的状态切换为up,该预设条件为连续接收到了n个状态为up的bfd报文、并且这n个状态为up的bfd报文中的相邻2个bfd报文之间的接收时间间隔在预设时间范围内,其中,n为正整数。

通过本申请的以上技术方案,引入了一种新的bfd会话连接建立状态pre-up,在bfd会话的状态为down时,若接收到了对端设备发来的状态为init的bfd报文,则不会直接将该bfd会话的状态切换为up状态,而是切换为pre-up,在该bfd会话的状态为init时,若接收到了对端设备发来的状态为init或up的bfd报文,则不会直接将该bfd会话的状态切换为up状态,而是切换为pre-up状态;而在进入pre-up状态后,会向对端设备发送状态为up的bfd报文,并且,在接收到对端设备发来的状态为up的bfd报文,并且满足预设条件时,才会将该bfd会话的状态切换为up状态,该预设条件为:连续接收到了n个状态为up的bfd报文、并且相邻2个状态为up的bfd报 文之间的接收时间间隔在预设时间范围内。通过设置上述预设条件,在判断出对端设备的cpu能够连续发出n个状态为up的bfd报文、并且相邻2个状态为up的bfd报文之间的接收时间间隔在预设时间范围内时,表明对端设备的cpu的处理性能是稳定的、有序的、正常的,不存在乱序、丢包、或时延较大等问题,从而可以进入up状态,而不会发生bfd会话的状态发生震荡的问题,也不会引起该bfd会话所联动的上层协议发生震荡的问题。

附图说明

图1是bfd会话连接建立过程的报文交互示意图;

图2是pe2的cpu的处理性能下降,导致bfd会话建立失败的报文交互示意图;

图3是本申请一示例性实施例示出的bfd会话连接建立的状态转换图;

图4是本申请一示例性实施例示出的确定满足预设条件的方法的流程图;

图5是本申请一示例性实施例示出的bfd会话连接建立过程的报文交互示意图;

图6是本申请一示例性实施例示出的bfd会话连接建立装置所应用的网络设备的硬件结构示意图;

图7是本申请一示例性实施例示出的bfd会话连接建立装置的一种结构示意图;

图8是本申请一示例性实施例示出的bfd会话连接建立装置的另一种结构示意图。

具体实施方式

这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本申请相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本申请的一些方面相一 致的装置和方法的例子。

在本申请使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本申请。在本申请和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。还应当理解,本文中使用的术语“和/或”是指并包含一个或多个相关联的列出项目的任何或所有可能组合。

应当理解,尽管在本申请可能采用术语第一、第二、第三等来描述各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开。例如,在不脱离本申请范围的情况下,第一信息也可以被称为第二信息,类似地,第二信息也可以被称为第一信息。取决于语境,如在此所使用的词语“如果”可以被解释成为“在……时”或“当……时”或“响应于确定”。

为了实现快速检测,bfd通常会与其它上层协议进行联动,一种典型的应用就是通过bfd联动pw(pseudowire,伪线)来检测pw是否正常。如图1所示,有两个pe(provideredge,服务提供商网络边缘)设备pe1和pe2,在pe1与pe2之间的物理链路上建立有pw,该pw绑定一个bfd会话,在pe1和pe2上该bfd会话的初始状态都为down。如图1所示,pe1与pe2之间的bfd会话连接建立过程包括以下步骤:

步骤s101,pe1发送状态为down的bfd报文给pe2;

步骤s102,pe2接收到该状态为down的bfd报文之后,将bfd会话的状态切换为init,然后,发送状态为init的bfd报文给pe1;

步骤s103,pe1接收到该状态为init的bfd报文之后,将bfd会话的状态切换为up,然后,再发送状态为up的bfd报文给pe2;pe2接收到该状态为up的bfd报文之后,将bfd会话的状态也切换为up。

在上述过程中,pe1与pe2交互的bfd报文均需要上送cpu(centralprocessingunit,中央处理单元)进行判断和处理。当其中任一设备的cpu处理性能变差,例如,图2中的pe2由于处理工作量较大,因此导致处理性能下降时,就可能发生以下情况:

在步骤s103中,pe2接收到pe1发来的状态为up的bfd报文之后,上送给cpu,但是,由于pe2的cpu处理性能下降,导致该bfd报文无法及时处理而被丢弃,在检测时间到达后,pe2上的bfd会话的状态会从init切换为down,pe1的状态也会在检测时间到达后从up切换为down。后续,pe1和pe2还会再次尝试发起bfd会话连接建立,可能仍然会出现pe2的cpu丢弃bfd报文的情况,从而在经历了震荡过程后才会最终均到达up状态。在该过程中,由于pe2的cpu处理性能下降而导致bfd会话的状态发生了震荡,进而会导致bfd会话所联动的上层协议也发生震荡,例如,导致上层的路由协议的邻居关系发生震荡。

为了解决上述存在的bfd会话可能会发生震荡,进而引起该bfd会话所联动的上层协议也发生震荡的问题,本申请以下实施例中提供了一种bfd会话连接建立方法,以及一种可以应用该方法的bfd会话连接建立装置。

本申请实施例中,在bfd协议规定的bfd会话连接建立的三种状态down(未就绪)、init(已就绪)和up(已建立)的基础上,引入了一种新的状态pre-up(准up),per-up代表的是一种尚未完全up、可能还会发生变动的非稳定状态。

此时的bfd会话连接建立的状态转换如图3所示,具体说明如下:

1、当bfd会话的状态为down时,若接收到了对端设备发来的状态为down的bfd报文,则将该bfd会话的状态切换为init;

2、当该bfd会话的状态为init时,若接收到了对端设备发来的状态为init或up的bfd报文,则将该bfd会话的状态切换为pre-up;

3、当该bfd会话的状态为pre-up时,若接收到了对端设备发来的状态为init或up的bfd报文,则将该bfd会话的状态维持为pre-up;

4、当该bfd会话的状态为pre-up时,在判断出满足预设条件时,将该bfd会话的状态切换为up;

其中,上述预设条件为:连续接收到了对端设备发来的n(n为正整数)个状态为up的bfd报文、并且这n个bfd报文中的相邻2个bfd报文之间 的接收时间间隔在预设时间范围内,具体的,该预设时间范围可以表示为[t-t1,t+t2],其中,t表示bfd报文的发送时间间隔,t1和t2表示预设的时间间隔误差。在实际实施过程中,t1和t2可以相同,也可以不同,例如,t1和t2可以均预设为20%t。

例如,t=100ms,t1=t2=20%t=20ms,n=5,则在bfd会话的状态切换为pre-up后,若连续接收到了对端设备发来的5个状态为up的bfd报文,并且这5个bfd报文中相邻2个bfd报文的接收时间间隔在80ms~120ms之间,才会将该bfd会话的状态从per-up切换为up。

具体的,可以通过计数器来对接收到的状态为up的bfd报文进行计数,该计数器的计数值i的初始值为0。这样,在bfd会话的状态切换为pre-up状态后,确定满足上述预设条件的方法可以如图4所示,包括以下步骤:

步骤s301,判断是否接收到了该bfd会话的bfd报文,若是,则执行步骤s302,否则,返回步骤s301;

步骤s302,判断该bfd报文的状态是否为up,若是,则执行步骤s303,否则,执行步骤s309;

步骤s303,记录接收到该状态为up的bfd报文的时间,将计数器的计数值加1,即,令i=i+1;

步骤s304,判断计数器的计数值是否大于1,即,判断i是否大于1,若是,则执行步骤s305,否则,返回步骤s301;

步骤s305,计算接收到该状态为up的bfd报文的时间与记录的接收到前一个状态为up的bfd报文的时间的差值a,之后执行步骤s306;

步骤s306,判断a是否在预设时间范围[t-t1,t+t2]内,若是,则执行步骤s307,否则,执行步骤s309;

步骤s307,判断计数器的计数值是否等于n,即,判断i是否等于n,若是,则执行步骤s308,否则,返回步骤s301;

步骤s308,确定满足上述预设条件,则将计数器的计数值清空为0,即,令i=0;之后退出本流程。

步骤s309,将计数器的计数值清空为0,即,令i=0;之后退出本流程。

5、当该bfd会话的状态为pre-up时,若接收到了对端设备发来的状态为down的bfd报文,或者在检测时间内没有接收到对端设备发来的bfd报文,则将该bfd会话的状态切换为down;

6、当该bfd会话的状态为down时,若接收到了对端设备发来的状态为init的bfd报文,则将该bfd会话的状态切换为pre-up;

7、当该bfd会话的状态为up时,若接收到了对端设备发来的状态为down的bfd报文,或者在检测时间内没有接收到对端设备发来的bfd报文,则将该bfd会话的状态切换为down;

8、当该bfd会话的状态为down时,若接收到了对端设备发来的状态为up的bfd报文,则将该bfd会话的状态维持为down;

9、当该bfd会话的状态为init时,若接收到了对端设备发来的状态为down的bfd报文,则将该bfd会话的状态维持为init;

10、当该bfd会话的状态为up时,若接收到了对端设备发来的状态为init或up的bfd报文,则将该bfd会话的状态维持为up;

11、当该bfd会话的状态为init时,若在检测时间内没有接收到对端设备发来的bfd报文,则将该bfd会话的状态切换为down。

其中,在该bfd会话的状态为down时,向对端设备发送状态为down的bfd报文,在该bfd会话的状态为init时,向对端设备发送状态为init的bfd报文,在该bfd会话的状态为pre-up时,向对端设备发送状态为up的bfd报文,在该bfd会话的状态为up时,向对端设备发送状态为up的bfd报文。

在本申请上述实施例的方法中,引入了一种新的bfd会话连接建立状态pre-up,在bfd会话的状态为down时,若接收到了对端设备发来的状态为init的bfd报文,则不会直接将该bfd会话的状态切换为up状态,而是切换为pre-up,在该bfd会话的状态为init时,若接收到了对端设备发来的状态 为init或up的bfd报文,则不会直接将该bfd会话的状态切换为up状态,而是切换为pre-up状态;而在进入pre-up状态后,会向对端设备发送状态为up的bfd报文,并且,在接收到对端设备发来的状态为up的bfd报文,并且满足预设条件时,才会将该bfd会话的状态切换为up状态,该预设条件为:连续接收到了n个状态为up的bfd报文、并且相邻2个状态为up的bfd报文之间的接收时间间隔在预设时间范围内。通过设置上述预设条件,在判断出对端设备的cpu能够连续发出n个状态为up的bfd报文、并且相邻2个状态为up的bfd报文之间的接收时间间隔在预设时间范围内时,表明对端设备的cpu的处理性能是稳定的、有序的、正常的,不存在乱序、丢包、或时延较大等问题,从而可以进入up状态,而不会发生bfd会话的状态发生震荡的问题,也不会引起该bfd会话所联动的上层协议发生震荡的问题。

仍然以通过bfd联动pw来检测pw是否正常为例进行说明。两个pe设备pe1和pe2之间的物理链路上建立有pw,该pw绑定一个bfd会话。pe2的cpu由于处理工作量较大,因此,处理性能较差。在pe1和pe2上该bfd会话的初始状态都为down。如图5所示,pe1与pe2之间的bfd会话连接建立过程包括以下步骤:

步骤s401,pe1发送状态为down的bfd报文给pe2;

步骤s402,pe2接收到该状态为down的bfd报文之后,将bfd会话的状态切换为init,然后,发送状态为init的bfd报文给pe1;

步骤s403,pe1接收到该状态为init的bfd报文之后,将bfd会话的状态切换为pre-up,然后,发送状态为up的bfd报文给pe2;

步骤s404,pe2接收到该状态为up的bfd报文之后,将bfd会话的状态切换为pre-up,然后,发送状态为up的bfd报文给pe1;

在bfd会话的状态为pre-up时,pe1与pe2按照发送时间间隔向对方发送状态为up的bfd报文。

步骤s405,pe1在判断出满足预设条件时,将bfd会话的状态切换为up;

步骤s406,pe2在判断出满足预设条件时,将bfd会话的状态切换为up。

与前述bfd会话连接建立方法的实施例相对应,本申请还提供了bfd会话连接建立装置的实施例。

本申请bfd会话连接建立装置60的实施例可以应用在可以运行bfd协议的网络设备,例如,路由器等设备上。装置实施例可以通过软件实现,也可以通过硬件或者软硬件结合的方式实现。以软件实现为例,作为一个逻辑意义上的装置,是通过其所在网络设备的处理器10将非易失性存储器50中对应的计算机程序指令读取到内存40中运行形成的。从硬件层面而言,如图6所示,为本申请bfd会话连接建立装置所在网络设备的一种硬件结构图,除了图6所示的处理器10、内部总线20、网络接口30、内存40、以及非易失性存储器50之外,实施例中装置所在的网络设备通常根据该网络设备的实际功能,还可以包括其他硬件,对此不再赘述。

请参考图7,本申请实施例的bfd会话连接建立装置60中包括:接收模块601、第一切换模块602、第二切换模块603、发送模块604和第三切换模块605,其中:

接收模块601,用于接收bfd会话的对端设备发来的bfd报文;

第一切换模块602,用于在该bfd会话的状态为down时,若接收模块601接收到了对端设备发来的状态为init的bfd报文,则将该bfd会话的状态切换为pre-up;

第二切换模块603,用于在该bfd会话的状态为init时,若接收模块601接收到了对端设备发来的状态为init或up的bfd报文,则将该bfd会话的状态切换为pre-up;

发送模块604,用于在该bfd会话的状态为pre-up时,向对端设备发送状态为up的bfd报文;

第三切换模块605,用于在该bfd会话的状态为pre-up时,若接收模块601接收到了对端设备发来的状态为up的bfd报文,并且满足预设条件,则将该bfd会话的状态切换为up,该预设条件为连续接收到了n个状态为up的bfd报文、并且这n个状态为up的bfd报文中的相邻2个bfd报文之间的接 收时间间隔在预设时间范围内,其中,n为正整数。

另外,如图8所示,该bfd会话连接建立装置60中还包括:维持模块606,用于在该bfd会话的状态为pre-up时,若接收模块601接收到了对端设备发来的状态为up的bfd报文,并且不满足预设条件,则将该bfd会话的状态维持为pre-up。

另外,维持模块606,还用于在该bfd会话的状态为pre-up时,若接收模块601接收到了对端设备发来的状态为init的bfd报文,则将该bfd会话的状态维持为pre-up。

另外,如图8所示,该bfd会话连接建立装置60中还包括:第四切换模块607,用于在该bfd会话的状态为pre-up时,若接收模块601接收到了对端设备发来的状态为down的bfd报文,或者,接收模块601在检测时间内没有接收到对端设备发来的bfd报文,则将该bfd会话的状态切换为down。

其中,上述预设时间范围为[t-t1,t+t2],其中,t表示bfd报文的发送时间间隔,t1和t2表示预设的时间间隔误差。

上述装置中各个单元的功能和作用的实现过程具体详见上述方法中对应步骤的实现过程,在此不再赘述。

对于装置实施例而言,由于其基本对应于方法实施例,所以相关之处参见方法实施例的部分说明即可。以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本申请方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。

以上所述仅为本申请的较佳实施例而已,并不用以限制本申请,凡在本申请的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本申请保护的范围之内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1