摘 要:本文主要介紹流量分析中主要使用的NetFlow技術,并根據NetFlow的特點,給出了一個基于NetFlow的網絡流量采集系統設計實例。
關鍵詞:NetFlow;流量采集;多線程
Abstract: By analyzing the principles of the widely-used NetFlow technology,this paper,according to the characteristics of data flow of NetFlow,Provides us with a practical illustration of system design on collecting data of NetFlow.
Key words: NetFlow; flow collection; multi-thread
引言
隨著網絡技術的飛速發展,各種基于網絡的業務和應用不斷增加,這些業務和應用對網絡性能和安全提出了更高的要求。在這種環境下,網絡流量數據對網絡服務質量和網絡安全管理等變得十分重要。因此,對網絡流量及相關情況的深入分析,是網絡管理的重要環節。
目前,網絡流量分析技術主要有基于SNMP(簡單網絡管理協議)、基于包嗅探和基于Flow(流)等幾種。本文研究探討的NetFlow則是基于Flow技術。
1 NetFlow技術
1.1 NetFlow技術介紹
NetFlow技術于1996年由Cisco的Darren Kerr和Barry Bruins發明,它起初用于網絡設備對數據交換進行加速,并同步實現對高速轉發的IP數據流(Flow)進行測量和統計。經過多年的技術演變和發展,NetFlow技術已成為當前最主要的網絡流量分析和計量行業標準。利用NetFlow技術可以實現網絡流量監測、用戶行為監控、網絡安全、網絡規劃以及流量計費等功能。
NetFlow技術已經在大多數Cisco路由器和交換機中廣泛應用,并得到了主流廠商(諸如Juniper、Foundry、Extreme等)的支持。國內華為推出的NetStream技術與NetFlow技術兼容。
1.2 NetFlow技術原理
NetFlow技術基于流。所謂流,就是在高速數據交換中一定時間段內給定的源端和目的端所發生的具有相同屬性的連續數據包的集合。一條NetFlow流一般由以下7個關鍵字段惟一標識:
(1)源地址(2)目的地址(3)源端口(4)目的端口(5)第3層協議類型(如TCP、UDP)(6)服務類型(ToS)(7)輸入的邏輯端口
每當路由器或交換機的端口上接收到數據包時,NetFlow就會掃描這7個字段,判斷此數據包是否屬于一個已經存在的流。若是,則相應流的流量統計將增加。否則,在NetFlow的高速緩沖中生成一條新的流記錄。在新的流不斷產生的同時,NetFlow的高速緩沖內過期的流以UDP數據報的方式導出。
路由器每秒檢查一次NetFlow的高速緩存,在如下情況時輸出流:
(1)流TCP終結;(2)流緩存滿;(3)某個流中止;(4)某個流超時(默認值30分)
1.3 NetFlow數據格式
NetFlow導出的數據由1個包頭和1~30個流記錄組成。NetFlow導出的數據格式共有5個版本,它們分別是Version 1、Version 5、Version 7、Version 8和Version 9,其中V5是最為流行和成熟的版本,目前已得到最廣泛的使用,而最新的V9已經被列入IETF的標準。NetFlow V5版本數據包的包頭格式和流記錄格式分別如圖1和圖2所示。
圖1 V5版本數據包的包頭格式
圖2 V5版本數據包的流記錄格式
2 NetFlow網絡流量采集與聚合
2.1 系統概述
根據NetFlow技術的特點結合華北科學院圖書館網絡環境,本文設計并實現了一個網絡流量采集系統。系統結構如圖3所示:
圖3 NetFlow流量采集與聚合系統結構
系統在Windows平臺下使用C#作為開發語言,SQL SERVER 2005作為數據庫。
2.2 NetFlow在Cisco Catalyst 6509上的配置
華北科技學院圖書館網絡環境中配置1臺Cisco Catalyst 6509交換機。NetFlow在交換機上配置如下:
Switch(config)#mls netlfow!Enables NetFlow on the PFC(Policy Feature Card)Switch(config)#mls flow ip full!Configures flow mask on the PFCSwitch(config)#mls nde sender version 5!Configures NDE(NetFlow Data Export) on the PFCSwitch(config)#ip flow-export source loopback 0Switch(config)#ip flow-export destination 10.1.14.41 9996!Configures NDE on the MSFC(Multilayer Switch Feature Card) with the NetFlow collector IP address and the application port number 9996……
配置完成后可以使用Show mls netflow ip命令顯示NetFlow高速緩沖中的流記錄詳情。
2.3 NetFlow流量采集與聚合
由于NetFlow數據是由UDP數據報的形式導出,因而隨著數據量的增加數據解析速度跟不上數據包到達速度,則會出現嚴重的丟包現象。為了實現大流量數據及時接收和低丟包率,NetFlow流量采集與聚合采用多線程實現。
NetFlow流量采集與聚合器結構如圖4所示:
圖4 NetFlow流量采集與聚合器結構
(1)UDP監聽線程
根據在交換機上配置的端口,系統啟動相應的監聽端口,并采集從交換機上送來的UDP數據報,對采集到的每個數據報,取出其凈載(即NetFlow數據),并將該NetFlow數據壓入隊列(Queue)。以下為部分代碼:
(2)NetFlow數據拆分線程
首先定義流記錄結構,然后從隊列取出NetFlow數據,再根據定義的結構將NetFlow數據進行拆分,分離出源IP、目的lP、源端口、目的端口、數據包大小、協議類型等信息,最后將這些數據壓入內存數據表(DataTable)中。以下為部分代碼:
(3)聚合與寫數據庫線程
每隔3分鐘,從內存數據表中取出數據,根據源IP、目的IP進行聚合,將聚合結果保存在數據庫。以下為部分代碼:
3 實際的流量采集與監測
在本系統的支持下,系統數據庫為前端分析提供了充足且多樣化的數據準備,前端程序只需通過簡單的查詢語句即可得到所需的數據集,極大簡化了查詢的工作量。圖5為某時段系統采集的數據生成的流量監測圖。
圖5 某時段流量監測圖
4 結束語
本文基于NetFlow的特點,提出了一套適用于高速大流量網絡的流量采集方案。流量采集通過多線程實現,有效提高了流量采集的可靠性。采集的原始流經聚合和存儲,為前端的數據分析提供了全面支持。本系統在實際應用中取得了良好效果。
參考文獻:
[1] Cisco System Inc. NetFlow Services Solution Guide. 2007.
[2] Cisco System Inc. Introduction to Cisco IOS NetFlow – A Technique Overview. 2007.
[4] 郭劍云,曹慶華. NetFlow流量采集與聚合的研究實現. 現代電子技術,2009(7).
[5] 袁梅宇. 高效率多線程網絡流量采集處理的關鍵技術和算法. 計算機工程,2004(增).
[6] 徐川,唐紅,趙國鋒. 降低高速網絡流量測量器報文丟失率技術的研究. 計算機工程 2006(16).