一种报文处理方法及网络设备与流程

文档序号:12809614阅读:209来源:国知局
一种报文处理方法及网络设备与流程

本发明涉及网络数据处理技术领域,特别是涉及一种报文处理方法及网络设备。



背景技术:

随着网络技术的飞速发展,网络数据流量越来越大,网络设备的外围设备会接收到大量的以太网报文。而根据现有技术,外围设备每接收到一个以太网报文,都会产生中断通知主机的cpu(centralprocessingunit,中央处理器)进行报文接收处理。也就是,外围设备每接收到一个以太网报文就会中断cpu。当以太网报文流量很大时,cpu需要处理大量的中断请求,从而cpu资源消耗量过大,而且无法满足高速传输以太网数据的需求,还会造成带宽浪费。



技术实现要素:

本发明实施例公开了一种报文处理方法及网络设备,用以减少cpu中断次数,降低cpu资源消耗。技术方案如下:

第一方面,本发明实施例提供了一种报文处理方法,应用于网络设备,所述网络设备包括:主机和外围设备;所述方法包括:

外围设备获得并缓存从外部接收的原始报文,其中,所述原始报文为以太网报文;

提取所述原始报文的报文信息,其中,所述报文信息包括:所述原始报文的报文长度及其在缓存中的地址;

将所述报文信息放入报文信息队列,同时统计提取到的所有报文信息中报文长度的总长度,其中,所述总长度初始值为零;

如果所述总长度与预设长度的差值小于预设阈值和/或等待时间大于预设时间,则生成用于控制原始报文聚合的聚合信息,并将所述聚合信息放入聚合信息队列,同时将所述总长度清零以重新开始统计后续提取到的所有报文信息中报文长度的总长度,其中,所述聚合信息包括:待聚合原始报文的总数量;

从所述聚合信息队列的队列头取出聚合信息,对于取出到的每个聚合信息,从所述报文信息队列的队列头开始,取出数量与取出到的聚合信息中的总数量相等的报文信息,并根据每个取出的报文信息中包括的原始报文在缓存中的地址,从所述缓存中读取所述聚合信息对应的待聚合原始报文;

按照预设的聚合报文格式,对读取的所述聚合信息对应的待聚合原始报文进行聚合,得到聚合报文;

产生聚合报文接收中断,通知主机cpu对所述聚合报文进行接收处理。

可选的,所述按照预设的聚合报文格式对读取的所述聚合信息对应的待聚合原始报文进行聚合,得到聚合报文的步骤,包括:

将所述聚合信息对应的每个待聚合原始报文分别作为一个报文单元,为每个报文单元添加单元标识,并在每个报文单元中记录该报文单元的报文长度;

对所述聚合信息对应的所有报文单元进行聚合,得到聚合报文,其中,所述聚合报文的报文头包括所述聚合报文包括的报文单元的总个数。

可选的,所述外围设备获得并缓存从外部接收的原始报文时,所述方法还包括:

外围设备记录接收到所述原始报文的时间;

所述在每个报文单元中记录该报文单元的报文长度的步骤之后,所述方法还包括:

在每个报文单元中记录接收到该报文单元对应的原始报文的时间。

可选的,所述方法还包括:

主机根据所述聚合报文的报文头包括的报文单元的总个数,以及每个报文单元的单元标识,查找每个报文单元;

从每个报文单元中,获取对应原始报文、接收该原始报文的时间及该原始报文的报文长度,并为每个原始报文添加报文头,其中,所述原始报文的报文头中包括接收该原始报文的时间和该原始报文的报文长度;

将添加有报文头的原始报文写入报文存储缓存队列,将报文存储缓存队列中的所有原始报文写入硬盘文件中,并在该硬盘文件中添加文件头,然后释放所述报文存储缓存队列。

可选的,所述聚合信息还包括:所述聚合信息对应的第一个待聚合原始报文在缓存的地址、最后一个待聚合原始报文在缓存的地址和所有待聚合原始报文的总长度。

可选的,在根据每个取出的报文信息中包括的待聚合原始报文在缓存中的地址,从所述缓存中读取所述聚合信息对应的待聚合原始报文的步骤之前,所述方法还包括:

