检测发送异常的方法、装置、通信设备及可读存储介质转让专利

申请号 : CN201811292514.3

文献号 : CN109286539B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 孙琳洋

申请人 : 迈普通信技术股份有限公司

摘要 :

本发明提供了一种检测发送异常的方法、装置、通信设备及可读存储介质,该方法在转发当前待转发报文前,先判断缓存当前待转发报文的缓冲区的状态标记是否为第一状态值;在为所述第一状态值时,再判断第一标识字段与第二标识字段是否一致,其中,第一标识字段表征使用缓冲区的转发核,第二标识字段表征转发当前待转发报文的转发核;在一致时,说明本次发送流程正常,转发当前待转发报文并将状态标记设置为第二状态值;在不一致时,确定当前待转发报文已被发送过且本次发送流程异常。通过该方法可解决现有技术在使用缓冲区的状态标记来判断当前待转发报文是否是被重复时,无法在缓冲区被重新缓存新的转发报文后进行准确判断的问题。

权利要求 :

1.一种检测发送异常的方法,其特征在于,所述方法包括:

在转发当前待转发报文前,判断缓存所述当前待转发报文的缓冲区的状态标记是否为第一状态值,所述第一状态值用于表征所述缓冲区处于使用状态;

在所述状态标记为所述第一状态值时,判断第一标识字段与第二标识字段是否一致,其中,所述第一标识字段用于表征使用所述缓冲区的转发核,所述第二标识字段用于表征转发所述当前待转发报文的转发核;

在所述第一标识字段与所述第二标识字段一致时,转发所述当前待转发报文,并将所述状态标记设置为第二状态值,所述第二状态值用于表征所述缓冲区处于释放状态;

在所述第一标识字段与所述第二标识字段不一致时,确定所述当前待转发报文已被发送过且本次发送流程异常。

2.根据权利要求1所述的方法,其特征在于,在判断缓存所述当前待转发报文的缓冲区的状态标记是否为第一状态值之后,在判断第一标识字段与第二标识字段是否一致之前,所述方法还包括:在所述状态标记不为所述第一状态值时,确定所述当前待转发报文已被发送过且本次发送流程异常。

3.根据权利要求1或2所述的方法,其特征在于,在判断缓存所述当前待转发报文的缓冲区的状态标记是否为第一状态值之前,所述方法还包括:在接收到所述当前待转发报文时,将转发所述当前待转发报文的转发核的标识字段分别保存在缓存所述当前待转发报文的缓冲区内以及存储所述当前待转发报文的转发信息的内存内,与所述缓冲区对应的标识字段为第一标识字段,与存储所述转发信息的内存对应的标识字段为第二标识字段;

将所述缓冲区的状态标记设置为所述第一状态值。

4.根据权利要求3所述的方法,其特征在于,在将转发所述当前待转发报文的转发核的标识字段保存在缓存所述报文的缓冲区内之前,所述方法还包括:从预先创建的缓冲区池中申请一个缓冲区,并申请一个预设大小的内存;

在接收到所述当前待转发报文时,将所述当前待转发报文所包括的报文数据以及报文描述符保存在所述缓冲区内,将所述报文的转发信息保存在所述内存内。

5.一种检测发送异常的装置,其特征在于,所述装置包括:

第一判断模块,用于在转发当前待转发报文前,检测缓存所述当前待转发报文的缓冲区的状态标记是否为第一状态值,所述第一状态值用于表征所述缓冲区处于使用状态;

第二判断模块,用于在所述第一判断模块的判断结果为是时,判断第一标识字段与第二标识字段是否一致,其中,所述第一标识字段用于表征使用所述缓冲区的转发核,所述第二标识字段用于表征转发所述当前待转发报文的转发核;

判断执行模块,用于在所述第二判断模块的判断结果为是时,转发所述当前待转发报文,并将所述状态标记设置为第二状态值,所述第二状态值用于表征所述缓冲区处于释放状态;还用于在所述第二判断模块的判断结果为否时,确定所述当前待转发报文已被发送过且本次发送流程异常。

6.根据权利要求5所述的装置,其特征在于,所述判断执行模块,还用于在所述第一判断模块的判断结果为否时,确定所述当前待转发报文已被发送过且本次发送流程异常。

