查看文章 |
【 简介 】 IP网络承载能力与所提供的应用业务规模向来都是相辅相成的,一方面IP网络的建设将给新应用技术的推广提供有效的实施平台,另一方面应用业务也会随着自身系统发展需要而对现有IP网络提出更高的资源需求,从而推动IP网络基础建设进入新的建设周期。
IP网络承载能力与所提供的应用业务规模向来都是相辅相成的,一方面IP网络的建设将给新应用技术的推广提供有效的实施平台,另一方面应用业务也会随着自身系统发展需要而对现有IP网络提出更高的资源需求,从而推动IP网络基础建设进入新的建设周期。在这种类似于“鸡生蛋、蛋生鸡”的逻辑悖论中,另外一个问题却是毋庸置疑的凸现了出来,那就是如何把应用业务与其所占用的IP资源(如带宽)清晰、准确的对应起来,如何保证有限的IP资源能够被合理应用的到主要利润业务中。 以NetFlow为代表的Flow技术正是为响应这种挑战而出现的新型解决途径。 什么是Flow 在最开始,Flow是网络设备厂商为了在网元设备内部提高路由转发速度而引入的一个技术概念,其本意是将高CPU消耗的路由表软件查询匹配作业部分转移到硬件实现的快速转发模块上(如Cisco的CEF模式)。在这种功能模式中,数据包将通过几个给定的特征定义归并到特定的集合中,这个集合就是Flow。每个Flow的第一个数据包除了促使该Flow记录的产生以外,还要驱动网元三层模块完成路由查询并将查询结果同期放入Flow记录中,而该Flow集合的后续数据包将直接在Flow的已有记录中获得路由转发信息,从而提高了网元设备的路由转发效率。 作为网元设备内部路由机制优化的副产物,Flow记录能够提供传统SNMP MIB无法比拟的丰富信息,因此Flow数据被广泛用于高端网络流量测量技术的支撑,以提供网络监控、流量图式分析、应用业务定位、网络规划、快速排错、安全分析(如DDOS)、域间记帐等数据挖掘功能。 相对于会话(“Session”)而言,“Flow”具备更细致的标识特征,在传统的TCP/IP五元组的基础上增加了一些新的域值,至少包括以下几个字段: -源IP地址 -目的IP地址 -源端口 -目的端口 -IP层协议类型 -ToS服务类型 -输入物理端口 以上七个字段可以唯一地确定任意一个数据包属于哪个特定的Flow,换而言之任何一个字段出现了差异都意味着一个新Flow的发生。 在实际软件实现中,Flow所包含的字段定义及数量将会随着厂商甚至协议版本的不同而出现变化(如包含AS信息、Next_Hop等),业界因此也相应地出现了各种不同的实现版本。而在这些不同的Flow版本中,NetFlow得益于Cisco公司在网络设备行业内无与伦比的领袖地位而获得最大范围的认同。 有多少种Flow Flow的版本差异通常直观的表现在其输出报文格式上。目前业内常见的主流Flow格式大致有以下几种: ![]() 随着IETF对IPFIX的标准化,网络流量分析的数据采集协议也将也将逐步转移到NetFlow V9/IPFIX标准上来。因此,下文将以NetFlow V9为例介绍Flow的详细内容。 NetFlow的运行机制 NetFlow的运行可分解为以下几个关键功能单元,包括: 3.1 Cache缓存空间 NetFlow Cache是所有活跃Flow统计信息的存储位置,所有具备相同关键字段的数据包都将在该Cache相应表项中进行数据累计,如数据包数量、字节数等。除了被称之为Main Cache的上述缓存之外,部分支持Aggregation机制的网元设备还需提供相应的聚合缓存(Aggregation Cache),最终的输出报文将包含该聚合缓存的汇总结果,从而能够有效降低NetFlow流量对网络带宽的占用; ![]() 3.2 可配置的Cache维护机制 一般情况下Cache空间的占用是与所监控的Flow数量呈正比的,但是当链路中充斥着大量的短连接Session时,Flow表项数量可能会因为没有得到及时释放而过多占用有限的Cache空间。为此,NetFlow提供了一种非常复杂、高效的算法以快速定位一个数据包在该Cache中的位置或判断是否应新建表项,并且通过管理员给定的阀值进行各类表项的超时导出,从而及时释放老的表项以容纳新建Flow信息。 Cache表项Timed-Out操作可由以下几项因素进行驱动: -该表项已经空闲了指定的时间长度(Inactive Timer,缺省15 seconds); -长连接会话强制超时(Active Timer,缺省30 minutes); -缓存空间耗尽所触发的强制超时; -TCP FIN/RST触发的超时。 3.3 规范的导出报文格式 NetFlow采用了主动式数据推送机制,当Cache表项超时后,网元设备中的NetFlow Agent将通过规范的报文格式将超时表项数据送往指定主机(须事前指定IP地址、协议和端口)。虽然NetFlow在设计中可以接受任何传输层协议作为承载协议,但在一般实现中通常采用UDP作为缺省选择,我们平时所看到的各种Flow协议版本主要描述了这种报文导出格式的定义。 NetFlow的封装格式分为1个Header和若干个Record: -Header:主要包括版本号、序列号、后续Record数量、系统启动时间等; -Record:提供对每个Flow的详细数据记录。 下文以NetFlow V9为例,输出报文Header与Record整体结构如下所示: ![]() |
联系客服