一种检测报文的发送方法及装置与流程

文档序号:11878192阅读:482来源:国知局
一种检测报文的发送方法及装置与流程

本发明涉及通信技术领域,特别涉及一种检测报文的发送方法及装置。



背景技术:

为了保护关键应用,网络中会设计有一定的冗余备份链路,网络发生故障时,就要求网络设备能够快速检测出故障,并将流量切换至备份链路,以加快网络收敛速度。目前,上层协议通常采用BFD(Bidirectional Forwarding Detection,双向转发检测)机制检测链路故障,其检测时间在毫秒级。BFD是一种通用的、标准化的、介质无关和协议无关的快速故障检测机制。

为了实现快速检测,尽量减少报文发送流程中的时间消耗,现有技术中,BFD模块通常依据将要发送检测报文的目标链路的信息,提前封装检测报文至链路层,然后在检测报文的发送时刻到来时,调用底层的发送接口通过目标链路直接发送检测报文,以达到快速发送的目的。

但是,对于两个网络设备之间存在至少两条等价链路的情况,在检测报文的发送时刻到来之前,如果目标链路发生故障,由于检测报文是依据目标链路的接口的信息封装的,所以网络设备还是会将检测报文通过目标链路发送至目的地址。但是由于该目标链路发生故障,对端将无法接收到该检测报文,从而导致BFD会话中断。而实际上,这两个网络设备之间的链路已经发生等价链路切换,即通过另一条等价链路发送报文,但由于BFD会话已经中断,因此无法继续检测这两个网络设备之间的链路。

对于两个网络设备之间存在至少两条链路的情况,在检测报文的发送时刻到来之前,如果目标链路由最优链路变为非最优链路,网络设备之间的另一条链路从非最优链路变为最优链路,则业务报文不通过目标链路发送。由于检测报文已经封装好了,因此它还是会通过目标链路发送。也就是说,此时检测的链路并不是业务报文实际走的链路。

例如,如图1所示,路由器A与C之间存在两条等价链路L1和L2,A创建的BFD会话采用L1的接口a发送BFD报文,预先将BFD报文封装好。在发送时刻到来之前,当L1发生故障时,AC之间的检测报文接收超时,导致BFD会话中断。同时,A检测到L1发生故障后,启用L2。但是,由于A与C之间的BFD会话已经中断了,因此无法对L2实施检测。

也就是说,当网络设备之间的链路发生切换时,无法继续检测当前启用的链路,链路状态检测的稳定性和准确性不高。



技术实现要素:

本发明实施例的目的在于提供了一种检测报文的发送方法及装置,当链路发生切换时,能够继续检测当前启用的链路,提高链路状态检测的稳定性和准确性。

为了达到上述目的,本申请公开了一种检测报文的发送方法,第一检测报文的第一封装报文已经根据第一链路的第一接口的信息预先封装好;所述方法包括:

在报文发送时机到来之前,当所述第一链路满足预设条件时,确定到达所述第一检测报文的目的地址的第二链路;

根据所述第二链路的第二接口的信息,对所述第一检测报文重新封装,得到第二封装报文;

在满足报文发送条件时,通过所述第二链路发送所述第二封装报文。

为了达到上述目的,本申请公开了一种检测报文的发送装置,第一检测报文的第一封装报文已经根据第一链路的第一接口的信息预先封装好;所述装置包括:

确定模块,用于在报文发送时机到来之前,当所述第一链路满足预设条件时,确定到达所述第一检测报文的目的地址的第二链路;

封装模块,用于根据所述第二链路的第二接口的信息,对所述第一检测报文重新封装,得到第二封装报文;

发送模块,用于在满足报文发送条件时,通过所述第二链路发送所述第二封装报文。