判断从所述报文信息队列中取出的第一个报文信息中包括的原始报文在缓存中的地址、从所述报文信息队列中取出的最后一个报文信息中包括的原始报文在缓存中的地址及取出的所有报文信息包括的报文长度的总和,是否均分别与所述第一个待聚合原始报文在缓存的地址、所述最后一个待聚合原始报文在缓存的地址及所有待聚合原始报文的总长度相同;

如果是,则从所述缓存中读取所述聚合信息对应的待聚合原始报文。

第二方面,本发明实施例还提供了一种网络设备,所述网络设备包括:主机和外围设备;所述外围设备包括:

报文接收模块,用于获得并缓存从外部接收的原始报文,其中,所述原始报文为以太网报文;

信息提取模块,用于提取所述原始报文的报文信息,将所述报文信息放入报文信息队列,其中,所述报文信息包括:所述原始报文的报文长度及其在缓存中的地址;

聚合控制模块,用于将所述报文信息放入报文信息队列,同时统计提取到的所有报文信息中报文长度的总长度,如果所述总长度与预设长度的差值小于预设阈值和/或等待时间大于预设时间,则生成用于控制原始报文聚合的聚合信息,并将所述聚合信息放入聚合信息队列,同时将所述总长度清零以重新开始统计后续提取到的所有报文信息中报文长度的总长度,其中,所述总长度初始值为零;所述聚合信息包括:待聚合原始报文的总数量;

报文聚合模块,用于从所述聚合信息队列的队列头取出聚合信息,对于取出到的每个聚合信息,从所述报文信息队列的队列头开始,取出数量与取出到的聚合信息中的总数量相等的报文信息,并根据每个取出的报文信息中包括的原始报文在缓存中的地址,从所述缓存中读取所述聚合信息对应的待聚合原始报文;

报文聚合模块,还用于按照预设的聚合报文格式,对读取的所述聚合信息对应的待聚合原始报文进行聚合,得到聚合报文;

报文传输模块,用于产生聚合报文接收中断,通知主机cpu对所述聚合报文进行接收处理。

可选的,所述报文聚合模块包括:

单元标识添加子模块,用于将所述聚合信息对应的每个待聚合原始报文分别作为一个报文单元,为每个报文单元添加单元标识,并在每个报文单元中记录该报文单元的报文长度;

报文聚合子模块,用于对所述聚合信息对应的所有报文单元进行聚合,得到聚合报文,其中,所述聚合报文的报文头包括所述聚合报文包括的报文单元的总个数。

可选的,所述报文接收模块,还用于在获得并缓存从外部接收的原始报文的同时,记录接收到所述原始报文的时间;

所述报文聚合模块还包括:

时间添加子模块,用于在每个报文单元中记录该报文单元的报文长度之后,在每个报文单元中记录接收到该报文单元对应的原始报文的时间。

可选的,所述主机cpu,用于根据所述聚合报文的报文头包括的报文单元的总个数,以及每个报文单元的单元标识,查找每个报文单元;从每个报文单元中,获取对应原始报文、接收该原始报文的时间及该原始报文的报文长度,并为每个原始报文添加报文头,其中,所述原始报文的报文头中包括接收该原始报文的时间和该原始报文的报文长度;将添加有报文头的原始报文写入报文存储缓存队列,将报文存储缓存队列中的所有原始报文写入硬盘文件中,并在该硬盘文件中添加文件头,然后释放所述报文存储缓存队列。

可选的,所述聚合信息还包括:所述聚合信息对应的第一个待聚合原始报文在缓存的地址、最后一个待聚合原始报文在缓存的地址和所有待聚合原始报文的总长度。

可选的,所述外围设备还包括:

聚合判断模块,用于判断从所述报文信息队列中取出的第一个报文信息中包括的原始报文在缓存中的地址、从所述报文信息队列中取出的最后一个报文信息中包括的原始报文在缓存中的地址及取出的所有报文信息包括的报文长度的总和,是否均分别与所述第一个待聚合原始报文在缓存的地址、所述最后一个待聚合原始报文在缓存的地址及所有待聚合原始报文的总长度相同;如果是,则从所述缓存中读取所述聚合信息对应的待聚合原始报文。

