网络协议之Netflow与sFlow协议

《NetFlow 与sFlow理解及比较》

     (注:本文是个人对两种协议的理解,没有太多概念性的东西,适合对两种协议有一些基本了解的同学阅读。当然,本人知识有限,文章中的内容不保证没有知识错误,如若发现,望读者留言指正,万分感谢。)

     大纲

一、NetFlow协议工作原理

1、NetFlow and NDE如何工作

1.1、NetFlow and NDE

1.2、NetFlow cache

1.3、NetFlow Data FORMAT

1.4、Flow的概念

1.5、NetFlow and NDE on MSFC

1.6、Flow的生成及交换转移过程

1.6.1、Flow Mask

1.6.2、MLS Cache Entris

1.6.3、Aging Time

1.6.4、Active Timer、Inactive Timer

1.6.5、简单理解NetFlow的版本

1.7、Cache的缓存机制

1.7.1、Cache的缓存空间

1.7.2、可配置的Cache维护机制

1.8、限制NetFlow的数据流量统计

1.9、NDE流过滤

2、NetFlow技术总结

二、sFlow协议工作原理

1、sFlow技术原理理解

1.1、sFlow组成

1.2、sFlow报文

1.3、sFlow采样

1.3.1 、Flow采样

1.3.2 、Counter采样

1.3.3、Flow采样与Counter采样的区别与联系

2、 总结一些sFlow的特色

三、NetFlow or sFlow?

1、两种协议的明显区别

2、NetFlow 和sFlow谁更好?

 

 

 

正文

  • NetFlow协议工作原理

1、理解NetFlow and NDE如何工作

1.1、NetFlow and NDE(NetFlow Data Export)要点

1、NetFlow(网络流)是一种流量监控技术,即统计经过路由器的数据包并导出的方法,对网络信息作分析归纳统计。

2、网络流会收集所有流经交换设备的流量,并且把收集到的流量信息存储到流缓冲中。
3、NetFlow大致的工作过程:

  1. 具有NetFlow功能的网络设备(路由器或者交换机)上的某个接口开始处理第一个IP数据包,激活网络流。
  2. 在那个接口上被接收到的数据包将会以流(Flow)的形式被存储在一个动态的流缓冲中。具有存储在缓冲中的数据流特征的后续的数据将被直接交换而不需要通过软件交换。
  3. 配置NDE后,所有在缓冲中的符合一定要求的数据流将会被导出到一个指定的采集器,即NFC(NetFlow collector)。
  4. 采集器应用安装数据流接受和分析软件,再利用软件进行相应的网络流量分析。

 

1.2、NetFlow cache要点

1、网络流通过创建一个流缓冲来工作,在这个缓冲中包含了一些必须的信息,网络设备通过这些信息来交换数据,并且通过设置好的访问列表来过滤所有活动的数据流。

2、流缓冲的创建过程:

  1. 提取网络设备按照标准的路由方式路由的数据流的第一个包,然后把这个提取的数据包存储到一个缓冲中。
  2. 每个数据流都会生成对应相关的进出接口。
  3. 接受到后续的数据包时,网络设备查找存储在缓冲中的记录,如果与缓冲中的记录相符,那么就会改变记录数。否则,缓冲将创建一个新纪录。

3、需要注意的是,一个相应的缓冲记录创建之后,与之相符的后续数据包就会被直接处理,无需再去通过访问列表进行检查,好处是节省了交换的时间。

 

1.3 、NetFlow Data FORMAT(数据格式)要点

这里我以标准的且应用广泛的V5版本数据导出格式为例分析

1、一般地,头字段(Header)+多个流记录(Record)组成数据格式。头字段也包含了几个字段,第一个字段是被导出数据段的版本号,应用程序用来分配数据空间与决定怎么样解释该数据包的记录。第二个字段是数据包中的流记录号,这些记录是按照index来排列的。

2、传统上数据包输出方式是利用UDP协议传输。UDP传输不建立连接,不可靠,所以会有数据包丢失的情况。V5头字段包含一个序列号的字段,序列号=上一个包序列号+本次流记录数。利用这个序列号,通过简单的计算,就能判断是否丢失。除了UDP传输,我了解到利用SNMP协议,与SCTP协议也可传输数据。

 

1.4、Flow的概念要点

1、定义为一组单向传递的数据包,因此一条会话连接将会有两个方向的数据流,一个是服务器-----〉客户端,另一个是客户端----〉服务器。

2、配置网络设备的时候如果发现仅仅能够接收到某一个方向的数据,那么就要考虑配置是否按照要求设置,流是单方向的,in和out两个方向的数据应该可以同时接收到。

