《電子技術應用》
您所在的位置:首頁 > 嵌入式技術 > 設計應用 > Winpcap的體系結構與性能研究
Winpcap的體系結構與性能研究
來源:微型機與應用2012年第9期
楊 虹,陳 威
(重慶郵電大學,重慶 400065)
摘要: Winpcap有一系列創新(如數據包監視和數據包注入)的特點,這在以前的操作系統中是見不到的。介紹了Winpcap的系統結構及其功能。
Abstract:
Key words :

摘  要: Winpcap有一系列創新(如數據包監視和數據包注入)的特點,這在以前的操作系統中是見不到的。介紹了Winpcap的系統結構及其功能。
關鍵詞: Winpcap;數據包監測;數據包注入

    網絡分析軟件通常依賴底層調用抓取數據包,進行數據包監視或流量分析等。大多數的Unix系統都提供這些功能(至少是數據包抓取),而Windows提供的這些功能卻不令人滿意。Windows提供了一些與各種內核組件相關的API,但這些API存在嚴重的缺陷,如并不是所有的Netmon API都可用,而且其擴展存在很多限制。IP過濾驅動程序(IP filter driver)只存在Windows 2000及以上系統中,而且它只支持IP協議,雖然它能夠控制和丟棄數據包但卻不能監測和構造數據包。PCAUSA提供了一個商業產品,該產品含有數據包捕獲和BPF兼容的過濾器,然而它的用戶接口處于底層且沒有提供過濾器構造這樣的抽象方法。隨著原本在Unix系統上的應用不斷轉向Windows系統,這些特性的缺失成了不可忽視的問題。
本文主要介紹一個強大可擴展的Win32平臺的網絡監聽框架系統Winpcap的結構及其功能。該體系結構填補了Unix和Windows間網絡監聽能力的間隔,使得Unix應用到Windows的移植更簡單,而且Winpcap把性能放在最首位,使其能滿足更苛刻的需求。
1 Winpcap的體系結構
 Winpcap的基本結構如圖1所示,由1個過濾引擎、2個緩沖區(內核層與用戶層)以及一系列供開發人員使用的組件庫組成。盡管Libpcap具有穩固的結構并且功能強大,但Winpcap在結構和數據捕獲上仍然有自己獨到的地方,而且甚至可以認為是對Libpcap的創新。

 Winpcap的過濾可從用戶層開始(與Libpcap兼容),開發人員可以自定義包過濾條件(如picks up all udp packets);Winpcap會把它們編譯成一些虛擬指令(如if the packet is ip and the protocol type field is equal to 17,then return true),同時把這些虛擬指令發送到過濾引擎,并且激活這些功能。要實現這些目的,內核模塊必須能夠執行指令,因此需要一個“虛擬BPF”用來在每個接收的數據包執行這些虛擬代碼。其中內核層的過濾引擎是獲得高性能的關鍵。
 NPF與BPF在體系上最大的不同是對循環緩沖區的使用選擇[1]。Winpcap每次復制一部分數據包,Winpcap的緩沖區不再是固定大小(Libpcap的內核緩沖區與用戶緩沖區都是32 KB),而且在將數據包從內核緩沖區復制到用戶緩沖區的過程中對數據包進行更新,而不是復制完后更新。在復制過程中,將已經傳送的數據包所占用的空間立即釋放,因為盡管Winpcap工作在較高的優先級并且可能一直壟斷CPU,但內核層的捕獲程序可能會中斷復制過程。只要交換緩沖區允許占用一般的內存,Winpcap的緩沖區就可以存放大量的數據包。
 內核緩沖區僅通過一個read函數就可以完全復制,這可以減少大量的系統調用并且避免程序在內核層與用戶層之間頻繁切換。因為環境的切換之前必須保存任務狀態(CPU描述符與任務狀態大約有幾百個字節),頻繁切換會導致CPU使用率下降。
 Winpcap的內核緩沖區比BPF的要大(為1 MB),因為較小的內核緩存也會帶來一些問題,特別是當程序無法與捕獲數據包的驅動程序的速度保持一致情況下,這種情況在將數據發往硬盤或網絡數據量激增的情況下很常見。相反,用戶緩沖區需要小一些,通常情況下為256  KB。內核緩沖區與用戶緩沖區都可以在運行時調整。
 用戶緩沖區的大小至關重要,因為它決定了僅通過一個調用最多可以從內核讀多少數據,同時,一次從內核中至少應該讀多少數據也很重要。如果給出一個較大的值,則內核可以在數據送往用戶緩沖區之前等待足夠多的數據包到達,這可以減少一些系統調用。如果給出一個較小的值,則意味著內核可以將數據包盡快送往用戶緩存。這對那些實時性要求比較高的應用來說很重要,一個好的捕獲引擎會在兩者之間做出好的平衡。NPF是可配置的,讓用戶選擇程序具有好的執行效率或快速的反應。而Winpcap提供了一組函數可以設置數據包讀延時和數據包拷貝的最小值。當讀延時或內核緩沖區獲得的數據包數據量滿足了最小值,數據都會被送往用戶緩沖區。延時默認設置為1 s,最小數據量設置為16 KB,這種功能被稱之為“延遲寫入”。