7.根据权利要求5或6所述的装置,其特征在于,所述装置还包括:

保存模块,用于在接收到所述当前待转发报文时,将转发所述当前待转发报文的转发核的标识字段分别保存在缓存所述当前待转发报文的缓冲区内以及存储所述当前待转发报文的转发信息的内存内,与所述缓冲区对应的标识字段为第一标识字段,与存储所述转发信息的内存对应的标识字段为第二标识字段;

设置模块,用于将所述缓冲区的状态标记设置为所述第一状态值。

8.根据权利要求7所述的装置,其特征在于,所述装置还包括:

申请模块,用于从预先创建的缓冲区池中申请一个缓冲区,并申请预设大小的内存;

保存模块,还用于在接收到所述当前待转发报文时,将所述当前待转发报文所包括的报文数据以及报文描述符保存在所述缓冲区内,将所述当前待转发报文的转发信息保存在所述内存内。

9.一种通信设备,其特征在于,所述通信设备包括存储器以及包括多个转发核的处理器;

所述存储器内存储计算机程序,当所述计算机程序被所述处理器执行时,使得所述通信设备执行权利要求1-4中任意一项所述的方法。

10.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质中存储有计算机程序,所述计算机程序可被所述计算机的处理器执行以实现权利要求1-4中任意一项所述的检测发送异常的方法。

说明书 :

检测发送异常的方法、装置、通信设备及可读存储介质

技术领域

[0001] 本发明涉及数据转发领域,具体而言,涉及一种检测发送异常的方法、装置、通信设备及可读存储介质。

背景技术

[0002] 路由器作为通信网络中必需的通信设备,其数据收发的性能和准确性直接决定了所在网络的数据通信的可靠性,对网络中所承载的业务的正常运行起到了支撑和限制的作用。路由器使用缓冲区(Buffer)来装载需要收发的报文,因此Buffer的正常使用对于路由器设备的稳定、可靠运行具有至关重要的作用。然而,在路由器实际工作中,转发路径的选择受制于多种因素,在异常情况下会出现一个报文被多次发送的情况,即Buffer被多次释放。然而,现有的检测机制不仅无法检测出真实的问题所在,反而会收集到错误的异常信息来误导问题的解决方向。

发明内容

[0003] 有鉴于此,本发明实施例的目的在于提供一种检测发送异常的方法、装置、通信设备及可读存储介质,以解决上述问题。
[0004] 第一方面,本发明实施例提供了一种检测发送异常的方法,所述方法包括:在转发当前待转发报文前,判断缓存所述当前待转发报文的缓冲区的状态标记是否为第一状态值;在所述状态标记为所述第一状态值时,判断第一标识字段与第二标识字段是否一致,其中,所述第一标识字段用于表征使用所述缓冲区的转发核,所述第二标识字段用于表征转发所述当前待转发报文的转发核;在所述第一标识字段与所述第二标识字段一致时,转发所述当前待转发报文,并将所述状态标记设置为第二状态值;在所述第一标识字段与所述第二标识字段不一致时,确定所述当前待转发报文已被发送过且本次发送流程异常。
[0005] 第二方面,本发明实施例提供了一种板卡检测发送异常的装置,第一判断模块,用于在转发当前待转发报文前,检测缓存所述当前待转发报文的缓冲区的状态标记是否为第一状态值;第二判断模块,用于在所述第一判断模块的判断结果为是时,判断第一标识字段与第二标识字段是否一致,其中,所述第一标识字段用于表征使用所述缓冲区的转发核,所述第二标识字段用于表征转发所述当前待转发报文的转发核;判断执行模块,用于在所述第二判断模块的判断结果为是时,转发所述当前待转发报文,并将所述状态标记设置为第二状态值;还用于在所述第二判断模块的判断结果为否时,确定所述当前待转发报文已被发送过且本次发送流程异常。
[0006] 第三方面,本发明实施例提供了一种通信设备,所述通信设备包括存储器以及包括多个转发核的处理器,所述存储器内存储计算机程序,当所述计算机程序被所述处理器执行时,使得所述通信设备执行第一方面任一实施方式所述的检测发送异常的方法。
[0007] 第四方面,本发明实施例提供了一种计算机可读存储介质,所述计算机可读存储介质中存储有计算机程序,当所述计算机程序在计算机上运行时,使得所述计算机执行第一方面任一实施方式所述的检测发送异常的方法。
[0008] 与现有技术相比,本发明各实施例提出的检测发送异常的方法、装置、通信设备及可读存储介质在转发当前待转发报文前,先判断缓存所述当前待转发报文的缓冲区的状态标记是否为第一状态值;在状态标记为所述第一状态值时,再判断第一标识字段与第二标识字段是否一致,其中,所述第一标识字段用于表征使用所述缓冲区的转发核,所述第二标识字段用于表征转发所述当前待转发报文的转发核;在所述第一标识字段与所述第二标识字段一致时,说明本次发送流程正常,转发所述当前待转发报文,并将所述状态标记设置为第二状态值;在所述第一标识字段与所述第二标识字段不一致时,确定所述当前待转发报文已被发送过且本次发送流程异常。通过该方法可以解决现有技术中使用缓冲区的状态标记来判断当前待转发的报文是否是被重复时,无法在缓冲区被重新缓存新的转发报文后进行准确判断的问题。
[0009] 为使本发明的上述目的、特征和优点能更明显易懂,下文特举较佳实施例,并配合所附附图,作详细说明如下。