3、NetFlow用七个关键字段定义每一个Flow,一般来说这七个字段可以定义唯一一个流,即:SIP+DIP+SPORT+DPORT  +Layer 3 protocol type +TOS byte() + Router or switch interface。

其中协议种类应该是TCP与UDP等协议,在TCP/IP协议中位于第三层传输层。

4、Flow的转发及存储:路由器在接收到一个数据包后,将会查看这七个字段然后作出一个转发决定,如果这个包属于一个存在的数据流,那么相应的流量统计就会被创建,否则一个新的流条目将被创建。

 

1.5、NetFlow and NDE on MSFC理解

       在我以前的概念中,了解到位于同一局域网的同一VLAN通过广播方式可以进行通信,不同局域网,不同VLAN间通信,需要利用上层的路由器,涉及到多层交换,MSFC在与PFC(路由器的策略功能卡)共同使用时可以在一个单插槽解决方案中提供智能多层交换服务。MSFC模块在交换VLAN之间提供了经济有效的高性能多层交换与路由服务。

 

1.6、Flow的生成及交换转移过程:

1.6.1、Flow Mask要点

1、网络流是使用一定的规则来创建的,依据不同的网络环境和我们需要的数据流信息的情况,选择不同的Flow Mask可以创建我们需要的Flow。

2、有六个类型的Flow Mask,规范化程度有区别,我认为这也可以看作是对Flow的分类,分析需要的的Flow种类越多,自然使用的Flow Mask越规范。

3、而且我认为生成Flow时,为了不影响源数据包的传输还需要运用到镜像端口的技术。

 

1.6.2、MLS Cache Entris要点

1、网络流捕捉PFC卡中网络流缓冲中的数据流量,网络流维护PFC卡网络流缓冲中的每一个活动的数据流的流量统计率,当匹配缓冲的流被交换的时候网络流会增加这个数据到缓冲中。
2、NDE按照一定规则或者配置定期的导出所有到期的汇总数据流,这些数据流被一个外部的数据收集器接收和处理。

3、所有的被导出的数据流是从上一次导出开始计时到现在到期的数据流。

 

1.6.3、Aging Time要点

1、为了确保定期的导出数据流,需要为每一个Flow配置生存期。默认所有生存期到期的数据流都会被导出到外部的网络流收集器中,但如果同时又配置一个过滤器,那么NDE仅仅导出那些符合过滤器标准的数据流。

2、为了保证cache中的流条目不超过推荐的数量,可以通过配置mls aging命令设置。

 

1.6.4、Active Timer、Inactive Timer要点

1、两者区别:Active Timer计时结束时,cache中记录的所有活跃的信息将被导出到服务器。定时器的缺省时间为30 分钟,可设置。

     Inactive Timer计时结束时,Cache 中记录的所有不再活跃的信息将被导出到服务器。定时器的缺省时间为15 秒,可由用户设置。

2、区分活跃还是非活跃信息:我觉得在一个长链接的会话中,数据传输频繁,且在较长时间内不会断开链接,算是活跃信息,在cache中该Flow生命周期可以设的长一些,然后超时转发。而有的会话是短会话,或者会话即将结束,即非活跃信息,这时我们将其生命期设短,空闲时间超过设置时间,强制转发,尽早释放cache空间。

 

1.6.5、简单理解NetFlow的版本

现在最新版本为V9,在版本更迭中,有一些更新跟改变,如V5版本增加对数据流BGP AS信息的支持,即导出数据流中支持出现自治域系统号。V7版本交换机开始支持NetFlow技术,V8版增加数据流汇聚功能,到V9的时候,NetFlow的数据输出格式变得灵活可扩展,方便添加需要输出的数据域,并且支持NetFlow的新功能。

 

1.7、Cache的缓存机制理解要点

1.7.1、Cache的缓存空间,如下图:

cache 流程图

 

根据图分析可知:

  1. Cache中的流导出时不一定是用的同一个版本数据格式导出
  2. Flow导出条件有三个·,满足任意一个即可导出
  3. 在V8数据导出时,除了会利于主缓存空间外,还会使用一个另一个缓存,用来汇聚数据流。

 

1.7.2、可配置的Cache维护机制要点

1、cache空间的占用率与监控Flow的数量成正比

2、Flow条目数量可能会因为没有得到及时释放而过多占用有限的Cache,空间解决办法就是,根据设置的阈值,超时导出。