由上述技术方案可见,本发明实施例中,第一检测报文的第一封装报文已经根据第一链路的第一接口的信息预先封装好,在报文发送时机到来之前,当第一链路满足预设条件时,确定到达第一检测报文的目的地址的第二链路,根据第二链路的第二接口的信息对第一检测报文重新封装,得到第二封装报文。在满足报文发送条件时,通过第二链路发送第二封装报文。也就是说,当第一链路满足预设条件时,网络设备之间的链路会从第一链路切换至第二链路。因此,应用本发明实施例,当链路发生切换时,能够继续检测当前切换后的链路,提高链路状态检测的稳定性和准确性。

附图说明

为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单的介绍。显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1为网络设备之间链路连接的一种原理示意图;

图2为本发明实施例提供的检测报文的发送方法的一种流程示意图;

图3为本发明实施例提供的检测报文的发送方法的另一种流程示意图;

图4为本发明实施例提供的检测报文的发送方法的再一种流程示意图;

图5为本发明实施例提供的检测报文的发送装置的一种结构示意图;

图6为本发明实施例提供的检测报文的发送装置的另一种结构示意图;

图7为本发明实施例提供的检测报文的发送装置的再一种结构示意图。

具体实施方式

下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整的描述。显然,所描述的实施例仅仅是本发明的一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本发明保护的范围。

本发明实施例提供了一种检测报文的发送方法及装置,当链路发生切换时,能够继续检测当前启用的链路,提高链路状态检测的稳定性和准确性。本发明实施例可以应用于但不限于网络设备,其中,网络设备可以包括交换机、路由器等。

下面通过具体实施例,对本申请进行详细说明。

图2为本发明实施例提供的检测报文的发送方法的一种流程示意图,第一检测报文的第一封装报文已经根据第一链路的第一接口的信息预先封装好。该方法包括如下步骤:

步骤S201:在报文发送时机到来之前,当第一链路满足预设条件时,确定到达第一检测报文的目的地址的第二链路。

具体的,本实施例可以由网络设备来执行。网络设备可以包括检测模块、接口管理模块和路由管理模块。更具体的,本实施例可以由检测模块执行。

需要说明的是,第一链路满足预设条件可以包括多种情况,例如,第一链路的第一接口发生故障停用,或由于链路状态发生变化,第一链路不再是最优链路等都可能导致第一链路满足预设条件。也就是说,不管第一链路是发生故障,还是链路状态发生变化,都将导致网络设备之间所启用的链路发生切换。

具体的,检测模块可以预先向接口管理模块注册关心的接口down事件。当检测模块关心的接口的状态由up变为down时,接口管理模块会通知检测模块down接口的索引。

检测模块也可以预先向路由管理模块注册关心的链路,当该链路的从最优链路变为非最优链路时,路由管理模块向检测模块发送通知,这样,检测模块就能够确定哪条链路从最优链路变为非最优链路。

具体的,上述第一检测报文可以是BFD检测报文,本申请并不对此进行限定。第一接口的信息可以是下一跳的MAC(Media Access Control,媒体访问控制)地址。

在实际应用中,为了实现快速发送检测报文,一般采用提前封装报文的方式,将检测报文封装至链路层,当报文发送时机到来时,直接调用底层的发送接口发送封装好的报文。由于报文发送时少了添加用户数据包协议UDP、IP、以太等链路信息的过程,因此可以达到快速发包的效果。

也就是说,当第一封装报文封装好之后,在报文发送时机到来之前,第一链路不满足预设条件时,直接通过第一链路发送第一封装报文。在下一个报文发送时机到来之前,如果第一链路仍然不满足预设条件,仍旧直接通过第一链路发送第一封装报文。

其中,报文发送时机可以是发送周期倒计时到来时。例如,发送周期为10ms,即每间隔一个10ms,向外发送一次封装好的报文。

图1为网络设备之间链路连接的一种原理示意图。其中,路由器A为作为执行主体的当前网络设备,C为对端网络设备。A与C之间有两条等价链路L1—L3和L2—L3。假设,A与C之间的第一链路是L1—L3,当第一链路发生故障时,A与C之间的链路将切换至L2—L3。

