NetFlow流量采集與聚合的研究實(shí)現
近年來(lái),隨著(zhù)信息技術(shù)的飛速發(fā)展,越來(lái)越多的企業(yè)和大型機構在其內部構建基于網(wǎng)絡(luò )的應用,復雜程度及對網(wǎng)絡(luò )的依賴(lài)程度日益提高,各種各樣的網(wǎng)絡(luò )問(wèn)題也隨之產(chǎn)生。網(wǎng)絡(luò )流量監測是網(wǎng)絡(luò )管理和系統管理的一個(gè)重要組成部分,網(wǎng)絡(luò )流量數據為網(wǎng)絡(luò )的運行和維護提供了重要信息。這些數據對網(wǎng)絡(luò )的資源分布、容量規劃、服務(wù)質(zhì)量分析、錯誤監測與隔離、安全管理都十分重要。因此,對網(wǎng)絡(luò )流量及相關(guān)情況實(shí)施科學(xué)合理的監管和深入分析,成為網(wǎng)絡(luò )管理的重要環(huán)節之一;同時(shí),它也為網(wǎng)絡(luò )問(wèn)題提供有效解決方案及進(jìn)行網(wǎng)絡(luò )的規劃。
目前的網(wǎng)絡(luò )流量分析方法主要有基于SNMP、基于實(shí)時(shí)抓包分析、基于網(wǎng)絡(luò )探針和基于:Flow技術(shù)等幾種。NetFlow基于Flow技術(shù),目前已得到大多數網(wǎng)絡(luò )設備廠(chǎng)商的支持,提供了網(wǎng)絡(luò )監測方面非常完善的應用?;?a class="contentlabel" href="http://dyxdggzs.com/news/listbylabel/label/NetFlow">NetFlow的流量采集方法可以獲得包括源/目的主機IP、應用協(xié)議類(lèi)型、源/目的端口等詳細信息,根據這些信息就可以對協(xié)議(應用)、主機IP(用戶(hù))以及AS域等進(jìn)行統計排行和趨勢分析,也可對異常流量進(jìn)行監測分析。此外,NetFlow避免了大量部署和配置監測探針的復雜過(guò)程,使得網(wǎng)絡(luò )性能分析更加全面、靈活且簡(jiǎn)單易用。
l NetFlow技術(shù)
NetFlow是Cisco公司提出的基于Cisco IOS系統的一種應用。它用于提供網(wǎng)絡(luò )設備上數據包形成的“流”的統計信息,并逐漸演變成為網(wǎng)絡(luò )流量統計和安全分析的主要手段。目前利用:NetFlow可以實(shí)現網(wǎng)絡(luò )流量監測,用戶(hù)應用監控,網(wǎng)絡(luò )安全,網(wǎng)絡(luò )規劃以及流量計費等功能。
NetFlow有兩個(gè)核心的組件:NetFlow緩存,存儲IP流信息;NetFlow的數據導出或傳輸機制,NetFlow利用此機制將數據發(fā)送到網(wǎng)絡(luò )管理采集器。
1.1 流(Flow)的定義
一條流由一個(gè)源主機與一個(gè)目的主機間的單方向傳輸的網(wǎng)絡(luò )數據包組成,其中,源和目的主機由各自的IP地址和端口號來(lái)標識。一條流一般由以下七個(gè)關(guān)鍵字段惟一標識:
?源地址
?目的地址
?源端口號
?目的端口號
?第3層協(xié)議類(lèi)型(如TCP,UDP)
?服務(wù)類(lèi)型
?入邏輯接口標示符
1.2 流(Flow)格式
啟動(dòng)NetFlow的設備會(huì )輸出其緩沖區里的信息,以UDP包的形式傳送給NetFlow流量采集器。包由包頭和若干流記錄組成。常用的NetFlOW輸出包格式共有5個(gè)版本,它們分別是Version 1,Version 5,Ver-sion 7,Version 8和Version 9,其中V5是最為流行和成熟的版本,目前得到最廣泛的使用。最新的V9已經(jīng)被列入IETF的標準,并有待進(jìn)一步研究和規范。V9采用了模板技術(shù)與流記錄相結合的方式,使NetFlow輸出包的格式具有動(dòng)態(tài)和可擴展的特性。NetFlow V9的輸出格式主要由三部分構成:
(1)包頭部(Packet Header):包括版本號、包中數據流總數、系統時(shí)間、數據流序列、數據源ID等。
(2)模板流集(Template FlowSet):包含一個(gè)或多個(gè)模板,模板是用于描繪數據流中各個(gè)數據段的含義,可以在路由器上根據需要自行設置模板。
(3)數據流集(。Data FlowSet):包含多個(gè)數據流,每個(gè)數據流集通過(guò)模板ID對應某個(gè)模板。數據采集端根據模板來(lái)解析數據流。
2 NetFlow流量采集與聚合
2.1 系統概述
根據NetFlow的特點(diǎn),設計并實(shí)現了一個(gè)網(wǎng)絡(luò )流量監測系統,其系統結構如圖1所示。
當NetFlow采集器接收到從路由器發(fā)送來(lái)的Net-Flow數據包后,采集器將進(jìn)行數據包的解析和數據流聚合,形成多種適合統計分析需要的數據,再分門(mén)別類(lèi)地存入數據庫。分析器則根據前端不同的查詢(xún)請求,依照一定的查詢(xún)策略從數據庫不同的表中提取相應數據進(jìn)行分析展現。
本系統的后臺采集器和聚合處理部分用JAVA編寫(xiě)實(shí)現,數據庫采用開(kāi)源的MySQL,而NetFlow流量分析利用Tomcat服務(wù)器通過(guò)Web方式展現,前臺部分用JSP編寫(xiě)實(shí)現。工作的重點(diǎn)即在于數據采集、數據聚合以及數據庫設計部分。
2.2 NetFlow流采集
2.2.1 采集器的設計
數據采集模塊是整個(gè)系統的基礎。由于。NetFlow數據流量非常大,為防止丟包系統采用緩沖區和線(xiàn)程池結構,如圖2所示。
當采集器監聽(tīng)到一個(gè)NetFlow數據包時(shí),將該數據包接收到緩沖區,并從包解析線(xiàn)程池中取出一個(gè)線(xiàn)程,根據相應的NetFlow的報文格式解析出數據流信息,將該原始流信息放入緩沖區,然后將原始流存入數據庫,同時(shí)采用相應的聚合策略聚合原始流生成聚合流并存入相應的數據庫中。
2.2.2 NetFlow數據包接收與解析
由于NetFlow數據是借助于UDP數據報來(lái)傳送,因而倘若后續的處理速度跟不上數據包到達的速度,則會(huì )出現嚴重丟包的現象。為解決高速大流量數據的及時(shí)接收及較低丟包率問(wèn)題,采用了多線(xiàn)程的方式來(lái)實(shí)現。用獨立的兩個(gè)線(xiàn)程分別完成數據接收和解析操作:接收數據的線(xiàn)程在特定的IP地址監聽(tīng)相應的UDP端口,接收到的數據暫存在緩沖區中;解析線(xiàn)程從緩沖區提取數據,按照相應的報文格式進(jìn)行解析。由于接收線(xiàn)程和解析線(xiàn)程共享同一個(gè)臨界資源,即接收的緩沖區,需要對臨界資源進(jìn)行加鎖操作。
下面為部分實(shí)現多線(xiàn)程采集的JAVA代碼實(shí)例,其中packet為接收的NetFlow數據包對象,linkedLst為linkedList容器,利用synchronized進(jìn)行線(xiàn)程間同步。
(1) 接收線(xiàn)程
評論