多链路直连场景下保证BFD会话稳定性的方法、系统及装置
技术领域
本发明涉及通信技术领域,尤其涉及一种多链路直连场景下保证BFD会话稳定性的方法、系统及装置。
背景技术
为了减小设备故障对业务的影响、提高网络的可用性,设备需要能够尽快检测到与相邻设备间的通信故障,建立备用通道恢复通信,从而保证业务继续进行。
BFD(Bidirectional Forwarding Detection,双向转发检测)是一套全网统一的检测机制,提供了一个通用的、标准化的、介质无关、协议无关的快速故障检测机制,用于快速检测、监控网络中链路或者IP路由的转发连通状况。BFD可以为各上层协议,如路由协议、MPLS(Multiprotocol Label Switch,多协议标签交换)等统一地快速检测两台路由器间双向转发路径的故障。
BFD在两台路由器上建立会话,用来监测两台路由器间的双向转发路径,为上层协议服务。BFD本身并没有发现机制,而是靠被服务的上层协议通知其与谁建立会话,会话建立后如果在检测时间内没有收到对端的BFD协议报文则认为转发路径发生故障,通知被服务的上层协议进行相应的处理。
以OSPF(Open Shortest Path First,开放最短路径优先)协议上BFD建立流程为例,BFD建立过程如图1所示,包括以下步骤:
步骤101,OSPF协议通过自己的Hello机制发现邻居设备,并与该邻居设备建立OSPF连接;
步骤102,OSPF协议在建立新的邻居关系后,将邻居设备的参数及检测参数(包括目的地址和源地址等)都通告给本设备和邻居设备的BFD;
步骤103,BFD根据收到的参数进行计算,并建立邻居关系。
当网络出现故障时,以OSPF为例,BFD发生故障处理流程图如图2所示,包括以下步骤:
步骤201,BFD检测到链路或网络故障,由于BFD属于快速故障检测机制,目前支持BFD的设备大多数提供毫秒级检测。
步骤202,拆除BFD邻居会话。
步骤203,BFD通知本地OSPF协议进程,BFD邻居不可达。
步骤204,本地OSPF协议中止OSPF邻居关系。
步骤205,如果网络中存在备用路径,路由器将选择备用路径。
目前,当RouterA和RouterB之间存在多链路(包括:多端口聚合、等价路由)直连时,BFD协议报文只会选择一个物理端口发送BFD协议报文。
路由器A和路由器B之间通过聚合链路直连如图3所示,根据聚合分担算法选择聚合端口(P1~Pn)中的一个物理端口发送BFD协议报文。
路由器A和路由器B之间通过等价链路直连如图4所示:根据等价分担算法选择等价路由(P1~Pm)中的一个物理端口发送BFD协议报文。
等价路由同时存在聚合端口情况下如图5所示,P1~Pn组成聚合组1,Pm~Pm+n组成聚合组2;聚合组1和聚合组2形成等价路由:则先根据等价分担算法选择一条等价路由所在聚合链路,再在该聚合链路上根据聚合分担算法选择一个物理端口发送BFD协议报文。
在现有方案中,当发送BFD协议报文的端口故障时,由于聚合切换(或等价路由切换)本身速度比较慢(>50ms),而BFD最快可以提供毫秒级的检测,此时会发生BFD误检测到故障,导致上层协议发生不必要的切换。因此,目前在RouterA和RouterB之间存在多链路直连时,要求把BFD协议报文间隔时间设置为足够长,比如,对于多端口聚合,要求设置为100ms以上;对于等价路由,要求设置为500ms以上,因此,导致当RouterA或RouterB的转发引擎发生故障时,BFD要等待超过100ms或500ms以上才能检测到故障,延长了故障检测及网络收敛的时间。
发明内容
本发明提供了一种多链路直连场景下保证BFD会话稳定性的方法、系统及装置,保证在多链路网络环境下,部分端口或部分链路发生故障时,BFD协议不受影响,从而避免上层协议的振荡,降低对网络上业务流量的影响。
本发明提供了一种多链路直连场景下保证BFD会话稳定性的方法,应用于包括发送端设备和接收端设备的系统中,所述发送端设备和接收端设备之间通过至少两条直连链路通信,所述方法包括以下步骤:
所述发送端设备分别通过至少两条直连链路向所述接收端设备发送序列号相同的BFD协议报文,所述每个BFD协议报文中都携带序列号,所述序列号在当前会话中每发送一次报文后递增;
所述接收端设备接收所述BFD协议报文后,检测所述BFD协议报文中的序列号,将序列号相同的第一个报文进行处理,将序列号相同的后续报文丢弃。
其中,所述发送端设备分别通过至少两条直连链路向所述接收端设备发送序列号相同的BFD协议报文,具体包括:
所述发送端设备遍历发送端设备和接收端设备之间所有等价路由链路及聚合端口链路;
所述发送端设备通过所述所有链路向所述接收端设备发送BFD协议报文。
所述发送端设备分别通过至少两条直连链路向所述接收端设备发送BFD协议报文,具体包括:
所述发送端设备遍历发送端设备和接收端设备之间部分等价路由链路及聚合端口链路;
所述发送端设备通过所述部分链路向所述接收端设备发送序列号相同的BFD协议报文。
其中,检测所述BFD协议报文中的序列号,将序列号相同的第一个报文进行处理,将序列号相同的后续报文丢弃,具体包括:
所述接收端设备接收所述BFD协议报文,提取序列号;
判断所述序列号是否已经存在,如果不存在,则说明所述报文为当前会 话中序列号相同的BFD协议报文的第一个报文,进行记录处理;如果已存在,则说明所述报文为当前会话中序列号相同的后续BFD协议报文,进行丢弃。
还包括:
所述接收端设备在检测时间内没有收到发送端设备的至少一个BFD协议报文则认为BFD会话发生故障。
其中,所述BFD协议报文为Meticulous Keyed MD5或Meticulous KeyedSHA1认证类型。
其中,所述多条链路通信包括聚合链路、等价链路、或两者组合。
本发明提供了一种多链路直连场景下保证BFD会话的系统,包括发送端设备和接收端设备的系统中,所述发送端设备和接收端设备之间通过至少两条链路通信,
所述发送端设备,用于通过至少两条链路向所述接收端设备发送BFD协议报文,所述BFD协议报文中携带序列号,所述序列号在当前会话中每发送一次报文后递增;
所述接收端设备,用于接收所述BFD协议报文后,检测所述BFD协议报文中的序列号,将序列号相同的第一个报文进行处理,将序列号相同的后续报文丢弃。
本发明提供了一种网络设备,应用于包括发送端设备和接收端设备的系统中,所述发送端设备和接收端设备之间通过至少两条链路通信,包括:
复制模块,用于将BFD协议报文复制为至少两份;
发送模块,与所述复制模块连接,用于分别通过至少两条直连链路向所述接收端设备发送序列号相同的BFD协议报文,所述每个BFD协议报文中都携带序列号,所述序列号在当前会话中每发送一次报文后递增。
接收模块,用于接收所述BFD协议报文,提取序列号;
判断模块,与所述接收模块连接,用于判断所述序列号是否已经存在;
处理模块,与所述判断模块连接,用于所述序列号不存在时,确定所述报文为当前会话中序列号相同的BFD协议报文的第一个报文,进行记录处理;所述序列号已存在时,则确定所述报文为当前会话中序列号相同的后续BFD协议报文,进行丢弃。
其中,所述BFD协议报文为Meticulous Keyed MD5或Meticulous KeyedSHA1认证类型。
与现有技术相比,本发明具有以下优点:
本发明中,可以实现在多链路直连场景下部分端口或链路故障时,BFD会话以及上层应用协议的稳定性,从而保证业务流量的平稳运行;同时当多链路全部故障时,BFD会话能够快速检测到故障并通知上层应用协议,实现协议的快速切换,保证业务流量在最短时间内恢复。
附图说明
图1是现有技术中以OSPF为例的BFD建立流程图;
图2是现有技术中以OSPF为例BFD发生故障处理流程图;
图3是现有技术中路由器A和路由器B之间通过聚合链路直连示意图;
图4是现有技术中路由器A和路由器B之间通过等价链路直连示意图;
图5是现有技术中等价路由同时存在聚合端口示意图;
图6是本发明中一种多链路直连场景下保证BFD会话的方法流程图;
图7是本发明中BFD协议报文格式示意图;
图8是本发明中认证头格式示意图;
图9是本发明中MD5认证格式示意图;
图10是本发明中SHA1认证格式示意图;
图11是本发明中BFD协议报文全链路发送示意图;
图12是本发明中冗余BFD协议报文丢弃示意图;
图13是本发明中一种网络设备结构图。
具体实施方式
本发明的核心思路是:为了保证在多链路直连的环境下,BFD协议报文不受端口故障或链路故障的影响,利用BFD协议报文序列号标识,将BFD协议报文在至少两条直连链路发送,在接收端只接收有效BFD协议报文,将冗余BFD协议报文丢弃。可以实现在多链路直连场景下部分端口或链路故障时,BFD会话以及上层应用协议的稳定性,从而保证业务流量的平稳运行。
本发明提供了一种多链路直连场景下保证BFD会话稳定性的方法,应用于包括发送端设备和接收端设备的系统中,所述发送端设备和接收端设备之间通过至少两条直连链路通信,所述方法如图6所示,包括以下步骤:
步骤601,所述发送端设备分别通过至少两条直连链路向所述接收端设备发送序列号相同的BFD协议报文,所述每个BFD协议报文中都携带序列号,所述序列号在当前会话中每发送一次报文后递增(例如,每次递增1,当然也可以以其他等差数列递增);具体包括:所述发送端设备将所述BFD协议报文复制为与所有链路数目相同的份数,所述发送端设备分别通过所述直连链路将所述BFD协议报文向所述接收端设备发送。对于全链路发送,需要遍历设备间所有链路,将BFD协议报文复制为所有链路数,分别通过所有直连链路发送;对于部分链路发送,首先选择需要发送BFD协议报文的链路,然后根据链路数进行BFD协议报文复制,并通过这些选中链路发送BFD协议报文。
步骤602,所述接收端设备接收所述BFD协议报文后,检测所述BFD协议报文中的序列号,将序列号相同的第一个报文进行处理,将序列号相同的后续报文丢弃。具体包括:所述接收端设备接收所述BFD协议报文,提取序列号;判断所述序列号是否存在,如果不存在,则说明所述BFD协议报文为当前会话中序列号相同的BFD协议报文的第一个报文,进行记录处理;如果已存在,则说明所述BFD协议报文为当前会话中序列号相同的BFD协议报文的后续报文,进行丢弃。由于接收端设备可以通过多条链路接收相同的BFD协议报文,即使有些链路出现故障不能通信,只要有一条BFD协议报文能够到达,则可以保持BFD的稳定性。但是如果所有链路都出现故障,即接收端 设备在检测时间内没有收到发送端设备的至少一个BFD协议报文,则发送端设备和接收端设备之间出现故障。
本发明中利用的BFD协议报文格式如图7所示,包含一个强制部分与一个可选认证部分。其中,认证部分格式与认证类型有关,如图8所示。
BFD协议报文的字段不做详细描述,请参考附件BFD相关Draft。这里只介绍与本发明相关的字段:
Authentication Present,如果设置为1,则表示BFD协议报文包含认证字段,会话是被认证的;
Auth Type:当A比特置1时,该域生效,表示BFD协议报文使用的认证类型:
0-Reserved
1-Simple Password
2-Keyed MD5
3-Meticulous Keyed MD5
4-Keyed SHA1
5-Meticulous Keyed SHA1
6-255-Reserved for future use
Auth Len:认证字段的长度,包括认证类型与认证长度字段,单位为字节;
Authentication data:内容与具体的认证类型相关:
MD5认证
当A比特置1,Auth Type为2(Keyed MD5)或者3(Meticulous Keyed MD5)时,认证格式如图9所示:
Auth Type:2:Keyed MD5;3:Meticulous Keyed MD5;
Auth Len:认证部分的长度,单位字节,固定为24;
Auth Key ID:本BFD报文使用的key;
Reserved:发送时必须为0,接收时忽略该位。
Sequence Number:用于表示当前包的序列号。对于Keyed MD5,这个值是随机(occasionally)增加的;对于Meticulous Keyed MD5,当前会话每发送一个包,这个值加一次,以防止重复攻击。
Auth Key/Checksum:携带当前包的16字节MD5校验和。
SHA1认证
当A比特置1,Auth Type为4(Keyed SHA1)或者5(Meticulous KeyedSHA1)时,认证格式如图10所示:
Auth Type:4:Keyed SHA1;5:Meticulous Keyed SHA1
Auth Len:认证部分的长度,单位字节,固定为28
Auth Key ID:本BFD报文使用的key;
Reserved:发送时必须为0,接收时忽略该位。
Sequence Number:当前包的序列号。对于Keyed SHA1,这个值是随机(occasionally)增加的;对于Meticulous Keyed SHA1,当前会话每发送一个包,该值加一次,以防止重复攻击。
Auth Key/Checksum:携带当前包的20字节SHA1校验和。
因此,利用BFD协议支持的认证功能,使用Meticulous Keyed MD5或Meticulous Keyed SHA1认证类型,可以完成BFD会话序列号的标识。
本发明提供了一种多链路直连场景下保证BFD会话的系统,包括发送端设备和接收端设备的系统中,所述发送端设备和接收端设备之间通过至少两条直连链路通信,
所述发送端设备,用于分别通过至少两条直连链路向所述接收端设备发送序列号相同的BFD协议报文,所述每个BFD协议报文中都携带序列号,所述序列号在当前会话中每发送一个包后递增;
所述接收端设备,用于接收所述BFD协议报文后,检测所述BFD协议报文中的序列号,将序列号相同的第一个包进行处理,将序列号相同的后续包丢弃。
本发明中BFD协议报文全链路发送示意图如图11所示;发送端设备与接收端设备之间包括n个等价路由(等价路由1到等价路由n),每个等价路由中分别包括n个聚合端口(聚合端口1到聚合端口n)。可以得知两个设备间具有n*n条链路。全链路发送就是发送端设备将BFD协议报文复制到n*n份,分别通过这些链路发送到接收端设备,这些BFD协议报文的序列号相同。
冗余BFD协议报文丢弃示意图如图12所示。接收端设备通过n*n条链路接收来自发送端设备的BFD协议报文,通过识别BFD协议报文的序列号,将具有相同序列号的第一个BFD协议报文记录处理,将具有相同序列号的后续BFD协议报文丢弃,例如,来自等价路由1中的聚合端口1的链路的BFD协议报文为第一个到达接收端设备,将其记录接收,对于来自其他链路的BFD协议报文丢弃。
本发明提供了一种网络设备,如图13所示,应用于包括发送端设备和接收端设备的系统中,所述发送端设备和接收端设备之间通过至少两条链路通信,当所述网络设备为发送端设备时,包括:
复制模块1310,用于将所述BFD协议报文复制为至少两份;
发送模块1320,与复制模块1110连接,用于分别通过至少两条直连链路向所述接收端设备发送序列号相同的BFD协议报文,所述每个BFD协议报文中都携带序列号,所述序列号在当前会话中每发送一次报文后递增。
当所述网络设备作为接收端时还包括:
接收模块1330,用于接收所述BFD协议报文,提取序列号;
判断模块1340,与接收模块1330连接,用于判断所述序列号是否存在;
处理模块1350,与判断模块1340,用于所述序列号不存在时,确定所述包为当前会话中序列号相同的BFD协议报文的第一个报文,进行记录处理;所述序列号已存在时,则确定所述报文为当前会话中序列号相同的BFD协议报文的后续报文,进行丢弃。
其中,所述BFD协议报文为Meticulous Keyed MD5或Meticulous KeyedSHA1认证类型。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到本发 明可以通过硬件实现,也可以借助软件加必要的通用硬件平台的方式来实现。基于这样的理解,本发明的技术方案可以以软件产品的形式体现出来,该软件产品可以存储在一个非易失性存储介质(可以是CD-ROM,U盘,移动硬盘等)中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述的方法。
本领域技术人员可以理解附图只是一个优选实施例的示意图,附图中的模块或流程并不一定是实施本发明所必须的。
本领域技术人员可以理解实施例中的装置中的模块可以按照实施例描述进行分布于实施例的装置中,也可以进行相应变化位于不同于本实施例的一个或多个装置中。上述实施例的模块可以合并为一个模块,也可以进一步拆分成多个子模块。
上述本发明序号仅仅为了描述,不代表实施例的优劣。
以上公开的仅为本发明的几个具体实施例,但是,本发明并非局限于此,任何本领域的技术人员能思之的变化都应落入本发明的保护范围。