1.1 統計模式
 包捕獲與網絡分析會過多占用CPU,因為有大量的數據需要處理和拷貝。提高執行速度最常用的方法是提高過濾引擎的速度與一次拷貝結構,這種方法是通過將內核緩沖區映射到程序內存來實現。一次拷貝的操作會減少數據的拷貝,但并不會減少內核層與用戶層之間的系統調用。如果用戶一次讀一個數據包,環境切換的代價會抵消一次拷貝所帶來的好處。
 一種新的方法是監視時并不將數據包送往用戶層,而是Winpcap將監視的功能放在內核層,這樣就可以避免數據送往用戶層。Winpcap提供了一種嵌入在NPF過濾引擎中的可編程的統計模式,可以使過濾器成為強大的分類器而不僅僅是過濾器。應用程序可以使用這個模塊監視任意的網絡行為(如網絡下載、兩臺主機間的網絡流量、每秒鐘的網頁訪問數量),并且可以在預先設定的時間間隔獲得這些結果。
統計模式避免了數據拷貝,并且實行0拷貝模式(統計行為在數據包到達網卡驅動的存儲區時執行,之后數據包被丟棄),所以不需要緩沖區。統計模式是監視網絡的一種極為有效的方法,且能在高速網絡中表現出良好的性能。
 Winpcap為開發人員提供了一組高層調用可以很容易地使用統計模式,對那些習慣了Libpcap的開發人員來說很容易掌握。
1.2 數據包注入
 BPF與NPF都提供了直接發送原始包的功能,可以將數據包直接發送到網絡中。但是Libpcap并沒有使用這些調用,而BPF也并不是用于此目的。大多數Unix系統都提供了直接發送原始包的功能,而Windows只有2000才提供了此功能,且功能受限。因此,Winpcap是Win32平臺上第一標準的而且可靠的發送原始包的類庫。NPF提供了許多新的函數可以發送多個數據包而只在內核層與用戶層之間切換一次。
Winpcap雖然提供了很多函數可以去開發這些新的功能(但并沒有直接提供這些功能),它需要開發人員手工構造數據包或利用已有的工具。而用戶可以使用Libnet Packet Assembly Library(即在Winpcap上加了一層功能),就可以構造數據包并發送到網絡中。
2 性能分析
 主要是對Winpcap的性能進行測試,用Winpcap在Windows98與Windows2000下的表現與Libpcap/BPF在FreeBSD下的表現進行比較。
 圖2為兩臺主機直接相連,以排除外部數據包的干擾,使實驗結果更精確。一臺主機是Windows2000操作系統,使用基于Winpcap的工具產生大量的數據包發送到網絡中,并保證高速率。數據包的大小選擇,是以保證每秒所產生的數據包都能夠達到一個極限值。

 操作系統安裝在同一臺主機上的不同硬盤分區上,以避免由于硬件原因帶來的差異。數據包被發送到不同的主機上,這樣可以使兩臺主機之間不用進行交互。接收端的主機網卡設置為混雜模式,根據測試主題的不同而用不同的工具捕獲數據包。根據測試需要,數據包收到后或丟棄、或傳送給應用程序、或存儲在硬盤中。
 FreeBSD的CPU負載可以在TOP PROGRAM查看,Windows2000可以通過任務管理器查看,Windows98則可以用CPUMETER查看(可以從網上獲得)。
 被測試的軟件都是最新的發行版,Winpcap的內核緩沖區為1 MB,Libpcap的緩沖區被設置為2個512 KB大小的空間(默認為32 KB)。
 這些實驗將努力避免其他軟件對實驗結果的影響,但是結果并不能準確地表現出單獨組件的性能,因為不同的組件不交互基本上是不可能的。
