江天宇,胡洋瑞
(四川大學計算機學院,成都 610065)
高速網絡環境下的流量采集系統設計
江天宇,胡洋瑞
(四川大學計算機學院,成都 610065)
為了使網絡異常檢測系統能夠在高速網絡環境中正常工作,實現一種高效的流量采集系統。它利用雙緩沖機制減少多線程鎖的開銷,使用多線程技術提高系統處理效率,并且該系統具有很好擴展性,可以遷移到其他平臺,最終將該系統應用在高速網絡環境下的網絡數據包在線捕獲處理。
網絡流量;異常檢測;網絡安全
隨著互聯網變得越來越龐大,網絡也越來越復雜,網絡中的各種惡意軟件、病毒、木馬也越來越多。網絡異常檢測系統架設在系統邊界,對邊界流量進行審計、檢測,隨著網絡流量的增大,采集系統壓力也越來越大。因此,研究高速網絡流量采集系統對提升網絡異常檢測系統的性能非常關鍵。
在目前的網絡異常檢測檢測領域,網絡流量數據通常有兩種格式,一種是基于會話流數據,一種是基于數據包數據。根據C.Barakat等人[1]給出的定義,會話流是一個由源IP地址和端口、目標IP地址和端口以及應用協議組成的五元組(源IP地址、源端口、目標IP地址、目標端口、應用協議);后者是使用原始數據包來進行網絡流量分析[2]。基于會話流的異常檢測是目前的主流,目前流行的NetFlow、NetStream等協議都提取了會話流信息,因為它最大限度地保留了網絡流量的摘要信息,同時又不涉及隱私問題。
在Windows平臺上,捕獲數據包的途徑有很多種,例如,Raw Socket、Winpcap等。通過Raw Socket方式捕獲的數據包是完整的網絡層數據包,不包含鏈路層信息,它不能接收到與IP層相同層次的網絡層數據包。而通過使用Winpcap則可以捕獲到數據鏈路層的數據包,并且還能實現過濾。
Winpcap是用于網絡封包抓取的一套工具[3],可適用于32/64位的Windows操作系統上捕獲網絡數據包,包含了內核層的數據包過濾,一個底層動態鏈接庫,和一個高層系統函數庫。大多數網絡應用程序訪問網絡是通過操作系統提供的Socket(套接字)方式。利用這種方式實現網絡通信比較容易,因為操作系統負責底層的細節以及向上層提供了類似于文件讀寫的調用接口,程序員只需要調用Socket進行編程就可以實現網絡通信,而網絡中復雜的協議實現被完全屏蔽。
從圖1可以看出,Winpcap由一個核心態的包過濾器和兩個動態鏈接庫組成,NPF(Netgroup Packet Filter)網絡組包過濾器首先負責從網絡中采集數據包,完成數據的過濾,拷貝到內核層緩沖區,然后調用應用層動態鏈接庫文件將數據傳遞到應用層緩沖區,最后交由應用程序處理。具體工作原理如下所示:
①當數據包到達時,網卡接收數據到達的信號,然后產生硬件中斷,通知CPU調度處理,中斷服務程序判斷數據包的有效性,若有效則分配一個緩沖。
②BPF模塊根據用戶的規則過濾數據包,并把數據包插入到內核的網卡驅動緩沖隊列中。Winpcap和通常的TCP/IP協議驅動處于同一等級。這里Winpcap采用環狀緩沖區,可以有效提高效率,減少讀寫次數。在BPF工作的模塊中,數據包先經過過濾器過濾然后才決定是否寫入緩沖區,這個大大提高了效率。
③用戶程序通過系統調用來讀取內核緩沖區的數據包,完成數據采集。

圖1 Winpcap的原理圖
流量采集不僅僅只是捕獲到網絡中的所有分組,還必須能夠還原出用戶的網絡行為,為后期用戶行為分析提供依據。如果前期數據采集的過程中丟失了太多關于網絡流量的信息,將會導致后期分析出現特征不足的問題,但是如果完全保留原始網絡信息對存儲是巨大壓力,而且也是一種浪費存儲空間的表現,因為并不是所有的原始數據信息都需要保存并對后期分析有用的[4]。本文采集的網絡流量元數據主要是TCP/UDP會話流,定義如下:
定義1 TCP會話流 假設所有五元組〈源IP,源端口,目的IP,目的端口,TCP協議〉相同或者反轉相同的數據包的集合為C,并且C中的數據包以發送第一個SYN數據包開始,到服務端接收最后一個FIN或者RST數據包結束,并且滿足數據包的時間間隔不超過時間T,本文設置T為2分鐘,則集合C所有的數據包構成一條TCP會話流。
定義2 UDP會話流 假設所有五元組〈源IP,源端口,目的IP,目的端口,UDP協議〉相同或者反轉相同的數據包集合為C,并且,滿足所有數據包時間間隔不超過時間T,本文設置T為2分鐘,則集合C中所有的數據包構成一條UDP會話流。
在高速的網絡環境中,需要對采集程序進行優化。本文采取的優化措施主要包括以下4點:
①使用雙緩沖機制技術減少采集程序線程鎖的開銷。
②使用多線程技術。
③將從網卡捕獲的數據包根據傳輸層協議還原成會話流的形式保存。提取網絡流量元數據,減少了對原始數據包的存儲。
④設計Hash算法,使用哈希表完成會話流的快速查找、刪除工作。
在高速的網絡環境中,完全存儲原始數據包將會對磁盤存儲造成巨大壓力,然而后期的實際分析中只需要原始數據包中的一部分,這就造成了大量的磁盤空間的浪費,而且還需要額外的計算資源來處理這些數據。