在本实施例中,确定到达第一检测报文的目的地址的第二链路可以包括:首先根据第一检测报文获取第一检测报文的目的地址,然后根据该目的地址,确定到达该目的地址的第二链路。

其中,第一检测报文的目的地址,可以是根据第一检测报文对应的会话获取的,也可以是根据第一检测报文的第一封装报文中的目的地址获取的。

在获取目的地址之后,根据该目的地址,可以从转发表FIB(Forwarding Information Base,也可以称为转发信息库)中确定作为执行主体的当前网络设备与对端网络设备之间的链路。这些链路可能是一条,也可能是多条。根据预设规则,从确定的链路中选择一条作为第二链路。例如,预设规则可以是跳数最少或开销最小等。

需要说明的是,转发表中保存了当前网络设备到达各个目的地址的所有最优链路的下一跳网络设备的MAC地址。

步骤S202:根据第二链路的第二接口的信息,对第一检测报文重新封装,得到第二封装报文。

具体的,网络设备可以根据目的地址、第二接口的信息将第一检测报文重新封装,得到第二封装报文。其中,第二封装报文是包括了链路层头在内的完整报文,当满足报文发送条件时,调用相应的驱动接口将第二封装报文发送出去即可。

步骤S203:在满足报文发送条件时,通过第二链路发送第二封装报文。

在实际应用中,当检测模块将第二封装报文封装好之后,检测模块还要负责将第二封装报文周期性向外发送,即在发送周期倒计时结束时向外发送报文。

在发送周期倒计时结束,并且没有接收到接口管理模块发送的接口down事件或路由管理模块发送的链路状态变化事件时,检测模块认为满足报文发送条件,这时通过第二链路发送第二封装报文。如果在发送周期倒计时结束之前,检测模块接收到接口管理模块发送的接口down事件或路由管理模块发送的链路状态变化事件时,则认为不满足报文发送条件,这时说明第二链路不能用于发送报文,也就是无需再通过第二链路发送第二封装报文。

具体的,为保证两个网络设备之间链路状态检测的准确性,在本申请的一种实现方式中,可以根据第一检测报文的目的地址,确定达到目的地址的第三链路,然后类似上述过程,根据第三链路的信息,对第一检测报文再次进行重新封装,得到第三封装报文,在满足报文发送条件时,通过第三链路发送上述第三封装报文。

由上述内容可知,本实施例中,第一检测报文的第一封装报文已经根据第一链路的第一接口的信息预先封装好,在报文发送时机到来之前,当第一链路满足预设条件时,确定到达第一检测报文的目的地址的第二链路,根据第二链路的第二接口的信息对第一检测报文重新封装,得到第二封装报文。在满足报文发送条件时,通过第二链路发送第二封装报文。

也就是说,当第一链路满足预设条件时,网络设备之间的链路会从第一链路切换至第二链路,此时,根据第二链路的第二接口信息对第一检测报文重新封装得到第二封装报文,当满足报文发送条件时,通过第二链路发送第二封装报文。而现有技术中,当第一链路满足预设条件时,还是会将第一封装报文通过第一链路发送至目的地,但是由于当前网络设备之间的链路已经从第一链路切换至第二链路,故不能准确检测第二链路的状态。因此,应用本实施例,当链路发生切换时,能够继续检测当前切换后的链路,提高链路状态检测的稳定性和准确性。

在图2所示实施例中,由于第一链路满足预设条件可能是由多种情况造成的,例如,第一链路的接口状态从启用状态变为停用状态,或者,第一链路从最优链路变为非最优链路。因此,根据造成第一链路满足预设条件的原因不同,可以对图2所示实施例进行不同的改进。

在本申请的另一实施例中,当第一链路的状态变化是由接口状态变化造成的时,图2所示实施例的步骤S201,即当所述第一链路满足预设条件时,确定到达所述第一检测报文的目的地址的第二链路可以按照图3所示流程示意图进行,具体包括:

步骤S201A:当检测到所述第一接口为停用状态时,判定所述第一链路满足预设条件。

其中,第一接口可以理解为网络设备上第一链路对应的接口。例如,在图1中,链路L1—L3对应的接口为a。

当本发明实施例的执行主体是网络设备中的检测模块时,作为本实施例的一种实施方式,步骤S201A具体可以包括:

步骤1:接收接口管理模块发送的第一接口为停用状态的第一通知。

其中,第一通知携带处于停用状态的接口的索引。

步骤2:根据第一通知,判定所述第一链路满足预设条件。

步骤S201B:根据已存储的接口与会话的对应关系,确定第一接口对应的第一会话,根据第一会话,确定第一检测报文的目的地址。

具体的,网络设备中预先存储有接口与会话的对应关系。其中,会话可以由会话的本地标识符(Local Discriminator,LD)表示,每个会话都分配有唯一能标识该会话的LD。

步骤S201C:获取所述目的地址对应的所有转发表项。

具体的,从存储的转发表FIB中获取目的地址对应的所有转发表项。

步骤S201D:从接口不为第一接口的转发表项对应的链路中,选择第二链路。

需要说明的是,由于处于停用状态的第一接口对应的转发表项还存在于FIB中,因此,在选择第二链路时,应排除第一接口对应的第一链路。第一链路和第二链路可以理解为到达目的地址的等价链路。

具体的,接口不为第一接口的转发表项可能不止一个,其对应的链路也可能不止一个,在从这些链路中选择第二链路时,可以随机选取,也可以根据预设规则选取。预设规则可以是跳数最少或链路开销最小等。

在图3所示实施例中,还可以包括:保存所述第二接口与所述第一会话的对应关系。这样,当第二链路的第二接口处于down状态时,可以根据链路与会话的对应关系确定第一会话。

具体的,还可以将第一接口与第一会话的对应关系更新为第二接口与第一会话的对应关系。

在本申请的另一实施例中,当第一链路满足预设条件是由其从最优链路变为非最优链路造成的时,图2所示实施例的步骤S201,即当所述第一链路满足预设条件时,确定到达所述第一检测报文的目的地址的第二链路可以按照图4所示流程示意图进行,具体包括:

步骤S201E:当检测到所述第一链路从最优链路变为非最优链路时,从转发表中删除所述第一链路对应的转发表项,并判定所述第一链路满足预设条件。

在实际应用中,网络设备可以包括检测模块、接口管理模块和路由管理模块(RIB模块)(Routing Information Base,路由表)。

当链路状态发生变化时,网络设备中的路由管理模块可以发现链路状态变化,并重新优选出最优链路。检测模块可以预先向路由管理模块注册自身关心的达到目的地址的链路,以及该链路对应的会话的会话标识LD。当路由管理模块发现链路状态变化时,向检测模块发送通知,这样,检测模块就能够检测到第一链路从最优链路变为非最优链路。

当本发明实施例的执行主体是网络设备中的检测模块时,作为本实施例的一种实施方式,步骤S201E具体可以包括:

步骤1:接收路由管理模块发送的第一链路从最优链路变为非最优链路的第二通知。其中,第二通知中携带从最优链路变为非最优链路的链路标识。

步骤2:根据第二通知,从转发表中删除第一链路对应的转发表项,并判定第一链路满足预设条件。

具体的,从转发表中删除第一链路对应的转发表项,可以直接由路由管理模块执行,也可以由检测模块通知路由管理模块,以使路由管理模块从转发表中删除第一链路对应的转发表项。判定第一链路满足预设条件,是由检测模块执行的。

步骤S201F:根据已存储的链路与会话的对应关系,确定第一链路对应的第一会话;根据第一会话,确定第一检测报文的目的地址。

具体的,网络设备中可以预先存储链路与会话的对应关系。