2.1 發送實驗
 發送實驗是測試發送性能,只在Windows2000下進行(95/98沒有對這個功能做優化)。圖3顯示了當每個包都為88 B的情況下達到每秒發送的最大值(原認為在每個包為64 B的情況下會達到最大值),這出乎意料。因為測試并不依賴NPF,CPU的負載始終沒有達到100%,這也說明了NPF并不是瓶頸所在。當數據包為400 B時網絡達到全速。

 經實驗發現發送能力更多依賴于網卡,當更換網卡、并在相同情況下進行測試時,發送速度只能達到每秒30 000個包。
2.2 接收與過濾實驗
 接收與過濾能力實驗測試:數據包被網絡接口接收并被過濾器檢查,如果所有的包都不會滿足過濾條件,它們將在檢查后被丟棄(不會被拷貝)。
 測試在兩種情況下進行:第一種使用3條BPF虛擬指令;第二種使用13條復雜的BPF虛擬指令。
 圖4為網絡分離和過濾性能,幾乎所有的包都被接受并沒有被過濾器檢查。Windows98的CPU負載明顯高于Windows2000(但是也在可以接受的范圍內)FreeBSD表現很差,只捕獲大約一半的數據包,而且CPU負載始終較高。

2.3 向應用程序傳送數據包的測試

 


 測試應用程序從Winpcap接收數據包的能力(收到后直接丟棄,并不做進一步的處理),檢驗整個Winpcap體系的功能,包括數據從網卡復制到內核緩沖區再到用戶緩沖區,而且將不使用過濾功能。圖5為測試結果,Winpcap幾乎可以將所有從網絡接口獲得的數據全部送至應用程序,沒有數據包在內核緩沖區被丟棄。而FreeBSD并不能做到這些,特別是在高數據率的情況下,大部分的數據包在沒有到達過濾器之前已被丟棄。


 無論在Windows2000還是FreeBSD中,CPU的負載都隨著數據包容量的增大而降低,Windows98因為沒有延遲寫入的能力而表現一般。
2.4 程序性能實驗
 實驗將使用基于Winpcap的工具將獲得的數據包轉存在文件中,結果如圖6所示。程序將每個數據包的68 B的內容存到文件中。所有的系統在高數據率的情況下都會丟失一些數據包:一部分是因為恪守CPU時間(當一個數據包到達時,程序卻還在處理前面的包);另一部分則因為內核緩沖區沒有足夠的空間去存放數據包。圖7為整個數據包被寫入文件時的結果。


2.5 監視實驗
 監視實驗在AD-HOC網絡上進行。實驗結果表明CPU負載一直維持在較低的水平,而且結果與圖4相類似。圖5顯示了在用戶層監視的代價遠高于內核層,這些多余的代價會給用戶層監視的性能帶來折扣。另外,用戶層的監視需要大容量的緩沖區。
3 Winpcap的改進意見
 根據實驗結果與體系結構的特點,采取了如下相應的改進措施:
3.1 過濾引擎改進
 因為采用動態代碼生成技術對BPF進行改進,使BPF性能取得明顯效果,因此對NPF也進行了類似的改進,采用JIT(Just In Time)技術,將過濾代碼翻譯成X86的二進制代碼,這項改進使整體的捕獲性能提高了約8%。
3.2 內存拷貝
 因數據包從網卡到程序需要進行兩次拷貝過程,而第一次拷貝(從網卡到內核緩沖區)的代價明顯高于第二次拷貝,一個重要的原因是NdisTransferData()函數進行了額外的操作。但是同時,在研究過程中也注意到一些網絡控制器(尤其是一些大型的網絡適配器)是在通知網卡驅動之前將數據包拷貝到內存中的,因此NPF驅動可以在同一內存區接收數據包。在這種情況下,可以使用C標準庫的函數來實現這個功能。
3.3 時間戳
 用于產生微妙級精確度時間戳的KeQueryPerformanceCounter函數可以被Inter處理器中集成的TSC(Time Stamp Counter)取代,TSC的精度與CPU頻率相同。X86的指令集提供了一條指令來取得時間戳(rdtsc),這項改進可以使整體性能提升27%左右。但是標準的NPF發現版并沒有使用這項改進,因為這項指令需要硬件支持(只在Inter處理器或與Inter處理器兼容的處理器上才能運行)[2]。