本发明实施例提供的报文处理方法及网络设备中,网络设备中的外围设备获得并缓存从外部接收的原始报文后,提取报文信息放入报文信息队列,并统计提取到的所有报文信息中报文长度的总长度,根据总长度及等待时间进行判断,进而生成聚合信息,然后根据取出的聚合信息读取待聚合原始报文,按照预设的聚合报文格式,对待聚合原始报文进行报文聚合,得到聚合报文,然后产生聚合报文接收中断,通知主机cpu对所述聚合报文进行接收处理。由于外围设备可以将多个原始报文进行聚合,得到聚合报文,再通知主机cpu进行处理,cpu只需中断一次以接收该聚合报文,cpu中断次数明显减少,大大降低了cpu的资源消耗。

附图说明

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

图1为本发明实施例所提供的一种报文处理方法的流程图;

图2为聚合报文格式的一种示意图;

图3为主机cpu进行聚合报文解析的流程图;

图4为本发明实施例所提供的一种网络设备的结构示意图;

图5为pcap文件格式的一种示意图。

具体实施方式

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

为了在网络设备处理报文的过程中,减少主机cpu中断次数,降低cpu资源消耗,本发明实施例提供了一种报文处理方法及网络设备。

下面对本发明实施例所提供的一种报文处理方法处理流程进行介绍。

如图1所示,一种报文处理方法,应用于网络设备,所述网络设备包括:主机和外围设备;所述方法包括以下步骤:

s101,外围设备获得并缓存从外部接收的原始报文;

可以理解的是,当外部网络设备向该网络设备发送报文时,该网络设备中的外围设备,例如:可编程逻辑门阵列(fieldprogrammablegatearray,fpga)便可以接收到该报文,该报文即为从外部接收的原始报文,其中,该原始报文一般为以太网报文。

在一种实施方式中,该网络设备的外围设备包括phy(physicallayer,物理层)接口芯片和fgpa芯片,通过phy(physicallayer,物理层)接口芯片从外部接收以太网报文,并将该报文传输至上述fgpa芯片,主机从fgpa芯片获取以太网报文,并保存在硬盘中。

为了方便后续报文聚合处理,外围设备获得原始报文的同时,一般可以将该原始报文进行缓存。

s102,提取所述原始报文的报文信息;

外围设备在接收到原始报文后,可以提取每一个原始报文的报文信息,其中,该报文信息可以包括:原始报文的报文长度及其在缓存中的地址。外围设备获取待聚合的原始报文的报文长度及其在缓存中的地址的方式,可以采用现有任意相应的方式,在此不做具体限定。

s103,将所述报文信息放入报文信息队列,同时统计提取到的所有报文信息中报文长度的总长度;

外围设备获取了原始报文的报文信息后,便可以将报文信息放入报文信息队列中,以便后续处理过程中可以准确地读取该报文信息。需要说明的是,该报文信息队列为符合先进先出规则的信息队列,这与通常的理解是一致的。

在将上述报文信息放入报文信息队列的同时,外围设备可以统计提取到的所有报文信息中报文长度的总长度,也就是说,外围设备可以在每提取到一个报文信息时,便将该报文信息中包括的报文长度与之前提取到的报文信息中包括的报文长度进行累加,进而,得到提取到的所有报文信息中报文长度的总长度,可以理解的是,该总长度的初始值一般为零,这样更加便于计算。

s104,如果所述总长度与预设长度的差值小于预设阈值和/或等待时间大于预设时间,则生成用于控制原始报文聚合的聚合信息,并将所述聚合信息放入聚合信息队列,同时将所述总长度清零以重新开始统计后续提取到的所有报文信息中报文长度的总长度;

由于聚合报文的长度过大会导致无法传输,而聚合报文的长度过小则会导致流量的浪费,所以外围设备可以判断上述总长度与预设长度的差值是否小于预设阈值。如果该总长度与预设长度的差值小于预设阈值,说明此时缓存的原始报文的总长度与预设长度之间的差值已经比较小;如果上述总长度与上述预设长度的差值不小于预设阈值,那么说明此时缓存的原始报文的总长度与预设长度之间的差值还比较大。

同时,外围设备还可以判断等待时间是否大于预设时间。其中,该等待时间是指等待获得下一个原始报文的时间。可以理解的是,为了保证能够对网络报文进行及时的处理,不影响用户体验,外围设备等待获得下一个原始报文的时间不易过长。