3、Timed-Out操作可由以下几项因素进行驱动:

  1. 流条目已经空闲了指定的时间长度(Inactive Timer,缺省15 seconds)。
  2. 长连接会话强制超时(Active Timer,缺省30 minutes)。
  3. 缓存空间耗尽所触发的强制超时。
  4. TCP FIN/RST触发的超时,即会话结束或异常时。

 

1.8、限制NetFlow的数据流量统计

1、我觉得这个技术适用于流量很大的网络中,减轻设备压力。

2、基本思想:抽样、数据流子集、数据汇聚

3、两种取样:

  1. 基于时间:设置取样率,样本量为生命周期/采样率,无需设置导出间隔
  2. 基于包:设置取样率,对一个流的取样次数为流的包数/取样率

4、数据流汇聚:降低带宽需求

 

1.9、NDE流过滤要点

1、用于分析具有某个或者多个特征的数据,如具有特定端口、特定IP地址、特定协议等。

2、四种配置的过滤器:

  1. 基于端口的流过滤:需要或者不需要特定端口(源端口或目的端口)的流。
  2. 基于Host+Port的流过滤:特定主机+端口
  3. 基于Host的流过滤:特定主机
  4. 基于Protocol+port:特定协议

 

2、NetFlow技术总结

1、我觉得NetFlow本质上是一种数据交换方式。Netflow记录下经过网络设备的每个数据包信息,经过交换,提取出其中我们所需要的信息导出,而且数据导出格式规范,易于管理与分析。

2、NetFlow技术核心是Cache跟NDE,一个存储IP流信息,一个规定数据导出跟传输机制。

3、有该技术的路由器和交换机可以跟踪每个开启该功能接口上的所有进入会话。

4、NetFlow根据七个关键字段分析数据包,如果两个包在所有的七个判断标准上都匹配,就把他们归类为相同的流量或者会话。一旦会话结束,或者被cache定期汇总,就会被传送给NFC。

5、NetFlow将主机会话之间由数据包组成的数据流缓存为cache中的一个流条目,查阅资料,每个cache大约可以缓存30个流条目,如果把这30个流条目汇集成一个NetFlow包,即这个NetFlow包可以描述30台主机之间的数万个数据包,监测了每个数据包的信息,如果硬件没有过载,NetFlow这个技术几乎可以准确地描述谁经过设备通信,获得每台主机流量100%的准确值。

6、观察NetFlow生成的Flow所包含的信息并不是全部数据包信息,可以看出NetFlow并不关注这个数据包里具体包括什么信息,只关注可以用于流量统计的信息或者说数据域,大量的与流量统计无关的数据域在汇集的过程中丢失。

7、NetFlow在生成Flow过程中不影响原数据包的传输,应该是采用了镜像端口技术。

 

 

二、sFlow协议工作原理

  1. sFlow技术原理

1.1、sFlow组成要点

1、由sFlow Agent与sFlow Collector组成,简单来说,sFlow Agent布置在交换机与路由器上收集流量信息,组装成报文发送给sFlow Collector做分析。

2、sFlow Agent通过sFlow采样获取本设备上的接口统计信息和数据信息, 将这两种信息封装成sFlow报文,注意这两种信息还是封装在不同的报文中。

3、当sFlow报文缓冲区满或是缓存时间超时后,sFlow Agent会将sFlow报文发送到指定的sFlow Collector。

4、网络设备在整个协议中充当sFlow Agent的角色,sFlow Collector则可能是服务器,IP机等。

 

1.2、sFlow报文理解

1、采用UDP封装,说明报文也有丢失的可能,缺省目的端口号为知名端口6343,这个端口应该是sFlow Collector的默认端口。

2、四种报文头格式,应该是对应两种采样方式生产的报文,每个报文头还有对应扩展。而且扩展的报文头并不向前兼容。

 

1.3、sFlow采样要点

          1.3.1 、Flow采样

       1、sFlow Agent在指定端口上按照特定的采样方向和采样比对报文进行采样分析,这里指定端口是针对报文的采样很关键,这种采样可以获取报文中的信息,是直接截取报文的一段,而不是采用镜像的方式。

     2、基本采样方式有固定采样与随机采样两种,运用更多的是随机采样,两者在采样率上有差别,固定采样采样率只能是1/N这种值,而随机采样采样率n/(N+1),设置可以多样,我觉得后者更加灵活。

     3、Flow采样的报文中字段很多,有截取的原数据报文,还有针对各种协议解析的报文,还有针对报文转发的字段等等,这些都表明Flow报文中含有丰富的信息。

 

              1.3.2 、Counter采样

       1、Counter采样是sFlow Agent周期性的获取接口上的流量统计信息,其实就是定期从接口中提取这段时间内通过的流量大小,再生成报文发给采集器。

     2、很明显,这种采样只能得到通过端口的流量大小,却得不到通过流量的具体信息。

     3、Counter采样后生成的报文明显比Flow报文简单很多,大部分是关于流量大小的统计信息、CPU占用率和内存使用情况。

 

     1.3.3、Flow采样与Counter采样的区别与联系

     1、显然两种采样有很大的区别,Flow采样截取报文,可以获得流量的细节,有了这些就能来分析一些特定的网络行为;但是Counter采样就不关注这些,只关注这些接口上通过流量的量,不关注流量细节。也就是说,两个维度,一个是针对相关数据,一个是关于统计信息。

     2、两种采样是相互独立的采样,互不影响,可以同时进行配置。

 

