李慧萍 魯曉帆 張凱
1長春工業大學計算機科學與工程學院 吉林 130012
2內蒙古交通建設工程監理咨詢有限責任公司 內蒙古 021008
隨著Internet技術和網絡業務的飛速發展,用戶對網絡資源的需求空前增長。不斷增加的網絡用戶和應用,導致網絡負擔沉重,網絡設備超負荷運轉,從而引起網絡性能下降。優化網絡性能首先要對當前網絡的性能進行測量,全面地、系統地了解計算機網絡中存在哪些性能問題以及如何解決這些性能問題。而數據包捕獲是網絡測量的重要手段,快速準確的數據包捕獲技術是優化網絡性能的基礎、前提條件。
以太網是一種總線型的網絡,總線的特點是:當一臺計算機發送數據時,總線上所有計算機都能檢測到這個數據。從邏輯上來看是由一條總線和多個連接在總線上的節點所組成,各個節點采用CSMA/CD協議進行信道的征用和共享,每個節點通過網卡來實現這種功能。
網卡具有如下的幾種工作模式:
(1)廣播模式:該模式下的網卡能夠接收到網絡中的廣播信息。
(2)組播模式:該模式下的網卡能夠接收組播數據。
(3)直接模式:工作在直接模式下的網卡只能接收目的地址是自己Mac地址的幀。
(4)混雜模式:工作在混雜模式下的網卡接收所有的流過網卡的幀,數據包捕獲程序就是在這種模式下運行的。
通常,網卡的缺省工作模式包含廣播模式和直接模式。因此,為了捕獲到所有經過該網卡的數據包就必須先將網卡設置成混雜模式。這樣,就可以捕獲到流經該網卡的所有數據包,實現對網絡進行監測的目的。
Winpcap(Windows Packet Capture)是由意大利人Fulvio Risso和Loris Degioanni提出并實現的。是Windows平臺下一個免費、公共的網絡訪問系統,是為Linux下的Libpcap移植到Windows平臺下實現數據包捕獲而設計的函數庫。在設計WinPcap時參照了Libpcap,使用方法也與Libpcap相似,基于Libpcap的程序可以很容易的移植到Windows平臺下。如今,大部分Windows平臺下有數據包捕獲功能的軟件都使用了WinPcap作為編程接口,如Windump、Sniffit、Wireshark等。它具有訪問底層的能力,提供了捕獲原始數據包,按照一定規則過濾數據包,以及發送原始數據包的功能。
Winpcap由三個模塊構成:
(1)NPF(Netgroup Packet Filter),網絡組包過濾器:它是運行于操作系統內核中的驅動程序,直接與網卡驅動程序進行交互,獲取網絡上傳輸的原始數據包。同時還可以發送、存儲數據包以及對網絡進行統計分析。
(2)Packet.dll動態鏈接庫:它為Win32平臺提供了一個公共的接口,不同版本的Windows系統都有自己的內核模塊和用戶層模塊。Packet.dll用于解決這些不同,調用Packet.dll的程序可以運行在不同版本的Windows平臺上而無需重新編譯。
(3)Wpcap.dll高級動態鏈接庫:該動態鏈接庫比Packet.dll更高級,它的調用與操作系統無關,它和應用程序編譯在一起,使用由Packet.dll提供的服務,向應用程序提供完善的接口函數,提供了更高層、更抽象的函數。Winpcap的結構如圖1所示。

圖1 Winpcap結構圖
(1)Pcap_findalldevs_ex():獲取設備列表;
(2)Pcap_open_live():打開一個網絡接口進行數據捕獲;
(3)Pcap_compile():編譯過濾程序;
(4)Pcap_setfilter():設置過濾條件;
(5)Pcap_loop():循環捕獲網絡數據包;
(6)Pcap_close():關閉Winpcap關聯文件并釋放相關資源。
Winpcap捕獲數據包流程如圖2所示。

圖2 Winpcap數據包捕獲流程圖
雖然,Winpcap具有強大的數據包捕獲功能,目前大部分Windows平臺下有數據包捕獲功能的軟件都使用了Winpcap作為編程接口,但是,隨著網絡技術的發展和高速網絡鏈路的普及,Winpcap在數據包捕獲性能方面的缺陷也逐漸暴露。探究其原因主要有兩方面:一方面是:數據包接收時產生的中斷開銷;另一方面是:將數據包從內核空間拷貝到用戶空間的系統調用和內存拷貝需要消耗大量的CPU資源。這就使得基于Winpcap實現的網絡流量捕獲程序很難適用于百兆以上鏈路環境中。在高速網絡中,調用系統讀寫的次數會顯著增多,相應的丟包率也會增高。
針對以上問題,我們提出了動態多線程技術。該技術的核心思想是:根據實時的網絡流量動態的調整捕獲數據包的線程數目,線程數目隨流經網卡數據包數量的增加而增加。這樣就可以有效的解決丟包率的問題,大大提高數據包捕獲的效率。
本文簡要介紹了數據包捕獲技術的基本原理,Winpcap函數庫的構成及Winpcap數據包捕獲程序的工作流程,并針對當前數據包捕獲技術中普遍存在的丟包率的問題給出了相應的解決方案。通過動態多線程技術可以有效的降低丟包率,提高數據包捕獲的效率。對提高網絡安全性、優化網絡性能有著重要作用。
[1]謝希仁.計算機網絡(第5版)[M].電子工業出版社.2009.
[2]廖敏,文慶.Windows平臺下網絡數據包捕獲的設計與實現[J].電腦知識與技術.2008.