报文聚合条件是:总长度与预设长度的差值小于预设阈值,和等待时间大于预设时间,二者至少满足一个。如果达到上述报文聚合条件,则生成聚合信息,并将生成的聚合信息写入聚合信息队列。

如果上述总长度与预设长度的差值小于预设阈值和/或等待时间大于预设时间,也就是说,总长度与预设长度的差值小于预设阈值,和等待时间大于预设时间,二者只要满足一个,那么便说明此时缓存的原始报文的总长度与预设长度之间的差值已经比较小,或等待时间已经较长,或缓存的原始报文的总长度与预设长度之间的差值已经比较小,同时等待时间也已经较长,此时外围设备便可以生成用于控制原始报文聚合的聚合信息,并将该聚合信息放入聚合信息队列,同时还可以将总长度清零,以便重新开始统计后续提取到的报文信息中报文长度的总长度。

其中,聚合信息可以包括:待聚合原始报文的总数量。外围设备在获得、缓存原始报文或提取原始报文的报文信息时,均可以记录该总数量,以便将其添加至聚合信息中。可以理解的是,该总数量的含义即为该聚合信息所对应的待聚合原始报文的总数量,其与上述计算总长度时所包括的报文长度的个数也是相同的。该聚合信息队列同样也是符合先进先出规则的信息队列。

具体地,设置用于统计聚合信息对应的待聚合原始报文的总数量的参数length,length初始值为零。每次将提取到的报文信息写入报文信息队列的同时,使length累加一,并判断length与预设长度的差值是否小于预设阈值,如果是,则说明满足报文信息条件生成聚合信息。如果length与预设长度的差值不小于预设阈值,则进一步判断等待下一个原始报文的等待时间是否大于预设时间,如果大于预设时间,则说明满足报文信息条件生成聚合信息;如果等待时间还未达到预设时间继续等待。在满足报文聚合条件而生成聚合信息时,将length清零,重新开始统计后续提取的报文信息中报文的长度,用于生成下一个聚合信息。需要说明的是,上述预设长度可以由本领域技术人员根据网络流量及主机cpu的mtu(maximumtransmissionunit,最大传输单元)的值等因素确定,只要能够达到聚合报文可以顺利传输至主机cpu的目的即可,在此不做具体限定。在一种实施方式中,该预设长度可以设置为8kb。

上述预设时间可以由本领域技术人员根据报文处理的实时性等因素确定,一般来说,对于实时性较低的报文处理过程而言,可以将该预设时间设置的长一些,而对于实时性较高的报文处理过程,则需要将该预设时间设置的短一些,在此不做具体限定。例如,该预设时间可以为80毫秒、100毫秒、120毫秒等。

如果上述总长度与预设长度的差值不小于预设阈值且等待时间不大于预设时间,那么说明此时缓存的原始报文的总长度与预设长度之间的差值还比较大,同时等待接收下一原始报文的时间也比较短,所以外围设备可以等待接收下一个原始报文,以使后续报文聚合得到的聚合报文的长度增大,提高对流量资源的利用。

s105,从所述聚合信息队列的队列头取出聚合信息,对于取出到的每个聚合信息,从所述报文信息队列的队列头开始,取出数量与取出到的聚合信息中的总数量相等的报文信息,并根据每个取出的报文信息中包括的原始报文在缓存中的地址,从所述缓存中读取所述聚合信息对应的待聚合原始报文;

由于聚合信息队列中可能存在多个未处理的聚合信息,那么外围设备便可以按照聚合信息队列的顺序,依次处理该多个未处理的聚合信息,也就是说,外围设备从该聚合信息队列的队列头开始,依次取出聚合信息进行处理。

对于取出到的每个聚合信息,外围设备对其的处理方式是一致的。具体来说,外围设备可以依据取出的聚合信息中包括的总数量,从上述报文信息队列的队列头开始,取出数量与该总数量相等的报文信息。可以理解的是,外围设备从报文信息队列中获取报文信息时,按照报文信息队列的顺序依次获取,这样便可以获取数量与上述总数量相同的报文信息。举例而言,如果该聚合信息中的总数量为10,外围设备则从报文信息队列的队列头开始,依次取出10个报文信息。

