本发明涉及大数据领域,具体涉及一种大流量环境中网络数据包的存储与快速查找领域。
背景技术:
在现有的网络监控系统中,由于在大流量网络环境下,单位时间内网络数据包的数量非常庞大,依照现有的数据包存储技术,将大量的数据包按照抓取的顺序存储到一个pcap(pcap格式文件是网络数据持久化存储的一种大文件格式,包含数据包的所有信息)文件中。
在对网络数据进行分析时,要检索符合某一约束条件或检索条件的数据包,由于pcap存储的数据与通过网卡的数据顺序一致,在检索时往往要对整个pcap文件的所有记录进行全部扫描,才能检索到全部符合要求的数据,由于pcap所存储的文件过于庞大且无序,往往要耗费大量的计算机运算能力与内存空间,甚至即便是计算机性能提升很快的当下,在使用现有pcap文件存储技术的情况下依然难以跟上庞大的网络数据的增长。
为此,有人提出了以数据库对数据进行结构化存储的方法,将网络数据存储到数据库的数据表中,但是由于数据量的庞大且随着数据表的记录增加对于数据表的维护都将越来越难以维持,所以以数据库的方式对网络数据包的存储与查找在数据量持续增长情况下依然难以维持高效率。
因此,亟需一种可以快速处理大量且持续增长的网络数据包的方法。
技术实现要素:
针对以上现状,本发明设计出一种数据包存储与快查的方法与系统,其中方法包括:
将数据包文件按照时间与大小拆分成多个第一pcap文件;
根据计算机核心数,新建若干个第二pcap文件;
将数据包的网络信息五元组中一元或多元作为拆分字段,对所述第一pcap文件中所记录的每个数据包的对应拆分字段进行哈希运算以获取其哈希值,按照所述哈希值将所述数据包存入到与哈希值满足映射关系的第二pcap文件中;
响应于接收到包含目标数据包的网络信息五元组信息的查询请求,将目标数据包的网络信息五元组中与所述拆分字段对应的信息作为检索字段,对所述检索字段进行哈希运算以获取其哈希值,根据哈希值以映射的方式寻找对应的第二pcap文件并查找与网络信息五元组对应的目标数据包;
将查找到的目标数据包输出。
在本发明的一些实施方式中,将数据包文件按照时间与大小拆分成多个第一pcap文件包括:将每分钟内获取的数据包存储到以当前时间命名的pcap文件中;响应于当前时间命名的pcap文件大小超过预定值,将所述pcap文件超出部分拆分到新的第一pcap文件中。
在本发明的一些实施方式中,所述网络信息五元组及其哈希运算算法为:
(srcip^destip^((srcport<<16)|(destport&0xffff))^protocol)%hashnum;
其中,srcip表示源ip地址、destip表示目的ip地址、protocol表示网络协议、srcport表示源端口、destport表示目的端口、hashnum表示计算机核心数。
在本发明的一些实施方式中,数据包存储与快查方法还包括:响应于第一pcap文件拆分完成,根据计算机磁盘阵列设置存储空间。
在本发明的一些实施方式中,将数据包的网络信息五元组中一元或多元作为拆分字段,对所述第一pcap文件中所记录的每个数据包的对应拆分字段进行哈希运算以获取其哈希值,包括:
确定网络场景的网络信息常用查找字段;
根据业务场景中常用的查找字段选择数据包的网络信息的五元组中的一元或多元作为拆分字段;
对每个数据的对应拆分字段进行哈希运算获取对应的哈希值。
在本发明的一些实施方式中,将目标数据包的网络信息五元组中与所述拆分字段对应的信息作为检索字段,对所述检索字段进行哈希运算以获取其哈希值,包括:
确定对第二pcap文件的映射时所使用的网络信息五元组中对应的字段;
将目标数据包的网络信息五元组与所述网络信息五元组对应的字段进行哈希运算。
在本发明的一些实施方式中,数据包存储与快查方法还包括:响应于目标数据包的网络信息五元组的检索字段数少于所述拆分字段,则启动多线程对第二pcap文件进行全量检索。
在本发明的一些实施方式中,数据包存储与快查方法还包括:响应于目标数据包的网络信息五元组的检索字段数与所述拆分字段相同,但在部分字段上包括不确定内容,则对检索字段所包含的情况进行多次哈希计算获取哈希值。
在本发明的一些实施方式中,根据所述哈希值的数量,启动多线程对所述哈希值映射到多个第二pcap文件上进行检索。
本发明的另一方面还提供了一种数据包存储与快查系统,包括以下模块:
存储预处理模块,配置用于将数据包文件按照时间与大小拆分成多个第一pcap文件;
存储文件拆分模块,配置用于据计算机核心数,新建若干个第二pcap文件;
数据包拆分存储模块,配置用于将数据包的网络信息五元组中一元或多元作为拆分字段,对所述第一pcap文件中所记录的每个数据包的对应拆分字段进行哈希运算以获取其哈希值,按照所述哈希值将所述数据包存入到与哈希值满足映射关系的第二pcap文件中;
数据包检索模块,配置用于响应于接收到包含目标数据包的网络信息五元组信息的查询请求,将目标数据包的网络信息五元组中与所述拆分字段对应的信息作为检索字段,对所述检索字段进行哈希运算以获取其哈希值,根据哈希值以映射的方式寻找对应的第二pcap文件并查找与网络信息五元组对应的目标数据包;
任务管理模块,配置用于将查找到的对应的目标数据包输出。
根据本发明所提供的一种数据包存储与快查的方法和系统,将网络数据包进行拆分,并根据网络数据包的信息,将不同的数据包分类存储到对应的pcap文件中,在检索时根据目的数据包的网络信息,通过对所述网络信息哈希运算的方式映射到存储该数据包的第二pcap文件中,缩小检索目标的范围,可有效应对网络数据包的庞大数据量以及持续增长的需要。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的实施例。
图1为本发明一种数据包存储与快查方法的实施例框图。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚明白,以下结合具体实施例,并参照附图,对本发明实施例进一步详细说明。
如图1所示,本发明一方面公开了一种数据包存储与快查方法,包括以下步骤:
s1、将数据包文件按照时间与大小拆分成多个第一pcap文件;
s2、根据计算机核心数,新建若干个第二pcap文件;
s3、将数据包的网络信息五元组中一元或多元作为拆分字段,对所述第一pcap文件中所记录的每个数据包的对应拆分字段进行哈希运算以获取其哈希值,按照所述哈希值将所述数据包存入到与哈希值满足映射关系的第二pcap文件中;
s4、响应于接收到包含目标数据包的网络信息五元组信息的查询请求,将目标数据包的网络信息五元组中与所述拆分字段对应的信息作为检索字段,对所述检索字段进行哈希运算获取其哈希值,根据哈希值以映射的方式寻找对应的第二pcap文件并查找与网络信息五元组对应的目标数据包;
s5、将查找到的目标数据包输出。
其中,在步骤s1中,以当前时间戳为文件名将当前时间段抓取到的网络数据包保存到第一pcap文件中。
在步骤s2中根据当前计算机核心数,新建与计算机核心数相同数量的第二pcap文件用于后续步骤中存储相应的数据包的全部信息。
在步骤s3中,根据实际业务场景需要选择较为合适的拆分字段,例如选择源ip地址、目的ip地址、网络协议类型三种字段作为拆分字段,对上述拆分字段进行哈希运算,计算过程如下:
将转换为整型的32位的源ip地址与32位的目的ip地址先进行异或运算;
将上述异或的运算结果与数据包所使用的网络协议与预先设定的该协议对应的整型数字编号进行异或运算进一步获得异或运算结果;
再将进一步获得的运算结果与在步骤s2中建立的第二pcap文件的个数进行取模运算。
将上述哈希运算的结果,匹配第二pcap文件,将数据包存储到匹配到的第二pcap文件中。其中,取模运算的结果对应的就是数据包应该存储在的第二pcap文件的编号。
在步骤s4中,根据步骤s3中的拆分字段,将目标数据包的网络信息与拆分字段对应的字段作为检索字段,然后对该目标数据包的检索字段进行哈希运算,运算过程同步骤s2中的计算过程,根据计算结果找到对应的pcap文件,并查找该第二pcap文件中的内容,找到满足目标的数据包。
在本实施例中,例如,在步骤s3中的拆分字段设置为源ip地址、目的ip地址、网络协议类型,那么在步骤s4中,依然选取目标数据包网络信息中的源ip地址、目的ip地址、网络协议类型,作为拆分字段,例如查找源ip地址是:100.59.168.2、目的ip地址是56.83.13.2、通信协议为tcp的所有数据包,只需要这三种信息作为检索字段,对其进行哈希运算,通过运算结果将直接映射到满足该网络要求的第二pcap文件,对pcap文件的内容做进一步的比对提取即可将源ip地址是:100.59.168.2、目的ip地址是56.83.13.2、通信协议为tcp的所有数据包全部提取出来。
在步骤s5中,将步骤s4中的查找的数据输出,可根据输出介质灵活适配。
在本发明的一些实施例中,将数据包文件按照时间与大小拆分成多个第一pcap文件包括:将每分钟内获取的数据包存储到以当前时间命名的pcap文件中;响应于当前时间命名的pcap文件大小超过预定值,将所述pcap文件超出部分拆分到新的pcap文件中。
在本实施例中,考虑到由于使用场景的不同,在某些情况下,由于抓取的网络数据包非常庞大,也会导致第一pcap文件的内容过大,所有以分钟为单位保存一次网络数据包到第一pcap文件中,同时如果该第一pcap文件大小每超过1g,将超出部分存储到新的第一pcap文件中。
在本发明的一些实施例中,网络信息五元组包括:网络协议、源ip地址、源端口、目的ip地址、目的端口。对网络信息五元组的哈希计算公式如下:
(srcip^destip^((srcport<<16)|(destport&0xffff))^protocol)%hashnum;
其中,srcip表示32位的源ip地址、destip表示32位的目的ip地址、srcport表示大小在0~65532的源端口、destport表示大小在0~65532目的端口、protocol表示网络协议对应的整型编号、“^”表示位运算中的异或运算、“<<”表示位运算中的左移运算、“|”表示位运算中的或运算、“&”表示位运算中的与运算、hashnum表示与计算机核心数相同的第二pcap文件数。
根据上述哈希计算公式,去除所述哈希计算公式中的源端口和目的端口,可得常用的三元计算公式:(srcip^destip^protocol)%hashnum;去除网络协议可得二元计算公式:(srcip^destip)%hashnum;在一些特殊情况下,可使用单一的ip地址作哈希计算公式如下:ip%hashnum。
在本发明的一些实施例中,数据包存储与快查方法还包括:响应于第一pcap文件拆分完成,根据计算机磁盘阵列设置存储空间。
在本实施例中,可根据当前计算机的存储器的存储类型是否为多磁盘阵列技术,设置存储的空间。例如对于多硬盘时,在对第二pcap文件的存储时,可将根据计算机核心数而分配的第二pcap文件均匀分布到当前计算机的所有的硬盘中,提高对第二pcap文件的读写能力,防止出现由于对单个硬盘的访问量过大导致该硬盘阻塞而影响整个系统的性能。
在本发明的一些实施例中,将数据包的网络信息五元组中一元或多元作为拆分字段,对所述第一pcap文件中所记录的每个数据包的对应拆分字段进行哈希运算以获取其哈希值,包括:确定网络场景的网络信息常用查找字段;根据业务场景中常用的查找字段选择数据包的网络信息的五元组中的一元或多元作为拆分字段;对每个数据的拆分字段进行哈希运算获取对应的哈希值。
在本实施例中,对于拆分字段的选取可根据业务类型而灵活变化,比如,对于监控某些服务器之间的通信时,所监控获取到某个服务器网络数据包的收发数据(所述服务器为不对外公开的服务器,仅仅是服务器之间进行通讯,在不泄密的情况下,网络用户不知道本服务器),其数据特征应该是只与已知的其他服务器通信,也就是说该服务器所有的数据包都是与固定的几个ip地址通信。此时,在进行拆分字段的选择时,可只对目的ip地址进行哈希计算,将不同的ip地址映射到对应的第二pcap文件上,并将该目的ip的所有数据包全部存储到满足映射关系的第二pcap文件上。
进一步,如果ip地址个数小于第二pcap文件的个数,则会存在多余的第二pcap文件不会写入数据的情况,也就是说会有多余的第二pcap文件。如果服务器之间被攻击有其他设备的ip获取服务器的数据时,将会捕捉到来自超出服务器之外的ip的数据包,依照上述哈希计算方法,捕捉到的攻击数据包将会存储到多余的第二pcap文件中,在这种情况下,仅可对多余的第二pcap文件进行内容监控,就可发现是否有其他网络设备访问服务器。
在一些情况下,如果服务器ip个数远多于分配的第二pcap文件个数,则每个第二pcap文件可能对应多个服务器ip的数据包。
在本发明的一些实施例中,将目标数据包的网络信息五元组中与所述拆分字段对应的信息作为检索字段,对所述检索字段进行哈希运算以获取其哈希值,包括:
确定对第二pcap文件的映射时所使用的网络信息五元组中对应的字段;
将目标数据包的网络信息五元组与所述网络信息五元组对应的字段进行哈希运算。
在本实施例中,在获取业务需要的某协议或者某ip的数据包时,首先,应先判断要查询的第二pcap文件在存储时所采用的拆分字段是对应网络信息五元组中的哪些信息,判断所提供的网络信息五元组的信息是否满足了拆分字段的包括网络信息五元组信息,如果所提供的网络信息五元组的信息,满足拆分字段的网络信息五元组,则按照所提供的网络信息五元组与拆分字段对应的字段进行哈希运算。
在本发明的一些实施例中,数据包存储与快查方法还包括:响应于目标数据包的网络信息五元组的检索字段数少于所述拆分字段,则启动多线程对第二pcap文件进行全量检索。
在本实施例中,由于提供的检索字段少于拆分字段,无法准去经过计算获取到对应的第二pcap文件的哈希值,因此只能对所有的第二pcap文件进行全量检索,对每个第二pcap文件进行排查,找出对应的目标数据。
在本发明的一些实施例中,还包括:响应于目标数据包的网络信息五元组的检索字段数与所述拆分字段相同,但在部分字段上包括不确定内容,则对检索字段所包含的情况进行多次哈希计算获取哈希值。
在本实施例中,要查询的目标数据的网络信息五元组所包含的数据满足拆分字段的对应关系,但是在其中某个字段上可能存在多种情况,。例如,拆分字段为:源ip地址、目的ip地址、网络协议类型,要查找源ip地址是:100.59.168.2、目的ip地址是56.83.13.2之间的通信信息,在这种清下,地址100.59.168.2到56.83.13.2的通信,所使用的协议可能多种多样,但是要监测两个设备之间的通信时,如果给出单一协议的检索信息,经过计算将会指定到某个第二pcap文件,从该第二pcap文件中,只能找到该协议的信息,所以可分多次以不同协议的检索字段进行哈希,通过哈希计算获得的多个哈希值找到对应的多个第二pcap文件
在本发明的一些实施例中,启动多线程对所述哈希值映射到多个第二pcap文件上进行检索。在本实施例中,由于哈希运算的速度远远高于对文件内容检索的速度,因此,为保持对数据包内容的检索过滤的性能要求,需要使用多线程并发对多个第二pcap文件进行检索。
本发明的另一方面还提出了一种数据包存储与快查系统,包括:
存储预处理模块,配置用于将数据包文件按照时间与大小拆分成第一pcap文件;
存储文件拆分模块,配置用于据计算机核心数,新建若干个第二pcap文件;
数据包拆分存储模块,配置用于将数据包的网络信息五元组中一元或多元作为拆分字段,对所述第一pcap文件中所记录的每个数据包的对应拆分字段进行哈希运算获取其哈希值,按照所述哈希值将所述数据包存入到与哈希值满足映射关系的第二pcap文件中;
数据包检索模块,配置用于响应于接收到包含目标数据包的网络信息五元组信息的查询请求,将目标数据包的网络信息五元组中与所述拆分字段对应的信息作为检索字段,对所述检索字段进行哈希运算以获取其哈希值,根据哈希值以映射的方式寻找对应的第二pcap文件并查找与网络信息五元组对应的目标数据包;
任务管理模块,配置用于将查找到的对应的目标数据包输出。
在一些实施例中,任务模块还包括配置用于分配存储任务和检索任务。
在本发明的实施例中,在数据包存储与快查系统运行时,通过任务模块部署存储与检索任务。
存储任务首先调用存储预处理模块将抓取的网络数据包存入第一pcap文件,之后调用存储文件拆分模块,存储文件拆分模块根据计算机核心数建立多个第二pcap文件,进一步通过数据包拆分存储模块读取存储预处理模块所存储的第一pcap文件中的数据包记录,通过在任务管理模块指定的拆分字段对所述数据包记录的网络信息进行哈希计算得到每个数据包记录的哈希值,进而根据哈希值将每个数据包记录存储到对应的第二pcap文件中。
检索任务首先调用数据包检索模块,数据包检索模块根据任务部署模块的检索信息,判断检索信息与要进行检索的第二pcap文件的拆分字段信息是否对应,如满足对应关系则将检索信息作为检索字段进行哈希运算计算出哈希值,进而通过哈希值找到与哈希值对应的第二pcap文件,再对对应的第二pcap文件进行记录检索。如果检索信息与拆分字段不满足对应关系,则根据检索信息与拆分字段的关系决定采用全量文件检索还是多次哈希匹配多个第二pcap文件进行记录检索。全量检索与匹配多次哈希检索都以多线程的方式并行执行。
通过本发明所提出的一种数据包存储与快查方法与数据包存储与快查系统,将现有的对抓取的数据包依据抓取时间连续存储的方式,改变为根据网络信息五元组进行哈希运算,并根据哈希运算结果将抓取的数据包进行分类存储,在检索时根据检索条件的网络信息五元组进行哈希运算,再根据哈希运算结果匹配对应的存储文件。可大大缩小在数据检索时对计算机内存与计算性能的消耗,提升了大数据中心的数据检索分析能力。
1.一种数据包存储与快查方法,其特征在于,包括:
将数据包文件按照时间与大小拆分成多个第一pcap文件;
根据计算机核心数,新建若干个第二pcap文件;
将数据包的网络信息五元组中一元或多元作为拆分字段,对所述第一pcap文件中所记录的每个数据包的对应拆分字段进行哈希运算以获取其哈希值,按照所述哈希值将所述数据包存入到与哈希值满足映射关系的第二pcap文件中;
响应于接收到包含目标数据包的网络信息五元组信息的查询请求,将目标数据包的网络信息五元组中与所述拆分字段对应的信息作为检索字段,对所述检索字段进行哈希运算以获取其哈希值,根据哈希值以映射的方式寻找对应的第二pcap文件并查找与网络信息五元组对应的目标数据包;
将查找到的目标数据包输出。
2.根据权利要求1所述的数据包存储与快查方法,其特征在于,所述将数据包文件按照时间与大小拆分成多个第一pcap文件包括:
将每分钟内获取的数据包存储到以当前时间命名的pcap文件中;
响应于当前时间命名的pcap文件大小超过预定值,将所述pcap文件超出部分拆分到新的第一pcap文件中。
3.根据权利要求1所述的数据包存储与快查方法,其特征在于,所述网络信息五元组及其哈希运算算法为:
(srcip^destip^((srcport<<16)|(destport&0xffff))^protocol)%hashnum;
其中,srcip表示源ip地址、destip表示目的ip地址、protocol表示网络协议、srcport表示源端口、destport表示目的端口、hashnum表示计算机核心数。
4.根据权利要求1所述的数据包存储与快查方法,其特征在于,还包括:
响应于第一pcap文件拆分完成,根据计算机磁盘阵列设置存储空间。
5.根据权利要求1所述的数据包存储与快查方法,其特征在于,所述将数据包的网络信息五元组中一元或多元作为拆分字段,对所述第一pcap文件中所记录的每个数据包的对应拆分字段进行哈希运算以获取其哈希值,包括:
确定网络场景的网络信息常用查找字段;
根据业务场景中常用的查找字段选择数据包的网络信息的五元组中的一元或多元作为拆分字段;
对每个数据的对应拆分字段进行哈希运算获取对应的哈希值。
6.根据权利要求1所述的数据包存储与快查方法,其特征在于,所述将目标数据包的网络信息五元组中与所述拆分字段对应的信息作为检索字段,对所述检索字段进行哈希运算以获取其哈希值,包括:
确定对第二pcap文件的映射时所使用的网络信息五元组中对应的字段;
将目标数据包的网络信息五元组与所述网络信息五元组对应的字段进行哈希运算。
7.根据权利要求1所述的数据包存储与快查方法,其特征在于,还包括:
响应于目标数据包的网络信息五元组的检索字段数少于所述拆分字段,则启动多线程对第二pcap文件进行全量检索。
8.根据权利要求1所述的数据包存储与快查方法,其特征在于,还包括:
响应于目标数据包的网络信息五元组的检索字段数与所述拆分字段相同,但在部分字段上包括不确定内容,则对检索字段所包含的情况进行多次哈希计算获取哈希值。
9.根据权利要求8所述的数据包存储与快查方法,其特征在于:
根据所述哈希值的数量,启动多线程对所述哈希值映射到多个第二pcap文件上进行检索。
10.一种数据包存储与快查系统,包括:
存储预处理模块,配置用于将数据包文件按照时间与大小拆分成多个第一pcap文件;
存储文件拆分模块,配置用于据计算机核心数,新建若干个第二pcap文件;
数据包拆分存储模块,配置用于将数据包的网络信息五元组中一元或多元作为拆分字段,对所述第一pcap文件中所记录的每个数据包的对应拆分字段进行哈希运算以获取其哈希值,按照所述哈希值将所述数据包存入到与哈希值满足映射关系的第二pcap文件中;
数据包检索模块,配置用于响应于接收到包含目标数据包的网络信息五元组信息的查询请求,将目标数据包的网络信息五元组中与所述拆分字段对应的信息作为检索字段,对所述检索字段进行哈希运算以获取其哈希值,根据哈希值以映射的方式寻找对应的第二pcap文件并查找与网络信息五元组对应的目标数据包;
任务管理模块,配置用于将查找到的对应的目标数据包输出。
技术总结