3.4 Tap函數優化
 Tap函數中同樣用到了NdisTransferData()函數,而該函數運行時要求分配一塊存儲區去使某個數據結構可以用來存放要傳送的數據包,這個操作在數據包傳送完畢時可能會導致回調函數的調用中斷。同樣也可以用C標準庫的函數替代它。這項改進可以使整體性能提升5%左右。
3.5 硬件優化
 由于很多開銷是在捕獲過程之外產生的,這就存在硬件優化的可能性,如NEW ZEALAND BASED公司推出有專用于網絡捕獲的芯片。該芯片避免了過多地與操作系統的交互,它可以產生時間戳,而且直接將數據包傳送到系統內存,用硬件來管理緩沖區。這樣應用程序可以直接取得數據而不需要同其他層次打交道。因此,硬件的優化可以使基于軟件的捕獲程序性能得到較大的提升。
 本文主要針對Winpcap的體系結構及其性能進行研究,并對可能的優化措施進行探討。文中的實驗主要是對Winpcap的各個部分的性能進行測試,與一般的看法不同,過濾和緩沖區并不是影響整體性能的最重要的部分。對這兩部分的優化,引起了很多的關注,但是針對它們的改進相對整體的性能提升并沒有明顯的幫助,特別是在數據包比較小的情況下。經一系列實驗說明,真正的瓶頸在那些隱藏的地方,如設備驅動程序、應用程序與操作系統的交互、操作系統與硬件之間的交互。
 數據捕獲是由很多組件配合完成的工作。所以,在對其性能進行優化這個問題上,要從全局考慮,而不應該僅僅局限在某個組件。實驗說明了一些大量優化操作都集中在沒什么提升潛力的地方(如過濾引擎和緩沖區優化),而真正值得關注的地方卻并沒有引起足夠的重視。同時,即使所有涉及到的技術都很成熟,但性能提升還是有很大的空間,希望本文能給同行提供一些新的視角。
參考文獻
[1] DEGIOANNI L, BALDI M, RISSO F, et al. Profiling and optimization of software-based network-analysis applications proceedings[C].  The 15th IEEE Symposium on Computer Architecture and High Performance Computing (SBAC-PAD 2003) Sao Paulo, Brazil, November 2003:3-5.

