綜述
大量為網(wǎng)絡(luò)操作和網(wǎng)絡(luò)管理提供網(wǎng)絡(luò)監(jiān)視、統(tǒng)計、安全、流量分析和預(yù)警服務(wù)等功能的設(shè)備需要對在網(wǎng)絡(luò)上流動數(shù)據(jù)進行直接并且有效的實時存取。其中軟件工具常因為它們低費用和高兼容性而倍受偏愛。然而,考慮到這些工具通常在高速網(wǎng)絡(luò)環(huán)境下表現(xiàn)不佳。盡管人們普遍認為,實時網(wǎng)絡(luò)分析軟件受限于網(wǎng)絡(luò)環(huán)境因而遠不能達到理想性能,但我們將證實在有限的硬件支持下,網(wǎng)絡(luò)分析軟件性能仍能有所增進。本文將針對廣泛應(yīng)用于網(wǎng)絡(luò)分析軟件的WinPcap庫,討論它的瓶頸,并提出增效。以在高速網(wǎng)絡(luò)環(huán)境下推廣基于軟件的網(wǎng)絡(luò)應(yīng)用工具。
1 .介紹
伴隨著帶寬的增加,調(diào)制解調(diào)網(wǎng)絡(luò)發(fā)展迅速,同時網(wǎng)絡(luò)也變得更加復(fù)雜。想要實現(xiàn)象監(jiān)視、問題解答、網(wǎng)絡(luò)安全等應(yīng)用功能,需要高水準(zhǔn)、專業(yè)化的設(shè)備。這些工具有如網(wǎng)絡(luò)分析器、和設(shè)備監(jiān)視等都是基于硬件的。然而,硬件解決方案通等常是昂貴的,難以發(fā)布(例如,硬件不能被復(fù)制且不便移動),并且它們與軟件解決方案相比靈活性不高。
到目前為止,基于軟件的解決方案通常作為標(biāo)準(zhǔn)的擴展得以實現(xiàn),通過它們向應(yīng)用程序提供原始網(wǎng)絡(luò)實時數(shù)據(jù)。象著名的libpcap[1]和WinPcap[3],都已應(yīng)用在眾多操作系統(tǒng)(OSes)上。這些庫(library)輸出一套原語,允許應(yīng)用程序在沒有任何另外中介層參與的情況下實絡(luò)應(yīng)用操作。軟件部件發(fā)布便利且靈活性強:一個簡單的包捕獲部件能提供底層數(shù)據(jù)給應(yīng)用程序(例如,防火墻、NAT、嗅探器、聯(lián)網(wǎng)等等)。而且它們升級方便,花費便宜。正因為這些,許多提供網(wǎng)絡(luò)監(jiān)視和分析的專業(yè)軟件都是使用這種方式來實現(xiàn)的。然而,性能問題是軟件工具的致命弱點,當(dāng)處理高速網(wǎng)絡(luò)時,使用硬件設(shè)備成為首選。盡管當(dāng)前的CPU已很強大,但在倍速比特速率下仍然無法僅通過軟件來實現(xiàn)實時流量分析。
目前世界各地的研究小組(如[10],[13])正從事這方面的工作,提升網(wǎng)絡(luò)分析工具整體性能是一個公開的話題。當(dāng)前他們把精力集中于一些特定的流量分析部件(例如包過濾器),并通過各種途徑改進這些功能部件的性能。然而用戶只對整體流量分析性能感興趣,而非某個單一部件。因而研究工作的成果并未能有效地被個人用戶所接受。明確地說,這項工作權(quán)衡分析各種組件在網(wǎng)絡(luò)分析工具中的比重。一套針對WinPcap庫的優(yōu)化方案在試驗版本中配置應(yīng)用,后將以定量法測試改進后的效能。從檢測數(shù)據(jù)顯示,部件優(yōu)化導(dǎo)致系統(tǒng)性能僅百分之幾的提升,并不能改變最終用戶的觀點。
本文由以下幾部分組成。第2節(jié),對相關(guān)研究成果的概述。第3節(jié),將Winpcap作為典型的系統(tǒng)擴展部件,描述它的構(gòu)造。第4節(jié),呈現(xiàn)對各個部件(如包截獲組件、系統(tǒng)應(yīng)用層組件)詳盡性能評估的結(jié)果。第5節(jié),介紹一些優(yōu)化方案,權(quán)衡組件比重,檢測它們對整體性能的影響效果。最后,在第6節(jié)做總結(jié)。
2 .領(lǐng)域發(fā)展
CMU/Stanford斯坦福包過濾器[14](或CSPF)可謂元老級包過濾器,它是最早發(fā)布的實現(xiàn)從應(yīng)用層存取數(shù)據(jù)鏈路層數(shù)據(jù)的可行系統(tǒng)。它還介紹了虛擬過濾機的概念:一個基于虛擬CPU(含有寄存器等)與精簡高效指令集的包過濾機。過濾器則是能工作在虛擬機的可執(zhí)行程序。
McCanne和Van Jacobson是該領(lǐng)域另兩名杰出貢獻者,他們在1993年發(fā)布了(BPF)包過濾器[2]。它通過限制拷貝包的數(shù)量并定義了一個新的、更加高效的、基于寄存器的虛擬完整指令集(即,含有l(wèi)oad、store、compare和jump等基本指令)來改進CSPF。目前BSD操作系統(tǒng)仍然提供BPF,作為缺省的包捕獲工具;其它一些操作系統(tǒng)也有類似的實現(xiàn)工具。BPF虛擬處理器還是libpcap庫偏愛的底層實現(xiàn)。
Mach Packet Filter馬赫包過濾器(MPF)[9],PathFinder[12],DPF[11],BPF+[10]都是一些以提升過濾處理器來增進流量分析性能的過濾器。Packet classification[15]是另一個概念上類似于包過濾器的流量分析組件,同時因為其在路由設(shè)備中的應(yīng)用角色得到了很多關(guān)注。
在另一方面,還有極小一些研究是針對其他形式的包捕獲技術(shù),如緩沖拷貝。NFR小組使用一個更大緩沖區(qū)來升級BPF的版本性能,并通過檢驗共享緩沖區(qū)來阻止重復(fù)拷貝[13]。WinPcap[3],是一個公開代碼的Windows庫。它通過記憶占有實現(xiàn)一個更高效的緩沖系統(tǒng)來改進libpcap。然而,先前的工作沒有關(guān)注總體分析過程的性能,這便是本文的目的。試驗結(jié)果將呈現(xiàn)為什么現(xiàn)有的優(yōu)化措施僅能將捕獲過程所花費的執(zhí)行時間節(jié)省百分之幾的原因。
3 .包捕獲模型
本小節(jié)定義用于包截獲和流量分析組件的典型結(jié)構(gòu)模型。特別地,我們參照數(shù)據(jù)包從在網(wǎng)卡(NIC)被接受,接著被傳遞到工作站的主存,然后通過設(shè)備驅(qū)動和操作系統(tǒng)等中介應(yīng)用于程序這條完整路徑來作詳細說明。其中NPF(NetGroup Packet Filter)[3]是由BPF驅(qū)動,并已植入到WinPcap庫中。本文將其作為特例經(jīng)常提及,應(yīng)當(dāng)指出的是NFP同其它過濾器一樣,它們的基本原理是相同的。圖1和圖2所展示的是WinPcap處理一個被接受的數(shù)據(jù)包并把它傳給應(yīng)用程序所涉及的具體步驟及相關(guān)組件。
3.1.網(wǎng)卡和NIC適配驅(qū)動器
調(diào)制解調(diào)NIC板載器通常只有幾Kbytes。獨立于主工作站的存儲容量,NIC存儲器被用來全速接收、發(fā)送數(shù)據(jù)包。此外,NICs施行一些初步的檢查,例如CRC校驗和檢測是否滿足以太網(wǎng)短幀要求。當(dāng)數(shù)據(jù)包存儲在NIC上時,壞幀將被及時丟棄。
當(dāng)NIC收到一個有效的數(shù)據(jù)包后,網(wǎng)卡向系統(tǒng)總線控制器請求總線控制權(quán)以傳輸數(shù)據(jù)。這時,NIC獲得總線控制權(quán)并向工作站主存?zhèn)鬏擭IC緩沖區(qū)的數(shù)據(jù)(看見圖2),釋放總線后,NIC向高級程序中斷控制器(Advanced Programmable Interrupt Controller_APIC)生成硬件中斷。APIC接著喚醒操作系統(tǒng)中斷處理程序,進而觸發(fā)NIC設(shè)備驅(qū)動器的中斷服務(wù)程序(Interrupt Service Routine_ISR)。
高效設(shè)備驅(qū)動的中斷服務(wù)程序(ISR)將完成其份內(nèi)職責(zé)。最基本的,如它會檢測與本設(shè)備相關(guān)的中斷(由于在機器中允許多個設(shè)備共享同一個中斷)并給予確認。然后,ISR 預(yù)置一個低優(yōu)先級的函數(shù)(稱作Deferred Procedure Call or DPC),它會在收到數(shù)據(jù)包后處理硬件請求并通報上層驅(qū)動(即協(xié)議層驅(qū)動、包截獲驅(qū)動等)。在完成所有等待隊列中的中斷請求任務(wù)后,CPU啟動DPC程序。由于一次只能處理一個數(shù)據(jù)包,故NIC設(shè)備驅(qū)動處理數(shù)據(jù)包時,源于NIC的中斷將會被暫時禁用。另外,中斷產(chǎn)生是一個很耗系統(tǒng)資源的過程,現(xiàn)在新型的NICs允許在一次中斷中傳輸一個以上的數(shù)據(jù)包,使得上層驅(qū)動程序在被激活時有能力同時處理若干個數(shù)據(jù)包。
3.2 包捕獲驅(qū)動
包捕獲部件類似協(xié)議棧,通常透明于其它軟件,這將不影響標(biāo)準(zhǔn)系統(tǒng)的工作。它們只是在系統(tǒng)中插入一個“鉤”以便能通過調(diào)用返回函數(shù)-tap()-及時了解數(shù)據(jù)包到達的情況。在win32系統(tǒng)上,包捕獲部件通常以網(wǎng)絡(luò)協(xié)議驅(qū)動的形式被實現(xiàn)。
tap()的第一反映便是過濾數(shù)據(jù)包,即探測它們是否為使用者所感興趣的。NPF過濾引擎演化自BPF,是一個整合有簡單指令集的虛擬處理器,它能對通用緩沖器(數(shù)據(jù)包棧)執(zhí)行一些簡單字節(jié)操作。WinPcap(還有l(wèi)ibpcap)提供的是一個用戶層API,轉(zhuǎn)遞高級語言表達式(例如,"提取所有UDP包")進入一套偽指令(例如,"if以太網(wǎng)字段頭是IP且協(xié)議字段頭的IP等于17,那么返回ture"),后將它們送到過濾機,并激活該指令。上述結(jié)構(gòu)體系在數(shù)據(jù)包位于NIC緩沖區(qū)時就應(yīng)用于包的過濾,以便減少不匹配的無用拷貝。盡管如此,這仍將占用總線資源,因為它們已被送入系統(tǒng)內(nèi)存。
過濾器收到數(shù)據(jù)包的同時,也得到了一些相關(guān)的物理層信息系,例如長度和時間戳,這將有利于今后應(yīng)用程序?qū)λ鼈兊奶幚怼H缓髷?shù)據(jù)包被拷貝進一個緩沖區(qū),通常稱作核心緩沖區(qū),在那里數(shù)據(jù)包等候被傳輸至用戶層(看見圖2)。對包截獲進程來講,這個緩沖區(qū)的大小和體系結(jié)構(gòu)設(shè)計是否合理直接影響到整體性能的表現(xiàn)。例如一個容量大且設(shè)計科學(xué)的緩沖系統(tǒng)能彌補在突發(fā)繁雜期間用戶層應(yīng)用程序遲緩的速度,并能減少從包截獲驅(qū)動(即,核心緩存區(qū))向應(yīng)用程序傳輸調(diào)用數(shù)據(jù)的請求次數(shù)。
用戶層應(yīng)用程序通過類似于系統(tǒng)調(diào)用的方式從核心緩沖區(qū)得到數(shù)據(jù)包。當(dāng)NPF就緒時,系統(tǒng)調(diào)用觸發(fā)"鉤"函數(shù)-read()(參見圖1),它負責(zé)檢查NPF核心緩存區(qū):當(dāng)緩沖區(qū)不空時,緩沖區(qū)的內(nèi)容將被傳輸?shù)接脩舫绦蚍峙渲付ǖ膬?nèi)存中(在圖1中被標(biāo)志為"用戶緩沖區(qū)")。當(dāng)數(shù)據(jù)被復(fù)制到用戶層時,應(yīng)用程序立即被喚醒,并開始處理數(shù)據(jù)。
4 .性能評估
在這一節(jié)里,我們將呈現(xiàn)對網(wǎng)絡(luò)分析系統(tǒng)詳盡測量的結(jié)果。目的在于測定包截獲進程的效能。對第3節(jié)中提到過的組件,我們都將統(tǒng)計它們具體消耗資源的準(zhǔn)確數(shù)目。
按照常規(guī),我們以CPU時鐘周期的消耗量來統(tǒng)計。事實上,這樣的好處是為了更加客觀公正,因為這種測量方法透明于具體系統(tǒng)的絕對時間和CPU速度。
4.1 試驗平臺
圖3所展示的是試驗平臺:兩臺PC機通過高速以太網(wǎng)直接連接。一臺PC充當(dāng)通信發(fā)生器。另一臺則用于實際測試,在它上面安裝了改良版的Winpcap,里面有用于測試的擴展插件。要特別說明的是,該擴展能調(diào)用Pentium系列微處理器的性能監(jiān)視計數(shù)器[5][6]。該系列微處理器都含有內(nèi)置的計數(shù)器(其類型和數(shù)量取決于微處理器的型號和版本)。這些計數(shù)器能被用于追蹤事件,比如已編譯的指令數(shù)目、中斷請求的數(shù)目、加載緩存的數(shù)目等。再例如,CPU的CLK UNHALTED計數(shù)器統(tǒng)計的是CPU在特定時間間隔內(nèi)有效的鐘周期數(shù)。并且,該計數(shù)器還能識別消耗在用戶級的數(shù)量與消耗在核心級的數(shù)量。具體地,程序可通過rdpmc指令來得到該計數(shù)器的數(shù)值。