当本实施例的执行主体是网络设备中的检测模块时,也可以将链路与会话的对应关系存储在路由管理模块中,当路由管理模块检测到第一链路从最优链路变为非最优链路时,根据已存储的链路与会话的对应关系,确定第一链路对应的第一会话,并将第一链路和第一会话添加至第二通知中发送至检测模块。检测模块根据第二通知,确定第一链路对应的第一会话。

步骤S201G:获取所述目的地址对应的所有转发表项。

步骤S201H:从所获取的转发表项对应的链路中选择第二链路。

需要说明的是,由于转发表中已经删除了第一链路对应的转发表项,因此所获取的转发表项中不包含第一链路对应的转发表项。

在图4所示实施例中,步骤S201F还可以包括:根据已存储的链路与会话的对应关系,确定第一链路对应的第一会话,在根据第一会话,确定第一检测报文的目的地址之前,判断第一会话的状态是否为启用状态,如果是,则执行根据第一会话,确定所述第一检测报文的目的地址的步骤,否则,不予处理。

可以理解的是,当第一会话为启用状态时,将第一检测报文进行封装,并等待发送。如果第一会话不为启用状态,不对第一检测报文进行封装。

在图4所示实施例中,还可以包括:保存所述第二链路与第一会话的对应关系。这样,当第二链路再从最优链路变为非最优链路时,可以根据链路与会话的对应关系确定第一会话。

具体的,还可以将第一链路与第一会话的对应关系更新为第二链路与第一会话的对应关系。

下面以采用BFD检测机制的网络设备为例,再对本申请进行详细说明。

如图1所示,源路由器A的地址为1.1.1.1,目的路由器C的地址为2.2.2.2。路由器A中包括检测模块(BFD模块)、接口管理模块和路由管理模块(RIB模块)。A与C之间建立了BFD邻居关系,并且A与C之间存在两条等价链路:第一链路L1-L3和第二链路L2-L3,这两条链路对应的接口分别为a和b。

路由器A中的BFD模块启动时,向接口管理模块注册接口事件,关心接口down事件。如果接口状态由up变为down,接口管理模块会通知BFD接口down事件,并告诉BFD模块down接口的索引。

路由器A中的BFD模块还要向RIB模块订阅关心路由状态变化信息,关心路由的前缀为2.2.2.2/32,并将所关心的路由对应的会话的本地标识符LD的信息作为用户数据传给RIB模块。也就是说,RIB模块中保存关心路由的前缀与LD信息的对应关系。当然,BFD也可以在第一封装报文得到后再向RIB模块订阅路由状态变化信息,这样对第一检测报文重新封装的时机会更精确,避免对第一检测报文重新封装得到第二封装报文后,由于会话不为up状态而无法发送第二封装报文的情况。

在路由器A和C之间创建BFD会话,根据该会话得到第一检测报文,并根据接口a对应的第一链路将第一检测报文封装得到第一封装报文。

在第一封装报文发送之前,当接口a从up状态变为down状态时,接口管理模块通知BFD模块接口a从up状态变为down状态。BFD模块根据接口a确定第一链路从up状态变为down状态。然后,BFD模块根据自身保存的接口与会话的标识确定接口a对应的第一会话。根据第一会话的目的地址2.2.2.2,从转发表中获取该目的地址对应的所有转发表项,从中排除第一接口的转发表项对应的链路,并从排除后的转发表项对应的链路中选择一条作为第二链路,即确定第二链路为L2-L3。

然后,根据第二链路的接口b的信息重新封装第一检测报文,得到第二封装报文,在满足发送条件时,通过第二链路发送第二封装报文。

在第一封装报文发送之前,如果BFD模块接收到RIB模块发送的路由变化通知,则根据该通知中携带的LD信息确定第一会话,根据该会话确定目的地址2.2.2.2。根据第一会话的目的地址2.2.2.2,从转发表中获取该目的地址对应的所有转发表项。由于RIB模块在感知到以2.2.2.2为前缀的路由发生变化时,已经将转发表中第一链路对应的转发表项删除,因此,直接在所获取的转发表项对应的链路中选择第二链路即可。

