具体实施方式
为了解决某些单向上层应用协议使用BFD进行快速检测时,无法通过BFD控制报文建立BFD会话的问题,本发明利用BFD Echo报文替代BFD控制报文的三次握手来进行BFD会话的建立。
在现有技术中,BFD Echo报文被用来进行故障检测,其工作机制为:BFD路由器(检测者)向检测的目的路由器(被检测者)以一定频率发送BFDEcho报文,被检测者接收到BFD Echo报文时会将该报文回传给检测者;如果检测者在检测时间内没有接收到回传的BFD Echo报文,则认为发生了故障。可以看出,作为一种特殊的BFD报文,被检测者收到BFD Echo报文之后只需回传给检测者即可,无需知道检测者的信息和BFD会话信息,因此,使用BFDEcho报文只需要一方发送就可以实现对检测者和被检测者之间双向转发路径的检测。正是基于BFD Echo报文的这一功能,使其解决单向上层应用建立BFD会话问题具有可行性。下面通过附图和实施例,对本发明的技术方案做进一步的详细描述。
请结合图1,本发明的实施例提供了一种BFD会话建立方法,包括以下步骤:
S1、下层BFD协议根据上层应用协议的建立BFD会话的指令,向需要与之建立BFD会话的邻居发送第一BFD Echo报文;
BFD协议并未定义Echo报文的格式,在本实施例的技术方案中,可以设置作为建立BFD会话之用的Echo报文至少要包括BFD会话当前状态字段(Sta字段)、Echo报文长度字段(Length字段)和BFD会话标识字段(MyDiscriminator字段)。
具体的,Sta字段标识BFD会话的当前状态,比如可以采用0值标识AdminDown(默认)状态,1值标识Down(关闭)状态,2值标识Init(初始化)状态,以及,3值标识Up(激活)状态;其中,AdminDown状态是指由用户的配置所导致的Down状态,在正常的BFD会话建立以及故障检测过程中并不会迁移到该状态;Init状态一般存在于BFD控制报文三次握手建立会话过程,在本发明使用Echo报文建立BFD会话过程中可以不必迁移到该状态;
Length字段标识BFD Echo报文长度,其单位为字节;
My Discriminator字段具有唯一非0值,用于标识不同的BFD会话;这是由于对Echo报文来说,其格式只是与本地相关,远端只需把此报文在反向通道上返回,因此本地系统必须能够根据报文中相应的内容分离到相应的会话上;
此外,BFD Echo报文还可以包括版本号字段(Vers字段),用来标识BFD协议版本号,比如可以设定当前版本号为1;还可以包括预留字段(Reserved字段)等;
如图2所示,显示了一个BFD Echo报文的实施例。
在本步骤S1中,发送BFD Echo报文的步骤可以包括:当下层BFD协议接收到上层应用协议的建立BFD会话的指令时,向需要与之建立BFD会话的邻居发送第一BFD Echo报文,其Sta字段标识Down状态。
显然,对于单向上层协议而言,其能够了解对端的邻居信息并通知给其下层BFD协议,则下层BFD协议就可以根据上述步骤进行Echo报文的发送。由于BFD协议定义了Echo报文所使用的UDP目的端口号为3785,本实施例的技术方案循序协议定义的端口加以发送即可。
S2、下层BFD协议根据回传的BFD Echo报文进行BFD会话状态迁移,其具体步骤包括:
(1)下层BFD协议接收回传的第一BFD Echo报文,以该第一BFDEcho报文中包括Sta字段、Length字段以及My Discriminator字段为例;
(2)根据该第一BFD Echo报文中的My Discriminator字段查找该Echo报文所属的会话;
(3)根据该Echo报文中的Sta字段进行所属会话的状态迁移:如果Sta字段标识Down状态,则迁移所属会话状态为Up状态,会话建立完成。
可以看出,在本发明使用Echo报文建立BFD会话过程中,由于只是单方进行循回检测,因此无需迁移到Init状态即可满足要求。但这并非意味着Init状态必然不能应用于本发明的技术方案。如果在实际应用中为了提高会话建立准确度或者单纯接轨于旧有版本,作为替代的,本步骤(3)中的状态迁移过程也可以为:如果Sta字段标识Down状态,则迁移所属会话状态为Init状态;当下层BFD协议检查到该BFD会话迁移到Init状态时,向该邻居发送BFD Echo报文,其Sta字段标识Init状态;接下来,如果收到回传的相应Echo报文且其Sta字段标识Init状态,则进一步迁移所属会话状态为Up状态,至此,会话建立完成。
进一步的,为了提高BFD会话的安全性,上述步骤(1)之后还可以包括以下步骤:
对回传的第一BFD Echo报文进行合法性检查,包括检查Vers字段、Sta字段、Length字段和My Discriminator字段等的合法性;检查通过则执行根据该Echo报文中的My Discriminator字段查找该Echo报文所属的会话的步骤,检查未通过则该回传的Echo报文为非法报文,丢弃。
可以看出,利用BFD Echo报文的功能,通过上述步骤S1~S2不仅提供了一种新的建立BFD会话的方法,特别是提供了一种为单向上层应用建立BFD会话的方式,不仅克服了现有技术中单向上层应用无法建立BFD会话的缺陷,而且基于现有的Echo报文实现,无需对协议进行改动,简单易行。
基于上述提供的BFD会话建立方法,本发明还提供了一种BFD会话检测方法,在会话建立完成后包括通过BFD Echo报文进行双向转发检测的步骤。
该步骤可以采用现有技术中利用Echo报文进行双向转发检测的技术实现,包括检测者发送一系列BFD Echo报文,被检测者通过它的转发通道将它们回传回来,如果检测者连续几个Echo报文的回传都没有接收到,会话就被宣布为Down。如图3所示,具体包括:
按照一定的周期发送第二BFD Echo报文,其Sta字段标识Up状态;
设置超时时限,其大于报文发送定时器的周期,例如,超时时限为第二BFD Echo报文发送周期的倍数;
保持对所发送第二BFD Echo报文的回传检测,如果在超时时限内收到相应回传的第二BFD Echo报文,则清零记时,重新进入下一轮超时检测;如果在超时时限内未收到相应回传的Echo报文,则上报给上层应用进行故障处理并迁移该BFD会话状态为Down状态。
本领域技术人员可以理解,在对第二BFD Echo报文的回传检测中,同样可以沿用对第一BFD Echo报文回传检测的处理方式:接收回传的Echo报文;对该Echo报文进行合法性检测;根据My Discriminator字段查找其所属的会话;其Sta字段标识Up状态,表明接收到该会话的回传报文,则清零该会话的计时。
请结合图4,显示了结合本发明所提供的BFD会话建立方法和BFD会话检测方法的一实施例,包括以下步骤:
Sa、下层BFD协议接收到上层应用协议的建立BFD会话的指令;
Sb、下层BFD协议向需要与之建立BFD会话的邻居发送第一BFDEcho报文,其Sta字段标识Down状态;
Sc、下层BFD协议接收回传的Echo报文;
Sd、下层BFD协议对回传的Echo报文进行合法性检查,检查通过则执行步骤Sf,检查未通过则执行步骤Se;
Se、丢弃该回传的Echo报文,该BFD会话建立过程结束;
Sf、下层BFD协议根据回传的Echo报文中的My Discriminator字段查找其所属的会话;
Sg、下层BFD协议识别回传的Echo报文中的Sta字段标识Down状态,则执行步骤Sh;
Sh、迁移所属会话状态为Up状态,会话建立完成。
此后还可以包括通过BFD Echo报文进行双向转发检测的步骤,包括:
Si、按照该一定的周期发送第二BFD Echo报文,其Sta字段标识Up状态;
Sj、设置超时时限,其大于第二BFD Echo报文的发送周期;
Sk、检测是否在超时时限内收到相应回传的Echo报文,是则执行步骤Sl,否则执行步骤Sm;
Sl、计时清零,并重新执行步骤Sk;
Sm、上报给上层应用进行故障处理并迁移BFD会话状态为Down状态,即会话终止,不再发送第二BFD Echo报文。
本领域普通技术人员可以理解:实现上述方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成,所述的程序可以存储于一计算机可读取存储介质中,该程序在执行时,包括如下步骤:
下层BFD协议根据上层应用协议的建立BFD会话的指令,向需要与之建立BFD会话的邻居发送第一BFD回声报文,并根据回传的第一BFD回声报文进行BFD会话状态迁移。
所述的存储介质包括:ROM/RAM、磁碟或者光盘等。。
本发明的实施例还提供了一种BFD会话建立装置100,分别与上层应用协议层200和下层BFD协议层300连接,此三者可共同设置在路由设备10中。
请结合图5,BFD会话建立装置100包括:
BFD会话建立指令接收单元101,与上层应用协议层200连接,用于接收上层应用协议层200发送的建立BFD会话的指令;
第一BFD回声报文指令发送单元102,与BFD会话建立指令接收单元101和下层BFD协议层300连接,用于根据建立BFD会话的指令,指令下层BFD协议层300向需要与之建立BFD会话的邻居发送第一BFD Echo报文,其Sta字段标识Down状态;需要说明的是,如果本发明所提供的BFD会话建立装置需要经历Down→Init→Up过程来建立BFD会话,则第一BFD回声报文指令发送单元102还要根据BFD会话迁移到Init状态的触发,指令所述下层BFD协议层向需要进行转发检测的邻居发送Sta字段标识Init状态的第一BFD Echo报文。
BFD会话状态迁移控制单元103,与下层BFD协议层300连接,用于根据回传的第一BFD Echo报文,指令下层BFD协议层300进行会话状态的迁移。
在图5所示实施例的基础上,本发明还提供了BFD会话建立装置的另一实施例,请结合图6:
该BFD会话状态迁移控制单元103可以包括BFD会话查找模块1031以及BFD会话状态迁移模块1032;该BFD会话查找模块1031与下层BFD协议层300连接,用于根据回传的第一BFD Echo报文中的MyDiscriminator字段,查找其所属的会话;该BFD会话状态迁移模块1032与BFD会话查找模块1031连接,用于根据所述回传的第一BFD Echo报文中的Sta字段,进行会话状态的迁移:如果Sta字段标识Down状态,则迁移该会话状态为Up状态,会话建立完成。
进一步的,BFD会话状态迁移控制单元103还包括:合法性检查模块1033,分别与下层BFD协议层300以及BFD会话查找模块1031连接,用于对回传的第一BFD Echo报文进行合法性检查,检查通过则触发BFD会话查找模块1031,检查未通过则指令下层BFD协议层300丢弃该回传的第一BFDEcho报文。
可以看出,通过上述实施例提供的BFD会话建立装置100,能够支持为上层应用建立BFD会话,特别是能够支持为单向上层应用建立BFD会话,不仅克服了现有技术中单向上层应用无法建立BFD会话的缺陷,而且简单易行。
为了支持会话建立后的双向转发检测,本发明的实施例还提供了一种基于上述BFD会话建立装置100的BFD会话检测装置400,分别与上层应用协议层200、下层BFD协议层300和BFD会话建立装置100连接,如图7所示,包括:
第二BFD回声报文指令发送单元401,根据BFD会话状态迁移控制单元103的会话建立完成指示,按照一定的周期发送第二BFD Echo报文;
超时定时器402,用于设置超时时限,该超时时限大于第二BFD Echo报文的发送周期;
检测控制模块403,分别与超时定时器402、下层BFD协议层300以及上层应用协议层200连接,用于在检测是否在超时时限内收到相应回传的第二BFD Echo报文,是则清零超时定时器402,重新进行超时统计,否则上报给上层应用协议层200进行故障处理并指令BFD会话状态迁移控制单元103迁移会话状态为Down状态。
本发明的实施例还提供了一种路由设备10,包括上层应用协议层200、下层BFD协议层300以及上述的BFD会话建立装置100,如图5和图6所示,这种路由设备10通过BFD Echo功能进行BFD会话的建立,解决了单向上层应用无法使用BFD控制报文建立BFD会话的问题。或者,包括上层应用协议层200、下层BFD协议层300、上述的BFD会话建立装置100以及上述的BFD会话检测装置400,如图7所示。
最后所应说明的是,以上实施例仅用以说明本发明的技术方案而非限制,尽管参照较佳实施例对本发明进行了详细说明,本领域的普通技术人员应当理解,可以对本发明的技术方案进行修改或者等同替换,而不脱离本发明技术方案的精神和范围。