附图说明

[0010] 为了更清楚地说明本发明实施例的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,应当理解,以下附图仅示出了本发明的某些实施例,因此不应被看作是对范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他相关的附图。
[0011] 图1为本发明实施例提供的一种通信设备的结构示意图;
[0012] 图2为本发明第一实施例提供的一种检测发送异常的方法的流程图之一;
[0013] 图3为本发明第一实施例提供的一种检测发送异常的方法的流程图之二;
[0014] 图4为本发明第二实施例提供的一种检测发送异常的装置的结构框图。

具体实施方式

[0015] 下面将结合本发明实施例中附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。通常在此处附图中描述和示出的本发明实施例的组件可以以各种不同的配置来布置和设计。因此,以下对在附图中提供的本发明的实施例的详细描述并非旨在限制要求保护的本发明的范围,而是仅仅表示本发明的选定实施例。
[0016] 应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释。
[0017] 首先,对本发明所涉及到的术语进行简要介绍:
[0018] Buffer:缓冲区,本发明实施例中指储存数据报文的内存空间。
[0019] freeFlag:Buffer的状态标记。
[0020] 为了解决上述问题,本发明实施例提供一种检测发送异常的方法、装置,该技术可采用相应的软件、硬件以及软硬结合的方式实现。以下对本发明实施例进行详细介绍。
[0021] 首先,参照图1来描述用于实现本发明实施例的检测发送异常的方法、装置的通信设备100。在图1中,通信设备100可以包括相互连接的处理器110以及存储器120。其中,所述处理器110包括多个转发核。
[0022] 处理器110以及存储器120可以通过总线系统和/或其它形式的连接机构(未示出)互连。应当注意,图1所示的通信设备100的组件和结构只是示例性的,而非限制性的,根据需要,所述通信设备100也可以具有其他组件和结构。
[0023] 其中,处理器110中的转发核主要负责接收报文并将报文进行转发。各转发核之间并行工作,互不干扰。每个转发核串行工作,即一个转发核只有在当前已接收报文全部转发完成之后,才会接收新的报文进行处理。Buffer作为报文的承载体,可以缓存不同的报文类型,被不同的转发核接收并转发。存储器120用于存储计算机程序,处理器110中的转发核可以执行存储器120中存储的计算机程序。
[0024] 当然,在通信设备100在系统初始化阶段,处理器110可以预先创建一个用于缓存报文的Buffer池。在通信设备100的端口接收到报文后,针对每个报文,处理器110都会在Buffer池中申请一个Buffer来缓存该报文,同时,处理器110还会在内存中申请预设大小(例如1KB)的内存来保存该报文的转发信息。其中,Buffer在缓存该报文时,保存有该报文所包括的报文数据以及报文描述符。
[0025] 请参照图2,图2是本发明第一实施例提供的一种检测发送异常的方法的流程图。下面将对图2所示的流程进行详细阐述,所述方法包括:
[0026] 步骤S110:在转发当前待转发报文前,判断缓存所述当前待转发报文的缓冲区的状态标记是否为第一状态值。
[0027] 其中,当Buffer的freeFlag为第一状态值时,表征该Buffer目前处于使用状态。因此,判断缓存当前待转发报文的Buffer的freeFlag是否为第一状态值,即判断与当前待转发报文对应的Buffer是否处于使用状态。
[0028] 其中,可选的,可以通过定义freeFlag为0时表征Buffer处于使用状态,定义freeFlag为1时表征Buffer处于释放状态,此时,相应的,第一状态值应该为0。当然,作为另一种可选的实施方式,也可以通过定义freeFlag为false时表征Buffer处于使用状态,定义freeFlag为true时表征Buffer处于释放状态,此时,相应的,第一状态值应该设置为false。
[0029] 当然,在判断缓存所述当前待转发报文的Buffer的freeFlag是否为第一状态值之前,通信设备100在接收到所述当前待转发报文后,需要将用于转发所述当前待转发报文的转发核的标识字段(rxCore)分别保存在缓存所述当前待转发报文的Buffer内作为第一标识字段,以及保存在存储了所述当前待转发报文的转发信息的内存内作为第二标识字段,然后将Buffer的freeFlag设置为所述第一状态值。
[0030] 步骤S120:在为所述第一状态值时,判断第一标识字段与第二标识字段是否一致。
[0031] 在前述通过现有技术来检测报文发送异常的机制中,当freeFlag为第一状态值时,会出现后续对异常信息的定位出现错误的情况。
[0032] 在本发明实施例中,为了解决这个问题,当freeFlag为第一状态值时,先判断第一标识字段与第二标识字段是否一致。
[0033] 其中,所述第一标识字段用于表征使用所述缓冲区的转发核,即缓存有当前待转发报文的Buffer被哪个转发核所处理。所述第二标识字段用于表征转发所述当前待转发报文的转发核,即所述当前待转发报文被哪个转发核处理。值得指出的是,在正常转发情况下,待转发报文和Buffer被同一个转发核所处理。
[0034] 步骤S130:在所述第一标识字段与所述第二标识字段一致时,转发所述当前待转发报文,并将所述状态标记设置为第二状态值。
[0035] 其中,当第一标识字段与第二标识字段一致时,说明转发核即将转发的报文为正常发送。
[0036] 步骤S140:在所述第一标识字段与所述第二标识字段不一致时,确定所述当前待转发报文已被发送过且本次发送流程异常。
[0037] 当第一标识字段与第二标识字段不一致时,则表示转发核即将转发的报文已经被发送释放过,本次释放至少是第二次释放,当前Buffer缓存的是新的报文,此次发送属于异常,需要进行异常信息收集和转发路径追踪。
[0038] 当然,作为一种可选的实施方式,请参看图3,在步骤S110的判断结果不为所述第一状态值时,也可以直接确定所述当前待转发报文已被发送过且本次发送流程异常。
[0039] 本发明第一实施例提供一种检测发送异常的方法,在转发核转发当前待转发报文前,先判断缓存所述当前待转发报文的缓冲区的状态标记是否为第一状态值;在状态标记为所述第一状态值时,再判断第一标识字段与第二标识字段是否一致,其中,所述第一标识字段用于表征使用所述缓冲区的转发核,所述第二标识字段用于表征转发所述当前待转发报文的转发核;正常转发情况下,待转发报文和该转发报文的缓冲区由同一个转发核处理。在所述第一标识字段与所述第二标识字段一致时,说明本次发送流程正常,转发核转发所述当前待转发报文,并将所述状态标记设置为第二状态值;在所述第一标识字段与所述第二标识字段不一致时,确定所述当前待转发报文已被发送过且本次发送流程异常。通过该方法,可以解决现有技术中使用缓冲区的状态标记来判断当前待转发的报文是否是被重复时,无法在缓冲区被重新缓存新的转发报文后进行准确判断的问题。
[0040] 此外,请参照图4,本发明第二实施例提供了一种检测发送异常的装置400。下面将对图4所示的结构框图进行阐述,所示装置包括:
[0041] 第一判断模块410,用于在转发核转发当前待转发报文前,检测缓存所述当前待转发报文的缓冲区的状态标记是否为第一状态值;
[0042] 第二判断模块420,用于在所述第一判断模块410的判断结果为是时,判断第一标识字段与第二标识字段是否一致,其中,所述第一标识字段用于表征使用所述缓冲区的转发核,所述第二标识字段用于表征转发所述当前待转发报文的转发核;正常转发情况下,待转发报文和该转发报文的缓冲区由同一个转发核处理。判断执行模块430,用于在所述第二判断模块420的判断结果为是时,转发所述当前待转发报文,并将所述状态标记设置为第二状态值;还用于在所述第二判断模块420的判断结果为否时,确定所述当前待转发报文已被发送过且本次发送流程异常。
[0043] 可选的,所述判断执行模块430,还用于在所述第一判断模块410的判断结果为否时,确定所述当前待转发报文已被发送过且本次发送流程异常。
[0044] 可选的,所述装置还包括:
[0045] 保存模块,用于在接收到所述当前待转发报文时,将转发所述当前待转发报文的转发核的标识字段分别保存在缓存所述当前待转发报文的缓冲区内以及存储了所述当前待转发报文的转发信息的内存内;与所述缓冲区对应的标识字段为第一标识字段,与存储所述转发信息的内存对应的标识字段为第二标识字段;
[0046] 设置模块,用于将所述缓冲区的状态标记设置为所述第一状态值。
[0047] 可选的,所述装置还包括:
[0048] 申请模块,用于从预先创建的缓冲区池中申请一个缓冲区,并申请一个预设大小的内存;
[0049] 所述保存模块,还用于在接收到所述当前待转发报文时,将所述当前待转发报文所包括的报文数据以及报文描述符保存在所述缓冲区内,将所述当前待转发报文的转发信息保存在所述内存内。
[0050] 本实施例对检测发送异常的装置400的各功能模块实现各自功能的过程,请参见上述图1至图3所示实施例中描述的内容,此处不再赘述。
[0051] 此外,对应于第一实施例中的检测发送异常的方法,本申请实施例还提供了一种计算机可读存储介质,所述计算机可读存储介质内存储有计算机程序,所述计算机程序被处理器读取并运行时,使得处理器执行第一实施例中任一实施方式所述的方法。
[0052] 此外,对应于第一实施例中的检测发送异常的方法,本申请实施例还提供了一种通信设备,所述通信设备包括存储器以及包括多个转发核的处理器。存储器内存储有计算机程序,所述计算机程序被处理器读取并运行时,使得通信设备执行第一实施例中任一实施方式所述的方法。其中,通信设备的结构示意图可以参考图1。
[0053] 综上所述,本发明实施例提出的检测发送异常的方法、装置、通信设备及可读存储介质,该方法在转发当前待转发报文前,先判断缓存所述当前待转发报文的缓冲区的状态标记是否为第一状态值;在状态标记为所述第一状态值时,再判断第一标识字段与第二标识字段是否一致,其中,所述第一标识字段用于表征使用所述缓冲区的转发核,所述第二标识字段用于表征转发所述当前待转发报文的转发核;在所述第一标识字段与所述第二标识字段一致时,说明本次发送流程正常,转发所述当前待转发报文,并将所述状态标记设置为第二状态值;在所述第一标识字段与所述第二标识字段不一致时,确定所述当前待转发报文已被发送过且本次发送流程异常。通过该方法可以解决现有技术中使用缓冲区的状态标记来判断当前待转发的报文是否是被重复时,无法在缓冲区被重新缓存新的转发报文后进行准确判断的问题。
[0054] 在本申请所提供的几个实施例中,应该理解到,所揭露的装置和方法,也可以通过其它的方式实现。以上所描述的装置实施例仅仅是示意性的,例如,附图中的流程图和框图显示了根据本发明的多个实施例的装置、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段或代码的一部分,所述模块、程序段或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现方式中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个连续的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或动作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
[0055] 另外,在本发明各个实施例中的各功能模块可以集成在一起形成一个独立的部分,也可以是各个模块单独存在,也可以两个或两个以上模块集成形成一个独立的部分。
[0056] 所述功能如果以软件功能模块的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
[0057] 以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应所述以权利要求的保护范围为准。