收稿日期:2007-12-05;
修回日期:2008-03-21
基金項目:國家“863”計劃資助項目(2006AA12A104); 國家自然科學基金資助項目(60772150)
作者簡介:劉璐(1984-),男,山東聊城人,碩士研究生,主要研究方向為計算機網絡與信息系統(tǒng)(jakeiiiiii@163.com);
王谷尹(1982-),女,四川自貢人,碩士研究生,主要研究方向為計算機網絡與信息系統(tǒng);
王俊峰(1976-),男,安徽蕪湖人,教授,博士,主要研究方向為網絡測量與監(jiān)控、空間信息網絡.
(四川大學 計算機學院 成都610064)
摘要:
傳統(tǒng)的基于應用層的網卡監(jiān)測方式已難以對高速網卡活動信息進行實時、準確監(jiān)測。為此,分析基于NDIS(network driver interface specification)中間層驅動和Windows網絡數(shù)據包過濾技術的特點,采用核心態(tài)NDIS中間層驅動程序實現(xiàn)了與底層網絡接口設備具體細節(jié)無關的高速網絡設備監(jiān)測技術,設計并實現(xiàn)了Windows平臺下基于NDIS的網卡監(jiān)測器。它分為應用層和驅動層兩個模塊,能夠在保證高性能的情況下在數(shù)據鏈路層同時對多個網卡進行精確監(jiān)測,其主要特點是對所有數(shù)據包的分析處理都在核心態(tài)進行。
關鍵詞:網絡驅動程序接口規(guī)范; 中間層驅動; 網卡監(jiān)測; 數(shù)據包過濾; 核心態(tài)
中圖分類號:TP393
文獻標志碼:A
文章編號:1001-3695(2008)10-3122-03
High-speed network device monitoring based on NDIS IMD
LIU Lu WANG Gu-yin WANG Jun-feng
(School of Computer Science Sichuan University Chengdu 610064 China)
Abstract:
Traditional application layer based network interface card(NIC) method became inefficient in real-time and accurate high-speed NIC monitoring. With the analysis of network driver interface specification(NDIS) and packet filtering under Windows platform the paper proposed an NIC independent high-speed network and monitoring method based on NDIS. The NIC monitor was implemented with application layer module and the driver layer ones. The monitor is capable of monitor multiple NICS simultaneously and accurately. Its main characteristic is analyzing and processing all the packets in the kernel layer.
Key words:network driver interface specification(NDIS); intermediate drive; medium monitoring; packet filtering; kernel layer
0引言
隨著網絡傳輸速度的不斷增長,高速網絡設備越來越多地被應用于網絡節(jié)點,普通PC機上的10/100 Mbps網卡也將被千兆甚至萬兆網卡取代。由于網絡設備傳輸速度的增加,在監(jiān)測網絡流量或對高速網絡設備性能進行監(jiān)測時,傳統(tǒng)的基于應用層的網絡監(jiān)測技術存在諸多問題。其主要包括:
a)在普通的PC機中,應用層難以實現(xiàn)線速的數(shù)據包接收、統(tǒng)計處理和轉發(fā),其原因在于總線吞吐量不足、數(shù)據包在內核與應用層間不必要的頻繁拷貝。
b)基于應用層的網卡監(jiān)測能夠統(tǒng)計到的數(shù)據有限,如由于網絡協(xié)議的限制其監(jiān)測不到不符合協(xié)議規(guī)則、超長(大于1 514 Byte)和過短(小于64 Byte),以及其他一些錯誤的數(shù)據包。
在實際應用中,應用層的監(jiān)控只能監(jiān)測到高層協(xié)議和數(shù)據,不能反映當時網卡的全部具體情況,而且要受到具體協(xié)議的限制,實現(xiàn)起來比較復雜。如何解決這些問題,需要研究核心態(tài)網絡協(xié)議和底層網絡設備的特點,實現(xiàn)基于驅動層的網絡設備監(jiān)測技術。
在一個實際的主機系統(tǒng)中,數(shù)據的收發(fā)是由網卡來完成的。當網卡接收到傳輸來的數(shù)據包時,網卡首先解析數(shù)據包的MAC地址,然后根據網卡驅動程序設置的接收模式判斷是否接收數(shù)據包。通過網卡接收模式的設置,基于驅動層的網絡設備監(jiān)測技術能夠根據需要精確監(jiān)測到網卡活動的信息,這對分析離線網絡設備的性能、異常流量監(jiān)視、在線網絡流量監(jiān)控和網絡安全的監(jiān)控都具有十分重要的意義。
1NDIS
網絡驅動接口規(guī)范(NDIS)是Microsoft提供的網卡和協(xié)議以及操作系統(tǒng)的通信驅動,它提供了網絡驅動開發(fā)的全部接口。在編寫符合NDIS規(guī)范的驅動程序時,只需要調用NDIS提供的接口函數(shù),不用考慮操作系統(tǒng)的內核以及其他驅動的接口問題,為操作系統(tǒng)對不同網絡的支持提供了方便[1~3]。NDIS描述了網卡驅動程序與下層網卡、上層的協(xié)議驅動程序以及操作系統(tǒng)進行通信的接口,它為網卡驅動程序的開發(fā)提供了一個抽象的接口[1]。NDIS支持三種類型的驅動程序,即微端口驅動程序、中間層驅動程序和協(xié)議驅動程序。它的層次結構如圖1所示。
當基于NDIS中間層在數(shù)據鏈路層對網卡進行監(jiān)測時,由于中間層驅動介于協(xié)議層驅動與微端口之間,如果將網卡設置為混雜模式,它不僅能夠截獲所有通過網卡的網絡封包[4],而且屏蔽了底層物理硬件的差別,使上層的協(xié)議驅動程序可以與底層任何型號的網卡進行通信,能夠得到網卡活動的所有信息[5,6]。由此可見,基于NDIS開發(fā)網卡監(jiān)測器具有以下三個優(yōu)點:
a)編程易實現(xiàn),具有清晰的編程模型。
b)屏蔽了底層物理硬件的差別。
c)保證了基于NDIS的驅動程序開發(fā)與平臺的無關性,具有高度的代碼可移植性[7,8]。
2網卡監(jiān)測器的設計與實現(xiàn)
2.1網卡監(jiān)測器的設計
網卡監(jiān)測器的設計包括應用層和驅動層兩個模塊。
a)驅動層模塊。它位于核心態(tài)的NDIS的中間層,對網卡截獲的數(shù)據包進行過濾和分析處理,通過共享內存與應用層程序進行交互。實現(xiàn)了在驅動層捕獲、過濾和分析數(shù)據包,避免了數(shù)據包在內核和應用層間不必要的和頻繁的拷貝,可以根據需要捕獲全部流經網卡的數(shù)據包。
b)應用層模塊。它位于應用層,可以提取共享內存中的各種監(jiān)測參數(shù),設置并傳遞過濾準則至驅動層模塊。實現(xiàn)了根據用戶需要過濾數(shù)據包,并將網卡活動的信息實時、準確地傳遞給用戶。
網卡監(jiān)測器軟件結構模型和對數(shù)據包接收、發(fā)送時的捕獲、過濾和分析處理流程如圖2所示。其中,虛線①②代表應用層模塊添加過濾規(guī)則至驅動層過濾程序,虛線③代表應用層模塊提取共享內存中保存網絡信息數(shù)據。
2.2網卡監(jiān)測器的實現(xiàn)
2.2.1注冊驅動并初始化
中間層驅動調用入口函數(shù)driverEntry實現(xiàn)初始化。具體步驟如下:
a)調用ndisMinitializeWraper函數(shù)注冊到miniport設備,枚舉得到設備句柄。
b)利用得到的設備句柄調用ndisIMRegisterLayeredMiniport函數(shù),注冊miniportXxx功能函數(shù)開放為上層協(xié)議驅動程序提供的接口。
c)同樣調用ndisRegisterProtocol函數(shù),注冊protocolXxx函數(shù)開放為底層miniport驅動程序提供的接口,并將本身綁定到底層驅動程序上。
d)調用ndisIMAssociateMiniport函數(shù)并通知NDIS庫已安裝中間層驅動程序。
初始化后,中間層驅動提供了miniport和protocol接口來與協(xié)議層的protocol、物理層的miniport進行結合。
2.2.2數(shù)據包截獲、過濾和分析處理
在數(shù)據包的接收和發(fā)送函數(shù)中,可以實現(xiàn)對數(shù)據包的截獲、過濾和分析處理,將處理獲得的數(shù)據保存至共享內存,提供給上層用戶。用戶可以通過設置網卡過濾模式(如混雜模式和全本地模式等)實現(xiàn)對數(shù)據包的過濾,為了提高數(shù)據包的過濾效率,共享內存采用先進先出緩沖隊列的方式。數(shù)據包截獲、過濾和分析處理的主要過程如下:
a)NDIS中間層驅動派遣例程(過濾函數(shù))至PtReceive/PtReceivePackets和MPSend/MPSendPackets函數(shù)中處理收/發(fā)的數(shù)據包,當有數(shù)據包符合過濾規(guī)則時,將其復制到共享內存。
b)對復制到共享內存中的數(shù)據包調用readPacketData函數(shù)讀取封包內容并調用packetStatistics對數(shù)據包進行處理,將處理得到的信息保存至mediumStatistics數(shù)據結構中。其數(shù)據成員類型如下:
這樣可以得到全部或一定時間內流經網卡的總數(shù)據包、總廣播包、總多播包、總字節(jié)數(shù)和數(shù)據包大小粒度分布等信息,通過對數(shù)據包的進一步分析就可以得到流經網卡的數(shù)據包目標主機的IP地址、MAC地址、操作系統(tǒng)版本、系統(tǒng)應用軟件種類等信息。
2.2.3應用層和驅動層交互
獲取網卡狀態(tài)時,用戶需要提供一個mediumStatistics結構大小的緩沖區(qū),驅動程序將對應的適配器ADAPT_FILTER_RSVD結構中的statistics成員的值傳遞到這個緩沖區(qū)中;重置網卡狀態(tài)時,驅動程序收到IOCTL(控制代碼)之后對ADAPT_FILTER_RSVD結構中的statistic成員置0;添加過濾規(guī)則時,用戶程序將要添加的過濾規(guī)則傳遞給驅動程序,驅動程序調用addFilterATodapter函數(shù)(規(guī)則添加函數(shù))即可。應用層對驅動層模塊處理得到的信息進行封裝,并提供show_adapter_info函數(shù)(信息顯示函數(shù))給用戶使用。
ADAPT_FILTER_RSVD結構用來描述預留空間結構類型,根據需要可以任意擴展。其典型的結構模型如下:
3測試
3.1實驗環(huán)境
本文選用了兩臺測試機,兩臺機器的操作系統(tǒng)均為Windows XP,硬件均為AMD 64位雙核4000+CPU,1 GB內存;每臺機器上配置兩塊網卡,分別為100、1 000 Mbps,直連線為五類增強線。整個測試環(huán)境的拓撲結構如圖3所示。
主要對以下兩個方面進行測試驗證:
a)性能測試。在純凈局域網內線速傳送數(shù)據,測試系統(tǒng)對網絡傳輸性能的影響,測試網卡監(jiān)測系統(tǒng)的性能。
b)正確性測試。將網卡監(jiān)測系統(tǒng)與某商用網絡測試設備軟件得到的數(shù)據進行對比,測試網卡監(jiān)測系統(tǒng)是否正確、可靠。
網卡監(jiān)測系統(tǒng)圖形界面如圖4所示。
3.2性能測試
1)測試方法為了測試線速下的網卡監(jiān)測系統(tǒng)對網絡傳輸速度的影響,用直連線將兩臺機器連接,由A~B傳送大小約為1GB的文件。每塊網卡實驗10次,記錄下每次傳輸所用的時間,并取10次傳輸時間的平均值為M,然后安裝網卡監(jiān)測器,重復上述實驗8次,記錄下每次傳輸所用時間設為s,性能下降的百分比即為1-M/S。測試結果如表1所示。
由表1可以看出,100 Mbps網卡安裝驅動以后,網絡性能基本沒有變化。1 000 Mbps網卡安裝驅動以后,網絡性能下降在3.5%以內。
2)測試結論在網卡監(jiān)測系統(tǒng)加載和卸載情況下,對于100 Mbps網卡主機網絡性能沒有發(fā)生明顯變化,對于1 000 Mbps網卡主機網絡性能下降在3.5%以內,表明監(jiān)測器能夠對網絡數(shù)據包進行高效過濾、分析和處理。
3.3正確性測試
1)測試方法使用某基于WinPcap開發(fā)的網絡防御分析和網絡監(jiān)控的商用網絡測試設備軟件作為工具,其不僅可以發(fā)送經過修改的數(shù)據包,還可以捕獲原始數(shù)據包,進行防御的解析,是十分可靠的網絡測試軟件。測試中需要利用它發(fā)送數(shù)據包,并將其數(shù)據和網卡監(jiān)測系統(tǒng)進行對比來驗證系統(tǒng)的正確性。
首先在兩臺機器上安裝網卡監(jiān)測系統(tǒng)和測試工具,利用測試工具從主機A至B發(fā)送數(shù)據包,設定網絡利用率為100%,依次設定每次發(fā)送數(shù)據包的大小和時間為:a)60B300s;b)128B100s;c)256B 100s;d)1 500B100s??梢酝ㄟ^監(jiān)測得到總數(shù)據包、總字節(jié)數(shù)、包大小粒度分布、丟包率等網卡活動信息。測試結果如表2所示。
表2正確性測試得到的統(tǒng)計數(shù)據
由表2可以看出,系統(tǒng)得到的監(jiān)測數(shù)據與專業(yè)工具測試的數(shù)據完全相同。
2)測試結論經過分析可知,系統(tǒng)監(jiān)測到的數(shù)據是全部的不加篩選的所有網卡活動,網卡監(jiān)測系統(tǒng)監(jiān)測在壓力測試下得到的網卡活動信息(如數(shù)據包數(shù)量、總字節(jié)數(shù)、包大小粒度分布等)是正確可靠的。
4結束語
本文提出了一種基于NDIS中間層驅動來監(jiān)測高速網絡設備的方法。由于所有的分析處理都在驅動層實現(xiàn),應用層只需提取共享內存中的數(shù)據,從而實現(xiàn)在應用層實時獲取網絡設備活動信息。基于NDIS中間層驅動在網絡協(xié)議棧中的特殊位置,本文實現(xiàn)的網卡監(jiān)測器能夠對所有經過網卡的網絡數(shù)據包進行過濾、分析和處理,并且具有良好的性能。在高速網卡上產生的性能下降可以通過優(yōu)化算法,對共享內存的合理調用來彌補?;贜DIS中間層驅動的網絡設備監(jiān)測技術是網絡設備檢測的發(fā)展方向,能夠滿足基于PC的應用對網絡設備監(jiān)測功能的不同要求,可以廣泛應用于對高速網絡設備的監(jiān)測。
參考文獻:
[1]Microsoft Corporation. Windows 2000驅動程序開發(fā)大全 第1卷:設計指南[M].馮博琴,等譯.北京:機械工業(yè)出版社,2001.
[2]BAKER A LOZANO J. Windows 2000設備驅動程序設計指南[M].施諾,等譯.北京:機械工業(yè)出版社,2001.
[3]李曉鶯,曾啟銘.NDIS網絡驅動程序的研究與實現(xiàn)[J].計算機應用,2002,22(4):60-61.
[4]WANG X K DENG R H. Multicast Internet protocol[J]. Computer Communications 2000,23:1047-1054.
[5]DERI L SUIN S MASELLI G. Design and implementation of an-anomaly detection system: an empirical approach[C]//Proc of Terena Networking Conference. 2003.
[6]KYOUNGWON S YANG Guo JIM K et al. Locating network monitors: complexity heuristics and coverage[C]//Proc of the 24th Annual Joint Conference of IEEE Computer and Communications So-cieties. Piscataway:IEEE Press 2005:351-361.
[7]FLOROIU J W IONESCU T C RUPPELT R et al. Using NDIS intermediate drivers for extending the protocol stack: a case study[J]. Computer Communications 2001,24:703-715.
[8]TAYLOR D E. Survey and taxonomy of packet classification techniques[J]. ACM Computing Surveys(CSUR) 2005,37(3):238-275.