圖2 雙緩沖多線程技術
圖2是本文設計的系統雙緩沖多線程技術,它采用了雙緩沖機制,減少了多線程鎖的開銷,而且使用多線程技術,避免應用層來不及處理而造成丟包。具體流程如下:
①數據包到達時,網卡接收數據到達信號,產生硬中斷,通知CPU進行調度處理。
②中斷服務程序判斷數據包的有效性,若有效則分配一個緩沖,并把數據包插入到內核的NIC Buffer隊列中;否則直接返回。
③程序通過系統調用將內核中的數據包拷貝到用戶空間,由于數據包到達速率很快,這里使用雙緩沖機制。即當數據包到達時,存入緩沖隊列1中。
④后臺處理線程啟動,數據包捕獲線程將捕獲到的數據存入緩沖隊列2中,后臺處理線程開始處理緩沖隊列1中的數據包,兩個線程交替進行,減少了內存使用上的沖突,提高了效率。后臺處理線程根據數據包的〈源IP,目的IP,源端口,目的端口,傳輸層協議〉計算出它的Hash值,并且從Conversation池中找出Hash值對應的會話流信息,并判斷流當前狀態。如果Conversation已經結束,就將Conversation移入待轉移流池,反之,將數據包加入流中。

圖3 采集程序流程圖
如圖3所示,這是實際的流量采集程序工作流程圖,為了達到實時捕獲的要求,數據包捕獲速度與數據包處理速度相匹配,本文使用多線程進行處理,程序中比較關鍵的有以下幾個線程。
①Winpcap數據包捕獲線程:調用底層Winpcap捕獲數據包,并將原始數據包存入隊列中。這里采用兩個緩沖區,數據包存入隊列1時,后臺線程處理隊列2,避免了內存的同步互斥,大大提高了效率。
②后臺線程:每隔0.2秒掃描原始包隊列,將數據包加入處理隊列,并通知數據處理線程進行處理。
③數據處理線程:根據數據包五元組〈源IP,目的IP,源端口,目的端口,傳輸層協議〉的HASH值在Conversation池中找到對應的Conversation,根據TCP的標志位(SYN,FIN,RST)決定一條流是否結束。如果流結束,將流移出內存,通知數據庫保存線程存入數據庫。
④內存管理線程:一直后臺運行,掃描Conversation池,移出超時的會話流(120s內沒有新包到達)。
⑤數據庫保存線程:負責將流寫入數據庫。
本文采用的系統采用C#編程實現,并且分別在Windows平臺和Linux平臺進行了測試,在Windows平臺使用.NET、SharpPcap和Winpcap技術,而在Linux平臺采用Mono,SharpPcap和PF_RING進行抓包。

表1 真實網絡環境丟包率
如上表1所示,前兩項是使用Windows平臺的Winpcap對校園網絡的流量進行抓取產生的丟包率,第三項是采用Linux平臺下的PF_RING抓包的效果。從表中可以看出,采用PF_RING之后,比Winpcap取得了更好的效果,這是因為PF_RING利用內存中的環狀緩沖區減少了內存拷貝,提高了效率。在用戶空間,分別采用單線程和多線程進行會話流重組統計,在千兆以太網環境下,單線程丟包十分嚴重,而多線程則明顯改善了效率。
本文首先研究了網絡流量采集組件Winpcap的原理,然后利用雙緩沖機制減少了多線程鎖的開銷,利用多線程技術提高了數據包處理效率。實驗證明,該系統可以有效地減少利用的丟包率,在千兆以太網環境下,利用PF_RING替換Winpcap,實現了零丟包。
參考文獻:
[1]Barakat C,Thiran P,Iannaccone G,et al.A Flow-Based Model for Internet Backbone Traffic[C].Proceedings of the 2nd ACM SIGCOMM Workshop on Internet measurment.ACM,2002:35-47.
[2]Fraleigh C,Moon S,Lyles B,et al.Packet-Level Traffic Measurements from the Sprint IP Backbone[J].Network,IEEE,2003,17(6):6-16.
[3]Winpcap技術文檔[EB/OL].http://www.Winpcap.org/,2014.
[4]謝鯤,張大方,文吉剛,等.基于 Winpcap的實時網絡監測系統[J].湖南大學學報(自然科學版),2006,33(2).
Design of Network Traffic Capture System on High Speed Network
JIAGN Tian-yu,HU Yang-rui
(College of Computer Scicece,Sichuan University,Chengdu 610065)
In order to let network anomaly detection system to work in high speed network environment,implements a network traffic collection system.Uses double buffering mechanism to reduce the overhead of thread lock and uses multithreading to improve system efficiency.The system also has good scalability,and can migrate to other platforms.Eventually the system is used to solve packets online capture problem in high speed network.
Network Traffic;Anomaly Detection;Network Security
1007-1423(2017)09-0137-04
10.3969/j.issn.1007-1423.2017.09.032
江天宇(1991-),男,江蘇無錫人,在校學生,研究方向為信息安全
胡洋瑞(1991-),男,四川成都人,在校學生,研究方向為信息安全
2017-03-06
2017-03-15