netflow版本9

本文档的Copyleft归yfydz所有,使用GPL发布,可以自由拷贝,转载,转载时请保持文档的完整性,严禁用于任何商业
用途。
msn: [email protected]
来源:http://yfydz.cublog.cn

参考资料:
http://www.cisco.com/warp/public/cc/pd/iosw/prodlit/tflow_wp.htm
http://www.cisco.com/univercd/cc/td/doc/cisintwk/intsolns/netflsol/nfwhite.htm
1. 前言

netflow是Cisco公司提出的用于描述通过路由器的连接信息的协议。路由器也象防火墙一样不仅仅是按包处理,而是跟踪到连接一层,对属于同一个连接的数据包进行统计,某种程度上也成了状态检测,路由器将这些连接信息使用netflow协议发送到netflow搜集器,根据连接的统计信息可得到网络运行的各种信息,还可用来判断是否受到攻击。

netflow已经出过很多版本,目前应用较多的netflow版本有5,7,8.*,版本9是最新版本。之所以会有那么多版本,是由于想统计的连接的信息越来越多,数据结构也越来越大,越来越复杂,到了版本8达到登峰造极,版本8里出了N多个子版本,让人头大不已,如此下去只能导致 netflow协议彻底不可用。netflow v9的出现,总算基本解决了这个问题。

netflow v9和以前版本最大区别就是v9的数据格式可以自定义,有很强的扩展性,描述一个连接的参数的数量可以自己定义,可多可少,而以前的版本的数据格式是固定的,如果用了某版本,即使其中很多字段不需要,在一个数据记录中同样要保留这些参数,使灵活性很差,导致想看的数据看不到,不想看的又必须看。
 
2. netflow v9

netflow v9数据部分分为三部分:数据头(header)、模板部分(Template)、数据部分(data)。除了数据头部分外,在一
个包中的模板部分和数据部分都可能有多个记录。

2.1 数据头

数据头部分描述数据包的版本等基本信息:
    0                   1                   2                   3  
    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |            Version            |             count             |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                      System Uptime                            |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                       UNIX Seconds                            |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                     Package Sequence                          |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                        Source ID                              |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
version
 版本,取值为9
count
 模板和数据部分的记录的总数量
system_uptime
 设备自启动以来的毫秒数
unix_seconds
 数据发出时当前UNIX时间秒数,从1970年1月1日开始计数的秒数
packet_seq
 netflow包的序列号
source_id
 设备源ID,等价于v5,8中的引擎类型和引擎ID字段, 在目前Cisco
 的实现中,前两个字节为0作为保留值,第3字节描述引擎ID,第4字节
 描述设备线路板卡标志,该字段和设备源IP地址共同定位netflow
 数据源

2.2 模板部分

模板是netflow v9的创新之处,模板的功能是用来描述netflow数据部分有哪些字段以及Z字段的长度,这样就可以灵活定义这个netflow信息包中包括了哪些数据,而且有很好的扩展性,v9中已经定义了80多种类型的数据,以后如果有需要可以很方便地扩展。

模板部分描述流量集(flowset)中有哪些类型的数据及其长度信息,netflow解析器利用它来对数据部分进行解析,总长度不定。

模板流量集数据格式, 各字段是16位的:
     0                   1            
     0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    |       FlowSet ID = 0          |
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    |           Length              |
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    |          Template ID          |
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    |          Field Count          |
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    |          Field 1 Type         |
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    |          Field 1 Length       |
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    |          Field 2 Type         |
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    |          Field 2 Length       |
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    |           ......              |
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    |          Field N Type         |
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    |          Field N Length       |
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    |          Template ID          |
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    |          Field Count          |
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    |          Field 1 Type         |
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    |          Field 1 Length       |
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    |          Field 2 Type         |
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    |          Field 2 Length       |
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    |           ......              |
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    |          Field N Type         |
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    |          Field N Length       |
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

FlowSet ID
   该字段用来区分模板记录和数据记录,对于模板记录该字段在0~255之间。目前描述netflow流字段的模板记录中该字段为0,而描述选项字段的模板记录中该字段为1。对于数据记录来说,该字段值都是大于255的。
Length
长度字段表示该流量集的总长度。因为可能会容纳多个ID的模板,整体长度值是必须的。
Template ID
模板ID用于标志一个新的模板记录,用来匹配一个新的数据段中的数据记录,这个ID值是大于255的。
Field Count
域数量用于描述这个模板记录中的域的数量,一个模板记录中可以有多个域。
Field Type
该参数表明域的类型,在netflow v9中定义了87种数据类型,以后还可以扩展,具体类型的详细说明见参考文献。
Field Length
表明Field Type所定义的数据域的长度,以字节为单位。

2.3 选项模板
netflow v9模板类型中还有一种选项模板(options template),这个模板不是定义netflow流量信息,而是netflow处理进程自身的各种控制信息的。

选项模板数据格式, 各字段是16位的:
     0                   1            
     0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    |       FlowSet ID = 1          |
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    |           Length              |
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    |          Template ID          |
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    |      Option Scope length      |
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    |         Option length         |
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    |       Scope Field 1 Type      |
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    |       Scope Field 1 Length    |
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    |           ......              |
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    |       Scope Field N Length    |
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    |      Option Field 1 Type      |
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    |      Option Field 1 Length    |
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    |           ......              |
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    |      Option Field N Length    |
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    |           Padding             |
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
FlowSet ID
   该字段用来区分模板记录和数据记录,对于模板记录该字段在0~255之间。目前描述netflow流字段的选项模板中该字段为1,而描述选项字段的模板记录中该字段为1。对于数据记录来说,该字段值都是大于255的。
