基于NetFlow的网络数据流监测系统设计与实现_第1页
基于NetFlow的网络数据流监测系统设计与实现_第2页
基于NetFlow的网络数据流监测系统设计与实现_第3页
基于NetFlow的网络数据流监测系统设计与实现_第4页
基于NetFlow的网络数据流监测系统设计与实现_第5页
已阅读5页,还剩70页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

-- 互联网的高速发展带来了网络数据的膨胀。高速、海量的网络数据中包含着错综复杂的信息,其中可能有各种业务数据流,如IP业务流、用户点击流、用户查询流、网页服务器日志等;另外,其中也很有可能包含着各种安全事件,如恶意软件骚扰、网络攻击等。安全事件对网络的安全构成了极大的威胁。因此,网络数据流监测系统应运而生。本文首先描述系统背景,然后按照软件开发的一般流程,依次给出了系统的需求分析、概要设计、详细设计、实现等工作,并在论文中介绍了系统开发的相关技术。本系统基于NetFlow技术。系统从结构上主要由两个子系统组成,一个是数据采集子系统,该子系统负责从网络流接收代理中获取网络数据并进行协议NetFlow格式,在进程通信方面,本文采用了共享内存环的解决方法,通过对环的生产者和消费者进行合理协调,保证了系统的正确性和高可扩展性;另一个是实时流量监测子系统,该子系统从共享内存环上读取格式化后的NetFlow数据,经过实时统计、高频项监测、数据合并等内部模块进行相应的计算和处理,将计算结果写入存储代理中,在实时统计的IP数据包匹配方面,本文主要采用基于字典树的IP数据包匹配技术;在高频项监测方面,本文采用了哈希和计数的策略,在哈希表中,采用桶内链表的方法解决冲突,在计数方面采用了AVL树的结构,通过这样的结构,保证了包数和字节数统计的准确性和高效性;在数据存储方面,本文采用了分区表的解决方案,在一定程度上增加了系统的查询吞吐量。本文的最后通过功能测试和性能测试验证了数据采集子系统和实时流量监测子系统的正确性和高效性,为系统的应用奠定了基础。关键词:安全事件;NetFlow;共享内存环;高频项监测--TherapiddevelopmentoftheInternetbroughtabouttheexpansionofnetworkdata.Thenetworkdataincludescomplexinformation,theremaybeavarietyofoperationaldatastreams,suchasIPtraffic,theuserclick-stream,theuserquerystreamandthewebserverlogs,etc.;Inaddition,itmayalsocontainsavarietyofsecurityincidents,suchasharassment,malicioussoftware,networkattacks.Securityincidentonthenetworkisasignificantthreattotheinternet.Therefore,thenetworkmonitoringsystemcameintobeing.Thispaperstartsbyintroducingthebackgroundofthesystem,then,accordingtostandardprocessofsoftwaredevelopment,givesdescriptionsontherequirementanalysis,systemdesignandimplementation.Thispaperalsointroducessomerelatedtechnology.ThesystemisbasedonNetFlowtechnology.Theoverallstructureconsistsoftwosubsystems,thefirstoneisthedatacollectionsubsystem,thesecondoneisthereal-timetrafficmonitoringsubsystem.DatacollectionsubsystemisresponsibleforreceivingdatafromnetworkflowagentandtransferringtheflowformattostandardNetFlowformat.Intheaspectofinter-processcommunication,Iadoptthesolutionofsharedmemoryring,throughthecoordinatingmechanism,thesolutionwillensuretheaccuracyandhighscalabilityofthesystem.Real-timetrafficmonitoringsubsystemisresponsibleforreadingNetFlowdatafromsharedmemoryring,processingthedataitemsaccordingtotherulesandstoringtheresultintothestorageagent.IntheaspectofIPpacketmatching,Iadoptthestructureofmulti-bittrie.Intheaspectoffrequentitemsmonitoring,IcombinethemethodofhashandAVLtreecountingtoimplementthepacketsandbytesstatistics,andsolvethehashconflictusinglinkedlistinthebucket.Intheaspectofdatastoring,Iadoptthesolutionofpartitiontable,whichcanincreasethethroughputtosomeextent.Atlast,Thispapergivesthefunctionandperformancetestofcoremodules.Throughthetestprocess,thedatacollectionsubsystemandthereal-timetrafficmonitoringsubsystemhavebeenprovedcorrectandefficient. SecurityIncident,NetFlow,SharedMemoryRing,Frequent--目录摘要 第1章绪 课题来源和背景 项目来源 课题开发目的和意义 与课题相关的国内外研究综述 流量分析技术现状 Flow技术现状 数据流处理技术研究现状 高频项监测研究现状 主要研究内容 第2章系统相关技术 分区表技术 基于字典树的IP数据包匹配 IP数据包匹配问题定义 字典树简介 多分支字典树IP匹配 高频项监测技术 高频项监测问题定义 基于哈希和双向链表计数的高频项监测 基于哈希和AVL树计数的高频项监测 本章小结 第3章需求分析与系统设计 系统目标概述 系统需求概述 基本功能需求 扩展需求 性能及可靠性需求 系统总体设计 系统架构设计 系统拓扑结构 系统模块设计 系统接口设 外部接口设计 内部接口设计 系统开发环 开发语言 开发工具 开发环境 本章小结 第4章系统实现 数据采集子系 数据采集与格式转换模块 共享内存模块 数据采集子系统运行效果展示 实时流量监测子系 高频项统计模块 实时统计模块 数据合并模块 实时流量监测子系统运行效果展示 本章小结 第5章系统测试 系统测试 功能测试 性能测试 系统性能分 出现的性能问题 性能改善意见 本章小结 结论 参考文献 哈尔滨工业大学硕士学位论文原创性声明 哈尔滨工业大学硕士学位论文使用授权书 致 个人简历 --1章绪论课题来源和背景本项目来源于中国科学院计算技术研究所信息安全研究中心。本项目的目标是实现骨干网数据流监测任务。随着信息化进程的不断加快,互联网已成为社会生产与生活赖以运转的重要基础设施。我国的互联网事业正在持续快速的发展,并在普及应用上进入崭新的多元化应用阶段,互联网的影响正在逐步渗透到人们的生产、生活、工作、学习的各个角落。互联网的高速发展带来了网络数据的膨胀。然后,高速、海量的网络数据中却包含着错综复杂的信息,其中可能有各种业务数据流,如IP业务流、用户点击流、用户查询流、网页服务器日志等;另外,其中也很有可能包含着各种安全事件,如恶意软件骚扰、网络攻击等。安全事件对网络的安全构成了极大的威胁。因此,网络监测系统应运而生。然而,数据包级监测面临着海量数据的处理,无论系统的存储能力、处理能力还是传输能力都受到了极大的挑战,要在线完成全面的监测任务非常困难。流测量为流量监测开辟了新的途径,通过把数据包归并到流中,极大地压缩了数据量,使网络数据的处理、存储和传输都更容易。流技术已经成为网络流量分析的一种重要技术,在众多的流技术中,Cisco公司提出的NetFlow技术[1]是目前可靠性最高、应用最广的技术之一,NetFlow为高端网络骨干链路的实时流量采集分析提供高效、准确的数据摘要提取服务,是骨干网流量分析中的一个重要基础技术。基于流的网络监测技术是近年来新兴的网络监测分析技术,对网络入侵和异常流量的监控具有极佳的效果,因此受到了电信运营商和安全设备厂商的广泛重视。数据流计算技术面临较大的挑战。与传统存储数据集上的计算方式相比,数据流持续、高速、海量的特点给系统的计算和存储资源造成了巨大的压力。首先,数据流持续高速的特点,使得整条数据流数据量巨大,造成了系统存储的压力。例如,AT&T公司每天累积的记录可以高达100GBytes,WalMart每天的销售记录可以高达20000000条,将这些数据实时地保存无疑是一种极大的挑战。其次,数据流处理往往需要以近乎实时的方式进行复杂的高级分析[2],带来了系统计算的压力。对于传统的数据输入,可以及时修改数据以体现数据更新。然而,对于这种名为流数据[3]的新应用模型,只有采用近乎实时的方式才能保证与数据流的更新速度一致,从而真实地体现数据的变更情况。综上所述,基于NetFlow的网络数据流监测系统是非常具有研究意义的课题。与课题相关的国内外研究综述在网络流监测相关解决方案方面,国内相关领域的公司大都是代理国外的品牌,没有自主知识产权,而且国内相关企业所采用的技术相对比较落后,限制了相关监测产品的发展。在国外,近年来涌现出了很多成型的产品,比如ManageEngine公司的NetFlowAnalyzerFlow分析工具Flow-tools等等,然而,相关产品价格昂贵,而且通用性较差。下面我将主要从流量分析技术、Flow技术以及高频项监测等几个方面阐述国内外相关领域的研究成果。近年来,随着IT技术和网络技术的迅猛发展和企业信息化程度的不断提高,网络应用的种类日益复杂,各种应用时时刻刻都在争夺有限的网络带宽,与此同时,各种网络攻击[4]事件,如DDOS[5-6]攻击、蠕虫[7]、病毒攻击等频繁发生,对互联网的安全构成了极大的隐患。因此,如何保证网络的安全性和可用性是目前各个国家和企业需要亟需解决的问题。需要有相应的技术手段,明确了解网络上各种协议、应用的带宽占用情况,分析用户流量行为,以便合理规划网络带宽,发现网络攻击事件并有效地保障关键业务应用的正常运行。网络流量分析是指捕捉网络中流动的数据包,并通过查看数据包内部数据以及进行相关的协议、流量分析等来发现网络运行过程中出现的故障和问题,它是网络和系统管理人员进行网络故障和性能诊断的有效工具。目前,常用的网络流量和协议分析有以下几种方法。SNMP协议的方法基于SNMP的方法能够对网络设备端口的整体流量进行分析,可以获得设备端口的实时或者历史的流入/流出带宽、丢包等性能指标,然而,它无法分析具体的用户流量和协议组成。通过扩展实现RMONII[9],该方法可在一定程度上(OSI数据链路层、网络层、传输层)实现有限的端到端通信会话数据分析、TopN用户统计等功能。与SNMP相关的产品有HPOpenViewNNM,CA的UniCenter,MRTG等。因其具有实现简单、标准统一、接口开放的特点,被业界广泛采用。网络探针的方法该方法一般在网络上以硬件的方式部署网络“探针”,并在“探针”上进行数据包获取、分析和统计等功能,分析的结果存储在探针的内存或磁盘之中。因此该方法具有效率高、可靠性高、高速运行丢包率低等特点。网络探针的方法可深入的对网络数据链路层、网络层甚至应用层的特性进行详细分析。常见的产品有Agilent的NetMetrix及其Probes,NetScout的nGeniusPerformanceManager及其Probes等。基于实时抓包分析的方法基于实时抓包的分析技术提供详细的从物理层到应用层的数据分析。但该方法主要侧重于协议分析,而非用户流量访问统计和趋势分析,仅能在短时间内对流经接口的数据包进行分析,无法满足大流量、长期的抓包和趋势分析的要求。常见的产品有NAISnifferPro,免费的tcpdump以及ethereal等。基于流的流量分析技术流(Flow)测量为流量分析开辟了新的途径,通过把数据包归并到流中,极大地压缩了数据量,提高了硬件转发效率,使网络数据的处理、存储和传输都更容易。在上面所提到的四种方法中,基于SNMP方法的通用网管软件仅能对网络的整体流量进行监控,而无法对具体协议种类、应用流量组成、数据包来源目的等信息进行进一步分析。而基于基于网络探针的分析方法中,探针和软件之间的接口一般是私有接口,第三方软件无法使用,而且此种软硬件结合的方案价格昂贵,部署不是很方便。基于实时抓包分析的方法在处理大流量时效果很差。基于Flow的分析[10]方法已经逐渐成为网络流量分析技术的主流技术。Flow技术现状在网络中,流Flow代表通信的对等端的一条连接。有多种方式来进行标识,通常我们关心的流记录由一个五元组(即源地址、目的地址、源端口、目的端口和协议类型)所组成。Flow技术更加关注网络链路上所传输流量的特征信息,并且这些信息能够更直接的反映出当前网络上访问行为分布以及真实的服务质量水平。Flow技术的主要优势包括:Flow技术使高速链路实时流量监测成为可能。相对于SNMP或者镜像方式,Flow允许对目标流量进行适当的抽样采集和汇总,如基于帧抽样、基于时间抽样、伪随机方式抽样以及聚集方案等,能够将原有高速流量进行几乎不失真的缩小处理,从而能够在不影响准确率的前提下有效降低对分析系统处理能力的要求;Agent角度来看,Flow采用数据主动推送技术,SNMP则主要采取被动轮询机制;Flow提供实现针对性应用内容监测的可行性;Flow具备更详尽的会话描述能力。例如,在NetFlowV9中,通过模板和聚集机制进行任意组合、汇聚,能够详细描述流量分布的各类特征,为快速、准确的完成流量分析提供了坚实的数据基础。基于流的网络监测系统正成为网络流量测量及分析系统的主流。而Flow技术已经成为一个重要的数据提取方式,为高端网络骨干链路的实时流量采集分当前,主流的流(Flow)技术包括:Netflow是Cisco公司制订的私有技术协议,现在常用的是v5,v9版本。由于Cisco在网络技术以及市场上的地位,Netflow是目前流量分析方面的主流技术之一。CFlow[11]是由Juniper开发的一种网络监测技术,类似于ciscoNetflow。现在最常用的是v5版本。SFlow[12]是由InMon、HP和FoundryNetworks联合开发的一种网络监测技术。它采用数据流随机采样技术,可以适应超大网络流量(如大于10Gbps)环境下的流量分析,让用户详细、实时地分析网络传输流的性能、趋势和存在的问题。NetStream是华为制订的私有技术协议,类似于Netflow,广泛应用于华为、华为3com的部分型号网络设备。由于华为设备在国内有广泛和庞大的用户群,因此,NetStream技术协议的支持者主要集中在国内。此外,其他部分厂商也制订了相应的技术协议。一个数据流是按时间顺序到达的数据所组成的一个序列,它是不间断的。数据流中的数据即是流数据[13]。我们日常生活中的有很多流数据的例子,如股票交易所的股票价格信息,环境温度的监测数据网站的点击数据以及传感器网络中的监测数据等。流数据的特点决定了它比传统的数据处理要复杂,一般我们主要考虑下面三个问题。流数据是不停产生的,而内存的大小是有限的,因此我们无法把收集到的数据都放在内存中等待处理,而只能实时的进行处理。这就需要设计出适合小容量内存存储,可支持实时处理与查询的摘要数据结构[14]和算法。由于流数据的产生速度极快,因此流处理程序必须在数据流过期之前完成对流数据的处理。因此,流处理程序对算法的效率有较高的要求,如何在最短的时间内完成对数据的处理成为一个关键的问题。流数据是不可阻塞的,因此所有的数据只能扫描一次。流处理算法必须是一次扫描算法。典型的数据流处理架构如图1-1所示:1-1数据流处理架构根据处理架构可以看出,架构主要包括数据流、流处理引擎[15]和内存中的概要数据结构。由于流数据的海量、高速以及单次遍历等特点,因此流处理对时间和空间有较高的要求,计算一个精确的结果通常不可能,往往得到的都是近似的结果。数据流处理主要包含统计查询和挖掘[16]两种操作。统计查询包括点查询、范围查询、高频项统计查询等等。统计查询功能通常采用的方法主要有直方图技术[17],抽样,哈希[18-22],计数和小波[23-25]等几种。文献[17]提出了一种近似维护等宽直方图的方法,文献[23]提出了一种基于哈尔小波技术,在数据流上生成直方图的算法.该算法将整个数据集变换成一系列的小波参数,并且有选择地保留有限个高能量参数,从而近似模拟原始数据集。文献[24]改进了该算法.新算法能够同时支持数据的插入操作和删除操作。数据流挖掘[26]的任务包括数据流的在线分析、数据流分类、数据流聚类、数据流异常特征挖掘等。近年来,数据挖掘相关方法的引入为流数据挖掘提出了新的解决方案,目前挖掘算法中最有效的是k-medians数据流聚类算法[27]、快速决策树分类算法[28]和加权分类器方法[29]等等。海量数据流统计分析是一项非常艰巨的任务。然而,尽管数据流是持续不间断的,但是用户往往只对那些经常出现的数据项感兴趣,即用户往往只关注出现频率在一定阈值之上的数据信息。这种查询称为阈值查询。统计高频项的策略主要有抽样、计数、哈希等几种方法。抽样[30-32]是处理海量数据集和高速数据流的常用方法,它从大数据集中选取部分数据项来近似代表整个数据集的特征,它的优势在于能够很容易地把数据流更新速度降到一个系统可以忍受的合理水平。抽样方法根据数据项的入选几率分为均匀抽样和有偏抽样,文献[30]提出了均匀随机抽样的方法,文献[31]阐述了一种精确抽样的方法。然而,抽样方法往往并不太适合网络流量监测系统,因为网络流量一般是在很短的时间内达到峰值,如果这段时间恰好处于抽样间隔时间内,那么就会丢失许多有价值的数据纪录。计数策略[33-36]的基本思想是申请并持续维护若干个计数器来统计数据流中频率超过n的频繁项。比较典型的算法有FREQUENT算法[33,34和LossyCounting算法[35]Frequent算法只需要常数存储空间而且对每个数据项的处理时间为O(1),但是解的近似效果不理想。LossyCounting算法可以有效地保证解的近似误差但时间复杂度并不理想,最坏情况下的空间复杂度为n)/),单个数据项的处理时间平摊分析为O(logn)哈希方法的基本思想是构造一组散列函数,把数据从一个范围映射到另一个范围去。目前统计高频项比较有效的哈希方法是BloomFilter方法[37-39]和Sketch方法[40,41]等。BloomFilter算法的最大特点是,仅使用一小块远小于数据集数据范围的内存空间表示数据集,并且各个数据仍然能被区分开来。文献[39]改进了传统的方法,在每一个位置上都用计数器代替比特位,从而不仅能够判断元素是否存在,而且能够估算元素的值。主要研究内容本课题通过对国内外同类系统的研究、分析和比较,并根据客户的实际情况,结合相应的软件设计方法和开发技术,设计和实现了一个高效和实用的网络数据流监测系统。本论文的写作主要分为以下几个部分:论文第一章绪论,简要描述课题的来源、背景及研究目的,以及与课题相关领域的国内外研究现状。论文第二章,讨论并研究了系统的一些相关技术以及其实现方法。其中主要包括分区表技术、基于字典树的IP数据包匹配技术和高频项监测技术。论文第三章,给出系统需求分析和设计方案。从需求的角度介绍了系统的目标和需求概述,然后给出了的总体设计、功能设计、接口设计等,系统的需求与设计为系统的最终编码实现打下了良好的基础。论文第四章,对系统的实现方法和主要功能模块的实现算法进行了详细的描述,并给出了部分关键模块的运行效果。论文第五章,从功能和性能等角度设计系统的测试用例,完成对系统的测试工作。为系统正式上线做准备。论文的结论部分,总结了论文的研究成果,展望了今后的研究工作方向。通过上述这些工作,开发和实现了一整套从业务流程到系统、从软件开发到具体实施的网络数据流监测系统,有效的完成对目标网络监测的目的。2章系统相关技术本章将讨论系统的一些相关技术以及其实现方法。对系统相关技术的研究为后续系统的设计与实现工作奠定了基础。分区表技术NetFlow的数据流监测系统处理的数据量非常大,如果只采用单一的数据存储,系统的效率以及IO吞吐量都会受到极大的限制。为了提高系统在这些方面的效率,本系统采用了分区表[42]技术,并实现了相关统计信息表在时间维度上按天进行分区。分区表是将大表的数据分成称为分区的许多小的子集。采用分区表的主要优势包括:与单个磁盘或文件系统分区相比,可以存储更多的数据。对于那些已经失去保存意义的数据,通常可以通过删除与那些数据有关的分区,这样删除过期或者无意义数据非常容易。一些查询可以得到极大的优化。这主要是借助于满足一个给定WHERE语句的数据可以只保存在一个或多个分区内,这样在查找时就不用查找其他剩余的分区。涉及到SUM/COUNT等聚合函数时,可以并行处理。通过并行策略,查询可以在每个分区上同时进行,最终结果只需通过总计所有分区得到的结果。通过跨多个磁盘来分散数据查询,来获得更大的查询吞吐量。MYSQL5.1主要支持的可用分区类型包括RANGELIST分区、HASHKEY分区。其中,RANGE分区基于属于一个给定连续区间的列值,把多行分配给分区;LIST分区基于列值匹配一个离散值集合中的某个值来进行选择;HASH分区基于用户定义的表达式的返回值来进行选择的分区,该表达式使用将要插入到表中的这些行的列值进行计算;KEY分区类似于按HASH分区,区别在于KEY分区只支持计算一列或多列,且MySQL服务器提供其自身的哈希函数。其中基于NetFlow的数据流监测系统采用的是基于时间的RANGE分区。并且本系统通过MYSQL的存储过程、事件调度机制等技术实现了相关统计信息表的自动按天分区功能。基于字典树的IP数据包匹配IP数据包匹配问题定义在本系统中,IP数据包匹配的问题定义如下:HK个域的实体,每个域表示成H[i],每个域为一个比特串;访问控制规则FK个域,表示为与每个F[i]相关联的有一个匹配方式,匹配方式主要包括: 精确匹配:F[i]用一个值来表示,若H[i]=F[i],称H[i]与F[i]精确匹配; 前缀匹配:F[i]通过一个前缀来指定,若H[i]与F[i]表示的前缀匹配,称H[i]与F[i]前缀匹配; 范围匹配:F[i]通过一个范围指定,即F[i]=[val1,val2],若满足val1≤H[i]≤val2,称H[i]与F[i]范围匹配; FH匹配,当且仅当HH[i]F相应的域F[i]匹配。给定一套具有NIP数据包匹配规则的规则库F,规则库中的每条规则定义如下:Fi=@ip/mask-port-router-ipIP地址;mask代表掩码,通过ip/mask的方式来表示一个IP范围;portIP数据包的端口号;router代表统计路由器的ID信息;if代表统计路由器的接口信息。在本系统中,IP数据包匹配就是分析IP数据包的IP、端口等信息,构造包头比特串t,并根据指定的规则库F,判断此IP数据包的比特串t是否能通过精确匹配、前缀匹配方式与规则库F进行关联,即IP数据包匹配的返回结果R(t)如公式2-1所示:R(t)