外围设备取出报文信息后,便可以获取报文信息中包括的原始报文在缓存中的地址,进而便可以根据获取到的原始报文在缓存中的地址,从缓存中读取该聚合信息对应的所有原始报文,可以理解的是,这些原始报文即为待聚合的原始报文,也就是该聚合信息对应的待聚合原始报文。

s106,按照预设的聚合报文格式,对读取的所述聚合信息对应的待聚合原始报文进行聚合,得到聚合报文;

外围设备读取了上述聚合信息对应的待聚合原始报文后,便可以按照预设的聚合报文格式,对这些待聚合原始报文进行聚合,得到聚合报文。其中,该预设的聚合报文格式可以由本领域技术人员根据网络设备的操作系统及待聚合原始报文的类型等因素进行确定,在此不做具体限定。

在一种实施方式中,上述按照预设的聚合报文格式,对读取的所述聚合信息对应的待聚合原始报文进行聚合,得到聚合报文的方式可以包括:

将所述聚合信息对应的每个待聚合原始报文分别作为一个报文单元,为每个报文单元添加单元标识,并在每个报文单元中记录该报文单元的报文长度;对所述聚合信息对应的所有报文单元进行聚合,得到聚合报文。

可以理解的是,待聚合原始报文一般为多个,那么外围设备便可以将每个待聚合原始报文分别作为一个报文单元,为每个报文单元添加单元标识,还可以在每个报文单元中记录该报文单元的报文长度,然后对这些报文单元进行聚合,进而得到聚合报文。其中,聚合报文的报文头可以包括该聚合报文包括的报文单元的总个数。也就是说,外围设备还可以将报文单元的总个数添加至聚合报文的报文头中,以便后续过程中主机cpu对聚合报文的处理。

s107,产生聚合报文接收中断,通知主机cpu对所述聚合报文进行接收处理。

外围设备获得聚合报文后,便可以产生报文接收中断,以通知主机cpu对该聚合报文进行接收处理,进而,主机cpu便可以通过中断方式接收该聚合报文,并对该聚合报文进行相应处理。

可见,本发明实施例所提供的方案中,网络设备中的外围设备获得并缓存从外部接收的原始报文后,提取报文信息放入报文信息队列,并统计提取到的所有报文信息中报文长度的总长度,根据总长度及等待时间进行判断,进而生成聚合信息,然后根据取出的聚合信息读取待聚合原始报文,按照预设的聚合报文格式,对待聚合原始报文进行报文聚合,得到聚合报文,然后产生聚合报文接收中断,通知主机cpu对所述聚合报文进行接收处理。由于外围设备可以将多个原始报文进行聚合,得到聚合报文,再通知主机cpu进行处理,主机cpu只需中断一次以接收该聚合报文,cpu中断次数明显减少,大大降低了cpu的资源消耗。

作为本发明实施例的一种实施方式,外围设备获得并缓存从外部接收的原始报文时,上述方法还可以包括:

外围设备记录接收到所述原始报文的时间。

为了方便在后续处理过程中,主机cpu可以获得接收到每一个原始报文的准确时间,外围设备在接收到原始报文时,可以记录接收到该原始报文的时间。其中,接收到每一个原始报文的时间可以以时间戳的形式记录,这样可以准确记录接收每一个原始报文的时间,而且更方便后续处理过程中主机cpu对聚合报文的处理。

对于外围设备获得并缓存从外部接收的原始报文时,记录接收到所述原始报文的时间的情况而言,作为本发明实施例的一种实施方式,外围设备在每个报文单元中记录该报文单元的报文长度的步骤之后,上述方法还可以包括:

在每个报文单元中记录接收到该报文单元对应的原始报文的时间。

可以理解的是,外围设备在每个报文单元中记录接收到该报文单元对应的原始报文的时间,那么后续聚合得到的聚合报文中便包括接收到该报文单元对应的原始报文的时间,进而,主机cpu便可以获得接收到该报文单元对应的原始报文的时间。

在一种实施方式中,聚合报文格式可以如图2所示,聚合报文可以由多个asdu(报文单元)组成(图2中以两个asdu为例),每个asdu对应一个原始报文,即以太网报文,每个asdu添加有单元标识、报文长度、接收时间等信息。聚合报文的报文头一般包括该聚合报文的聚合报文标识,其所包括的报文单元的总个数(asdu个数)以及聚合报文总长度等信息。

