假如要描述下述的连接信息,每个连接信息中包含源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和长度字段)
后面就是各个连接的各个参数数值,参数类型和长度就按模板中的定义。
netflow v9的出现解决了描述连接的数据类型不断变化的需求,可以方便灵活地描述所感兴趣的流量数据,而不用考虑不感兴趣的数据,并有很好的扩展性,有足够空间定义新的数据类型,最大可达65535种,而目前也只定义了不到100种类型。不过缺点是数据包的构造和解析相对就会麻烦一些,不过对于现在的处理器能力来说增加这点处理可以说是微不足道的。