Netflow v9学习笔记
由于工作需要,对netflow进行了一定的调研和学习,总结如下。
1、什么是NetFlow
NetFlow是由Cisco创造的一种流量轮廓监控技术,简单来说就是一种数据交换方式。NetFlow提供网络流量的会话级视图,记录下每个TCP/IP事务的信息。也许它不能像tcpdump那样提供网络流量的完整记录,但是当汇集起来时,它更加易于管理和易读。
2、NetFlow v9版本
NetFlow v9是一种全新的灵活和可扩展的Netflow数据输出格式,采用了基于模板(Template)的统计数据输出。方便添加需要输出的数据域和支持多种Netflow新功能。
NetFlow v9和以前版本最大区别就是v9的数据格式可以自定义,有很强的扩展性。
3、NetFlow v9数据格式
对于不同的交换机或者路由器,会产生不同的Netflow数据包,但大体就也是Packet Header(包头),Template FlowSet(模板数据集),Data FlowSet(数据集),Options Template FlowSet(可选模板数据集)。除了数据头部分外,在一个包中的模板部分和数据部分都可能有多个记录。
例如:
1)由模板、信息和可选模板三种数据流汇总组成的输出数据包
2)全部由信息数据流汇总组成的输出数据包
3) 全部由模板和可选模板数据流汇总组成的输出数据包
3.1包头(Packet Header)
包头各字段描述:
version
输出数据包的数据流记录格式的版本号,最新的版本为9。
count
表示输出数据包中模板、信息、可选模板汇总记录的总数量。
SysUpTime
设备启用后的运行时间(毫秒级计数)。
UNIX Secs
输出数据包从输出器发出后经历的时间(秒级计数)
Sequence Number
该序列数字随着某个观察域中的输出器输出的输出数据包数量累积增加,能够被收集器用来判断是否有输出数据包丢失的现象。
Source ID
用来标示输出器所处的观察域(用32bit的数值来表示),收集器可以根据数据包的源IP地址和Source ID字段来区分同一个输出器输出的不同输出流。
3.2模板部分(Template Flowset)
模板是netflow v9的创新之处,模板的功能是用来描述netflow数据部分有哪些字段以及字段的长度,这样就可以灵活定义这个netflow信息包中包括了哪些数据,而且有很好的扩展性,v9中已经定义了80多种类型的数据,以后如果有需要可以很方便地扩展。
模板部分描述流量集(flowset)中有哪些类型的数据及其长度信息,netflow解析器利用它来对数据部分进行解析,总长度不定。
模板流量集数据格式:
模板数据流的各字段描述:
FlowSet ID=0
数据流汇总ID的值为0,该值是专门保留给模板数据流汇总ID使用的。
Length
长度值是整个数据流汇总所有字段长度的总和。由于某些模板数据流汇总可能包含了多个模板记录,因此我们必须使用一个长度值来确定下一条任何类型的数据流汇总的位置。
Template ID
每一个生成的模板记录都会被分配一个唯一的模板ID。模板ID的唯一性在一个本地的观察域中有效,0-255的模板ID被预留出来给模板数据流汇总、可选数据流汇总和其它尚待开发的数据流汇总使用。信息数据流汇总则使用256-65535之间的模板ID值。
Field Count
一个模板记录中字段的数量。因为一个模板数据流汇总中通常有多个模板记录,这些字段的计数能够帮助收集器界定一条模板记录和下一条模板记录的分界点。
Field Type
一个表示该字段类型的数字值,具体请参考RFC3954“字段类型定义”一节。
Field Length
一个表示相应类型字段的长度值,以字节为单位。具体请参考RFC3954“字段类型定义”一节。
3.3数据部分(Data Flowset)
信息数据流各字段描述:
FlowSet ID = Template ID
每一条信息数据流汇总都会有自己的数据流汇总ID,这个汇总ID和模板数据流汇总中的模板ID一致。收集器可以根据这个信息数据流汇总ID来查找相应的模板并对信息记录进行解析。(取值等于模板字段中定义的Template ID值,表示数据是按哪个模板定义的。)
Length
指的是整个信息数据流汇总报文的总长度。
Record N - Field Value M
信息数据流汇总剩余的部分是数据流信息记录的集合,里面包含了字段的具体数值,而这些字段的类型和长度已经在先前描述的模板记录中定义好了,我们可以根据数据流汇总ID和模板ID找到它们。
Padding
输出器将根据需要在数据流汇总中插入一些填充字节使得其符合每段4字节的大小。注意:报文格式中的length字段的值已经计算了填充字节的大小,填充字节的数值全部是0。
3.4Options Template FlowSet(可选模板数据集)
暂时不需要,若要了解,可查看RFC3954
4、例子
1)Template Flowset + Data Flowset
2)
参考:Netflow v9 RFC官方文档 https://tools.ietf.org/html/rfc3954