作为本发明实施例的一种实施方式,上述聚合信息还可以包括:该聚合信息对应的第一个待聚合原始报文在缓存的地址、最后一个待聚合原始报文在缓存的地址和所有待聚合原始报文的总长度。

对于聚合信息包括该聚合信息对应的第一个待聚合原始报文在缓存的地址、最后一个待聚合原始报文在缓存的地址和所有待聚合原始报文的总长度的情况而言,在根据每个取出的报文信息中包括的待聚合原始报文在缓存中的地址,从所述缓存中读取所述聚合信息对应的待聚合原始报文的步骤之前,上述方法还可以包括:

判断从所述报文信息队列中取出的第一个报文信息中包括的原始报文在缓存中的地址、从所述报文信息队列中取出的最后一个报文信息中包括的原始报文在缓存中的地址及取出的所有报文信息包括的报文长度的总和,是否均分别与所述第一个待聚合原始报文在缓存的地址、所述最后一个待聚合原始报文在缓存的地址及所有待聚合原始报文的总长度相同;如果是,则从所述缓存中读取所述聚合信息对应的待聚合原始报文。

为了确保读取的待聚合原始报文的正确性,外围设备可以确定从报文信息队列中取出的第一个报文信息中包括的原始报文在缓存中的地址、从报文信息队列中取出的最后一个报文信息中包括的原始报文在缓存中的地址及取出的所有报文信息包括的报文长度的总和,是否均分别与第一个待聚合原始报文在缓存的地址、最后一个待聚合原始报文在缓存的地址及所有待聚合原始报文的总长度相同,如果相同,那么便说明所获取的报文信息是当前正在处理的聚合信息所对应的,进而,便可以保证该报文信息中包括的原始报文在缓存中的地址是当前正在处理的聚合信息所对应的,也就保证了读取的待聚合原始报文是当前所要聚合的。

如果不相同,说明此时可能出现了报文信息丢失或混乱的问题,那么为了避免后续过程中出现类似的问题,可以重启网络设备。

作为本发明实施例的一种实施方式,主机获取原始报文的方法可以包括:

主机cpu根据所述聚合报文的报文头包括的报文单元的总个数,以及每个报文单元的单元标识,查找每个报文单元;

从每个报文单元中,获取对应原始报文、接收该原始报文的时间及该原始报文的报文长度,并为每个原始报文添加报文头,其中,所述原始报文的报文头中包括接收该原始报文的时间和该原始报文的报文长度;

将添加有报文头的原始报文写入报文存储缓存队列,将报文存储缓存队列中的所有原始报文写入硬盘文件中,并在该硬盘文件中添加文件头,然后释放所述报文存储缓存队列。

主机cpu在通过中断方式接收到上述聚合报文后,可以根据该聚合报文的报文头包括的报文单元的总个数,以及每个报文单元的单元标识,查找每个报文单元,然后从每个报文单元中,获取对应原始报文、接收该原始报文的时间及该原始报文的报文长度,并为每个原始报文添加报文头。

在一种实施方式中,如图3所示,主机cpu得到原始报文的方式,可以包括:

s301,获取所述聚合报文的报文头中的所述总个数;

首先,主机cpu获得了聚合报文后,可以获取该聚合报文的报文头中的总个数,可以理解的是,该总个数也就是该聚合报文中所包含的原始报文的数量。

s302,根据所述单元标识,查找到第一个报文单元;

接下来,主机cpu可以根据报文单元中携带的单元标识,查找到该聚合报文中的第一个报文单元。

s303,判断已处理的报文单元的数量是否等于所述总个数,如果否,则执行步骤s304;如果是,则结束。

主机cpu查找到该聚合报文中的第一个报文单元后,便可以判断当前已处理的报文单元的数量是否等于上述总个数,如果不等于,说明该聚合报文还未解析完毕,那么便可以执行步骤s304。如果已处理的报文单元的数量等于上述总个数,说明该聚合报文已经解析完毕,那么便可以完成解析过程。

s304,获取当前查找到的报文单元中的原始报文、接收该原始报文的时间及该原始报文的报文长度;

