NetFlow是一種資料交換方式。Netflow提供網絡流量的會話級視圖,記錄下每個TCP/IP事務的資訊。也許它不能象tcpdump那樣提供網絡流量的完整記錄,但是當彙集起來時,它更加易于管理和易讀。Netflow由Cisco創造。 工作原理:NetFlow利用标準的交換模式處理資料流的第一個IP包資料,生成NetFlow 緩存,随後同樣的資料基于緩存資訊在同一個資料流中進行傳輸,不再比對相關的通路控制等政策,NetFlow緩存同時包含了随後資料流的統計資訊。NetFlow有兩個核心的元件:NetFlow緩存,存儲IP流資訊;NetFlow的資料導出或傳輸機制,NetFlow利用此機制将資料發送到網絡管理采集器。
概念:一個NetFlow流定義為在一個源IP位址和目的IP位址間傳輸的單向資料包流,且所有資料包具有共同的傳輸層源、目的端口号。 确定Flow的辨別:SIP+DIP+SPORT+DPORT +Layer 3 protocol type + TOS byte() + Router or switch interface
資料采集格式
NFC(Cisco NetFlow Collector) 可以定制多種NetFlow資料采集格式,下例為NFC2.0采集的一種流量資料執行個體,本文的分析都基于這種格式。
61.*.*.68|61.*.*.195|64917|Others|9|13|4528|135|6|4|192|1 資料中各字段的含義如下: 源位址|目的位址|源自治域|目的自治域|流入接口号|流出接口号|源端口|目的端口|協定類型|包數量|位元組數|流數量 cache緩存空間

