netflow是Cisco公司提出的用于描述通过路由器的连接信息的协议。路由器也象防火墙一样不仅仅是按包处理,而是跟踪到连接一层,对属于 同一个连接的数据包进行统计,某种程度上也成了状态检测,路由器将这些连接信息使用netflow协议发送到netflow搜集器,根据连接的统计信息可 得到网络运行的各种信息,还可用来判断是否受到攻击。
netflow已经出过很多版本,目前应用较多的netflow版本有5,7,8.*,版本9是最新版本。之所以会有那么多版本,是由 于想统计的连接的信息越来越多,数据结构也越来越大,越来越复杂,到了版本8达到登峰造极,版本8里出了N多个子版本,让人头大不已,如此下去只能导致 netflow协议彻底不可用。netflow v9的出现,总算基本解决了这个问题。
Netflow 版本5包括两个部分:数据头部和数据部分。
如下图所示。
图2-1netflow 版本5数据头部格式
如下表所示
表 2-1netflow 版本5数据格式
Content |
Bytes |
Description |
srcaddr |
0-3 |
Source IP address |
dstaddr |
4-7 |
Destination IP address |
nexthop |
8-11 |
Next hop router's IP address |
input |
12-13 |
Ingress interface SNMP ifIndex |
output |
14-15 |
Egress interface SNMP ifIndex |
dPkts |
16-19 |
Packets in the flow |
dOctets |
20-23 |
Octets (bytes) in the flow |
first |
24-27 |
SysUptime at start of the flow |
last |
28-31 |
SysUptime at the time the last packet of the flow was received |
srcport |
32-33 |
Layer 4 source port number or equivalent |
dstport |
34-35 |
Layer 4 destination port number or equivalent |
pad1 |
36 |
Unused (zero) byte |
tcp_flags |
37 |
Cumulative OR of TCP flags |
prot |
38 |
Layer 4 protocol (for example, 6=TCP, 17=UDP) |
tos |
39 |
IP type-of-service byte |
src_as |
40-41 |
Autonomous system number of the source, either origin or peer |
dst_as |
42-43 |
Autonomous system number of the destination, either origin or peer |
src_mask |
44 |
Source address prefix mask bits |
dst_mask |
45 |
Destination address prefix mask bits |
pad2 |
46-47 |
Pad 2 is unused (zero) bytes |
netflow v9和以前版本最大区别就是v9的数据格式可以自定义,有很强的扩展性,描述一个连接的参数的数量可以自己定义,可多可少,而以前的版本的数据格式是固定 的,如果用了某版本,即使其中很多字段不需要,在一个数据记录中同样要保留这些参数,使灵活性很差,导致想看的数据看不到,不想看的又必须看。
netflow v9数据部分分为三部分:数据头(header)、模板部分(Template)、数据部分(data)。除了数据头部分外,在一个包中的模板部分和数据部分都可能有多个记录。
数据头部分描述数据包的版本等基本信息:
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
数据源
模板是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种数据类型,以后还可以扩展,具体类型的详细说明见附录A表格1。
Field Length
表明Field Type所定义的数据域的长度,以字节为单位。
数据部分就是根据模板部分的定义填写的具体的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字节对齐。