2021-4-10 | 互聯網
隨著寬帶互聯網應用的普及,互聯網用戶數量在不斷增加,各個領域的應用也在逐步深入,網絡規模持續擴展,網絡流量高速增長。尤其是P2P技術產生以來,互聯網網絡流量激增,對網絡的處理能力提出了更高的要求。同時,要合理、有效地疏導流量,必須對網絡流量進行科學、細致的分析,通過流量分析可以有效地總結出網內、網外流量比例,各區域用戶產生的流量大小,進而對用戶使用習慣、各類應用帶寬消耗情況等進行分析,從而可以對不同區域用戶使用習慣、網內資源建設方向等進行有效的指導。不僅要依據數據的目的地址去疏導流量,還要明晰流量的來源和成分,區分流量類型,以精確地計算成本,合理分配IP地址數量和流量占用帶寬,使流量管理更加規范。
Netflow技術最早由Cisco公司研發,首先被用于網絡設備對數據交換進行加速,并可同步實現對高速轉發的IP數據流進行測量和統計。經過多年的技術演進,Netflow對流經網絡設備的IP數據流進行測量和統計的功能更加成熟,并成為當今互聯網領域公認的最主要的IP/MPLS流量分析、統計和計費行業標準。Netflow技術能對IP/MPLS網絡的通信流量進行詳細的行為模式分析和計量,并提供網絡運行的詳細統計數據。
通過對某電信運營商的網絡進行改造,引入互聯網流量分析系統,以互聯網流量數據為分析對象,實現以下功能:(1)精確判斷流量歸屬地;(2)精確統計流量類型;(3)精確區分流量成分;(4)以天為單位,對某一天的流量及以天為周期單位的時間段產生的流量進行查詢。
1流量分析系統設計
由于Netflow僅能宏觀地對網絡流量進行分析和監控,無法滿足精細化管理的要求。鑒于此,需要建立網絡流量分析系統。
首先在省級主干路中引入流控設備,對全省網絡流量進行控制。通過建立一臺Linux服務器(CMserver),在流控設備中將流量鏡像至此服務器的數據庫中,便可采集到全網的流量明細,進而通過存儲過程將各種需要分析的數據進行聚合成表,便可對全網流量進行實時監控分析。
本系統包括4個功能模塊,分別是數據采集模塊、接口程序模塊、數據庫模塊、頁面呈現模塊。
1.1數據采集模塊
要實現對流量源和目的地的分析,首先要進行流量采集并存儲,采集的數據中要包含數據包的源地址、目的地址、數據包發送時間等信息。本系統采用NetflowV9版本進行數據采集,需要對Netflow協議、待采集的路由器端口和數據采集存儲服務器等進行配置。
由于需要分析的路由器端口數據量很大,而且分析目的主要為各方向流量數據比例,綜合考慮數據處理量和數據準確性之后,將采集周期定為5分鐘,采樣比例定為1000:1,此時每5分鐘Netflow數據流約有30萬~40萬條,存儲Netflow數據流的文件大小約20~30MB。
在采集數據的端口選擇方面,既要采集所有流量數據,保證數據的完整性;又要避免數據重復采集,以保證數據的準確性。按照上述條件,選擇省級主干中路由器上行端口為流量采集端口,通過該端口既可以采集所有互聯網用戶訪問Internet的流量數據,又不會發生流量數據重復采集情況。
為分析路由器端口的網絡流量數據,必須將從路由器中送出的Netflow數據收集并存儲,以便進一步的處理,所以需要配置Netflow采集存儲服務器。具體配置為2.4GHz四核CPU、2G內存,使用Linux系統,并安裝CiscoNetflowCollector(NFC)采集軟件。
1.2接口程序模塊
經過采集,每5分鐘會輸出一個格式為XML的文件,文件數據分3部分:數據頭、模板部分、數據部分。NetflowV9的數據格式可以自定義,根據分析需要,定義數據模板主要包括我們關心的13個字段,分別為:源地址、目的地址、源端口號、目的端口號、入接口、出接口、協議、服務類型、流數量、報文數、字節數、開始時間、結束時間。每個字段使用“|”分開。
選用C++程序語言進行數據的分析及入庫。程序語言完成的主要功能為按照字段定義進行數據分列,并按要求建立數據表,然后將分析后的數據導入數據庫中。原始數據每天自動生成一個文件夾,文件夾中每5分鐘生成一個數據文件,為了達到自動讀取數據的功能,采用“日期+時間”循環來自動讀取數據文件。
讀取數據文件對每行按照不同字段分列。由于每個數據文件的數據頭部分完全相同,而且不包含所要分析的數據信息,所以可以把數據頭部分跳過,然后根據每行數據的“|”將每個字段的數據進行分列。
再根據各字段數據分析的需要,轉換成相應的數據類型,并與數據庫連接寫入數據庫中。
1.3數據庫模塊
作為基于Netflow流量的分析系統,數據庫成為系統的基礎及核心,一切功能模塊及數據采集均需建立在數據庫中,從性能、成本、易用性、可靠性等方面綜合考慮,選用MySQL作為本系統的數據庫。
首先是基本表的設計。在程序操作數據表時,讀寫的性能受數據表字段所占字節數的影響,數據表字段所占字節數越大,則需要更長的讀寫操作時間,字段所占字節數越小,則其讀寫操作的性能將會有所提高。因此,設計數據庫字段的屬性對整個系統的性能至關重要。在分析程序對數據按照規則條件進行匹配后,將更新數據表中IP地址等相應的歸屬信息,但在數據的進一步匯總中,如果匯總程序按照IP地址歸屬信息進行數據分組匯總,則需要讀取歸屬信息的全部字節數,這對于系統整體匯總而言,其運行效率仍會受到影響。本著讀取最少字節數以提升系統工作效率的原則,需要將歸屬信息代碼化,匯總程序僅需要根據歸屬信息代碼作為分組條件即可。
根據Netflow的原始數據量,如果對其進行一一匹配對應,則無法在5分鐘內完成相應的數據歸屬、流量分析等操作。為了提高數據庫效率,最直接的方法就是先進行關鍵字段的聚合,然后進行相應的遞歸聚合,最后將分析數據進行匹配分析,這樣可以有效地減少原始數據的運算量,尤其在磁盤I/O有限的條件下,性能提升更明顯。