可配置的Cache維護機制
一般情況下Cache空間的占用是與所監控的Flow數量呈正比的,但是當鍊路中充斥着大量的短連接配接Session時,
Flow表項數量可能會因為沒有得到及時釋放而過多占用有限的Cache空間。為此,NetFlow提供了一種非常複雜、
高效的算法以快速定位一個資料包在該Cache中的位置或判斷是否應建立表項,并且通過管理者給定
的閥值進行各類表項的逾時導出,進而及時釋放老的表項以容納建立Flow資訊。 Flow Cache表項 Timed-Out操作可由以下幾項因素進行驅動: 該表項已經空閑了指定的時間長度(Inactive Timer,預設15 seconds);
長連接配接會話 強制逾時(Active Timer,預設 30 minutes);
緩存空間耗盡所觸發的強制逾時;
TCP FIN/RST觸發的逾時。
規範的導出封包格式
NetFlow采用了主動式資料推送機制,一般用UDP傳送。 NetFlow的封裝格式分為1個Header和若幹個Record: Header:主要包括版本号、序列号、後續Record數量、系統啟動時間等;
Record:提供對每個Flow的詳細資料記錄。
下文以NetFlow V9為例,輸出封包Header與Record整體結構如下所示:
在上述格式中,各字段的具體含義描述如下:
表格3-3 NetFlow V9各字段含義
字段名稱 | 所處位置 | 字段長度 | 含義 |
Version | Header | 2 Bytes | 版本号,0x0009 |
Count | 2 Bytes | 封包中所有記錄的數量(包括template and data兩種類型) | |
System Uptime | 4 Bytes | 自網元裝置加電以來的毫秒數 | |
Unix Seconds | 4 Bytes | 網元裝置目前機器時間(與所在時區相關)與格林威治時間(亦即”0 UTC”)1970年1月1日 0點0分0秒之間的秒數差額 | |
Package Sequence | 4 Bytes | 網元裝置所導出的Flow封包的序列号,順序遞增,可用以檢測Flow封包丢失。 | |
Source ID | 4 Bytes | 由0x0000+路由引擎辨別+線路闆卡辨別構成,可與Flow封包源IP位址結合起來唯一的辨別Flow資訊導出節點。 | |
FlowSet ID | Template FlowSet | 2 Bytes | 用以區分Template Record和Data Record。Template Record的FlowSet ID 位于0~255之間,而 Data Record 的FlowSet ID 總在255以上。 |
Length | 2 Bytes | 本FlowSet的總體長度。 | |
Template ID | Template Record | 2 Bytes | 開始一個新的Template Record,聲明一個新的Data Record格式的編号ID,數值總大于255,在該網元裝置本地有效。 |
Field Count | 2 Bytes | 本Template Record所包含的字段數量。 | |
Field 1 Type | 2 Bytes | 開始一個新字段的定義,說明該字段的類型,類型編号與廠商相關,Cisco在NetFlow V9中總共定義了89種類型。 | |
Field 1 Length | 2 Bytes | 上述所定義的字段的長度。 | |
…… | …… | …… | |
Field N Type | 2 Bytes | 開始第N個新字段的定義,說明該字段的類型。 | |
Field N Length | 2 Bytes | 上述所定義的字段的長度。 | |
FlowSet ID | Data FlowSet | 2 Bytes | 引用一個Template Record ID以開始一個新的Data FlowSet。該字段數值總在255以上。 |
Length | 2 Bytes | 本Data FlowSet的總體長度。 | |
Record 1 - Field 1 value | Data Record | 2 Bytes | 第1個Data Record的第1個字段的數值。 |
…… | …… | …… | |
Record 1 - Field N value | 2 Bytes | 第1個Data Record的第N個字段的數值。 | |
Record N - Field 1 value | 2 Bytes | 第N個Data Record的第1個字段的數值。 | |
…… | …… | …… | |
Record N - Field N value | 2 Bytes | 第N個Data Record的第N個字段的數值。 | |
…… | …… | …… | |
Padding | 封包尾部 | 填充位,将該Data FlowSet補齊至N*32 bits長度。這些填充位将計算入該Data FlowSet的Length數值。 |
Template功能:NetFlow V9是首先對Template進行支援的版本,
通過Template功能NetFlow V9獲得了前所未有的擴充靈活性。
Template描述了NetFlow輸出記錄的各字段定義,無需改變現有
規範即可支援将來可能出現的增強功能,進而無需重新編譯、
修改流量采集分析系統即可快速支援新增功能特征。
Flow具備詳盡的會話描述能力。在NetFlow V9中,預設提供了多達89種字段類型,并允許通過Template和
Aggregation機制進行任意組合、彙聚,能夠較長的描述流量分布的各類特征.
NetFlow與SNMP的不同
無論是MIB還是後來的RMON,SNMP所針對的資訊一般都圍繞網元裝置展開,如Interface吞吐率、
接收到的壞幀數量、CPU/RAM使用率等。而NetFlow正如同它的名字一樣,其所關注的重點在于網絡鍊
路上所傳輸流量的特征資訊,并且這些資訊能夠更直接的反映出目前網絡上通路行為分
布以及合同客戶此時所得到的真實的服務品質水準。
NetFlow與SNMP的主要差異可以從以下幾點得到說明:
NetFlow關注流量特征,SNMP關注裝置狀态;
NetFlow直接圍繞Session會話連接配接進行資料提取,而SNMP則以實體接口為基本機關進行資料統計;
從Agent角度來看,NetFlow采用資料主動推送技術,SNMP則主要采取被動輪詢機制;
NetFlow資料資訊更為豐富、描述能力更強;
NetFlow支援抽樣操作,具備良好的擴充彈性,能夠更好适應高端網絡實際需求;
SNMP功能通常随着裝置銷售而免費提供,而在很多現有裝置中,NetFlow作為增值功能則需要額外
購買許可License或特定軟體包。
是以,在網絡流量測量及分析系統中,如異常流量分析系統,NetFlow已經成為一個重要的資料提取方式,
為高端網絡骨幹鍊路的實時流量采集
分析提供高效、準确的資料摘要提取服務,是網絡流量分析陣營不可或缺的基礎技術。
限制條件 需要網絡裝置對NetFlow的支援,需要分析NetFlow資料的工具軟體,需要網絡管理者準确區分正常流量資料和異常流量資料等。
挑戰者SFlow
同NetFlow一樣,sFlow是一種向采集器發送報告的推送技術。所不同的是,NetFlow是一種基于軟體的技術,而sFlow則采用内置在硬體中的專用晶片。這種做法消除了路由器或交換機的CPU和記憶體的負擔。 sFlow系統的基本原理為:分布在網絡不同位置的sFlow代理把sFlow資料報源源不斷地傳送給中央sFlow采集器,采集器對sFlow資料報進行分析并生成豐富的、實時的、全網範圍的傳輸流視圖。 sFlow是一種純資料包采樣技術,即每一個被采樣的X包的長度被記錄下來,而大部分的包則被丢棄,隻留下樣本被傳送給采集器。由于這項技術是基于樣本的,如果沒有複雜的算法來嘗試推測準确的會話位元組量,那麼幾乎不可能獲得每台主機流量100%的準确值。在使用這項技術時,交換機每隔100個資料包(可配置)對每個接口采一次樣,然後将它傳送給采集器。sFlow的規格也支援1比1的采樣率,即對每一個資料包都進行“采樣”。對資料包最大采樣頻率的限制取決于具體的晶片廠商和sFlow實作情況。 NetFlow更多的是在路由器上得到支援,而sFlow則在交換機上更加流行。兩者都是開放标準,但在非常大的流量傳輸環境中,sFlow采樣架構可能要優于NetFlows彙集方式。
其他Flow
Flow名稱 | 代表廠商 | 主要版本 | 備注 |
NetFlow | Cisco | V1、V5、V7、V8、V9 | 應用最廣 |
CFlowd | Juniper | V5、V8 | 廠商跟進力度不高 |
sFlow | Foundry、HP、Alcatel、NEC、Extreme等 | V4、V5 | 實時性較強,具備突出的第二~七層資訊描述能力 |
NetStream | 華為 | V5、V8、V9 | 與NetFlow較為類似 |
IPFIX | IETF标準規範 | RFC 3917 | 以NetFlow V9為藍本 |
參考:流量分析新貴--NetFlow http://www.enet.com.cn/ediy/inforcenter/enet_z.jsp?articleid=20060809158100
百度百科 http://baike.baidu.com/view/490587.htm
NetFlow還是SFlow http://www.ccw.com.cn/cso/htm2008/20080225_382116.shtm
NetFlow流量采集與聚合的研究實作 http://www.21ic.com/app/analog/200907/44851.htm
Introduction to Cisco IOS NetFlow - A Technical Overview
http://www.cisco.com/en/US/prod/collateral/iosswrel/ps6537/ps6555/ps6601/prod_white_paper0900aecd80406232.html