当然,在实际应用中,在通过第一链路发送第一检测报文的第一封装报文之前,第一链路的第一接口从启用状态变为停用状态和第一链路从最优链路变为非最优链路,可能都会发生。根据具体情况对第一检测报文重新封装即可。

图5为本发明实施例提供的检测报文的发送装置的一种流程示意图,与图1所示方法实施例相对应。其中,第一检测报文的第一封装报文已经根据第一链路的第一接口的信息预先封装好。该装置包括:

确定模块501,用于在报文发送时机到来之前,当所述第一链路满足预设条件时,确定到达所述第一检测报文的目的地址的第二链路;

封装模块502,用于根据所述第二链路的第二接口的信息,对所述第一检测报文重新封装,得到第二封装报文;

发送模块503,用于在满足报文发送条件时,通过所述第二链路发送所述第二封装报文。

在本申请的另一实施例中,图5所示实施例中的确定模块501,可以包括下述子模块,这些子模块可以如图6所示:

第一判定子模块601,用于当检测到所述第一接口为停用状态时,判定所述第一链路满足预设条件;

第一确定子模块602,用于根据已存储的接口与会话的对应关系,确定所述第一接口对应的第一会话;根据所述第一会话,确定所述第一检测报文的目的地址;

第一获取子模块603,用于获取所述目的地址对应的所有转发表项;

第一选择子模块604,用于从接口不为所述第一接口的转发表项对应的链路中,选择第二链路。

在图6所示实施例中,第一判定子模块601可以包括:

第一接收单元(图中未示出),用于接收接口管理模块发送的所述第一接口为停用状态的第一通知;

第一判定单元(图中未示出),用于根据所述第一通知,判定所述第一链路满足预设条件。

在图6所示实施例中,所述装置还可以包括第二保存模块(图中未示出),用于:

保存所述第二接口与所述第一会话的对应关系。

本实施例与图3所示方法实施例相对应。

在本申请的另一实施例中,图5所示实施例中的确定模块501,可以包括下述子模块,这些子模块可以如图7所示:

第二判定子模块701,用于当检测到所述第一链路从最优链路变为非最优链路时,从转发表中删除所述第一链路对应的转发表项,并判定所述第一链路满足预设条件;

第二确定子模块702,用于根据已存储的链路与会话的对应关系,确定所述第一链路对应的第一会话;根据所述第一会话,确定所述第一检测报文的目的地址;

第二获取子模块703,用于获取所述目的地址对应的所有转发表项;

第二选择子模块704,用于从所获取的转发表项对应的链路中选择第二链路。

本实施例与图4所示方法实施例相对应。

在图7所示实施例中,该装置还可以包括判断模块(图中未示出),用于:

在所述根据所述第一会话,确定所述第一检测报文的目的地址之前,判断所述第一会话的状态是否为启用状态,如果是,则根据所述第一会话,确定所述第一检测报文的目的地址。

在图7所示实施例中,第二判定子模块701具体可以包括:

第二接收单元(图中未示出),用于接收路由管理模块发送的所述第一链路从最优链路变为非最优链路的第二通知;

第二判定单元(图中未示出),用于根据所述第二通知,从转发表中删除所述第一链路对应的转发表项,并判定所述第一链路满足预设条件

在图7所示实施例中,该装置还可以包括第一保存模块(图中未示出),用于:

保存所述第二链路与第一会话的对应关系。

由于上述装置实施例是基于方法实施例得到的,与该方法具有相同的技术效果,因此装置实施例的技术效果在此不再赘述。

对于装置实施例而言,由于其基本相似于方法实施例,所以描述得比较简单,相关之处参见方法实施例的部分说明即可。

需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。

本领域普通技术人员可以理解,上述实施方式中的全部或部分步骤是能够通过程序指令相关的硬件来完成的,所述的程序可以存储于计算机可读取存储介质中。这里所称存储介质,是指ROM/RAM、磁碟、光盘等。

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

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