s305,将所述接收该原始报文的时间及该原始报文的报文长度添加至所述原始报文的报文头中;

当主机cpu确定报文解析过程还未完毕时,便可以获取当前查找到的报文单元中的原始报文、接收该原始报文的时间及该原始报文的报文长度,并在解析得到的原始报文的报文头中记录接收该原始报文的时间及该原始报文的报文长度。这样,便得到了记录有接收该原始报文时间及该原始报文的报文长度的原始报文。

s306,已处理的报文单元的数量增加1,根据所述单元标识,查找下一个报文单元,并返回步骤s303。

获得了一个原始报文后,主机cpu便可以将已处理的报文单元的数量增加1,然后根据上述单元标识,继续查找下一个报文单元,并返回步骤s303进行处理,直到该聚合报文解析完毕,也就是说,直到已处理的报文单元的数量等于上述总个数,便完成对聚合报文的解析。

在获得了聚合报文包括的原始报文后,主机cpu可以将添加有报文头的原始报文写入报文存储缓存队列,将报文存储缓存队列中的所有原始报文写入硬盘文件中,并在该硬盘文件中添加文件头,然后释放该报文存储缓存队列,以便缓存后续对其他聚合报文解析得到的原始报文。

需要说明的是,上述将添加有报文头的原始报文写入报文存储缓存队列的方式、将报文存储缓存队列中的报文写入硬盘文件的方式、在该硬盘文件中添加文件头的方式以及释放报文存储缓存队列的方式,均可以采用现有技术中相应处理方式,在此不做具体限定及说明。

在一种实施方式中,上述硬盘文件可以为pcap(processcharacterizationanalysispackage,过程特性分析软件包)格式的文件,可以理解的是,在该硬盘文件中添加的文件头即为pcap文件头,可以包括文件标识、版本号、时间戳等信息,在此不做具体限定。

在另一种实施方式中,主机cpu获得原始报文后,还可以将该原始报文转发至其他网络设备,或对上述原始报文进行分析处理。主机cpu得到原始报文后,可以根据实际需要,对原始报文进行处理。

举例而言,如果上述网络设备为存储设备,那么主机cpu得到原始报文后,便可以按照上述方式将原始报文进行存储处理。如果上述网络设备为路由器等转发设备,那么主机cpu得到原始报文后,便可以根据网络结构,将原始报文转发至其他网络设备。如果上述网络设备为服务器,那么主机cpu得到原始报文后,便可以根据需要,对原始报文进行分析处理,以得到相应的分析结果。

需要说明的是,上述转发方式及分析处理方式均可以采用现有技术中的相应方式实现,本领域技术人员可以根据实际网络架构及报文类型等因素确定,在此不做具体限定及说明。

相应于上述方法实施例,本发明实施例还提供了一种网络设备,下面对本发明实施例所提供的一种网络设备进行介绍。

如图4所示,一种网络设备,所述网络设备包括:主机410和外围设备420;

所述外围设备420包括:

报文接收模块4201,用于提取所述原始报文的报文信息,将所述报文信息放入报文信息队列,其中,所述原始报文为以太网报文;

信息提取模块4202,用于提取所述原始报文的报文信息,其中,所述报文信息包括:所述原始报文的报文长度及其在缓存中的地址;

聚合控制模块4203,用于将所述报文信息放入报文信息队列,同时统计提取到的所有报文信息中报文长度的总长度,如果所述总长度与所述预设长度的差值小于预设阈值和/或所述等待时间大于预设时间,则生成用于控制原始报文聚合的聚合信息,并将所述聚合信息放入聚合信息队列,同时将所述总长度清零以重新开始统计后续提取到的所有报文信息中报文长度的总长度,其中,所述总长度初始值为零;所述聚合信息包括:待聚合原始报文的总数量;

报文聚合模块4204,用于从所述聚合信息队列的队列头取出聚合信息,对于取出到的每个聚合信息,从所述报文信息队列的队列头开始,取出数量与取出到的聚合信息中的总数量相等的报文信息,并根据每个取出的报文信息中包括的原始报文在缓存中的地址,从所述缓存中读取所述聚合信息对应的待聚合原始报文;

报文聚合模块4204,还用于按照预设的聚合报文格式,对读取的所述聚合信息对应的待聚合原始报文进行聚合,得到聚合报文;

