CN106452868B - 一种支持多维度聚合分类的网络流量统计实现方法 - Google Patents
一种支持多维度聚合分类的网络流量统计实现方法 Download PDFInfo
- Publication number
- CN106452868B CN106452868B CN201610888795.3A CN201610888795A CN106452868B CN 106452868 B CN106452868 B CN 106452868B CN 201610888795 A CN201610888795 A CN 201610888795A CN 106452868 B CN106452868 B CN 106452868B
- Authority
- CN
- China
- Prior art keywords
- flow
- polymerization
- chained list
- data
- node
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L47/00—Traffic control in data switching networks
- H04L47/70—Admission control; Resource allocation
- H04L47/82—Miscellaneous aspects
- H04L47/827—Aggregation of resource allocation or reservation requests
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L41/00—Arrangements for maintenance, administration or management of data switching networks, e.g. of packet switching networks
- H04L41/32—Specific management aspects for broadband networks
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L45/00—Routing or path finding of packets in data switching networks
- H04L45/24—Multipath
- H04L45/245—Link aggregation, e.g. trunking
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L47/00—Traffic control in data switching networks
- H04L47/10—Flow control; Congestion control
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L63/00—Network architectures or network communication protocols for network security
- H04L63/02—Network architectures or network communication protocols for network security for separating internal from external traffic, e.g. firewalls
- H04L63/0227—Filtering policies
- H04L63/0263—Rule management
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L63/00—Network architectures or network communication protocols for network security
- H04L63/14—Network architectures or network communication protocols for network security for detecting or protecting against malicious traffic
- H04L63/1408—Network architectures or network communication protocols for network security for detecting or protecting against malicious traffic by monitoring network traffic
Landscapes
- Engineering & Computer Science (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Computer Security & Cryptography (AREA)
- Computer Hardware Design (AREA)
- Computing Systems (AREA)
- General Engineering & Computer Science (AREA)
- Business, Economics & Management (AREA)
- General Business, Economics & Management (AREA)
- Data Exchanges In Wide-Area Networks (AREA)
Abstract
本发明公开了一种支持多维度聚合分类的网络流量统计实现方法,采用多级存储的方式和数据格式,使用灵活可扩展性强,占用存储空间小,可满足不同应用需求。原始报文存储于数据库,原始流量存储于二进制文件,保证了大量数据存储和完整性的要求;流量链表存储于内存中,提高了用户访问数据的速度,并支持多粒度的流量统计分析。本发明引入三阶HASH聚合流量链表矩阵,提高了流量查询访问速度,帮助用户快捷迅速地找到查询信息。本发明的支持多维度的流量聚合分类算法,可根据应用的各个时间段划分,开展动态流量分析,也支持基于原、目的地址的各种应用编成编组的变化来分析业务流量聚合,实现了五关键字灵活组合的多维流量聚合分类统计分析。
Description
技术领域
本发明涉及一种支持多维度聚合分类的网络流量统计实现方法。
背景技术
网络流量统计及分析是掌握网络行为的基础,是用于分析网络状况、掌握流量特性的有效方法,可以通过收集数据或报文踪迹,定量的分析不同的网络应用在网络中活动规律,能够为网络运营商提供一个有效控制和区分网络流量的依据;此外,通过统计和分析这些构成业务流量的时间序列获得用户业务行为特征,从中抽取能刻画网络流量特征的参数,实现对业务流量建模、模拟和性能分析以及对未来用户业务需求的预测。可见,深入了解网络流量的组成成分、产生根源以及流行网络业务的变化趋势等,对网络规划、网络运维、QoS保障、网络安全等都有重要的意义。目前流量统计的设计大都是基于NetFlow实现的,NetFlow根据IPv4报文的目的IP地址、源IP地址、目的端口号、源端口号、协议号、ToS、输入接口或输出接口来定义流,相同的七元组标识为同一条流,其特点是流量统计是基于IP流的,根据这些信息可以对协议(应用)、主机IP(用户)以及服务等进行统计和趋势分析,从而实现网络流量监测,用户应用监控,网络安全,网络规划以及异常流量检测等功能。但是,NetFlow仅对IP数据流的报文数量、报文总长度等概括的统计,没有IP数据流量中每一个数据报文的特征(如:报文长度,报文间隔发送时间),也就难以获得细粒度流量特征。并且现有许多业务流量单纯从七元组标识难以进行区分,必须基于应用层的协议识别,通过分析应用层包头,来区分业务流量。
网络流量统计与分析中的另外一个核心问题就是如何对采集来的数据进行归纳整理和存储,尤其针对高速大流量网络环境所产生的海量数据。这些原始的信息数据量不但大而且复杂,这给网络流量原始数据的处理和存储组织带来了一定难度。可见,有效的原始数据整理和存储是满足不同粒度的网络流量识别和进行全面流量统计分析的基础。
在网络流量统计分析中常常需要根据用户分析的需要,为了分析流量走势,开展各种网络流量的查询,而直接进行数据库的查询,往往会由于统计数据分散存储于表中,导致查询时间非常长,系统效率非常低。因而有必要对网络流量进行分类聚合。所谓流量聚合,是指根据一定聚合条件将原始流记录进行流量合并,实现多条流合并为一条的过程。由于聚合后的流记录将比原始流记录数量大大减少,使得用户查询数据流量的效率也将明显提高,可见,建立灵活高效的流量聚合的方法也是提高数据查询即流量分析效率的关键和重要手段。目前,一维、二维的流量聚合分类算法比较多,如果要满足用户的多种流量聚合的查询需求,必须将每一种用户可能的流量聚合都逐一整理出来,往往导致前期数据整理耗费的时间长,其占用的存储空间就非常大。而目前对高维(指二维以上)聚合分类支持的算法要么要求的内存空间过大无法满足低成本的要求,要么分类查询的速度较低,无法满足用户流量统计分析应用需求。
因此有必要寻找一种流量聚合的数据处理和组织的方法,既占用较少的存储空间,同时又能灵活的适应用户各种流量聚合查询的需要。
发明内容
为了克服现有技术的上述缺点,本发明提供了一种支持多维度聚合分类的网络流量统计实现方法,旨在满足不同协议层面的网络流量识别的需求。本发明提出了一套可扩展的原始报文信息存储格式,该数据格式不仅包含IP数据的七元组信息,而且还存储了原始报文的应用层协议头信息,既可以满足七元组IP数据流量识别的需要,还可以满足应用层的DPI流量识别(Deep Packet Inspection,深度报文检测,一种基于应用层的协议识别技术)的需要。在此基础上,提出了原始数据流量的数据结构,该数据结构既存储了原始流量统计信息,还存储了原始流量组成的每个报文长度和发送时间信息,通过获取流量的时间序列,可以进行数据流量的概率特性(如:相关性分析、聚类分析等)的深度挖掘和特征拟合,满足了细粒度流量统计分析需要。此外,通过分析目前用户常见的流量聚合查询的需要,设计了一种流量聚合的处理算法,其中三阶聚合流量矩阵占用存储空间少,并且能够灵活地实现用户多维流量聚合查询的要求,查询高效快捷。
本发明解决其技术问题所采用的技术方案是:一种支持多维度聚合分类的网络流量统计实现方法,包括如下内容:
一、采用数据库对原始IP报文信息进行存储;
二、原始数据流的存储:
1)定义原始流的数据结构:
采用一个流量记录节点记录一条流量信息,采用链表的方式将所有的流量记录节点连接起来;一个流量记录节点包含流量头链表和与其链接的报文链表;
2)原始数据流量的存储:
在需要细粒度的流量统计时,将流量头链表和报文链表存储到内存中,等待用户查询和读取;在不需要细粒度的流量统计时,将流量头链表信息存储于文件中;
三、流量聚合:
1)按照时间粒度进行流量聚合:聚合项包括流量值和包个数,生成流量头链表,存储于内存中;
2)按照聚合条件进行流量聚合:根据用户查询条件开展流量聚合,生成三阶聚合流量链表矩阵;
四、流量查询:
1)获得满足各阶条件下的从ts到te时间段中的聚合流量链表;
2)参数初始化;
3)找寻Slink、Dlink、Plink三条聚合流量链表中t至t+T时间段的流量节点;
4)寻找t至t+T时间段中三条聚合流量链表的公共节点;
5)以T为步长进行循环推进,直至t≥te时查询结束,输出结果。
与现有技术相比,本发明的积极效果是:本发明采用多级存储的方式和数据格式,使用灵活可扩展性强,占用存储空间小,可满足不同应用需求。原始报文存储于数据库,原始流量存储于二进制文件,保证了大量数据存储和完整性的要求;流量链表存储于内存中,提高了用户访问数据的速度,并支持多粒度的流量统计分析。此外,本发明定义了一种支持多维度的流量聚合分类算法,可根据应用的各个时间段划分,开展动态流量分析,也支持基于原、目的地址的各种应用编成编组的变化来分析业务流量聚合,实现了五关键字灵活组合的多维流量聚合分类统计分析。该算法引入三阶HASH聚合流量链表矩阵,提高了流量查询访问速度,帮助用户快捷迅速地找到查询信息,并且具有很强的灵活性,通过改变聚合分类的维度信息,改变数据内存中的信息,占用内存小,能够便捷地满足用户多种流量分析需求。
附图说明
本发明将通过例子并参照附图的方式说明,其中:
图1为本发明的工作流程示意图;
图2为数据流量记录节点链表结构示意图;
图3为三阶聚合流量矩阵示意图;
图4为多维聚合流量查询流程示意图。
具体实施方式
本发明的目的就是设计一套灵活和高效的网络流量统计的数据存储和整理的方法,通过制定扩展性高、信息完备的数据格式,采用数据库、文件、内存多手段和多级的存储方式,以满足对网络流量的不同协议层面不同粒度的流量识别和查询的要求,建立重用性高、扩展性强、检索速度快的三阶聚合流量矩阵,满足用户多种数据流量聚合的查询和检索需要。本发明方法的空间占用低、执行速度快、应用灵活高效,非常适合大规模网络和海量数据流量统计分析的应用场景。
如图1所示,本发明采用的技术方案的工作流程分为四步,具体描述如下:
1、原始IP报文信息的存储:
从路由器的流量采集端获得原始的IP报文信息的数据量特别巨大,需要对采集的数据进行初步的归类整理才能保存,要求保存内容必须完整,便于后期的数据统计分析。因此,考虑采用数据库的存储方式。原始报文信息数据库是信息交换的重要场所,网络流量统计分析系统需要访问数据库得到某次试验的最原始的流量数据,根据用户的不同需求,进行各种统计分析活动。因此数据库表结构的设计对于统计分析的性能而言非常重要。
数据库存储最原始的业务流量信息,按时间将每个IP报文的信息和应用层信息存储下来,报文信息存储格式的定义如下表:
2、原始数据流的生成与存储:
当采集到业务报文数据并存入数据库后,下面的工作就是根据原始报文信息进行IP数据流量的识别和分类,也就是原始数据流的生成过程。一个网络中的流通常是指在一个给定的源和目标之间的单向的一组数据包序列,广义的来说,网络流量指通过同一路由器的满足相同特征条件的数据包序列,这里的特征条件包含网络中各协议层的属性特征,比如:端口号、协议号、应用层的协议特征等。可以根据数据包头(如协议类型、tos或目标地址的一部分)、数据包本身(如数据包的大小)和数据包处理的结果(如在路由器中数据包的输出端口)来定义一个流。IP数据流的分类方法非常多,本发明不对其做具体研究,这里按照常用的方式,将一个数据流的特征按照常规的七个关键字段进行描述。即所有具有相同的源/目标IP地址、源/目标端口、协议、服务类型以及网络设备输入/输出的逻辑网络端口的数据包都被分组在同一个流中,并在此流中对数据包和字节进行统计计数。
1)原始流的数据结构的定义
我们采用一个流量记录节点(flow node)记录一条流量信息,采用链表的方式将所有的流记录节点(flow node)连接起来。一个流量记录节点包含flow_head链表和pkt_inf链表,如图2所示。每一个流量头链表(flow_head)包含该流量分类特征和流量统计信息。其链接的报文链表(pkt_inf)则记录了该流中,每一个报文的长度、IP标识(通过该标识可以从数据库中找到该报文应用层数据)、报文间隔时间等所有详细信息,这为原始流量的细粒度的统计分析、业务行为分析、业务流量仿真拟合提供了良好的支持能力。
flow_head的数据结构定义如下:
需要说明的是flow_head的数据结构中定义了appType变量,当需要从应用层进行流量的分类识别的时候,会用到该值。首先用户需要根据应用层流量识别的协议特征字来定义不同appType的取值,可通过定义数组的方式与appType进行一一映射,应用层流量识别的过程是从数据库中AppDataLen和AppData字段中需找满足事先定义的协议特征字,从而得到appType值并写入流量链表中。
pkt_inf的数据结构定义如下:
struct pkt_inf{
ushort pktID;//数据包的IP标识
ushort pktSize;//数据包字节数
double intervalTime;//数据包时间间隔,精确到毫秒
struct pkt_inf*next;
}
通过pkt_inf的流量报文链表的方式可记录将流量中的每一个报文都记录下来,因而能够获得流量报文的时间序列和报文长度分布等据流量的概率特性,可支持更细粒度的流量分析。当需要用户需要这种细粒度的流量分析时,图2的原始流量链表(包括:flow_head和pkt_inf的所有信息)会存储到内存中,等待用户查询和读取。若没有此需要,则将内存中原始流量链表中的flow_head数据结构信息存储于文件中,以备后续流量聚合分析用。
2)原始数据流量生成过程
(1)首先根据选定的路由器和时间段,从数据库搜索满足条件的报文,根据七关键字段进行流量统计,读取到满足条件的第一个报文,创建第一个流量头链表节点(flow_head)。
(2)继续搜索数据库,查找满足时间和路由器ID的报文,找到后,通过七关键字段搜索flow_head链表,检查新到达的数据包的属性是否满足flow_head中己有流,如果满足,则对该已有flow_head链表节点中的流统计信息(流结束时间、报文数、流的总字节数)进行更新,创建一个新的报文链表节点(pkt_inf),记录报文长度、与上一个报文的间隔时间、报文IP标识记录等信息,插入到pkt_inf链表尾部。
(3)如果在flow_head链表中没有找到满足条件的流量,则创建一个新的流量(flow_head节点)将该节点插入到flow_head的尾部。
(4)重复第2步,直到完成对数据库的搜索。
(5)将每个流量记录节点按照流量记录节点链表的顺序依次写入原始流数据文件中。
3)原始数据流量的存储
前面提到原始数据流量首先生成于内存中,当不需要细粒度的流量统计分析时候,可将流量头链表信息(包含flow_head和pkt_inf的链表信息)存储于文件中,这样做的好处就是不会受内存大小的限制而且便于离线统计分析的数据重用。因为原始流量数据是为后续的流量聚合提供支撑,会直接面临用户查询,如果按照常规的数据库存储方式保存流数据,数据库的插入效率、文件大小都会成为网络流量统计分析的瓶颈。虽然内存读取迅速,但空间大小受限,难以满足巨大的原始流量信息存储。最简单的解决方式就是采用二进制文件的方式保存流数据,即把每条流的数据中有价值的字段以二进制的形式、按照时间顺序写入流数据文件中。如果把所有的数据保存在一个文件中是不可能的,而且会导致统计分析过程中数据检索效率极度低下。由于对流数据的检索通常情况下都会限定在某段时间内某一个路由器的流量数据,因此最为方便可行的方法就是按照时间段分割流数据文件,每个时间段(用户可根据网络流量分析的数据量和网络运行时间的具体情况进行设置)内将缓冲区中的流数据保存到物理文件中,物理输出文件的命名规则为:DevId_YYYYMMddhhmm.data,其中,DevId为流量所在的的路由器的编号,YYYYMMddhhmm代表文件中流数据开始时间,假设按照1小时进行时间分段,则文件名称为100l_201501011810.data,表明这个文件中包含了从2015年1月1日18:10到19:10之间,由编号为1001的路由器产生的所有的原始流记录。需要说明的是,流量文件没有对流数据进行聚合等一系列的操作,只是对从数据库中读出原始报文数据,经过七关键字过滤规则或者是应用层特征信息生成的原始数据流中的flow_head信息进行了存储,按照每一条流记录占用一行,保存到文件中。在后续的流量分析中,需要读取这些“原始的材料”根据用户分析的需要对其进行后继的流量聚合分类处理。
3、流量多维聚合与存储
原始数据流量的数据量非常庞大,用户直接从每一条流数据的原始记录将会使对数据进行查询和统计分析时,会产生效率低下的问题。流量聚合的过程是将满足相同聚合条件和时间粒度的多条原始数据流进行流量叠加,同时保留聚合项,以实现原始流的压缩整理。
流量聚合有三个关键要素:聚合条件,聚合项和时间粒度。流量聚合条件是由原始数据流量的关键字段组合派生出来的,所谓多维度聚合即指多种不同的聚合条件。流量聚合的目的主要是提高数据查询即流量分析的效率,因而在设计聚合策略时应充分考虑实际需要。以流量分析常用的查询条件为基础设计聚合条件,或将查询条件直接作为聚合条件,便于通过流量聚合的过程得到流量分析所需的统计结果。分析系统直接查询聚合结果数据表,即可得到统计结果,避免大量的数据表连接和统计运算。目前比较常见的流量聚合有:协议维度聚合、地址(包括源IP地址、目的IP地址)维度聚合、端口(包括:源端口、目的端口)维度聚合。因此,本发明考虑以这五维作为最多支持的聚合维度。所谓聚合项是指满足相同聚合条件的叠加项,如总报文数、总包长等参数信息,这些可根据用户需要进行设定。时间粒度,是指流量聚合的时间段(如按照5分钟、1小时、1天的时间段进行聚合),时间粒度越大,数据量的压缩越大,但是流量的细节信息丢失就越严重,因而时间粒度根据用户的流量信息分析粗细粒度的需要来确定。
1)聚合流量的生成
流量聚合问题其实质是一个分类的多目标优化问题,而不是单目标优化问题。不能一味的追求速度,而导致存储空间的爆炸,必须是在时间、空间、灵活性三者之间寻求一个折中。这样不仅可以加快流量聚合分类查询的速度,同时也可以解决内存空间的爆炸问题,满足用户各种流量查询的灵活性需要。由于Hash表具有从key快速映射到value的特点,这种特点对于快速的内存级流量聚合非常有效。因此,采用hash表作为聚合流快速匹配的存储结构,设计了一种基于Hash的三阶流量聚合算法(矩阵阶数过多虽然在速度和灵活性上增强了,势必导致空间占用过高,因此,选择三阶比较合适),其流量聚合过程分两步:
(1)按照时间粒度进行流量聚合。主要依据用户关心的网络路由器和流量起始时间,选定相应的原始流量数据文件,读取原始流量数据文件中的原始流量信息,按照时间粒度进行流量聚合,聚合项包括流量值和包个数,最后生成flow_head流量链表。因为按时间粒度进行流量聚合后不再需要保存流量中每一个报文的信息,所以flow_head的数据结构中的pkt_inf_ptr为空,即按时间段的聚合流量链表中不存放pkt_inf链表。基于时间粒度的聚合流量链表存储于内存中,为基于聚合条件的流量聚合做准备;
(2)按照聚合条件进行流量聚合。按照聚合条件的流量聚合是以时间粒度为基础,根据用户查询条件(如协议号、源/目的地址、端口号)开展流量聚合,生成如图3的三阶聚合流量链表矩阵。图3中按照聚合条件生成的HASH聚合流量链表中,以字母表示的聚合流量节点的数据结构定义如下:
struct flow_Link{
struct flow_head*data;
struct flow_Link*next;
}
数据结构中data指针指向基于时间粒度的聚合流量链表中满足聚合条件的flow_head节点的内存地址,next指针指向下一个HASH聚合流量链表节点。这样依据三个HASH函数,生成三条HASH流量链表。
2)三阶聚合流量链表矩阵的设计
在原始流量生成中已经基于7关键字段(或者说7个分类规则域)进行了流量的分类,但是实际的在流量统计分析过程中,通常基于源/目的IP、源/目的端口和协议号五个关键字。而通常应用业务在IP层特征通过协议以及端口进行定义。通信网络业务流量聚合分类分析过程中,通常会考虑基于客户、服务的关系进行流量划分,而应用关系通常是与IP地址相关的,因而本发明首先设计的基于HASH的三阶流量链表矩阵的分类方法中。如图3所示,首先以源地址和目的地址进行流量分类的HASH链表,并将其作为三阶流量链表矩阵的X轴和Y轴;而将目的/源端口和协议的关键字段一起来共同构造无冲突HASH链表(作为三阶矩阵中第Z轴),由于该三关键字段的组合数目非常少,避免了空间爆炸。这里需要说明的是上述三阶流量链表矩阵中,三阶的关键字是根据常用的流量聚合需求而选取的,也可以根据用户的特定需求进行调整和变化,流量聚合的方法和三阶聚合流量矩阵的结构是不变的。
如图3所示,本发明使用了三张Hash表来保存相同srcIP的聚合流信息、相同dst_ip的聚合流信息以及相同的源端口号、目的端口号、协议号的聚合流信息。图3中顶侧的hash表存放基于源IP地址的聚合流信息,其表空间最大为Xmax;图3底侧的hash表存放基于目的IP地址的聚合流信息,其表空间最大为Ymax;图3中左侧的hash表存放基于源端口、目的端口、协议号三个关键字的聚合流信息,其表空间最大为Zmax。以源IP地址的Hash表为例,所有具有相同srcIP的流将被映射到同一个表项中,由于Hash冲突的存在,具有不同的srcIP的流也有可能被映射到同一个表项,为了解决这个问题,我们在每个Hash表项中保存一个链表,其中包含了所有被映射到此表项的srcIP键值;在图3中,源IP地址192.168.5.1、10.16.55.7和66.77.88.50的键值都映射到了哈希函数值253的表项上。除此之外,每个源IP地址节点下都包含另外一个链表,存储了该源地址(srcIP)下所有流信息;目的IP地址Hash表具有类似的结构,每个表项包含一个链表,包含了所有映射到此表项的destIP,在图3中,目的IP地址192.0.15.1、210.200.15.7都映射到哈希函数值为123的表项,同时,每个目的地址节点都包含一个链表,其中包含了该目的地址下的所有流信息;同样以源端口、目的端口、协议号为关键字的哈希表,并且构造无冲突哈希函数,使得每一个源端口、目的端口、协议号的键字唯一映射一个哈希表项,每一表项以链表的形式存放了所有具有相同源端口、目的端口、协议号的聚合流量信息。如图3中,哈希函数值为56的表项中存储了源端口为21、目的端口为22、协议号为55的聚合流量信息。
下面分别对三张HASH表的哈希函数的定义进行说明:
3)基于源端口、目的端口、协议号的哈希函数的定义
通常,目的端口和源端口(32位)的取值往往是0-65535中极少的一部分,协议域(16位)的取值是0-255中很少几个值。因此实际的过滤规则端口和协议域的取值(或取值范围)的不同情况的组合数目是非常有限的;并且变化不大,将它们合并成一阶,降低阶数后以此三个关键的字段为输入键值,构建hash(s,d,p)函数,函数的输出值映射到满足此条件的HASH链表流量首地址。该方法仍然支持源/目的端口和协议号的多个维度的流量聚合分类,因而本发明定义的基于HASH的三阶聚合流量链表矩阵,可支持源/目的地址、源/目的端口、协议号五个维度的流量聚合。hash(s,d,p)哈希函数定义如下:
hash(s,d,p)=P×S×d+P×s+p
公式中0≤s≤S-1,0≤d≤D-1,0≤p≤P-1
其中s,d,p分别为源端口、目的端口、协议号,S和D分别为源、目的最大端口号,最大为65535,P为最大协议号,最大为255。经过数学推导可证明,此函数为无冲突哈希函数。所谓无冲突,是指一个确定的源端口号、目的端口号和协议号的键值通过哈希函数计算出唯一的函数值,也就唯一映射哈希表的一个表项。
4)基于源IP地址的哈希函数定义
源IP地址的流量聚合方法仍然采用Hash表来进行存储,根据上文HASH查找的性能分析中可知,为了提升查找性能可以适当增加表空间降低散列表的装填因子合理设计散列函数使散列函数尽可能均匀并选用合适的冲突处理方法。
(1)确定Hash地址空间(表空间)
IP地址的显示格式为XXX.XXX.XXX.XXX而在网络数据包中IP地址是以一个32位无符号整数存储的,其共有4294967296种可能。考虑到一个大型企业网络的用户IP数量通常为数万个。为了快速地进行Hash运算并通过适当提高散列值地址范围来减少上列表的装填因子,可以将Hash后的散列值定为16位,即将IP地址进行Hash运算后的散列值分布在0-65535之间。因此确定哈希表空间为65535项。
(2)冲突处理方法
由于缩小了哈希表空间,必然会带来哈希冲突。如图3所示,本发明使用链地址法进行冲突处理,即每个表项为动态链表,无冲突时只有一个项,当发生冲突时,动态为这个散列值地址对应的表项增加一个子项。
(3)哈希函数的定义
为了将4个字节的IP地址信息Hash到2个字节的地址空间中,同时达到Hash函数要求的简单易用,这里采用折叠法和除留余数法相结合来进行IP地址信息的Hash运算。公式如下:
hash(k1,k2,k3,k4)=((k1+k3)×256+k2+k4)mod65536
公式中k1、k2、k3、k4为源IP地址的四个字段。Mod表示除以65536的余数。
4、流量查询
流量查询就是用户输入关心的流量查询条件,网络流量统计分析系统输出满足条件的流量结果。流量查询的实质就是从海量的流量数据中寻找满足查询条件的流量数据。对原始流量的查询就是从内存中或原始流量文件中搜索满足条件的流量数据,其过程就是一个链表的搜索和文件的读取过程,这里不再详细描述。下面重点对多维度(多关键字段)聚合流量的查询过程进行说明和描述,本发明的多维聚合流量分类的聚合条件可以是从源/目的IP、源/目的端口和协议号五个关键字任意的选取进行组合,对于一维聚合流量查询的过程就是根据聚合条件通过哈希表函数计算获得key值进行映射和查询到满足条件的流量信息。而对于多维的聚合流量的查询的过程,其实就是首先通过HASH函数找到满足各阶聚合条件的聚合流量链表,然后再从各阶聚合条件下聚合流量链表中找寻它们的公共节点,即为满足多维聚合条件的流量信息。以二维聚合流量链表的查询为例,如图3所示,所有具有相同srcIP和dstIP的流位于srcIP链表和destIP链表共同的部分,如所有srcIP为192.168.5.1,dstIP为192.0.15.1,的流公共流量节点为D和K。如果再增加源端口32、目的端口54、协议号87的聚合条件,则仅有K流量节点。
可见,多维聚合流量链表的查询就是多个一维聚合流量链表之间进行比较寻找公共节点的过程,最简单的办法就是读取链表中的节点信息然后逐一比对,寻找相同部分。如果是二维聚合就是两条聚合流量链表进行两重循环比对,公共部分即为满足二维聚合条件的聚合流量信息;五维聚合就是三条聚合流量链表进行三重循环对比,公共部分即为满足五维聚合条件的聚合流量信息。考虑到所有聚合流量信息首先基于时间粒度进行了聚合,假设聚合流量链表是按照时间先后顺序排列(原始流量信息是根据采集时间先后顺序进行数据存放的)因此,我们可以利用这个特点,首先比对时间,然后在相同时间点的流量节点中进行多重循环比对,使得查询循环次数大大减少,查询效率得到提高。该多维聚合流量的查询流程如图4所示,假定查询从ts(开始时间)到te(结束时间)时间段中,聚合时间粒度为T,基于源、目的地址,源、目的端口号和协议号多维度的聚合流量,具体描述如下:
1)获得满足各阶条件下的从ts到te时间段中的聚合流量链表;
根据源地址srcIP计算其键值,通过HASH函数找到其在源IP地址Hash表中的表项,遍历源IP地址链表,找出srcIP对应的IP地址节点,得到所有srcIP的聚合流链表指针SLink;
根据目的地址dstIP计算其键值,通过HASH函数找到其在目的IP地址Hash表中的表项,遍历目的IP地址链表,找出dstIP对应的IP地址节点,得到所有dstIP的聚合流链表指针DLink;
根据目的/源端口和协议号计算其键值,通过HASH函数获得其在目的/源端口和协议号Hash表中的表项,得到满足该目的/源端口和协议号条件下的聚合流链表指针Plink。
2)参数初始化,记录当前查询的时间起点,并用三组指针分别记录三条链表的查询位置:t=ts,SptrStart=Slink,SptrEnd=SptrStart,DptrStart=Dlink,DptrEnd=DptrStart,PptrStart=Plink,PptrEnd=PptrStart;
3)找寻Slink聚合流量链表中t至t+T时间段中的流量节点,步骤如下:
3-1)流量节点计数器Scount=0;
3-2)以SptrEnd指针指向的链表节点(flow_Link数据结构)中取出data字段,将SptrEnd->data->startTime与t相比较;
3-3)如果SptrEnd->data->startTime小于t,则SptrStart=SptrStart->next,SptrEnd=SptrStart,重新执行第3-2)步;
3-4)如果SptrEnd->data->startTime大于等于t,并且小于t+T,则该节点是t时间点上的流量节点,Scount++,同时SptrEnd=SptrEnd->next,继续执行3-4)步骤;否则执行3-5)步骤;
3-5)如果SptrEnd->data->startTime大于等于t+T,判断Scount,如果等于零,执行7)步骤,如果大于零,执行4)步骤;
4)找寻Dlink聚合流量链表中t至t+T时间段中的流量节点,步骤如下:
4-1)流量节点计数器Dcount=0;
4-2)以DptrEnd指针指向的链表节点(flow_Link数据结构)中取出data字段,将DptrEnd->data->startTime与t相比较;
4-3)如果DptrEnd->data->startTime小于t,则DptrStart=DptrStart->next,DptrEnd=DptrStart,重新执行第4-2)步;
4-4)如果DptrEnd->data->startTime大于等于t,并且小于t+T,则该节点是t时间点上的流量节点,Dcount++,同时DptrEnd=DptrEnd->next,继续执行4-4)步骤;否则执行4-5)步骤;
4-5)如果DptrEnd->data->startTime大于等于t+T,判断Dcount,如果等于零,执行7)步骤,如果大于零,执行5)步骤;
5)找寻Plink聚合流量链表中t至t+T时间段中的流量节点,步骤如下:
5-1)流量节点计数器Pcount=0;
5-2)以PptrEnd指针指向的链表节点(flow_Link数据结构)中取出data字段,将PptrEnd->data->startTime与t相比较;
5-3)如果PptrEnd->data->startTime小于t,则PptrStart=PptrStart->next,PptrEnd=PptrStart,重新执行第5-2)步;
5-4)如果PptrEnd->data->startTime大于等于t,并且小于t+T,则该节点是t时间点上的流量节点,Pcount++,同时PptrEnd=PptrEnd->next,继续执行5-4)步骤;否则执行5-5)步骤;
5-5)如果PptrEnd->data->startTime大于等于t+T,判断Pcount,如果等于零,执行7)步骤,如果大于零,执行6)步骤;
6)寻找t至t+T时间段中的三条流量链表的公共节点;
通过时间比对进行过滤,获得在t至t+T时间段中的三条流量链表,分别是以SptrStart为起点,SptrEnd为终点的链表;以DptrStart为起点,DptrEnd为终点的链表;以PptrStart为起点,PptrEnd为终点的链表。这三条链表的节点数相比原聚合流量链表(Slink、DLink和Plink)大大减少,在进行多重循环比对时,循环次数极大减少,提高了查询效率和速度。在寻找这三条链表中相同节点时,由于链表的数据节点的data都是指向相同的存储空间,只要它们的data地址相同,就表明是同一个节点,因此通过地址比对就能查找到流量数据信息,减少了访问内存的消耗。
7)以T为步长进行循环推进:t=t+T,SptrStart=SptrEnd,DptrStart=DptrEnd,,PptrStart=PptrEnd,当t≥te时执行8)步骤,否则执行3)步骤;
8)查询结束,输出结果。
Claims (9)
1.一种支持多维度聚合分类的网络流量统计实现方法,其特征在于:包括如下内容:
一、采用数据库对原始IP报文信息进行存储;
二、原始数据流的存储:
1)定义原始流的数据结构:
采用一个流量记录节点记录一条流量信息,采用链表的方式将所有的流量记录节点连接起来;一个流量记录节点包含流量头链表和与其链接的报文链表;
2)原始数据流量的存储:
在需要细粒度的流量统计时,将流量头链表和报文链表存储到内存中,等待用户查询和读取;在不需要细粒度的流量统计时,将流量头链表信息存储于文件中;
三、流量聚合:
1)按照时间粒度进行流量聚合:聚合项包括流量值和包个数,生成流量头链表,存储于内存中;
2)按照聚合条件进行流量聚合:根据用户查询条件开展流量聚合,生成三阶聚合流量链表矩阵;
四、流量查询:
1)获得满足各阶条件下的从开始时间ts到结束时间te时间段中的聚合流量链表;
2)参数初始化;
3)找寻SLink、Dlink、Plink三条聚合流量链表中t至t+T时间段的流量节点,其中:SLink表示所有srcIP的聚合流链表,Dlink表示所有dstIP的聚合流链表,Plink表示满足目的/源端口和协议号条件下的聚合流链表,T表示聚合时间粒度;
4)寻找t至t+T时间段中三条聚合流量链表的公共节点;
5)以T为步长进行循环推进,直至t≥te时查询结束,输出结果。
2.根据权利要求1所述的一种支持多维度聚合分类的网络流量统计实现方法,其特征在于:所述流量头链表包含流量分类特征和流量统计信息;所述报文链表记录本条流量中每一个报文的长度、IP标识和报文间隔时间。
3.根据权利要求2所述的一种支持多维度聚合分类的网络流量统计实现方法,其特征在于:所述流量分类特征包括源IP地址、目标IP地址、源端口、目标端口、协议、服务类型以及网络设备输入输出逻辑网络端口。
4.根据权利要求1所述的一种支持多维度聚合分类的网络流量统计实现方法,其特征在于:所述三阶聚合流量链表矩阵的X轴和Y轴分别是以源地址和目的地址进行流量分类的HASH链表,Z轴是以目的端口、源端口和协议的关键字段共同构造的无冲突HASH链表。
5.根据权利要求4所述的一种支持多维度聚合分类的网络流量统计实现方法,其特征在于:所述HASH链表的哈希函数包括:
1)基于源端口、目的端口、协议号的哈希函数hash(s,d,p):
hash(s,d,p)=P×S×d+P×s+p
公式中0≤s≤S-1,0≤d≤D-1,0≤p≤P-1
其中s,d,p分别为源端口、目的端口、协议号,S和D分别为源、目的最大端口号,为65535,P为最大协议号,为255;
2)基于源IP地址的哈希函数:
hash(k1,k2,k3,k4)=((k1+k3)×256+k2+k4)mod65536
公式中k1、k2、k3、k4为源IP地址的四个字段,Mod表示除以65536的余数。
6.根据权利要求1所述的一种支持多维度聚合分类的网络流量统计实现方法,其特征在于:所述原始数据流量的生成过程为:
(1)首先根据选定的路由器和时间段,从数据库搜索满足条件的报文,根据关键字段进行流量统计,读取满足条件的第一个报文,创建第一个流量头链表节点;
(2)继续搜索数据库,查找满足时间和路由器ID的报文,找到后,通过关键字段搜索流量头链表,判断新到达的数据包的属性是否满足流量头链表中已有流的属性:
a)如果满足,则对已有流的统计信息进行更新,并创建一个新的报文链表节点,记录报文长度、与上一个报文的间隔时间、报文IP标识记录等信息,插入到报文链表尾部;
b)如果不满足,则创建一个新的流量头链表节点,并将该节点插入到流量头链表的尾部;
(3)重复第(2)步,直到完成对数据库的搜索;
(4)将每个流量记录节点按照流量记录节点链表的顺序依次写入原始流数据文件中。
7.根据权利要求1所述的一种支持多维度聚合分类的网络流量统计实现方法,其特征在于:其特征在于:所述找寻Slink聚合流量链表中t至t+T时间段中的流量节点步骤如下:
3-1)流量节点计数器Scount=0;
3-2)以SptrEnd指针指向的链表节点中取出data字段,将SptrEnd->data->startTime与t相比较;
3-3)如果SptrEnd->data->startTime小于t,则SptrStart=SptrStart->next,SptrEnd=SptrStart,重新执行第3-2)步;
3-4)如果SptrEnd->data->startTime大于等于t,并且小于t+T,则该节点是t时间点上的流量节点,Scount++,同时SptrEnd=SptrEnd->next,继续执行3-4)步骤;否则执行3-5)步骤;
3-5)如果SptrEnd->data->startTime大于等于t+T,判断Scount,如果等于零,执行步骤5),如果大于零,则找寻Dlink聚合流量链表中t至t+T时间段中的流量节点;
其中:SptrStart表示Slink聚合流量链表的起点,SptrEnd表示Slink聚合流量链表的终点,startTime表示开始时间。
8.根据权利要求1所述的一种支持多维度聚合分类的网络流量统计实现方法,其特征在于:所述找寻Dlink聚合流量链表中t至t+T时间段中的流量节点步骤如下:
4-1)流量节点计数器Dcount=0;
4-2)以DptrEnd指针指向的链表节点中取出data字段,将DptrEnd->data->startTime与t相比较;
4-3)如果DptrEnd->data->startTime小于t,则DptrStart=DptrStart->next,DptrEnd=DptrStart,重新执行第4-2)步;
4-4)如果DptrEnd->data->startTime大于等于t,并且小于t+T,则该节点是t时间点上的流量节点,Dcount++,同时DptrEnd=DptrEnd->next,继续执行4-4)步骤;否则执行4-5)步骤;
4-5)如果DptrEnd->data->startTime大于等于t+T,判断Dcount,如果等于零,执行步骤5),如果大于零,则找寻Plink聚合流量链表中t至t+T时间段中的流量节点;
其中:DptrStart表示Dlink聚合流量链表的起点,DptrEnd表示Dlink聚合流量链表的终点。
9.根据权利要求1所述的一种支持多维度聚合分类的网络流量统计实现方法,其特征在于:所述找寻Plink聚合流量链表中t至t+T时间段中的流量节点步骤如下:
5-1)流量节点计数器Pcount=0;
5-2)以PptrEnd指针指向的链表节点中取出data字段,将PptrEnd->data->startTime与t相比较;
5-3)如果PptrEnd->data->startTime小于t,则PptrStart=PptrStart->next,PptrEnd=PptrStart,重新执行第5-2)步;
5-4)如果PptrEnd->data->startTime大于等于t,并且小于t+T,则该节点是t时间点上的流量节点,Pcount++,同时PptrEnd=PptrEnd->next,继续执行5-4)步骤;否则执行5-5)步骤;
5-5)如果PptrEnd->data->startTime大于等于t+T,判断Pcount,如果等于零,执行步骤5),如果大于零,执行步骤4);
其中:PptrStart表示Plink聚合流量链表的起点,PptrEnd表示Plink聚合流量链表的终点。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610888795.3A CN106452868B (zh) | 2016-10-12 | 2016-10-12 | 一种支持多维度聚合分类的网络流量统计实现方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610888795.3A CN106452868B (zh) | 2016-10-12 | 2016-10-12 | 一种支持多维度聚合分类的网络流量统计实现方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN106452868A CN106452868A (zh) | 2017-02-22 |
CN106452868B true CN106452868B (zh) | 2019-04-05 |
Family
ID=58174086
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201610888795.3A Active CN106452868B (zh) | 2016-10-12 | 2016-10-12 | 一种支持多维度聚合分类的网络流量统计实现方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN106452868B (zh) |
Families Citing this family (21)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107147545A (zh) * | 2017-05-11 | 2017-09-08 | 成都极玩网络技术有限公司 | 一种并发检测多站点网络延迟的方法 |
CN107682225B (zh) * | 2017-10-12 | 2020-05-22 | 西安交通大学 | 一种自动生成细粒度网络程序功能流量指纹的方法 |
CN109787851A (zh) * | 2017-11-13 | 2019-05-21 | 北京京东尚科信息技术有限公司 | 一种流量统计数据获取方法和装置 |
CN108259640B (zh) * | 2017-12-29 | 2021-02-12 | 东软集团股份有限公司 | 网络地址分类的方法、装置和存储介质以及电子设备 |
CN108923967B (zh) * | 2018-06-27 | 2021-07-02 | 平安科技(深圳)有限公司 | 一种去重流量记录方法、装置、服务器及存储介质 |
CN108923972B (zh) * | 2018-06-30 | 2021-06-04 | 平安科技(深圳)有限公司 | 一种去重流量提示方法、装置、服务器及存储介质 |
CN109347623B (zh) * | 2018-10-18 | 2022-09-09 | 苏州盛科通信股份有限公司 | 一种链路负载均衡应用中进行会话保持的方法及装置 |
CN109688240A (zh) * | 2018-12-24 | 2019-04-26 | 睿哲科技股份有限公司 | IPv4组播和IPv6组播互相转换装置和设备 |
CN110061869B (zh) * | 2019-04-09 | 2022-04-15 | 中南民族大学 | 一种基于关键词的网络轨迹分类方法及装置 |
CN110022248A (zh) * | 2019-04-19 | 2019-07-16 | 山东浪潮云信息技术有限公司 | 链路流量统计方法及系统、流量统计主机以及统计请求端 |
CN110597856B (zh) * | 2019-08-20 | 2022-08-05 | 华能四川水电有限公司 | 一种流量深度解析数据的快速检索系统和方法 |
CN110943883B (zh) * | 2019-11-13 | 2023-01-31 | 深圳市东进技术股份有限公司 | 网络流量统计方法、系统、网关及计算机可读存储介质 |
CN111447110B (zh) * | 2020-03-24 | 2023-03-10 | 北京润科通用技术有限公司 | 一种数据监控方法及系统 |
CN111786903B (zh) * | 2020-05-28 | 2022-02-25 | 西安电子科技大学 | 一种基于约束模糊聚类和粒计算的网络流量分类方法 |
CN111797063A (zh) * | 2020-06-28 | 2020-10-20 | 中孚信息股份有限公司 | 一种流式数据处理方法与系统 |
CN111813871B (zh) * | 2020-06-30 | 2021-06-18 | 北京九章云极科技有限公司 | 一种数据实时处理系统及方法 |
CN113783825B (zh) * | 2020-09-15 | 2023-12-05 | 北京京东尚科信息技术有限公司 | 一种报文流量统计方法和装置 |
CN113434547A (zh) * | 2021-06-24 | 2021-09-24 | 浙江邦盛科技有限公司 | 一种毫秒级时序流数据精准切片方法 |
CN113542245B (zh) * | 2021-07-02 | 2023-04-25 | 广州华多网络科技有限公司 | 数据流量监控方法、装置、计算机设备及存储介质 |
CN115150171B (zh) * | 2022-06-30 | 2023-11-10 | 北京天融信网络安全技术有限公司 | 一种流量统计方法、装置、电子设备及存储介质 |
CN116866214B (zh) * | 2023-06-21 | 2024-04-23 | 武汉博易讯信息科技有限公司 | 一种基于统计级会话的地域网络质量分析系统 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101132375A (zh) * | 2007-09-28 | 2008-02-27 | 杭州华三通信技术有限公司 | 网络流量统计方法及装置 |
CN102316173A (zh) * | 2010-07-05 | 2012-01-11 | 国讯新创软件技术有限公司 | 网络地址聚合方法和装置 |
CN103581044A (zh) * | 2013-11-04 | 2014-02-12 | 汉柏科技有限公司 | 一种流量统计方法和装置 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR100561628B1 (ko) * | 2003-11-18 | 2006-03-20 | 한국전자통신연구원 | 통계적 분석을 이용한 네트워크 수준에서의 이상 트래픽감지 방법 |
-
2016
- 2016-10-12 CN CN201610888795.3A patent/CN106452868B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101132375A (zh) * | 2007-09-28 | 2008-02-27 | 杭州华三通信技术有限公司 | 网络流量统计方法及装置 |
CN102316173A (zh) * | 2010-07-05 | 2012-01-11 | 国讯新创软件技术有限公司 | 网络地址聚合方法和装置 |
CN103581044A (zh) * | 2013-11-04 | 2014-02-12 | 汉柏科技有限公司 | 一种流量统计方法和装置 |
Also Published As
Publication number | Publication date |
---|---|
CN106452868A (zh) | 2017-02-22 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN106452868B (zh) | 一种支持多维度聚合分类的网络流量统计实现方法 | |
Cormode et al. | What's new: Finding significant differences in network data streams | |
CN103714134B (zh) | 一种网络流量数据索引方法及系统 | |
CN1633111B (zh) | 高速网络业务流分类方法 | |
CN104244035B (zh) | 基于多层聚类的网络视频流分类方法 | |
CN108376143B (zh) | 一种新型的olap预计算系统及生成预计算结果的方法 | |
CN109254901B (zh) | 一种指标监测方法及系统 | |
CN105959175B (zh) | 基于GPU加速的kNN算法的网络流量分类方法 | |
CN108287840A (zh) | 一种基于矩阵哈希的数据存储和查询方法 | |
CN105515997B (zh) | 基于bf_tcam实现零范围扩张的高效范围匹配方法 | |
Chen et al. | Distinct counting with a self-learning bitmap | |
CN102387082A (zh) | 基于流分类的分组流量控制系统及控制方法 | |
Zhai et al. | Random forest based traffic classification method in SDN | |
Hua et al. | A multi-attribute data structure with parallel bloom filters for network services | |
CN106980639B (zh) | 短文本数据聚合系统及方法 | |
CN107656989A (zh) | 云存储系统中基于数据分布感知的近邻查询方法 | |
CN104125146B (zh) | 一种业务处理方法及装置 | |
CN111522819A (zh) | 一种树型结构数据汇总的方法及系统 | |
Zehnalova et al. | Local representatives in weighted networks | |
Zhao et al. | Hermes: An optimization of hyperloglog counting in real-time data processing | |
CN108345699A (zh) | 获取多媒体数据的方法、装置及存储介质 | |
Rafiee et al. | Pruned Kd-tree: a memory-efficient algorithm for multi-field packet classification | |
Zhu et al. | CBFSketch: A scalable sketch framework for high speed network | |
Rekatsinas et al. | Crowdgather: Entity extraction over structured domains | |
Dang et al. | Online mining of frequent sets in data streams with error guarantee |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |