新聞中心

        EEPW首頁 > 模擬技術 > 設計應用 > NetFlow流量采集與聚合的研究實現

        NetFlow流量采集與聚合的研究實現

        作者: 時間:2009-07-10 來源:網絡 收藏
        0 引 言
        近年來,隨著信息技術的飛速發展,越來越多的企業和大型機構在其內部構建基于網絡的應用,復雜程度及對網絡的依賴程度日益提高,各種各樣的網絡問題也隨之產生。網絡監測是網絡管理和系統管理的一個重要組成部分,網絡數據為網絡的運行和維護提供了重要信息。這些數據對網絡的資源分布、容量規劃、服務質量分析、錯誤監測與隔離、安全管理都十分重要。因此,對網絡及相關情況實施科學合理的監管和深入分析,成為網絡管理的重要環節之一;同時,它也為網絡問題提供有效解決方案及進行網絡的規劃。
        目前的網絡流量分析方法主要有基于SNMP、基于實時抓包分析、基于網絡探針和基于:Flow技術等幾種。基于Flow技術,目前已得到大多數網絡設備廠商的支持,提供了網絡監測方面非常完善的應用。基于的流量方法可以獲得包括源/目的主機IP、應用協議類型、源/目的端口等詳細信息,根據這些信息就可以對協議(應用)、主機IP(用戶)以及AS域等進行統計排行和趨勢分析,也可對異常流量進行監測分析。此外,避免了大量部署和配置監測探針的復雜過程,使得網絡性能分析更加全面、靈活且簡單易用。

        l NetFlow技術
        NetFlow是Cisco公司提出的基于Cisco IOS系統的一種應用。它用于提供網絡設備上數據包形成的“流”的統計信息,并逐漸演變成為網絡流量統計和安全分析的主要手段。目前利用:NetFlow可以實現網絡流量監測,用戶應用監控,網絡安全,網絡規劃以及流量計費等功能。
        NetFlow有兩個核心的組件:NetFlow緩存,存儲IP流信息;NetFlow的數據導出或傳輸機制,NetFlow利用此機制將數據發送到網絡管理器。
        1.1 流(Flow)的定義
        一條流由一個源主機與一個目的主機間的單方向傳輸的網絡數據包組成,其中,源和目的主機由各自的IP地址和端口號來標識。一條流一般由以下七個關鍵字段惟一標識:
        ?源地址
        ?目的地址
        ?源端口號
        ?目的端口號
        ?第3層協議類型(如TCP,UDP)
        ?服務類型
        ?入邏輯接口標示符
        1.2 流(Flow)格式
        啟動NetFlow的設備會輸出其緩沖區里的信息,以UDP包的形式傳送給NetFlow流量器。包由包頭和若干流記錄組成。常用的NetFlOW輸出包格式共有5個版本,它們分別是Version 1,Version 5,Ver-sion 7,Version 8和Version 9,其中V5是最為流行和成熟的版本,目前得到最廣泛的使用。最新的V9已經被列入IETF的標準,并有待進一步研究和規范。V9采用了模板技術與流記錄相結合的方式,使NetFlow輸出包的格式具有動態和可擴展的特性。NetFlow V9的輸出格式主要由三部分構成:
        (1)包頭部(Packet Header):包括版本號、包中數據流總數、系統時間、數據流序列、數據源ID等。
        (2)模板流集(Template FlowSet):包含一個或多個模板,模板是用于描繪數據流中各個數據段的含義,可以在路由器上根據需要自行設置模板。
        (3)數據流集(。Data FlowSet):包含多個數據流,每個數據流集通過模板ID對應某個模板。數據采集端根據模板來解析數據流。

        本文引用地址:http://www.104case.com/article/188834.htm

        2 NetFlow流量采集與聚合
        2.1 系統概述

        根據NetFlow的特點,設計并實現了一個網絡流量監測系統,其系統結構如圖1所示。

        當NetFlow采集器接收到從路由器發送來的Net-Flow數據包后,采集器將進行數據包的解析和數據流聚合,形成多種適合統計分析需要的數據,再分門別類地存入數據庫。分析器則根據前端不同的查詢請求,依照一定的查詢策略從數據庫不同的表中提取相應數據進行分析展現。
        本系統的后臺采集器和聚合處理部分用JAVA編寫實現,數據庫采用開源的MySQL,而NetFlow流量分析利用Tomcat服務器通過Web方式展現,前臺部分用JSP編寫實現。工作的重點即在于數據采集、數據聚合以及數據庫設計部分。
        2.2 NetFlow流采集
        2.2.1 采集器的設計

        數據采集模塊是整個系統的基礎。由于。NetFlow數據流量非常大,為防止丟包系統采用緩沖區和線程池結構,如圖2所示。

        當采集器監聽到一個NetFlow數據包時,將該數據包接收到緩沖區,并從包解析線程池中取出一個線程,根據相應的NetFlow的報文格式解析出數據流信息,將該原始流信息放入緩沖區,然后將原始流存入數據庫,同時采用相應的聚合策略聚合原始流生成聚合流并存入相應的數據庫中。
        2.2.2 NetFlow數據包接收與解析
        由于NetFlow數據是借助于UDP數據報來傳送,因而倘若后續的處理速度跟不上數據包到達的速度,則會出現嚴重丟包的現象。為解決高速大流量數據的及時接收及較低丟包率問題,采用了多線程的方式來實現。用獨立的兩個線程分別完成數據接收和解析操作:接收數據的線程在特定的IP地址監聽相應的UDP端口,接收到的數據暫存在緩沖區中;解析線程從緩沖區提取數據,按照相應的報文格式進行解析。由于接收線程和解析線程共享同一個臨界資源,即接收的緩沖區,需要對臨界資源進行加鎖操作。
        下面為部分實現多線程采集的JAVA代碼實例,其中packet為接收的NetFlow數據包對象,linkedLst為linkedList容器,利用synchronized進行線程間同步。
        (1) 接收線程



        上一頁 1 2 下一頁

        關鍵詞: NetFlow 流量 采集

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 六枝特区| 遂溪县| 鸡泽县| 玉田县| 游戏| 上高县| 达日县| 嘉鱼县| 汉沽区| 鞍山市| 兴安县| 德江县| 达孜县| 昭苏县| 特克斯县| 横山县| 蓝山县| 大丰市| 五大连池市| 兰溪市| 河津市| 南江县| 莒南县| 满洲里市| 柘荣县| 乌海市| 石嘴山市| 高要市| 怀柔区| 化州市| 太白县| 蛟河市| 腾冲县| 营口市| 永定县| 金乡县| 望谟县| 景洪市| 丹巴县| 剑河县| 南乐县|