2021-4-10 | 互联网
随着宽带互联网应用的普及,互联网用户数量在不断增加,各个领域的应用也在逐步深入,网络规模持续扩展,网络流量高速增长。尤其是P2P技术产生以来,互联网网络流量激增,对网络的处理能力提出了更高的要求。同时,要合理、有效地疏导流量,必须对网络流量进行科学、细致的分析,通过流量分析可以有效地总结出网内、网外流量比例,各区域用户产生的流量大小,进而对用户使用习惯、各类应用带宽消耗情况等进行分析,从而可以对不同区域用户使用习惯、网内资源建设方向等进行有效的指导。不仅要依据数据的目的地址去疏导流量,还要明晰流量的来源和成分,区分流量类型,以精确地计算成本,合理分配IP地址数量和流量占用带宽,使流量管理更加规范。
Netflow技术最早由Cisco公司研发,首先被用于网络设备对数据交换进行加速,并可同步实现对高速转发的IP数据流进行测量和统计。经过多年的技术演进,Netflow对流经网络设备的IP数据流进行测量和统计的功能更加成熟,并成为当今互联网领域公认的最主要的IP/MPLS流量分析、统计和计费行业标准。Netflow技术能对IP/MPLS网络的通信流量进行详细的行为模式分析和计量,并提供网络运行的详细统计数据。
通过对某电信运营商的网络进行改造,引入互联网流量分析系统,以互联网流量数据为分析对象,实现以下功能:(1)精确判断流量归属地;(2)精确统计流量类型;(3)精确区分流量成分;(4)以天为单位,对某一天的流量及以天为周期单位的时间段产生的流量进行查询。
1流量分析系统设计
由于Netflow仅能宏观地对网络流量进行分析和监控,无法满足精细化管理的要求。鉴于此,需要建立网络流量分析系统。
首先在省级主干路中引入流控设备,对全省网络流量进行控制。通过建立一台Linux服务器(CMserver),在流控设备中将流量镜像至此服务器的数据库中,便可采集到全网的流量明细,进而通过存储过程将各种需要分析的数据进行聚合成表,便可对全网流量进行实时监控分析。
本系统包括4个功能模块,分别是数据采集模块、接口程序模块、数据库模块、页面呈现模块。
1.1数据采集模块
要实现对流量源和目的地的分析,首先要进行流量采集并存储,采集的数据中要包含数据包的源地址、目的地址、数据包发送时间等信息。本系统采用NetflowV9版本进行数据采集,需要对Netflow协议、待采集的路由器端口和数据采集存储服务器等进行配置。
由于需要分析的路由器端口数据量很大,而且分析目的主要为各方向流量数据比例,综合考虑数据处理量和数据准确性之后,将采集周期定为5分钟,采样比例定为1000:1,此时每5分钟Netflow数据流约有30万~40万条,存储Netflow数据流的文件大小约20~30MB。
在采集数据的端口选择方面,既要采集所有流量数据,保证数据的完整性;又要避免数据重复采集,以保证数据的准确性。按照上述条件,选择省级主干中路由器上行端口为流量采集端口,通过该端口既可以采集所有互联网用户访问Internet的流量数据,又不会发生流量数据重复采集情况。
为分析路由器端口的网络流量数据,必须将从路由器中送出的Netflow数据收集并存储,以便进一步的处理,所以需要配置Netflow采集存储服务器。具体配置为2.4GHz四核CPU、2G内存,使用Linux系统,并安装CiscoNetflowCollector(NFC)采集软件。
1.2接口程序模块
经过采集,每5分钟会输出一个格式为XML的文件,文件数据分3部分:数据头、模板部分、数据部分。NetflowV9的数据格式可以自定义,根据分析需要,定义数据模板主要包括我们关心的13个字段,分别为:源地址、目的地址、源端口号、目的端口号、入接口、出接口、协议、服务类型、流数量、报文数、字节数、开始时间、结束时间。每个字段使用“|”分开。
选用C++程序语言进行数据的分析及入库。程序语言完成的主要功能为按照字段定义进行数据分列,并按要求建立数据表,然后将分析后的数据导入数据库中。原始数据每天自动生成一个文件夹,文件夹中每5分钟生成一个数据文件,为了达到自动读取数据的功能,采用“日期+时间”循环来自动读取数据文件。
读取数据文件对每行按照不同字段分列。由于每个数据文件的数据头部分完全相同,而且不包含所要分析的数据信息,所以可以把数据头部分跳过,然后根据每行数据的“|”将每个字段的数据进行分列。
再根据各字段数据分析的需要,转换成相应的数据类型,并与数据库连接写入数据库中。
1.3数据库模块
作为基于Netflow流量的分析系统,数据库成为系统的基础及核心,一切功能模块及数据采集均需建立在数据库中,从性能、成本、易用性、可靠性等方面综合考虑,选用MySQL作为本系统的数据库。
首先是基本表的设计。在程序操作数据表时,读写的性能受数据表字段所占字节数的影响,数据表字段所占字节数越大,则需要更长的读写操作时间,字段所占字节数越小,则其读写操作的性能将会有所提高。因此,设计数据库字段的属性对整个系统的性能至关重要。在分析程序对数据按照规则条件进行匹配后,将更新数据表中IP地址等相应的归属信息,但在数据的进一步汇总中,如果汇总程序按照IP地址归属信息进行数据分组汇总,则需要读取归属信息的全部字节数,这对于系统整体汇总而言,其运行效率仍会受到影响。本着读取最少字节数以提升系统工作效率的原则,需要将归属信息代码化,汇总程序仅需要根据归属信息代码作为分组条件即可。
根据Netflow的原始数据量,如果对其进行一一匹配对应,则无法在5分钟内完成相应的数据归属、流量分析等操作。为了提高数据库效率,最直接的方法就是先进行关键字段的聚合,然后进行相应的递归聚合,最后将分析数据进行匹配分析,这样可以有效地减少原始数据的运算量,尤其在磁盘I/O有限的条件下,性能提升更明显。