数据包是网络中传输的数据单位,每个数据段经过网络层层封装成为-个可以在网络中流动的包,
从源头到达目的地之后,被目标设备层层解析出来,获得里面的数据。
数据流是一个有序的数据包系列,它需要用一定的顺序进行读取。可以认为,数据流是一次活动包
含的几个部分的信息的连接,例如TCP的三次握手。数据流中包含多个数据包,这些数据包具有共
同的特点,就是IP五元组(源IP地址,源端口,目的IP地址,目的端口,传输层协议)相同。
Netlow是一种网络数据包交换技术,用来对数据交换进行加速,同时统计经过网络设备的IP数据
流。Netflow建 立在会话级别上。每个数据流对应一个会话信息。Netflow包含两个部分,一个是
数据流的采集和缓存;另一个是通过UDP的数据导出机制。事实上,一个Netflow包含的都是同一
个TCP会话的数据,但一个TCP会话可能包含多个Netflow流。
确定Flow的标识: SIP+ DIP+SPORT+DPORT +Layer 3 protocol type + TOS byte0 +
Router or switch interface
nfc格式的flow统计信息:源地址|目的地址|源自治域目的自治域|流入接口号|流出接口号|源端口|
目的端口|协议类型|包数量|字节数|流数量
Netflow通过识别low的信息,将flow加入到缓存中。随著flow数量的增加,缓存中的表项也在不
断增加,所以需要一个缓存维护机制来清理一些过期flow。 对flow的超时的指定方式:
1.空闲超过了指定空闲时间长度
2.长连接会话强制超时
3.缓存空间耗尽所触发的强制超时
4. TCP FIN/RST触发的超时。
Netflow的数据导出是一种使用UDP的主动推送机制。
Netflow封装的格式是header+每个flow的详细记录。
Figure 1 Netflow报头格式
Figure 2 Netflow模板定义方式
Figure 3 Netflow数据部分
二进制的数据流经过nfdump的解析。可以得到多种不同格式的文本数据。如以下几种:
raw Raw record dump.
line Standard output line format.
long Standard output line format with additional fields.
csv ',' separated, machine parseable output format.
json json output format.
pipe '|' separated legacy machine parseable output format.
这些不同格式包含了不同的属性信息,以各自定义的连接符把各个字段连接起来。在应用中,根据
实际需要使用相应的格式。在我的项目中,用的是pipe的格式,这一类型用“或”字符把每个字段
连接起来,下面介绍各个字段的含义,为了显示方便,将线性的字段连接分成三个部分,依次相连
就是pipe格式的一行数据。
Figure 4 nfdump -o pipe格式
在一个flow中,这些重要属性表示了netflow的各个数据包的统计信息:
●起始时间: flow中第一 个包的时间
●结束时间: flow中最后-一个包的时间
源IP :同属-个flow的包的源p相同
, 源端口:同属一个flow的包的源端口相同
。 目的IP :同属一个flow的包的目的ip相同
, 目的端口:同属一个flow的包的目的端口相同
● 包数:同属一个flow的包的数目
●字节数:同属一个flow的包的总字节数
●标志位: flow中的tcp包中含有的所有tcp flag
一个收集、存储和统计分析netflow数据的开源软件。在路由或交换机上配置netflow数据收集传
输功能,在电脑上收集传过来的netflow数据包, 进行可视化和分析。最常用的命令是nfcapd和
nfdump ,它们分别负责收集存储和读取分析两个任务,所以收集和分析是互相独立的,可以分别
进行。并且因此可以查看和分析历史的网络数据,只要那些数据依然存放在存储器上。
nfcapd命令用于在终端设备上,例如网络管理器、主机等监听收集netflow数据 ,并存入文件。一
般来说, nfcapd会每五分钟创建一个新文件,然后写入。所以每个文件包含了5分钟的netlow数
据。
nfcapd命令创建的文件是不可直接阅读的二进制文件,因此需要nfdump来对其进行解析。
启动nfcapd监听,其中:
nfcapd -w -D -T all -l
-D:后台运行
-w:文件轮转与时间间隔对齐
-l:指定数据存放目录,注意这是一个目录,nfcapd将会写入很多个文件,这个目录要先创建好,否则会报bad address错误。
-p:指定监听端口,这个端口是和发送netflow的程序协商好的,要统一使用同一个。
更多参数含义参考[3]或见nfcapd -h
Notice :防火墙开启状态下,可能会收不到数据。检查并关闭防火墙:
systemctl status firewalld.service
systemctl stop firewalld.service
nfdump用于从本机数据文件中读取netlow信息并进行展示,也可以做一些简单的统计分析,或
者发送到其他主机上。
这个查询过程有点类似于数据库的查询方式,可以设置查询的时间范围、协议类型、源地址、目的
地址等字段的值,把符合条件的记录展示出来。
nfdump -r
nfdump -r -a
nfdump -r/R -口-0 >
-r:读取单文件。指定文件名
-R: 读取多个文件,-R :<1ast fi1e>: -R.可以匹配目示下所有文件。
同样的sip. dip汇总展示
-b:整合成双向f1ow
-n:前n条记录
-M: 读取多个目示下同名文件,需要同时使用-r或-R. -M -r/-R
更多参数含义参考[3]或nfdump -h
上面前两个命令只是输出在命令行中,第三个命令用于写入文件,可以指定写入的格式。这是-种
可以直接打开阅读的文本文件格式。
nfpcapd命令可以监听网卡接口, 或者从pcap数据文件中读取数据包,然后统计并存储为netflow
形式的文件,可供nfdump命令读取。这个命令的作用大致相当于路由或交换机中的netflow统计
程序加Enfcapd命令的作用,但其统计的是计算机网卡的流量数据信息。因此,可以在路由上运
行nfpcapd用于收集netlow数据,转发给一 个主机,这个主机通过nfcapd来接收netflow并由
nfdump对其进行解析。
nfpcapd -i -l
-i:指定监听的网卡接口卡
-l:netflow数据存储文件名
更多参数如pcap数据文件等参考nfpcapd -h
netflow本身有些机制,例如空闲超时机制、长会话超时机制、与tcp会话的对应关系等等,这些一
方面可以通过阅读源码进行探索,另- -方面也可以用wireshark结合nfdump来做实验。实验中,
用一台物理机开启了wireshark抓包,在虚拟机中使用nfpcapd进行监听,然后将两者的结果进行
对比。由于netlow是具有统计意义的概念,而wireshark是对数据包的获取和协议解析,经过过
滤统计的操作,可以将两者的结果做比较。两个监听工具开启完成后,在物理机上用python远
程登录虚拟机,然后按照需要, 执行- -定频率的命令操作。其实就是为了产生数据包而已。之前探
兖了一下空闲超时机制和长会话超时机制,将实验结果展示出来。
import paramiko
import timeip = ''
port = 22
username = 'root'
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(ip, port, username=username)exec_cmd = 'ls'
idx = 0
while idx < 4:stdin, stdout, stderr = ssh.exec_command(exec_cmd)print(stdout.read().decode('utf-8'))idx += 1time.sleep(15)ssh.close()
实验1:验证空闲超时时长为60s的猜想
用python脚本定时每30s输入命令,观察5min内netflow记录:
用python脚本定时每80s输入命令,观察netflow记录:
结论:如果80s产生- -次数据流,则netlow会得到很多个flow ,因此netflow的空闲超时机制小于
80s ;当30s产生一次数据流, netlow只会有一个low ,所以空闲超时机制超过30s。经过更加细
粒度的试验,能够发现这个值接近于60s。
实验2 :验证长会话超时为5 mins的猜想
用python脚本每秒不断输入命令,观察是否连续30分钟后会出现长连接会话强制超时现象表格展
示前6个flow ,后面6个类似。
结论:每个low都在300s多-一些 ,并且查阅nfpcapd -h发现默认长度是300s ,可以根据需要修
改。Tcp的三次握手对应了flow的起始,四次挥手或RST包对应了flow的终止。
空闲超时时长查阅结果是60s ,在实验中只能大概推知60左右,数据无法完全确定这个值。
这些探索实验不-定能够准确无误地获得相关参数的值,但可以让我们更加直观地认识netflow的
机制和netlow相关I具的运行,也是计算机人士发挥动手能力、探索好奇的途径。
参考资料
NetFlow学习笔记. https://blog.csdn.net/jack237/article/details/7371314.
【NetFlow】NetFlow V9协议详细分析. https://blog.csdn.net/simonchi/article/details/71440362
网络流量分析利器-可视化网络-netflow【4】-接收器nfdump简介. https://blog.csdn.net/cnxhsy/article/details/104665404
nfdump的GitHub地址:https://github.com/phaag/nfdump
原文链接:https://zhuanlan.zhihu.com/p/356098676
学习地址: Dpdk/网络协议栈/vpp/OvS/DDos/NFV/虚拟化/高性能专家-学习视频教程-腾讯课堂
更多DPDK相关学习资料有需要的可以自行报名学习,免费订阅,久学习,或点击这里加qun免费
领取,关注我持续更新哦! !