下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
基于neflow的大流量网络流量采集与存储
近年来,随着技术的发展和大量公司业务的需求,网络应用的构建越来越多。网络复杂性和依赖性日益增强,出现了各种网络问题。对于网络这样庞大的复合体,解决网络问题的关键在于问题的定位。因此,对网络流量及相关情况实施科学合理的监管和深入分析,成为网络管理的重要环节之一;同时,它也是为网络问题提供有效解决方案及进行网络规划的重要手段之一。目前的网络流量分析方法主要有基于SNMP、基于实时抓包分析、基于网络探针和基于flow技术等几种。NetFlow是Cisco公司在1996年开发出的技术,它既是一种交换技术(NetFlow交换),也是一种流量分析技术。其版本5是到目前为止使用最广泛的版本。基于NetFlow的流量采集方法可以获得包括源/目的主机IP、应用协议类型、源/目的端口等详细信息,根据这些信息就可以对TopN协议(应用)、TopN主机IP(用户)以及TopNAS域等进行统计排行和趋势分析,同时也可对异常流量进行监测分析。另外,基于NetFlow的采集方法是被动式的,因而不会向被测网络增加额外的流量负荷,这也是其优点之一。1基于处理能力的流量采集技术对网络流量进行监控分析,其核心问题就是如何对采集来的数据进行归纳整理,尤其针对高速大流量网络环境所产生的海量数据。有效的数据整理是进行全面流量统计分析的基础,也是提高系统性能的手段。本文针对高速大流量网络环境的数据处理进行研究。这里的高速大流量网络环境是指有100~500Mbps左右的实际流量和几十万台活动主机的网络。本文所测试的网络环境是某部委的核心骨干网,该网络具有200Mbps左右的实际流量,且网络中的交换设备绝大多数都是Cisco路由器,便于笔者采用基于NetFlow的方法进行流量采集。高速大流量网络的特点对流量的采集、数据存储组织以及分析展现都提出了较大的挑战。主要体现在以下几方面:a)高速流量,接收要及时。经实验观测,被测网络繁忙时1h的NetFlow流条数可达百万条。由于其采用不可靠的UDP方式发送数据,采集模块若不能及时接收并处理如此巨大的数据量,必定产生丢包现象。b)原始信息复杂,需有效整理。由于NetFlow数据流所含信息比较详细,要进行细致的统计分析就需要对原始NetFlow数据流进行有效的分类整理,提取有用信息,这给数据处理和存储组织带来了一定难度。c)历史数据量巨大,查询不便。为了分析流量走势,就需要保存大量的历史数据。若使用诸如MySQL这种数据库表容量受文件大小所限的数据库作为存储数据库,就可能出现所需统计的数据分散存储在多个表中的现象,从而导致跨表查询,给操作带来不便,也降低了系统效率。本文结合NetFlow的数据特点和实际应用需要,提出了一套网络流量采集和存储方案,并基于此方案实现了一个基于NetFlow的、可支持高速大流量网络环境的流量分析系统。2流量检测和存储组织2.1后台采集器及分析器基于以上一些问题,笔者设计了如图1所示的系统结构。在路由器上开启NetFlow流量采集功能后,UDP形式的NetFlow数据将被发送到本系统的NetFlow采集器中,并进行数据包的解析,提取有用信息。多级聚合处理模块负责对提取的原始信息进行分级聚合整理,形成多种适合统计分析需要的数据,再分门别类地存入数据库。分析器则根据前端不同的查询请求,依照一定的查询策略从数据库不同的表中提取相应数据进行分析展现。本系统的后台采集器和聚合处理部分用C++编写实现,运行在Linux平台上,数据库采用开源的MySQL,而NetFlow流量分析利用Tomcat服务器通过Web方式展现,前台部分用JSP编写实现。本文工作的重点即在于数据采集、多级聚合以及数据库表结构设计部分。2.2数据收集2.2.1多线程技术在流量管理中的实现路由器NetFlowcache内过期的NetFlow数据以UDP包的形式不断向采集器的指定端口发送,每个UDP包携带n条flow记录,如图2所示。为解决高速大流量数据的及时接收问题,本文采用了多线程的方式来实现。用独立的两个线程分别完成数据接收和解析操作,伪代码如图3所示。由于接收线程和解析线程共享同一个临界资源,即接收到的数据链表,因而需要对临界资源进行加锁操作。为了在解析线程获得锁的同时确保接收线程仍在工作,笔者设计了一个双链表的缓冲存储结构,即解析线程获得锁后,首先将接收链表备份出来,然后将其置空,随即释放锁继续接收,再进行链表解析。这种双链表缓冲结构的优点是在数据解析的过程中确保数据接收的永不间断,有效提高了流量采集的可靠性。2.2.2基于优先阵列的流量趋势分析经过对NetFlow原始流的观察发现,在一些网络环境中,少数原始流的流量/包数之和占据了整体流量/包数的绝大部分,而大量的原始流却只有很少的流量/包数,这种现象被称为80-20现象。该现象符合少部分用户占用绝大部分带宽的实际情况,具有通用性。对于流量趋势分析来说,大量的小流量NetFlow记录会极大增加系统的处理量、降低系统效率。基于上述问题,本文提出在原始流聚合入库操作前加入优先队列(priorityqueue)处理机制,将原始流按流量降序排列依次执行后续操作,直到入库的flow总流量达到全部流量的一定比例(如预先设定95%)时停止入库,将未入库的记录丢弃。由实验可见,优先队列的引入可以在较大程度上减少预处理的数据量,同时也能基本保证流量不丢失。表1所示即为实验中不同入库比例对flow的流缩减比率。2.3静态分析系统根据NetFlow的数据特点,网络流量分析可从静态和动态两个角度进行。静态分析主要是指对流量在某个时间段内的主机、应用协议等构成情况进行的分析;动态分析则是指随时间推移,对某应用协议或某端口流量的变化趋势进行的分析。2.3.1压缩整理后数据存储方式以合理的保存流先对高速大流量网络进行流量趋势的动态分析就需要大量历史数据作为支撑。针对选用的MySQL数据库而言,若单表存储过多记录,可能导致查询效率的明显降低;若数据存储得太过分散又可能导致经常性的跨表查询,同样影响效率。可见,为满足动态分析的需要,必须将原始流先进行压缩整理,再以较为合理的存储形式保存在数据库中。目前的静态分析主要以新采集的数据作为分析对象,本文设计了如图4所示的数据处理总体策略,通过两个并发线程分别生成静态分析和动态分析所需的数据。2.3.2详细流结构体的创建静态构成分析需要按源/目的主机、应用协议及端口等规则进行分类统计、流量构成和TopN排行等,因而需从原始流中提取相应信息。根据从UDP包解析出来的原始流信息,创建了如下格式的详细流结构体,包含有导入详细流表的全部数据信息。经实际测量发现,被测网络流量较大时每天采集的flow数量可达百万条,MySQL数据库单表记录数则应尽量小于200万条,以便保证较高的查询效率。因而本文设计每天一张详细流表来保存流经一个路由器(采集点)的原始流记录,以供静态分析时进行数据查询。2.3.3流量聚合策略对于动态分析,本文设计了一套分级流量聚合策略来满足流量趋势分析时的数据查询。所谓流量聚合,是指对符合NetFlow数据格式的原始流记录根据一定条件进行流量合并,实现多条流合并为一条的过程,以实现原始流的压缩整理。流量聚合有三个关键要素:聚合条件、聚合项和时间粒度。满足相同聚合条件和时间粒度的流进行流量叠加,并保留聚合项(往往聚合条件属于聚合项的一部分)。基于上述聚合思想,本文提出了三个时间粒度(5、30min和3h)的聚合方案,并通过内存级流量聚合与DB级流量聚合相结合的策略来实现三个粒度的聚合,这就是所谓的分级流量聚合策略。由于内存级的聚合操作是在实时采集到原始流后立即执行的,为加快聚合条件的匹配速度以适应采集速度,笔者在内存中采用了hash表的存储结构。分级聚合策略如图5所示。12存储层聚集(1)基于网络实名的流量聚合如图5所示,内存级聚合实现了从原始流到5min时间粒度聚合流的转换。为使查询更加方便快捷,本文又设计了两种聚合流结构,以分别满足基于三层协议(TCP/UDP)的较粗泛的流量趋势分析和基于应用层协议端口的较细致的流量趋势分析。它们采用了不同的聚合条件,其结构如下:在这两种结构体中,timephase表示一个5min的整点时间段(如00:00:00~00:00:05),用于标志聚合流持续发生的时间段;ifindex表示原始流所流经的路由器接口号;direction表示从该接口流入还是流出的方向标志;ipprot表示传输层协议名称,portnum表示应用层端口号,这两个字段是区分两种聚合结构的根本所在。聚合项都包括dpkts(流量)和doctets(包数),而基于应用层协议端口号的聚合流还记录了protname(应用层协议名称)以及其所对应的ipprot(传输层协议名称)。由此,当需要进行基于传输层协议的流量趋势分析时,只需直接查询flow_aggr_total结构体所对应的聚合流数据表即可,避免了从基于应用协议端口号的聚合表归总统计的麻烦。对于一个新采集的原始流,必须能根据其所携带的聚合条件信息快速匹配是否已存在与其相同聚合条件的聚合流,若有则做流量叠加,若没有则创建一条新的聚合流。Hash表具有从key快速映射到value的特点,这种特点对于实时性较高的内存级聚合非常有意义。Hash表在内存级聚合中的应用如图6所示(以基于应用层协议端口号的聚合为例)。在使用hash表实现流量聚合的过程中,hash函数的优劣将影响匹配过程的快慢。根据聚合条件四元组的特点,本文设计的hash函数算法如下:其中:key是聚合条件四元组结构体,包含四个聚合条件字段。由于key.phasetime(5min时间段)是个大整数且重复率较高,而key.portnum(端口号)在1~10000的变化较大,因而考虑以时间段为基础,在其上叠加端口号对300的模值(300是5min折合的秒数),可实现较好的离散效果。2两级聚合及流量趋势分析由图5可见,除了5min时间粒度的内存级聚合外,其他两个时间粒度的聚合都是DB级聚合,通过每晚固定时间运行独立的聚合程序来实现。这两级聚合将根据当天新生成的5min时间粒度聚合流分别创建30min和3h粒度的聚合流存储到相应的聚合流表中。有了这三个时间粒度的聚合流,就可以在动态流量趋势分析时,根据指定的时间段信息动态确定查询哪个粒度的聚合流,以避开复杂且效率低下的跨表查询。做法是当所需查询的时间段出现跨表时,系统将自动查询更粗一级时间粒度的聚合流表。33聚合物实验的结果对被测网络3h左右所产生的共计292307条原始流进行聚合。各级聚合结果如表2所示。2.3.4单表时间跨度根据被测网络的实际流量情况,本文设计了三级时间粒度聚合表的单表时间跨度,如表3所示。经实验证明,这种时间跨度的设计不会发生MySQL单表记录数过大从而导致查询效率低下的现象,同时也不会由于时间跨度过小而出现过多的跨表情况。3实验结果分析在本系统多级聚合与存储策略的支持下,系统数据库为前端分析提供了充足且多样化的数据准备,前端程序只需通过简单的查询语句即可得到所需的数据集,极大简化了查询的工作量。图7即为被测网络某路由器接口HTTP协议的流出流量趋势实验效果。由图清晰可见每日流量呈周期性变化。4多种存
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 招标投标流程优化问题解析
- 跨境出租车租赁服务协议
- 在线票务网站管理办法
- 乙供物资库存周转率优化策略
- 广州市电信服务代建制管理法则
- 学校园区道路改造合同模板
- 家政服务博雅聘用合同
- 婚礼策划现场制片服务合同
- 制服破损更换政策
- 城市燃气管道铺设定向钻施工合同
- 项目学习《动物的类群复习课》教学设计
- 高净值个人财富管理税务风险与应对课件讲义
- 《农产品质量安全》系列讲座课件
- PCR技术的发明、原理及应用
- 20XX年高校维稳工作案例(四)
- 智能养老市场洞察报告202210
- 国家开放大学《管理学基础》形考任务4参考答案
- DB-T 29-202-2022 天津市建筑基坑工程技术规程
- 七年级数学上册一元一次方程复习课课件
- 工程地质及土力学第四纪沉积物的成因类型与特征原创
- 基于广数980TD系统的数控车床电路设计全解
评论
0/150
提交评论