发明内容
本发明提供了一种分布式双向转发检测的方法,用以解决现有BFD控制报文在会话建立期间或建立完成后需要透传大量的报文到主控卡问题。
为实现上述目的,本发明提供一种分布式双向转发检测方法,包括以下步骤:
主控卡接收到上层应用协议建立会话的通知消息后,通知本端某一线卡建立会话;
所述线卡运行BFD协议,完成BFD会话的建立和维护;当检测到出现故障时,由该建立会话的线卡删除会话。
所述该建立会话的线卡删除会话,包括如下步骤:
a、线卡检测到故障后向主控卡发送故障消息;
b、主控卡收到BFD故障消息后,将该消息通知上层应用协议;
c、上层应用协议接收到BFD故障消息后,向主控卡发送会话删除消息;
d、主控卡接收会话删除消息后,指定该建立会话的线卡删除会话。
具体的,所述通知消息包括虚拟路由转发参数、本端IP地址、对端IP地址、接口信息等参数信息。主控卡根据该接口信息获取线卡信息,根据该线卡信息唯一确定具有会话控制权的线卡。
具体的,在接口信息未分布的系统中,所述主控卡根据所述接口信息获取的线卡信息为报文发送的槽位号、发送和接收报文的端口号。
具体的,在接口信息已分布的系统中,所述主控卡根据所述接口信息获取的线卡信息为报文发送的槽位号。
本发明还提供了一种分布式双向转发检测设备,包括一个主控卡和至少一个线卡;
所述主控卡包括第一通知模块,用于接收上层应用协议会话建立/删除消息并将这一消息通告到线卡BFD协议,还用于接收线卡BFD协议故障消息并将这一消息通告到上层应用协议;
所述线卡包括第二通知模块和BFD会话模块;所述第二通知模块,用于接收主控卡的会话建立/删除消息以及检测到故障发生时向主控卡发送故障消息;所述BFD会话模块用于维护BFD会话。
进一步的,所述主控卡还包括上层应用协议模块,与所述第一通知模块连接,用于通知所述第一通知模块建立/删除BFD会话。
进一步的,所述BFD会话模块包括报文收发模块、定时器模块、状态控制模块;
所述报文收发模块,用于BFD控制报文的接收和发送;
所述定时器模块,用于路径定时检测和报文定时发送;
所述状态控制模块,用于BFD状态的运行和维护。
由上述技术方案可知,本发明所有的BFD控制报文均无需透传到主控卡,具有以下有益的效果:1)由于所有的BFD控制报文的生成、收发均在线卡上进行,减少了卡间通信及主控卡的负担,维护了系统的稳定;2)由于BFD状态机的运行和维护只在线卡上进行,主控卡上只有通知模块,实现起来较为简单,同时节约了系统资源。
具体实施方式
为了使本发明的目的、技术方案和特点更容易被理解和接受,下面结合附图和具体的实施例对本发明作进一步详细描述。
本发明实现一种分布式的双向转发检测的方法,在提高检测效率的同时减少主控卡的负担,保持系统的稳定。在本发明实施例中,主控卡接收到上层应用协议的会话建立消息后,将通知某一线卡建立相应的会话;如果多个不同的上层应用协议需要检测同样的路径时,线卡只会被通知一次,会话只会建立一个。线卡接收到会话建立消息的指令后,建立相应的BFD会话,并负责BFD控制报文的构建和收发,以及BFD会话状态的控制等。当线卡上BFD会话检测到路径出现故障时,线卡将发送故障消息到主控卡上,主控卡将故障消息通知到各个上层应用协议,各个上层应用协议执行后续删除会话等操作。在本发明中,根据不同的分布式系统可以有多种不同的分布式BFD方法的具体实施方案,举例如下:
实施例1
在接口信息未分布的系统中实现分布式BFD方法的实施例,如图1所示,包括如下步骤:
步骤101、上层应用协议向主控卡发送建立会话的通知消息,用于通知BFD协议建立BFD会话,该通知消息中包括VRF(virtual routing forward,虚拟路由转发)参数、本端IP地址、对端IP地址、接口信息等参数信息。
上层应用协议向主控卡发送建立会话的通知消息,可以通过套接字的形式发送和接收某一具体消息实现,也可以是通过共享内存的方式实现,属于现有技术方案。
步骤102、主控卡接收到上层应用协议建立会话的通知消息,根据通知消息中的参数信息(VRF参数、本端IP地址、对端IP地址、接口信息)查找是否存在对应的会话,如果存在则结束,如果不存在,主控卡则执行步骤303。
步骤103、主控卡根据建立会话的通知消息中的接口信息获取线卡信息,根据对端IP地址获取BFD控制报文的链路信息。本步骤中,线卡信息包括报文发送的槽位号、发送和接收报文的端口号等,从该线卡信息中可以唯一确定具有会话建立和BFD会话控制权的线卡。另外,根据通知消息中的对端IP地址获取BFD控制报文的链路信息;例如,在以太网设备中需要获取MAC(Media Access Control,介质访问控制)地址,这包括根据本端IP地址获取本端的MAC地址,根据对端IP地址获取对端的MAC地址等。
步骤104、主控卡判断能否完整获取BFD会话所需的线卡信息以及控制报文链路信息,如果不能则结束,如果能则执行步骤105。
步骤105、主控卡指定线卡信息中报文发送的槽位号对应的线卡为具有会话控制权的线卡,并将建立会话的通知消息和线卡信息发送到该指定的线卡。
步骤106、该指定线卡接收到建立会话的通知消息后,建立相应的BFD会话,构建BFD控制报文,维护BFD会话。所述BFD会话是根据建立会话的通知消息中的参数信息进行建立,BFD控制报文是根据建立会话的通知消息和线卡信息构建,构建的BFD控制消息包括BFD消息体、UDP头部、IP头部、链路层头部。具体指定线卡维护BFD会话的实现方式又进一步包括:
(1)线卡启动BFD控制报文的发送定时器,此时由于会话处于Down状态,发送周期为秒级,发送状态字段是Down状态的BFD控制报文。
(2)如果线卡接收到对端设备发送的状态字段是Down的BFD控制报文,则控制BFD会话状态迁移进入Init状态,如果接收到状态字段是Init的BFD控制报文则控制BFD会话状态迁移进入Up状态,本步骤需要启动检测定时器。需要说明的是,如果接收到BFD控制报文时BFD会话尚未建立,则直接丢弃该报文。
步骤107、线卡控制BFD会话状态进入Up状态后,设定定时器检测BFD会话状态。
步骤108、如果检测定时器超时或BFD会话状态迁移到Down状态,线卡BFD协议则向主控卡发送故障消息。超时可能是由于检测周期内未收到对端设备发送的BFD控制报文或收到错误的BFD控制报文丢弃导致。在上述过程中,所有的BFD控制报文均无需透传到主控卡,直接在线卡上处理完毕。
步骤109、主控卡接收到BFD故障消息后,将该消息通知上层应用协议。
步骤110、上层应用协议接收到BFD故障消息后,向主控卡发送会话删除消息,同时上层应用协议也会根据自身的需要,做路径出现故障时的后续操作。
步骤111、主控卡接收会话删除消息后,指令建立会话的线卡删除会话。
步骤112、建立会话的线卡接收到该消息后删除该会话。
实施例2
接口信息已分布的系统中实现分布式BFD方法的实施例子,如图2所示。本实施例适合接口信息已分布的系统,由于接口信息已分布在各个不同的线卡上,故只需主控卡根据上层应用协议的接口信息将通知消息透传给某一指定线卡,线卡完成具体的BFD会话的建立即可,具体包括如下的步骤:
步骤201、上层应用协议向主控卡发送建立会话的通知消息,用于通知BFD协议建立BFD会话,该通知消息中包括VRF(virtual routing forward,虚拟路由转发)参数、本端IP地址、对端IP地址、接口信息等参数信息。
上层应用协议向主控卡发送建立会话的通知消息,可以通过套接字的形式发送和接收某一具体消息实现,也可以是通过共享内存的方式实现,此步骤的实现是现有技术方案。
步骤202、主控卡接收到建立会话的通知消息后,根据通知消息中的参数信息查询是否存在相应的会话。如果存在对应的会话,则结束;否则,执行步骤203。本步骤中的参数信息同步骤102,包括VRF参数、本端IP地址、对端IP地址、接口信息等。
步骤203、主控卡根据建立会话的通知消息中的接口信息获取线卡信息,对于本实施例而言,只需获取报文发送的槽位号即可,不需要获取线卡其他方面的信息;主控卡根据报文发送的的槽位号,指定和该报文发送的槽位号对应的线卡为具有BFD会话控制权的线卡,并发送建立会话的通知消息到该线卡。
步骤204、线卡块接收到会话建立消息后,完成相应的会话建立。该线卡完成BFD控制报文的构建和收发,以及路径的检测,其中BFD控制报文构建所需要的信息直接从本线卡上获取即可。此时构建的BFD控制报文包括:BFD控制消息体、UDP头部、IP头部。线卡将BFD控制报文从指定的接口发送出去,所述指定的接口信息是从主控卡通知的会话建立消息中获取,通常,这一接口信息可以是主控卡通知到线卡的接口索引或接口名称,也可以是线卡直接根据BFD会话建立消息中的IP地址获取。
步骤205、线卡接收BFD控制报文,控制BFD会话状态的迁移。线卡设定定时器检测BFD会话状态。
步骤206、如果线卡在检测周期内未接收到上述会话的BFD控制报文,定时器模块检测超时或BFD会话状态迁移到Down状态,则执行步骤207。
步骤207、线卡发送BFD故障消息到主控卡。
步骤208、主控卡接收到故障消息后,透传所述故障消息到上层应用协议。
步骤209、层应用协议接收到BFD故障消息后,向主控卡发送会话删除消息,同时上层应用协议也会根据自身的需要,做路径出现故障时的后续操作。后续过程与实施例1同样的删除操作,本实施例不再赘述。
显然,在本发明中的所有BFD控制报文的收发只在线卡上进行,因而可以快速高效的检测,不会影响主控卡上控制平面的稳定。在双主控的设备中如果设备由于人为原因或故障原因发生主从切换事件时,其数据业务保持不中断,目前提出了了优雅重启(graceful restart,GR)的实现方案。由于检测只在线卡上进行,不会影响BFD控制报文的收发,不会引起线卡上BFD状态的切换,因而也可以保障GR过程的成功。
本发明还提出了一种分布式设备,如图3所示,为一实施例的系统框图,包括一主控卡1和多个线卡2,主控卡1属于设备中的控制部分,线卡2主要运行设备中转发部分,主控卡1和线卡2之间建立了卡间通道,用于主控卡1和线卡2之间消息的传输。所述主控卡1包括第一通知模块11,接口板2包括与第一通知模块连接的第二通知模块21和BFD会话模块22。
所述第一通知模块11用于接收会话建立/删除消息,并通知某一线卡建立相应的会话;同时,负责将线卡的故障消息通知给各个上层应用协议。第一通知模块11接收到的BFD事件消息由第二通知模块21发送;同理,第二通知模块21接收到的消息也是第一通知模块11发送。
所述第二通知模块21,用于接收第一通知模块11的会话建立/删除消息以及在检测到故障发生时向主控卡发送故障消息。第二通知模块21负责所在线卡上BFD的状态的通告,通告的事件主要有Down状态到Up状态的切换以及Up状态到Down状态的切换,通告的对象是主控卡的第一通知模块11。
所述BFD会话模块22用于维护BFD会话,负责BFD控制报文的构建和收发,即控制BFD会话状态的迁移以及检测路径故障,以及BFD会话的建立/删除。
当线卡上BFD会话模块22检测到路径出现故障时,通过第一通知模块21发送故障消息到主控卡上的第一通知模块11,主控卡第一通知模块11将故障消息通知到各个上层应用协议,各个上层应用协议执行后续删除会话等操作。
由于所有的BFD控制报文的生成、收发均在线卡上进行,减少了主控卡和卡间通信及主控卡的负担,维护了设备的稳定;且主控卡上1只有第一通知模块11,实现起来较为简单,同时节约了系统资源。
如图4所示,为一较佳实施例的设备框图,以包括一个主控卡1和一个线卡2为例:
所述主控卡1除了包括第一通知模块11以外,还包括和第一通知模块连接的上层应用协议模块12,上层应用协议模块12负责发送BFD会话建立/删除消息以及响应第一通知模块11的故障消息。
所述线卡2中的BFD会话模块22,进一步可以分为:报文收发模块221、定时器模块222、状态控制模块223,其中:
报文收发模块221,负责BFD控制报文的收发,其中发送的BFD控制报文是由该模块构建,构建的报文包括BFD消息体、UDP头部、IP头部甚至链路头部,构建完控制报文后发送到对端设备。接收报文的过程,当接收到BFD控制报文后,需查找是否有对应的会话,如果没有,则丢弃,如果存在则需要重置检测定时器。
定时器模块222,主要有发送定时器和检测定时器,分别负责BFD控制报文定时发送和报文超时检测。一般来说,在BFD状态是Down状态时,报文发送周期在1秒以上,当接收到对端发送过来的报文后,根据协商后的时间周期定时报文发送,同时启动检测定时器,检测定时器的检测时间也是由两端协商的参数确定。关于定时器的时间参数确定方式,是现有的技术方案。
状态控制模块223,负责响应外部事件并进行BFD会话状态的迁移,外部事件主要有接收到对端会话发送的BFD控制报文、检测定时器检测超时、手动关闭会话等。BFD会话状态的切换主要有:Down状态到Init状态,Init状态到Up状态以及Up状态到Down状态。关于状态机的驱动实现方式,是现有的技术标准,不再赘述。
需要说明的是,以上实施例只是本发明的特定实施例。显然,可以对本实施例进行修改、等同替换等其他的一些变化,例如线卡上BFD控制报文的收发可以通过其他的一些方式实现。因此,此特定实施例的描述不作为限定本发明的保护范围。