Length
长度字段表示该选项模板流量集的总长度。因为可能会容纳多个ID的模板,整体长度值是必须的。
Template ID
模板ID用于标志一个新的模板记录,用来匹配一个新的数据段中的数据记录,这个ID值是大于255的。
Option Scope Length
表示该选项模板中的所有范围域(Scope Field)的长度,以字节为单位。
Options Length
表示该选项模板中的所有选项域(Options)的长度,以字节为单位
Scope Field 1 Type
用于表示范围域选项类型,可能的取值为:
 ? 0x0001 System
 ? 0x0002 Interface
 ? 0x0003 Line Card
 ? 0x0004 NetFlow Cache
 ? 0x0005 Template
Scope Field 1 Length
范围域数据的长度
Option Field 1 Type
选项域类型,类型范围是数据模板中的87种数据类型
Option Field 1 Length
选项域长度,以字节为单位
Padding
填充数据,使总长度4字节对齐
 
2.4 数据部分

数据部分就是根据模板部分的定义填写的具体的netflow数据,可有多个,总长度不定。

模板流量集数据格式, 各字段是16位的:
     0                   1            
     0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    |    FlowSet ID = Template ID   |
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    |           Length              |
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    |    Record 1 - Field 1 value   |
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    |    Record 1 - Field 2 value   |
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    |    Record 1 - Field 3 value   |
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    |    Record 1 - Field 4 value   |
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    |           ......              |
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    |    Record 1 - Field N value   |
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    |    Record 2 - Field 1 value   |
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    |    Record 2 - Field 2 value   |
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    |    Record 2 - Field 3 value   |
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    |    Record 2 - Field 4 value   |
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    |           ......              |
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    |    Record 2 - Field N value   |
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    |           ......              |
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    |           padding             |
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Flowset ID
 取值等于模板字段中定义的Template ID值,表示数据是按哪个模板定义的。
Length
 整个数据流量集的长度
Record N - Field N
 每个netflow信息中的各个字段的数据,这些数据是什么是有模板定义的。
Padding
 填充数据,使整个数据流量集长度4字节对齐。

3. 举例

假如要描述下述的连接信息,每个连接信息中包含源IP、目的IP、下一跳网关、连接的包数、字节数这5个数据:
Src IP addr. | Dst IP addr. | Next Hop addr. | Packet | Bytes
             |              |                | Number | Number
-------------+--------------+----------------+--------+-------
198.168.1.12 | 10.5.12.254  |  192.168.1.1   | 5009   | 5344385
192.168.1.27 | 10.5.12.23   |  192.168.1.1   | 748    | 388934
192.168.1.56 | 10.5.12.65   |  192.168.1.1   | 5      | 6534
 
 
具体数据填充情况如图所示
这三个连接只占用netflow v9包中的一个流量集,这个包里包括了4个流量集(有两个没显示)。
包头部分定义了版本号9,流量集数4,时间、序号、ID等固定参数。
第一个流量集中定义了以上3个连接
先是定义模板,描述连接中要包含哪些连接参数:
FlowSet ID = 0, 表示是数据模板;
Length为28字节,是整个模板部分长度;
Template ID定义为256;
Field Count为5,表示每个连接中有5个域,以下是每个域的具体类型和长度信息;
第1个域类型是源地址,长度为4;
第2个域类型是目的地址,长度为4;
第3个域类型是下一跳,长度为4;
第4个域类型是包数,长度为4;
第5个域类型是字节数,长度为4;

模板后面就是具体的数据部分:
FlowSet ID = 256, 表示数据是按256号模板定义的数据类型来描述;
Length为64字节,整个数据部分总长度(3个连接,每个连接数据长度为5×4=20,再加4字节的ID和长度字段)
后面就是各个连接的各个参数数值,参数类型和长度就按模板中的定义。
 
4. 结论
netflow v9的出现解决了描述连接的数据类型不断变化的需求,可以方便灵活地描述所感兴趣的流量数据,而不用考虑不感兴趣的数据,并有很好的扩展性,有足够空间定义新的数据类型,最大可达65535种,而目前也只定义了不到100种类型。不过缺点是数据包的构造和解析相对就会麻烦一些,不过对于现在的处理器能力来说增加这点处理可以说是微不足道的。

发表于: 2007-02-04,修改于: 2007-02-04 11:38,已浏览3802次,有评论3条 推荐 投诉
	网友: 本站网友 	时间:2007-05-15 17:18:48 IP地址:58.207.168.★
	

之前一直在做netflow_v9的数据分析。因为条件的限制,没有cisco路由器输出数据,而是用了一款名为“nprobe”的软件输出数据。但是这个软件在处理v9的数据,特别是IPv6的数据时,感觉比较混乱。不知您那有没有能稳定输出netflow_v9数据的软件或者nprobe关于处理ipv6数据的文档?可否share?


	网友: yfydz 	时间:2007-05-16 14:27:37 IP地址:218.247.216.★
	

我这也没有现成的, google吧

你可能感兴趣的:(数据结构,unix,防火墙,网络协议,Cisco)