2、 总结一些sFlow的特色

       1、“永远在线”,sFlow技术已经嵌入到的路由器跟交换机的ASIC芯片中,这说明只要设备开机,正常工作,这项技术就能运行,达到“永远在线“的效果。

     2、嵌入到芯片中监控所有接口,同时也意味着不需要其他的与流量检测相关的技术,如镜像接口,不仅降低了实施费用,也减少了CPU的计算,省时。

     3、Flow采样报文,截取长度可以可以自己设置,这说明可以从数据包中获取更多的信息,有时更多的信息有时可以帮助我们分析网络行为。

     4、sFlow可以实时监测每个接口,甚至可以为不同的接口设置不同的采样率,说明在监测流量方面,它比较灵活。

     5、运用抽样的方式来监测流量,不用监测每个数据包,说明更适合运用在承载更大流量的网络中。

     6、采用Flow采样与Counter采样两种采样方式,我们可以根据自己对流量分析的需求,配置其中一种采样或者同时配置。

 

三、NetFlow or sFlow?

了解两种协议后,我发现虽然两者都是网络流量监控的协议,但是却有很多的不同。通过在很多方面比较了两者,也帮助我更加深刻地理解它们。

1、两种协议在技术上的明显区别

1、首先在学习过程中,我觉得两种协议的技术原理复杂度有差距,NetFlow明显更加复杂,有很多的处理流程,有着复杂的缓存和传输机制,多种数据导出格式;但是sFlow却很简洁,在设备上的工作基本上由sFlow Agent完成,报文基本形式只有两种。

2、NetFlow的Cache与NDE机制意味着对设备CPU与内存的影响,而sFlow则采用内置在硬件中的专用芯片这种方法消除了对CPU与内存的影响。

3、NetFlow监测通过设备的每一个数据流,经过之前的分析,NetFlow这个技术几乎可以获得每台主机流量100%的准确值,但是sFlow基于流的采样,对其分析也是基于样本,也就几乎不可能获得每台主机流量的确定值,除非1:1采样。

4、NetFlow在V9版本之前采样数据包的字节是受限制的,而sFlow几乎可以通过采样任何长度的报文,获得任何数量的字节,这个数量取决于具体的硬件限制。

     5、NetFlow在服务器端接收到的数据中即包含一定的流量信息,也可以统计出流量大小。而sFlow由于采样方式的不同,在collector端,既可能收到某个端口具体的实时流量信息,也可能收到某个端口某段时间的流量大小统计,当然,这两者还可能同时收到。sFlow在这方面显得更加灵活。

     6、sFlow可以实现对每个端口的监控,而NetFlow却明显不行,一是因为只能对开启功能的接口进行监控,二是使用了端口镜像功能。

     7、NetFlow中网络设备自身需要对网络流进行初步的统计分析,并把统计信息储存在Cache中,当Cache空间满或者流统计信息老化后输出统计信息。sFlow不需要缓存区,网络设备仅进行报文的采样工作,网络流的统计分析工作由远端的采集器完成。所以部署sFlow的成本更低。

 

2、NetFlow 和sFlow谁更好?

       这个问题我当然没有准确的答案,但是可以用辩证思维去思考。

     通过查看文献,我发现NetFlow是标准的,允许我们采集来自不同厂商产品的数据,对这些数据进行正确的取证和分析,而sFlow更容易监测网络设备,做流量数据的分析,是企业网的宠儿。NetFlow更多的是在路由器得到支持,而sFlow在交换机上更加流行。

     两者都能对流量进行监控,但是鉴于两者的机制,在非常大的流量传输网络中,我觉得sFlow的采样方式要优于NetFlow的汇集方式。在单个交换机或者路由器收集这么多数据包并处理也许在当前的技术条件下不是问题,但是在采集器端采集庞大的来自各种设备的信息,可能会使采集器变得不堪重负。

你可能感兴趣的:(网络协议)