随着企业数字化转型、算力网络等趋势发展,业务SLA要求越来越高,业务类型也逐渐丰富及多样,这对IP网络业务流量监控及分析提出了更高的要求,网络运维需要知道网络流量从哪里来,到哪里去,流量有多大等信息,以保障网络的稳定性。本文从Netflow的工作原理分析介绍了基于Netflow的网络流量监控及分析的功能实现建议,并描述了Netflow网络流量分析应用场景分析,以期能为网络流量分析人员以参考。
亚信科技(中国)有限公司
Netflow是一种网络监测功能,可以收集出入网络设备的IP流量数据。分析Netflow收集到的流量数据,网络管理人员可以知道IP包的来源及目的地,网络服务的种类,以及造成网络拥塞的原因。
交换机、路由器在某种意义上是黑盒子,网络管理员不知道黑盒子里面发生了什么。比如,黑盒子里面的数据都在干什么,谁发出的,到哪里去,流量有多大?等等这些指标,网络管理员都是不知道的。
为了解决这类问题,1996年,Cisco的Darren Kerr和Barry Bruins开发了一种流量监控技术,即Netflow。作为业界事实标准,Netflow描述了路由器IP流统计信息的方法。网络管理员能从Netflow的信息中,获取到IP流信息,这些信息解答了是什么流量?从哪里来?要到那里去?时间区间内,产生了多少流量等问题。Netflow数据可被广泛用于各种用途,如数据分析、网络规划、生成报表等等。目前Netflow已经成为了当今互联网领域公认的最主要的IP/MPLS流量分析,统计和计费行业标准。
Netflow主要有三个组成部分,如图1所示:
Netflow生成系统:Netflow Generator,一般由被监控的交换机或者路由器承担。将端口进出方向的数据包进行分析,把相关信息(源地址,目的地址,源端口,目的端口,协议等信息)放进Netflow包中,发到采集器。
Netflow采集系统:Netflow Collector,采集器对Netflow生成器发送过来数据进行整理、分析和存库。
Netflow分析系统:Netflow Analysis,消费Netflow采集系统提供的数据,进行数据分析、网络规划、生成报表,开放能力。
Netflow功能架构如下图2所示,其中后端服务分成五个部分:
1、采集服务:实时监听上送Netflow报文的端口,按照Netflow的协议格式,解析报文后,转换为字符串类型的数据,写入Kafka中。采集服务服务主要承担两个作用,解析Netflow原始报文和作为Kafka数据的生产者。
2、消息系统:高吞吐量的分布式发布订阅消息系统,承接多个生产者和消费者。
3、分析系统:订阅kafka的数据进行消费,获得基础的结构化流量数据,根据既定的规则进行分析,获得可被应用的统计分析结果。
4、存储服务:基础的流量数据,以及统计分析结果存放ES中。
5、北向接口:对外开放Netflow的数据能力。
图2:Netflow功能架构
采集服务承担两个功能,图3所示:
1、接收并解析Netflow原始报文
这部分的功能由开源软件nfdump来承担,nfdump是一款开源的Netflow收集、存储、过滤、统计分析软件。目前支持 Netflow v5、v7和v9版本。它是一套工具的组合。
nfcapd从网络中捕获Netflow数据,开源软件的处理是将这些数据存到文件中,然后它会每隔n(一般为5)分钟在这些文件中轮转。这种方式不便于我们使用它的解析结果,因此我们将其改造为将数据写入kafka中。
2、作为Kafka数据的生产者
librdkafka是C语言实现的Apache kafka的高性能客户端,为生产和使用kafka提供高效可靠的客户端,并且提供了C++接口。
在开源nfcapd的基础上,开发了一套封装librdkafka的生产者接口,使用该接口,将Netflow的数据写入kafka中。
一个IP Flow至少定义了下面七个关键元素:
· IP source address
· IP destination address
· Source port
· Destination port
· Layer 3 protocol type
· Class of Service
· Router or switch interface
上述字段定义了唯一的一个IP Flow,通过在网络的关键路由器、交换机开启Netflow采集网络流量,以对网络流量进行监控及分析。
通过基于Netflow技术对网络内流量的实时分析,能够及时发现网络中的异常流量(如DDoS等),分析其来源、目的及流量特征,以及时处理故障。通过流量分析,可以对多出口流量进行负载均衡,重要链路的带宽设置,QoS设定等进行网络优化。
负载分担是指在去往同一个目的地址有多条链路的情况下,将流量分担到多条链路,如图4所示。部署负载分担有以下优点:
1、将流量分担到不同的链路上,可以充分利用网络资源。2、将流量分担到多条链路上,当负载分担链路中的一条链路出现故障后,流量可以从其它链路继续转发,从而提高链路的可靠性。
负载分担,又分为等价负载分担和非等价负载分担。等价负载分担:允许配置多条目的地相同且优先级也相同的路由。当没有到同一目的地的更高优先级路由时,这几条路由都被采纳,在转发去往该目的地报文时,依次通过各条路径发送,从而实现路由的负载分担。
对于等价负载分担,流量是在这些负载分担路径上进行平分的,不会考虑链路带宽的差异问题。这种方式可能造成一些低带宽链路拥塞,而另一些高带宽链路空闲。如果能够按照出接口的带宽进行流量的负载分担,则能解决这个问题,这就是非等价负载分担。这两个原理相同,只是后者考虑了带宽的因素。
图4:负载分担示例
负载分担算法,分为逐包和逐流两种:
逐包负载分担,设备启用了一个定时器,每来一个包,计数器加1,根据计数器的值选择出接口;逐流负载分担采用哈希算法,选择的出接口和流的元素有关。
因为逐包负载分担对于同一条流可能会从不同的接口出去,存在乱序的风险,一般很少采用。实际应用中,逐流负载分担应用较为广泛,后续如果没有特殊说明,负载分担一般指的是逐流负载分担。
哈希算法将任意长度的二进制值按某种哈希函数映射为固定长度的较小二进制值,这个小的二进制值称为哈希值。计算出哈希值后,再根据哈希值按某种算法映射到出接口,并将报文从对应的出接口发送。逐流负载分担就是采用哈希算法。
哈希算法的输入是各报文的特征值,被称为“哈希因子”。可作为哈希因子的报文特征值包括但不限于:
a)以太帧头:源MAC、目的MAC
b)IP首部:源IP、目的IP、协议号
c)TCP/UDP首部:源端口号、目的端口号
异常流量检测与处理,遵循如下的流程:
1、异常流识别:什么是异常流?
2、异常流标记:把识别的异常流标记出来,供前端展示;
3、异常流处理:前端判断异常流确实存在风险,可以选择将对应的风险流阻断;
4、异常流阻断:阻断包括两个部分,将前端的阻断转换为设备的配置;配置生效后,设备阻断异常流;
5、异常流阻断仿真:仿真异常流阻断后的效果,也支持自定义流量的仿真和阻断下发。
Netflow可以采集到流的信息,基于已有的流信息进行分析。存在如下的几个异常流场景:
a)源IP是境外IP
b)一个结算周期内收到大量的ICMP报文,带宽利用率超过50%的情况下,占到当时总流量的10%
c)一个结算周期内收到大量的ARP报文,带宽利用率超过50%的情况下,占到当时总流量的10%
d)一个结算周期内收到大量的短报文(报文长度小于80),带宽利用率超过50%的情况下,占到当时总流量的10%
Netflow是一种基于网络流量信息的统计技术。网络设备作为Netflow的客户端,主动向Netflow服务端上报流量采样数据,服务端对流量数据进行解析,提取二层MAC,三层IP,四层协议类型和端口号信息,然后对这些信息进行分类统计,可获得网络的通信流量和资源使用情况。同时基于预置的流量规则,甄别正常的业务流量和异常流量 ,对业务和资源进行监控和管理。基于Netflow的流量检测能够支撑IP网络做更深入分析,以支撑自智网络向L3及更高水平的提升。