此內容為AET網站原創,未經授權禁止轉載。
亚洲一区二区欧美_亚洲丝袜一区_99re亚洲国产精品_日韩亚洲一区二区
亚洲成色精品| 一本久久综合亚洲鲁鲁五月天| 欧美激情一区二区久久久| 欧美一级在线视频| 亚洲在线一区| 亚洲私人影吧| 在线视频你懂得一区二区三区| 亚洲免费av片| 亚洲看片一区| 亚洲免费成人| 99国内精品久久| 亚洲精品影视在线观看| 亚洲片在线观看| 亚洲精品乱码久久久久久久久| 亚洲韩国一区二区三区| 91久久精品日日躁夜夜躁国产| 久久不见久久见免费视频1| 欧美一进一出视频| 久久9热精品视频| 亚洲国产日韩美| 久久精品免费电影| 亚洲国产综合在线看不卡| 亚洲激情啪啪| 日韩视频免费| 亚洲一区二区三区视频| 亚洲欧美春色| 久久国产加勒比精品无码| 久久免费黄色| 欧美成人中文字幕| 欧美日韩123| 国产精品s色| 国产视频久久网| 伊人春色精品| 亚洲九九爱视频| 亚洲欧美www| 久久福利资源站| 亚洲欧洲精品成人久久奇米网| 99精品热视频只有精品10| 亚洲五月婷婷| 久久精品成人| 欧美成人性生活| 欧美三区不卡| 国产亚洲精品美女| 亚洲福利国产| 亚洲天堂av电影| 久久本道综合色狠狠五月| 日韩视频在线免费| 欧美亚洲网站| 嫩草国产精品入口| 欧美色图天堂网| 国内伊人久久久久久网站视频| 亚洲激情偷拍| 亚洲免费影视第一页| 亚洲国产成人在线播放| 一本在线高清不卡dvd| 欧美在线观看视频一区二区三区 | 欧美精品一区二区三区蜜臀| 国产精品久久久久9999高清| 影音先锋日韩资源| 一本大道久久精品懂色aⅴ| 欧美在线短视频| 99亚洲一区二区| 久久久青草婷婷精品综合日韩| 欧美激情亚洲另类| 国产精品自拍视频| 最新中文字幕一区二区三区| 午夜亚洲福利| 一区二区三区av| 久久男女视频| 国产精品久久久久免费a∨大胸 | 鲁大师影院一区二区三区| 欧美日韩国语| 国语自产精品视频在线看| 9久re热视频在线精品| 亚洲电影激情视频网站| 亚洲在线一区| 欧美精品一区二区视频| 国模 一区 二区 三区| 亚洲视频大全| 日韩亚洲欧美在线观看| 久久米奇亚洲| 国产精品一区二区三区观看| 亚洲蜜桃精久久久久久久| 欧美在线视频免费播放| 亚洲欧美激情视频| 欧美高清视频在线播放| 国产一二精品视频| 亚洲网站啪啪| 9i看片成人免费高清| 久久综合福利| 国产亚洲人成a一在线v站| 国产精品99久久久久久有的能看| 亚洲精品一区二区三区不| 久久久噜噜噜久久狠狠50岁| 欧美调教视频| 日韩一级在线| 一本到高清视频免费精品| 免费人成精品欧美精品| 国内精品免费在线观看| 亚洲女人天堂av| 亚洲欧美日本日韩| 欧美日韩亚洲视频一区| 亚洲精品国产精品乱码不99 | 国产嫩草影院久久久久| 亚洲视频免费看| 一区二区三区精品在线| 欧美另类一区二区三区| 亚洲高清久久| 91久久精品国产91久久| 美女视频黄 久久| 韩国一区二区三区在线观看| 欧美一区在线看| 久久国产精品一区二区三区| 国产精品亚洲片夜色在线| 亚洲视频中文| 亚洲欧美视频一区二区三区| 国产精品大片wwwwww| 国产精品99久久久久久宅男| 亚洲欧美高清| 国产美女精品视频免费观看| 午夜精品久久久久影视| 久久精品国产精品亚洲| 国内成人在线| 91久久久一线二线三线品牌| 欧美精品成人在线| 亚洲精品欧美一区二区三区| 亚洲视频免费看| 国产精品久久久久9999高清| 亚洲一区久久久| 久久国产精品色婷婷| 国产一区二区无遮挡| 久久精品国产91精品亚洲| 麻豆91精品| 亚洲国产精品久久久久久女王| 亚洲国产综合视频在线观看| 欧美精品电影在线| 99精品欧美一区二区蜜桃免费| 亚洲一区bb| 国产九九视频一区二区三区| 欧美一区二区三区免费观看视频 | 亚洲午夜久久久久久久久电影院| 亚洲欧美一区二区三区极速播放| 国产农村妇女精品一区二区| 久久国产加勒比精品无码| 欧美成人精品| 99精品欧美| 欧美一区二区三区视频| 黑人一区二区| 一区二区三区视频在线| 国产精品美女诱惑| 欧美在线观看网址综合| 免费在线看成人av| 一本色道久久综合亚洲精品婷婷| 性久久久久久久久久久久| 黄色另类av| 一本久久a久久精品亚洲| 欧美亚韩一区| 久久成人18免费网站| 欧美精品免费在线| 亚洲综合国产激情另类一区| 久久婷婷久久| 日韩视频中文| 欧美一区二区三区四区夜夜大片| 激情综合色丁香一区二区| 99精品热视频只有精品10| 国产九色精品成人porny| 最新中文字幕一区二区三区| 国产精品久久久久国产a级| 亚洲大片免费看| 欧美日韩一二三四五区| 午夜宅男欧美| 欧美精品激情blacked18| 亚洲欧美日韩系列| 欧美精品亚洲精品| 欧美一区二区免费| 欧美日产在线观看| 欧美在线观看视频一区二区三区| 欧美日韩国产一区精品一区| 亚欧成人在线| 欧美日韩三区四区| 亚洲国产精品激情在线观看| 欧美午夜精品久久久久久浪潮| 久久国产欧美| 国产精品免费视频xxxx| 亚洲人线精品午夜| 国产热re99久久6国产精品| 99re这里只有精品6| 国产又爽又黄的激情精品视频| 一区二区三区免费观看| 激情成人中文字幕| 亚洲欧美日韩精品久久奇米色影视 | 亚洲日本理论电影| 国产三级欧美三级日产三级99| 99精品欧美一区二区三区综合在线 | 国产日韩欧美另类| 亚洲天堂偷拍| 亚洲国产精品成人精品| 欧美自拍偷拍午夜视频| 夜夜嗨av一区二区三区中文字幕| 久久亚洲私人国产精品va媚药|