报文传输模块4205,用于产生聚合报文接收中断,通知主机cpu对所述聚合报文进行接收处理。

可见,本发明实施例所提供的方案中,网络设备中的外围设备获得并缓存从外部接收的原始报文后,提取报文信息放入报文信息队列,并统计提取到的所有报文信息中报文长度的总长度,根据总长度及等待时间进行判断,进而生成聚合信息,然后根据取出的聚合信息读取待聚合原始报文,按照预设的聚合报文格式,对待聚合原始报文进行报文聚合,得到聚合报文,然后产生聚合报文接收中断,通知主机cpu对所述聚合报文进行接收处理。由于外围设备可以将多个原始报文进行聚合,得到聚合报文,再通知主机cpu进行处理,cpu只需中断一次以接收该聚合报文,cpu中断次数明显减少,大大降低了cpu的资源消耗。

作为本发明实施例的一种实施方式,所述报文聚合模块4204可以包括:

单元标识添加子模块(图4中未示出),用于将所述聚合信息对应的每个待聚合原始报文分别作为一个报文单元,为每个报文单元添加单元标识,并在每个报文单元中记录该报文单元的报文长度;

报文聚合子模块(图4中未示出),用于对所述聚合信息对应的所有报文单元进行聚合,得到聚合报文,其中,所述聚合报文的报文头包括所述聚合报文包括的报文单元的总个数。

作为本发明实施例的一种实施方式,所述报文接收模块4201,还可以用于在获得并缓存从外部接收的原始报文的同时,记录接收到所述原始报文的时间;

所述报文聚合模块4204还可以包括:

时间添加子模块(图4中未示出),用于在每个报文单元中记录该报文单元的报文长度之后,在每个报文单元中记录接收到该报文单元对应的原始报文的时间。

作为本发明实施例的一种实施方式,所述聚合信息还可以包括:所述聚合信息对应的第一个待聚合原始报文在缓存的地址、最后一个待聚合原始报文在缓存的地址和所有待聚合原始报文的总长度。

作为本发明实施例的一种实施方式,所述外围设备420还可以包括:

聚合判断模块(图4中未示出),用于判断从所述报文信息队列中取出的第一个报文信息中包括的原始报文在缓存中的地址、从所述报文信息队列中取出的最后一个报文信息中包括的原始报文在缓存中的地址及取出的所有报文信息包括的报文长度的总和,是否均分别与所述第一个待聚合原始报文在缓存的地址、所述最后一个待聚合原始报文在缓存的地址及所有待聚合原始报文的总长度相同;如果是,则从所述缓存中读取所述聚合信息对应的待聚合原始报文。

作为本发明实施例的一种实施方式,所述主机410,可以用于根据所述聚合报文的报文头包括的报文单元的总个数,以及每个报文单元的单元标识,查找每个报文单元;从每个报文单元中,获取对应原始报文、接收该原始报文的时间及该原始报文的报文长度,并为每个原始报文添加报文头,其中,所述原始报文的报文头中包括接收该原始报文的时间和该原始报文的报文长度;将添加有报文头的原始报文写入报文存储缓存队列,将报文存储缓存队列中的所有原始报文写入硬盘文件中,并在该硬盘文件中添加文件头,然后释放所述报文存储缓存队列。

具体地,主机的报文解析模块可以从报文接收缓存队列中取出聚合报文,按照聚合报文格式反向解析得到原始报文,添加pcap文件头后放到报文存储缓存队列中。报文解析除了要从聚合报文中得到原始报文,还应该得到原始报文的接收时间信息,以便在pcap文件头中记录原始报文的精确接收时间。报文存储缓存队列为环形缓冲区,由报文解析模块使用并声明,由报文存储模块释放。报文存储模块从报文存储缓存队列中取出添加pcap文件头的报文,并存储到sata串口硬盘的pcap格式文件中。pcap格式文件中的报文能够被wireshark等网络报文分析工具正确打开和解析。在一种实施方式中,pcap格式文件可以如图5所示,pcap文件头中可以包括文件标识、版本号等信息,每个原始报文对应的文件头中可以包括接收时间、报文长度等信息。

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

本说明书中的各个实施例均采用相关的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于系统实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。

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

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