(2-图图2-1基于规则库构造的字典树结构字典树又称Trie,是一种树形结构,用于保存大量的字符串。它的优点是利用字符串的公共前缀来节约存储空间。字典树的基本性质可以归纳为:根节点不包含字符,除根节点外每一个节点都只包含一个字符。从根节点到某一节点,路径上经过的字符连接起来,为该节点对应的字符串。每个节点的所有子节点包含的字符都不相同。字典树的二进制构造方法是根据二进制值确定分支方向,0为左分支,1为右分支,在叶节点存储规则。对于规则库中某条规则的某一个条件域,若其前缀表达式与字典树的某条分支匹配,则该分支的叶节点记录该规则,叶节点存储的是一个有序队列。下面给出一个字典树的例子。假设我们有这样的一个单维规则库:2-1规则库实例Rule(规则编号)Field(域关键字)01对于以上五条规则,我们可以构造图2-1的字典树:假设字典树中规则串的最大长度为WN,则字典树的空间复杂度为O(NW),而其时间复杂度最坏情况为O(W)。多分支字典树IP匹配二进制字典树存在的问题是每次只能匹配一个比特位,查找速度较慢。采用多分支字典树可以提高查询速度,但需要更多的存储空间。基于多比特查找树的算法一次查找多个比特,与基本的二叉树相比大大降低了查找时间复杂度。多分支字典树必须解决合理选择步长的问题。如果步长选择得太大,则由于前缀扩展而使查找准确率降低;如果步长选择得过小,则其性能与二进制字典树相差无几。图2-2展示了多分支字典树的结构:RR

图2-2多分支字典树结构当选择步宽为2的时候,那么一次可以访问4个子节点,根据编码可以看到在每个字节点下,还可以根据stride的设定值来取得新的子树。经过以上分析可以得知,对于多分支查找树,当步长为k时,相对于二进制字典树,查找时间缩短了k倍,因此基于多分支字典树可以高效地进行IP数据包的匹配。本系统中将根据多分支字典树进行精确IP地址的匹配和IP前缀的匹配。高频项监测技术数据流x(x1,x2,…xi,…xn)是一系列连续记录组成的有序序列,长度|x|=nxiU{1,2,…m}称为数据项,|U|m;任一数据项a的出现频率记为fa,其定义如公式2-2所示。fajxj

(2-对于给定阈值[0,1],高频项统计的输入是数据流序列x,输出为频繁数据I,见公式2-3所示。 I(x,i,fiU且f

n

(2-在无限数据流模型下,由于数据流持续到来,旧的数据项只保留不删除。假设数据项的种类个数为m,对每种出现的数据项都分配一个计数器,因此这种方案在最坏情况下需要O(m)个计数器,这样将导致空间占用无限增大。因此在此种模型下,该问题的定义转换为在一个可以预定的较小误差范围内,在有限的空间范围内,求解近似高频项列表。在窗口数据流模型下,旧的数据项隐式删除。然而由于网络数据流可以在瞬间达到最大值,因此为每一个数据项分配相应的计数器也是不现实的,因此,在常数空间范围内求解高频项列表是一个不可避免的问题。目前,在数据流高频项计算中,较为常用的算法包括采样、哈希、计数等。本算法采用哈希结合是计数的方法。通过哈希表,可以在常数时间范围内对数据项进行进行查询、修改和删除。由于哈希函数选取的问题,哈希表不可避免冲突(collision)现象,即对不同的关键字可能得到同一哈希地址。本算法采用桶内链表的方法解决冲突。为了保证算法能够在O(1)的时间内处理单一数据项,该算法需要在数据结构上进行精巧的设计。文献[43]提出了差值编码的双向链表来解决数据结构定义的问题。首先,算法采用哈希表实现常数时间内完成查找数据项的工作,并通过回调函数的使用减少哈希表所占用的内存空间。其次,采用差值编码的有序双向链表来实现计数器链表。计数器按升序在链表中排列,链表首节点存储实际的出现的频数,其他节点只存储与前一节点的增值。这样,只需修改首节点的计数器值就可以达到对所有计数器值减1的效果。通过这样的结构设计,即可以保证单个数据项的处理时间为O(1),又可以保证在查询到来时,不需要经过排序就可以输出topk结果。算法的数据结构图如图2-3所示:List_NodeList_NodeList_NodeList_NodeHash_NodeHash_NodeHash_NodeHash_NodeHash_NodeList_Node算法的实现流程图如图2-4所示:否否M是是否1否M是2-42-4可以看出,算法预先分配M个计数器。当新的数据项到来时,首先判断是否有计数器监视该数据项,如果存在,则更新计数器的值;如果不存在,则判断计数器总数是否超过M,超过则所有计数器减一并释放值为0的计数器,保证算法的常数空间复杂度。该算法在进行网络数据流的包数统计时效果较好,能够将算法的误差限制在一个预定义的小范围之内,并且单个数据项处理的时间复杂度为O(1),空间复杂度为常数。然而,该算法在处理网络数据流字节数统计时存在问题,由于在处理字节数时,双向链表自增幅度不为1,所以在处理单个数据项时,双向链表的查找复杂度较高,下面采用哈希结合AVL计数的方法解决此问题。基于哈希和AVL为了解决BPS字节速率统计时的线性查找复杂度的问题,本系统采用了AVL树的方式解决。AVLAVL树中任何节点的两个儿子子树的高度最大差别为一,所以它也被称为高度平衡树。查找、插入和删除在平均和最坏情况下都是O(logn)。增加和删除可能需要通过一次或多次树旋转来重新平衡这个树。AVL树的基本操作一般涉及运做同在不平衡的二叉查找树所运做的同样的算法。但是要进行预先或随后做一次或多次所谓的“AVL旋转”。AVLTOPK经过改进后的高频项统计模块的数据结构由时间窗口、哈希表、平衡树三部分组成,如图2-5所示。2-5O(logn)的时间内完成单本章小结本章介绍了基于NetFlow的网络数据流监测系统的相关技术方案,并介绍了这些技术在本系统中的实现方式。在技术方案的介绍过程中,本人依次阐述了分区表技术、基于字典树的IP数据包匹配技术和高频项监测技术。以上技术在本项目中扮演着非常关键的角色,它为本文后续章节的阐述起到良好的铺垫作用。3章需求分析与系统设计本章将主要阐述系统的需求分析和设计,进行系统需求概述,并提出了开发系统的技术方案以及总体设计等。为系统的实现打下良好的基础。系统目标概述本项目将重点研究基于流的网络监测分析系统的架构设计、体系结构以及实时统计、高频项目统计等数据流分析与管理技术。通过本系统的部署,可以实现对目标网络数据流有效监测的任务,减少网络安全隐患,为网络态势分析和大规模异常检测提供依据。本系统需要达到的目标如下:实现面向骨干网络的数据流监测体系结构实现面向骨干网络的数据流监测架构设计研究高效的流采集技术研究高效的数据流分析技术研究高效的IP数据包分类技术研究高效的数据流挖掘技术实现大规模网络环境下的高效数据存储设计方案LINUX环境下的多进程通信技术本人全面地参与了基于NetFlow的网络数据流监测系统的研发工作,进行了系统的方案设计与代码实现,下面针对系统的特点阐述系统的需求概述。系统需求概述本节将主要从基本功能需求、扩展需求和性能需求等多个角度详细阐述系统的需求。下面分别从数据采集子系统和实时流量监测子系统分别描述系统的需求。数据采集子系统数据采集子系统主要包括以下功能需求:网络流量采集功能应支持多种Flow协议特性。Flow技术作为一个重要的网络数据提取方式,为高端网络骨干链路的实时流量采集分析提供高效、准确的数据摘要提取服务,是网络流量分析不可或缺的基础技术。各个主流路由器厂商都提出了不同的数据流标准协议,包括CiscoNetFlow协议、华为的NetStreamSFlow等等。为了使本系统全面的支持Flow技术,因此网络流量采集模块应可以收集多种Flow协议的数据包并进行处理。网络流量采集功能应可以通过软件配置实现。从骨干网上网络监测数据来源的角度来看,主要的方法包括基于流量全镜像的网络监测和基于Flow的网络监测。网络流量全镜像的原理是通过交换机等网络设备的端口镜像或者通过分光器、网络探针等附加设备,实现网络流量的无损复制和镜像采集。由于是把网络链路上的数据原封不动地复制了一份,虽然没有损失其中的任何信息,但是由于骨干网的速度快,导致需要的存储设备容量巨大,导致可扩展性差,而且必须有专有的设备,最后部署的难度和成本比较高。为了减少系统部署的成本,增加系统的可扩展性。因此本系统支持软件配置方式的流量采集功能。采集模块支持设备、接口的自动索引转换功能。由于本系统需要监测的设备和接口较多,人工进行设备、接口的描述是一件比较复杂而且错误率较高的工作。因此本系统应支持以下功能,通过SNMP建立设备、接口的索引映射关系,并能够通过网络统计数据中的设备、接口索引获取设备、接口描述信息。系统集成需求。NetFlow的数据流监测系统作为大规模网络异常监测系统的核心组成部分,需要与其它系统进行交互。因此本系统应可以与设备控制系统、流量控制系统等进行通信交互,保证目标应用系统的流程完整性。实时流量监测子系统实时流量监测子系统主要包括以下功能需求:提供基于端口的网络数据流量分析。本系统能够明确区分端口流入、流出流量。并能够在端口级别进行网络容量、速度、使用率、数据包个数等的统计。提供基于应用的网络数据流量分析。能够明确网络流量中的各个应用比例;支持应用流量趋势分析,基于全网的应用分布分析;能够及时发现通信热点应用,异常应用,为网络故障分析提供依据;能够灵活定制企业特殊应用。提供基于路由器级别的网络数据流量分析。能够明确各个路由器上的应用统计情况;能够明确各个路由器上流量、包数出现频率在一定阈值之上的源、目的地址。提供基于自定义资源的网络数据流量分析。对于一些特殊的自定义资源,例如IP组,本系统可以根据系统的配置信息进行相应的处理,过滤并分析网络流量数据。系统提供自定义报表功能。根据报表配置,对设备、接口、IP组进行相应的统计。系统的扩展需求主要包括:支持所有原始Flow数据的保存。原始间隔的Flow数据作为系统的核心数据,是后期系统实时统计模块、高频项统计模块以及异常检测模块的数据源。因此本系统需要保存所有原始统计粒度为1分钟的流数据。在这种情况下,系统需要非常大的存储空间。自定义间隔Flow数据按时效保存。系统按照一定的规则保存长期数据。具体规则如表3-1所示。3-1Flow数据保存规则Flow数据间隔保存时限描述10分钟粒度200010分钟粒度的Flow数据保存20001小时粒度15001小时粒度的Flow数据保存15006小时粒度10006小时粒度的Flow数据保存100024小时粒度80024小时粒度的Flow数据保存800本系统不仅要保证功能的正确性,而且对系统的性能和可靠性有一定的要求,具体包括:流采集处理能力。近年来,互联网持续快速发展,网络数据流日益膨胀,其中包含大量的业务数据流、网络服务器日志以及各种网络攻击等等。网络数据流高速、海量的特点为本系统的部署提出了新的要求。为了使本系统能够满足在骨干网络上部署的要求,本系统要求具备40000流/秒的流数据采集处理能力。统计数据查询性能。对于全网流量相关数据表的查询,在数据库中已经存在10万条记录的情况下,执行跨天查询的查询时间要小于2秒钟。系统故障平均修复时间。系统故障平均修复时间为发生系统故障后,从发现故障、申告故障、处理故障到故障恢复的总时间取平均值得到故障平均修复时间。系统不同、故障发生地点不同、故障类型不同都会影响故障修复时间。具体要求如下:硬件系统故障平均修复时间小于2小时;软件系统故障平均修复时间小于10分钟;网络系统故障平均修复时间小于30分钟。系统运行参数限制。系统各模块无故障运行时,内存占用小于系统总体设计本节主要介绍系统的总体架构设计和拓扑结构设计等。网络数据流监测系统的体系结构如图3-1所示。图中显示了NetFlow数据流监测平台的核心组成部分。3-1NetFlow数据流监测系统体系结构图NetFlow数据流监测系统的体系结构图可以看出,该系统主要由数据采集子系统和实时流量监测子系统组成。数据采集子系统从网络流接收代理中获取网络数据一代理将所有收到的流数据格式化为标准的NetFlow格式,然后通过进程间通信提交到共享内存[44]环上。实时流量监测子系统的各个模块并行的读取共享内存环上的NetFlow数据,经过模块内部的计算和处理,将计算结果写入存储代理中。NetFlow数据流监测系统对外开放原始数据访问接口以及平台运行数据访问接口。NetFlow的网络数据流监测系统拓扑结构如图3-2所示。路由器路由器 防火墙务器路由器 防火墙务器务器路由器 防火墙3-2NetFlow的数据流监测系统网络拓扑结构图根据以上拓扑结构可以看出,基于NetFlow的数据流监测系统主要包括采集单元和处理单元和存储单元三部分。采集单元从部署的路由器获取Flow数据,业务处理单元根据采集单元获取的流数据进行统计,提交给存储单元,存储单元完成统计数据和原始明细数据的存储。系统模块设计3-3所示:3-33-33-3基于流的监测系统功能模块图各个模块的功能概述如下:数据采集与格式转换模块实现路由器数据包的抓取。通过网卡的混杂模式将某个网络设备看到的数据报文完整的收集起来。数据包抓取模块需要达到至少40000flow/s的流数据采集能力。捕获模块的输入缓冲区由程序自行分配。从网卡捕获的都是未经格式化的流数据,例如JFlow、SFlow等等,因此需要将不同格式的流数据统一格式化为NetFlow格式。该模块的主要工作逻辑如下:首先进行源数据流提取,其次进行数据流格式判别,然后进行数据流格式统一化,最后,将统一化后的NetFlow数据流放置在共享内存环上。共享内存模块实时统计模块IP组级别上进行数据流的包数、流量等类型的统计。高频项统计模块高频项统计模块作为流量采集子系统的核心组成部分,其核心功能是基于窗口数据流,统计出现频率在一定阈值之上的数据项。由于网络数据高速、海量的特点,该模块对算法的时间复杂度和空间复杂度要求较高。数据合并模块在需要实时监测的网络应用中,单一时间尺度的数据统计往往不能满足真实网络环境的需要。因此,数据合并模块的核心任务是根据根据某种低级别时间尺度的数据流构建相应的多时间尺度数据流数据。本人在项目的进展过程中,主要负责以上五个模块的设计与开发工作。系统接口设计基于NetFlow的数据流监测系统与多个外部系统和管理平台具有直接接口,子系统接口关联关系如图3-4所示。3-4NetFlow数据流监测系统设计外部接口设计图NetFlow的网络数据流监测系统与其它系统或平台的接口描述如下:设备控制系统:控制特定设备进行IP封锁、端口封锁等操作。流量控制系统:通过该系统制造背景流量。大规模网络异常检测系统:通过NetFlow数据流监测系统获取流量信息,通过计算,进行流量异常判断以及预警操作。流分类以及应用识别系统:通过NetFlow数据流监测系统获取流量信息,通过计算,进行业务流分类以及应用识别操作。系统内部接口结构主要包括:数据采集模块与数据源之间的接口原始数据访问接口平台统计数据访问接口数据采集模块与数据源之间的接口数据采集模块从底层数据源获取流量数据。目前,系统支持的数据源见表3-3-2数据采集子系统支持的数据源类型协议版本备注V1V5V7Cisco提出的私有技术协议。支持数据流采样、模板以及聚集等技术InMon、HP和FoundryNetworks联合开发的一种网络监测技术。支持数据流随机采样V5华为制订的私有技术协议。支持数据流采样、模板以及聚集等技术。应用范围主要在国内共享内存访问接口3-53-5共享内存访问接口数据类型平台统计数据访问接口各路由器上各端口的总流量和总包数各路由器上各端口的总流量和总包数统计格式见表3-3所示。3-3路由器端口数据统计格式名称说明路由器全国编号(包含省和运营商信息路由器物理端口编号统计时间戳该端口上总包数该端口上总流量TCP、UDP、ICMP协议流量和包数各个协议的流量和包数统计数据格式见表3-4所示。3-4路由器协议数据统计格式名称说明路由器全国编号(包含省和运营商信息协议类型 统计时间戳该协议上包数该协议上总流量所有端口的流量(TCP、UDP等协议)路由器各个端口的协议流量统计格式见表3-5所示。3-5路由器所有端口协议流量统计格式名称说明路由器全国编号(包含省和运营商信息协议类型 统计时间戳端口号该端口上总包数该端口上总流量按源或目的地址进行流量和包数的TOPK统计路由器源和目的流量数据统计格式见表3-6所示。3-6路由器源和目的地址流量数据统计格式名称说明路由器全国编号(包含省和运营商信息地址类型(1:源地 2:目的地址)统计时间戳TOPM编号下的地址该地址上总包数该地址上总流量包数占总包数的百分比addr_byte流量占总流量的百分比源地址数量和目的地址数量路由器源和目的地址数量统计格式见表3-7所示。3-7路由器源和目的地址数量统计格式名称说明路由器全国编号(包含省和运营商信息统计时间戳源地址数量目的地址数量系统开发环境NetFlow的网络数据流监测系统开发环境如下。LinuxCpythonLinux下的文本编辑器编译器采用GCC编译器,版本调试工具为GDBMySQL数据库,版本采用了RationalRose建模工具,目前的版本号是V2003硬件环境:曙光SERVER;四核处理器、8G内存。操作系统:LinuxCentOS5.2版本。如果项目在开发过程中需要用到其它类库时,将会有条件的使用它们,在此不作赘述。本章小结本章首先对基于NetFlow的数据流监测系统进行了目标任务的阐述,然后从基本功能需求、扩展需求、性能及可靠性需求等多个角度详细阐述了本系统的需求。另外,基于对系统的需求分析,论文提出了相应的技术解决方案和设计方案,从系统的总体结构、模块设计、接口设计等角度重点阐述了系统在设计过程中需要重点关注的问题。通过对系统的分析与设计过程,为系统的实现打下良好的编码基础。保证系统运转的正确性和高效性。4章系统实现NetFlow的网络数据流监测系统主要由数据采集与流格式转换模块、共享内存模块、高频项统计模块、实时统计模块以及数据合并模块组成。下面将主要对系统各功能模块的工作流程、核心技术以及一些实现细节进行详细说明。数据采集子系统数据采集子系统的核心任务是从路由器上进行数据包抓取、数据流协议解析以及数据流格式统一化等操作。数据采集子系统主要处理的数据流格式是NetFlow数据流。它是Cisco公司提出的一种流协议。当捕获到的数据流是其他格式时,需要通过流的转换方法进行格式转换。数据采集子系统的内部结构如图4-1所示:4-1数据采集子系统内部结构图数据采集就是将某个网络设备看到的数据报文完整的收集起来。在本系统中,通过设置以太网卡的混杂模式监听局域网上的数据报文。格式转换模块就是将捕获到的各种流进行格式化,统一化为系统处理的数据流。流技术是网络设备厂商为了在网元设备内部提高路由转发速度而引入的一CPU消耗的路由表软件查询匹配作业部分转移到硬件实现的快速转发模块上。在这种功能模式中,数据包将通过几个给定的特征定义归并到特定的集合中,这个集合就是Flow。在网络中,流Flow代表通信的对等端的一条连接。有多种方式来进行标识,在不同的应用中各不相同,通常我们关心的流记录分类依据由一个五元组(即源地址、目的地址、源端口、目的端口和协议类型)所组成。Flow技术更加关注网络链路上所传输流量的特征信息,因此Flow数据被广泛用于高端网络流量测量技术的支撑,以提供网络监控、流量图式分析、应用业务定位、网络规划、快速排错、安全分析等数据挖掘功能。模块概述目前,各个主流路由器厂商都提出了不同的数据流标准协议,包括CiscoNetFlow协议、华为的NetStreamSFlow等等。本系统需要支持多种数据流协议格式,并提供各种流协议到NetFlow协议的转换功能。然而,各个厂商所提出的流协议往往侧重点不同,而且由于协议的升级,同一厂商的不同版本的协议之间变化也非常大。以Cisco提出的NetFlow协议为例。15格式中,\h数据报由一个头信息、一个或多个信息流记录构成。头信息的第一个字段包含输出\h数据的版本号。此外,头信息中的版本信息用来决定如何理解这些\h数据NetFlowV5协议的头信息结构如表4-1所示4-1NetFlowV5头信息结构字节内容描述0-versionNetFlow输出格式的版本号输出到这个\h数据包的信息流的个数4-自路由器启动后,到当前的时间(以毫秒为单位)8-0000UTC1970开始,到当前的秒数12-0000UTC1970开始,到当前的微秒数NetFlowV5协议流记录信息格式如表4-2所示4-2NetFlowV5流记录信息格式字节内容描述0-数据源的IP地址4-目的地的IP地址8-下一\h网段路由器的IP地址12-inputand输入和输出接口的SNMP索引16-该信息流中的\h数据包数20-在信息流的\h数据包中,第3层(Layer3)字节的总个数24-信息流开始时的28-信息流的最后一个\h数据包被接收时的32-srcportTCP/UDP源头和目的地的端口号36-pad1prot未使用的(即内容为0的)字节、IP协议(例如,6=TCP,17=UDP)和IP\h服务类型40-flagspad2TCP标志。pad2pad3是未用的(即内容为的)字节44-未用的(0的)字节相对于较老的V5而言,NetFlowV9作为最新版本,主要体现出了以下两个技术特色:Aggregation功能:在高端路由器上启用NetFlow时有可能产生较大的数据输出。网络设备对Netflow统计数据进行自动汇聚的功能,可以大大降低对数据输出的带宽需求。Template功能:NetFlowV9是首先对Template进行支持的版本,通TemplateNetFlowV9获得了前所未有的扩展灵活性。Template描述了NetFlow输出记录的各字段定义,无需改变现有规范即可支持将来可能出现的增强功能。CiscoNetFlowV94-24个流信息。NetFlowV1、V5V7格式,数据流4-2CiscoNetFlowV9数据流格式NetFlowV9格式的数据流,由于其引入了模板功能,因此需要首先解析NetFlowV9max_peerspeerpeermax_sourcessourcesourcemax_templatestemplate,每个template的最大长度是max_template_len;根据agent_ip确定peer;根据模块实现流程4-34-3数据采集与格式转换模块流程图模块接口说明4-34-3数据采集与流格式转换模块核心函数列表函数名称功能简述int数据采集模块初始化函数int原始流捕获入口函数voidpkt_callback数据处理函数intIP有效性验证函数intFlow格式判别函数void该函数根据不同的数据流格式分别调用各自的函数进行处理voidSFlow格式数据转换函数voidNetFlowV5数据流处理函数voidNetFlowV9数据流处理函数int数据包网络字节到主机字节转换函数u_int32_t获取应用ID信息数据流写环函数模块概述另外,本系统对性能要求较高。在骨干网上,NetFlow90000Flow/sCPUIOCPU空转,这样将极大的影响系统的效率。共享内存模块的实现方案4-44-4共享内存逻辑结构typedefstruct_NF_BLOCK //第一位是W31R,最多31个读进程 //序列号 //write时的时间戳 //NF数据}typedefstruct_NF_SYSTEM_INFO{ pi; //1个生产者 //31个消费者 //key是nfr入口 //ringsharememorysize //block个数 //block大小 nfb_max_dc;//die_count最大值}其中NF_BLOCK是单个数据块的结构,在数据块内定义了全局标志位、读写标志位、序列号等信息,下面将针对数据块的结构进行重点阐述。NF_SYSTEM_INFO是共享内存环的总体信息,其中包括环的入口位置、环大小等定义,通过对NF_SYSTEM_INFO的定义,实现对环的初始化工作。模块接口说明4-44-4共享内存模块核心函数列表函数名称功能简述 获取共享内存 释放共享内存NF_SYSTEM_INFO*生产者进程初始化 生产者进程系统结束函数 生产者进程获取第一个可写块 生产者进程获取下一个可写块 生产者进程写BLOCK函数消费者进程注册函数 消费者进程获取下一个可读块共享内存模块的关键问题BLOCK4-5所示:4-5BLOCK说明全局标志位读写标志位数据包标志位数据包时间戳NetFlow格式化数据NetFlow格式化数据于当前数据块,写进程覆盖读进程的次数。WFlag代表写进程的当前位置,RFlag代表读进程的当前位置。SeqSeq来判断下一个数据块NetFlow数据。BLOCK8840000flow/s4-64-6共享内存环所存储的数据包时间共享内存所占用的内存大小301分钟10分钟1小时500MB的共享内存,这样可以保证1NetFlow数据。holdthendrop的方式工作,即写进程首先要找到一个可写块,flagNetFlowNetFlowV54-54-5NetFlowV5实时流量监测子系统4-6所示:4-6实时流量监测子系统逻辑结构图模块概述高频项统计模块作为实时流量监测子系统的核心组成部分,其核心功能是从共享内存环上获取网络流量数据,基于窗口数据流,统计出现频率在一定阈值之上的数据项。本模块将采用第二章中介绍的高频项统计技术来完成高频项的统计功能。高频项统计模块的实现流程高频项统计模块的实现结合了相关统计算法、内存管理策略以及多线程编程方法。该模块采用了基于哈希和计数策略的高频项统计算法,可以在亚线性时间内进行网络数据流的包数和字节数统计。在内存管理方面,由于模块每次动态申请的内存都是固定大小,因此可以采用预先分配内存的方式减少mallocfree的调用,极大地减少了程序出错的概率。4-7否否是否写入是4-7根据以上流程图可以看出,模块首先进行数据结构和线程的初始化工作,然后从共享内存环上读取格式化后的流数据并通过高频项统计算法对数据项item进行处理。在此之后,进行写库时间点的判断,如果当前时间为写库点,则将高频项数据结构上的数据写入Ring_Buffer,完成异步写库操作。typedefstructFIX_HASH_NODE_ //真实数据,eg:sip,dip... //真实数据长度void*p_node; frames, framesbytesstructFIX_HASH_NODE_*p_hash_next,}typedefstructFIX_ENTRY_u_int32_t //FIX_HASH_NODE //u_int32_t //u_int32_ttwin_packet_num; //时间窗口总共包数,eg:100,000flow/s*60s=600wint(*is_same_item)(void*,int,void*,int); //比较函数int(*hash_func)(void*, //}在上述数据结构定义中,FIX_ENTRYFIX_ENTRY的结构定义中,is_same_item和hash_func是哈希表的回调函数,通过回调函数的使Twin件读取并进行哈希表的初始化操作。FIX_HASH_NODE用来表示哈希结点结构体,FIX_HASH_NODE中保存了指向前后结构的指针,它们主要用来处理哈希冲突。高频项统计模块接口说明4-74-7高频项统计模块核心函数列表函数名称功能简述int高频项统计算法初始化函数int数据结构销毁函数intlc_freq_item_add数据项添加函数intlc_freq_dump高频项获取函数 lc_hash_add向哈希表中添加哈希结点voidlc_hash_remove从哈希表中删除哈希结点LC_HASH_NODE*lc_hash_find在哈希表中查找哈希结点LC_HASH_NODE*lc_freq_get_hash_node根据数据项,从哈希表中检索数据void*lc_freq_counter_head_malloc_proxy内存管理函数。申请内存。 lc_freq_counter_head_free_proxy内存管理函数。释放内存。LC_AVL_NODE*AVL树中添加结点 AVL树种删除结点向双向链表中添加结点int从双向链表中删除结点模块概述模块实现流程4-84-8实时统计模块体系结构图Ring_bufferRing_Buffer读取统计数据并将其写入数据库4-9所示:4-9实时统计模块执行流程图由实时统计模块流程图可以得知,首先模块获取数据流并进行流解析,然后进行写库点判断,如果当前时间戳是写库点,则将流数据写入Ring_Buffer,最后写库线程读取Ring_Buffer上的流数据,完成写库操作。模块接口说明实时统计模块的核心函数列表如表4-8所示:4-8实时统计模块核心函数列表函数名称功能简述BOOL初始化哈希表BOOL获取基本数据统计单元BOOL获取扩展数据统计单元BOOL向哈希表中添加数据项BOOL添加基本的NetFlow统计数据BOOL添加扩展的NetFlow统计数据BOOL基本的NetFlow统计数据写库BOOL扩展的NetFlow统计数据写库BOOL路由器端口计数函数BOOLIP计数函数模块关键技术模块主要关键技术如下。基于字典树的IP数据包匹配实时统计模块需要根据用户配置的IP组进行数据包的匹配并记录自定义IP组IP数据包匹配技术来解决分区表技术由于实时统计需要处理的数据量巨大,采用单一的数据存储会极大的降低模块概述数据合并技术作为网络应用的常用技术,其输入为某一时间尺度的数据流统计数据(例如1分钟间隔数据流统计数据),输出为多时间尺度的数据流统计数据(10分钟间隔数据流统计数据,30分钟间隔数据流统计数据等)。数据合并技术对性能和可扩展性有较高的要求。首先,由于网络数据流的高速、海量特点,单位时间内保存下来的网络流量信息十分巨大。如果频繁地对数据项进行扫描,必然会造成时间上极大的浪费,影响后续数据流的分析。其次,数据合并模块的输入并没有特定的限制,其输入可以是某一个时间尺度的实时统计信息,也可以是某一时间尺度的高频项统计信息,因此为了保证模块的可扩展性,需要仔细的考虑此模块的设计。另外,对于数据合并模块而言,模块的状态维护和空洞填补是二个极为关键的问题。由于系统输入数据的不稳定,数据合并模块往往会由于数据异常而退出,为了保证数据合并模块的持续运行,因此,需要在系统运行另外一个监视进程(watchdog),当发现主进程由于异常退出时,进行缓存清理后重新启动主进程;其次,需要在判断存盘点时进行遗漏步数的判断,如果存在漏洞,则需要根据上次更新时间和当前时间戳来填补漏洞。为了满足以上需求,该模块保证在单次扫描网络流量数据的基础上,对每种统计粒度维护一个全局状态。这样当输入数据到达存盘点时,将结果通过数据库IO保存到数据库中;否则,根据新的输入数据重新计算全局变量,维护每个时间尺度的全局状态。数据合并模块的实现流程数据统计模块采用python语言实现,python语言是目前比较流行的一种脚本语言,python面向对象,在系统配置和XML文件解析方面,都提供了很好的模块化支持。本模块将使用python脚本语言处理数据读取、写库并完成相应XML操作。在处理XML文件过程中,可以更加灵活的加入规则合并和冲突检测等功能模块,进一步完善系统。该模块的实现采用了面向对象的思想。数据合并模块的核心类图如图4-10所示。4-10数据合并模块核心类图在图4-10中,Header、DataSource、Archive、ArcState4-10数据合并模块核心类图4-10的类图设计,每一个MainDB都有一个配置文件与之对应。配置文件的读写方式:采用python的cpickle模块。配置文件的内存表示:采用pythondict数据结构。IPTOPK统计表为例,Dict的表示如图4-11所示:4-11数据合并模块内存词典的保存结构Dict中存储的是所有以RrdTypeDict的保存顺序(offset)按照初始化的顺序。本系统实现了对内存配置结构操作相关的APIinit操作:初始化。如果path目录下存在配置文件,则装载该配置文件,并且完成文件反向序列化工作。Close操作:完成内存控制数据的持久化工作。 操作:通过 找到对应变量Dict[hashvalue][offset]即可。Write操作:用指定的值覆盖Dict[hashvalue][offset]。数据统计模块的运行流程如图4-12所示:4-12数据合并模块执行流程图实时流量监测子系统是系统中核心数据的来源,其稳定性对于整个NetFlow数据流监测系统具有极为重要的意义。高频项统计模块存储结果如图4-13所示:4-13高频项统计模块存储结果图根据实时统计模块构造的网络流量速度曲线如图4-14所示:4-14实时统计模块网络流量速度曲线根据高频项统计模块构造的源、目的IP高频项列表如图4-15所示:4-15高频项统计模块存储结果图根据实时流量监测子系统的流量数据构建的前台应用界面如图4-16所示:4-16网络概况综合信息统计图本章小结基于NetFlow的数据流监测系统主要由数据采集子系统和实时流量监测子系统5章系统测试为了验证基于NetFlow的网络数据流监测系统的各个模块的功能正确性和性能高效性,本章将针对各个模块的实际情况进行相关的功能测试、性能测试[45],并针对出现的性能问题提出相应的性能改善建议。系统测试功能测试主要涉及本系统在特定的测试环境(包括硬件环境、软件环境等)下系统能否正常响应,处理结果是否正确等。功能测试的主要测试环境如下:硬件环境:A830r-F服务器,IntelXeon四核处理器,8G内存。软件环境:LinuxCentOS5.2版本;GCC4.1.2版本。下面主要从以下几个方面展开系统的功能测试。系统数据源测试测试目标系统数据源测试主要用来验证基于NetFlow的网络数据流监测系统能否正常处理NetFlow、SFlow、NetStream等类型的流数据。测试方法在另外一台服务器上定期用tcpreplay的方式以指定速率向数据采集服务器NetFlow、SFlowNetStream类型的数据流。在数据采集服务器端记录日志,记录收到的数据流个数、类型以及解析结果,判断数据采集模块能否支持相应的数据源。测试用例设计本项测试通过模拟不同种类的数据源以及混合数据源来展开系统的功能测试,测试用例以及预期测试结果见表5-1所示。其中表格中的0代表正常处理,-1代表不能正常处理。5-1系统数据源功能测试用例以及预期处理结果发送速率数据流协议sNetFlow000NetFlow000NetFlow000NetFlow000SFlow000NetStream000NetStream000NetFlowV1V5V7混合数据源000 V5, V5NetStreamV5混合数据源000JFlow---测试结果及结论按照以上的测试方法,本文依次执行了表格5-1中的所有测试用例,得到的测试结果如表5-2所示。5-2系统数据源功能测试用例实际结果发送速率数据流协议sNetFlow000NetFlow000NetFlow000NetFlow000SFlow000NetStream000NetStream000NetFlowV1V5V7V9混合数据源000 V5, V5NetStreamV5混合数据源000JFlow---通过比较表5-1的预期结果和表5-2的实际结果可以发现,基于NetFlow的网络数据流监测系统能够正常处理的数据源能够处理NetFlowV1、V5、V7、V9,SFlowV5,NetStreamV5类型的流数据,其他类型的流数据不能处理。测试结果与需求一致。测试过程中记录的部分结果文件如图5-1所示:5-1多数据源测试结果高频项统计正确性测试测试目标测试基于NetFlow的网络数据流监测系统内的高频项统计模块计算结果是否正确。测试方法首先将网络流量数据保存到数据库中。然后将数据库中的流量数据作为输入,高频项统计模块基于以上输入进行运算,得到统计结果。其次编写脚本程序,读取数据库中的输入,进行内存排序后得到高频项统计结果。最后比较以上二个测试结果,判断高频项统计模块运算结果是否正确。测试预期结果通过以上测试方法进行测试,得到的二个测试结果保持一致。测试结果及结论采用以上的测试方法对系统进行测试,基于NetFlow的网络数据流监测系统中的高频项统计模块得到的运算结果与多种内存排序的结果一致,即高频项统计模块运算结果是正确的。测试结果比较脚本如图5-2所示:性能测

5-2高频项测试结果比较脚本Flow速率情况下采集模块的压力测试根据以上功能测试可以看出,当Flow40000flow/s时,采集模块可以正常的工作。由于本系统部署在骨干网络上,因此需要测试在较

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论