摘 要:IPv6網(wǎng)絡(luò)需要新的網(wǎng)絡(luò)協(xié)議和設(shè)備。在將新設(shè)備應(yīng)用到實際環(huán)境前,需要大量的實驗對設(shè)備和協(xié)議進(jìn)行驗證。網(wǎng)絡(luò)模擬器是進(jìn)行這類實驗的有效工具。為此,設(shè)計了一種同時支持IPv6和IPv4協(xié)議的Windows平臺網(wǎng)絡(luò)模擬器:WE6(Windows-platform emulator IPv6)。可以實現(xiàn)對網(wǎng)絡(luò)帶寬、傳輸延遲、傳輸丟包率以及傳輸延遲抖動的控制和調(diào)節(jié)。在Cernet Ⅱ 上進(jìn)行的實際使用表明,該網(wǎng)絡(luò)模擬器可以對IPv6業(yè)務(wù)進(jìn)行精確的實驗環(huán)境控制,為協(xié)議和設(shè)備的開發(fā)與驗證提供可靠的條件。
關(guān)鍵詞:模擬器; IPv6; Windows平臺
中圖分類號:TP391.9 文獻(xiàn)標(biāo)志碼:A 文章編號:1001-3695(2008)08-2502-03
Design and implementation of real-time and effective
network emulator of Windows for IPv6 (WE6)
LI Xue-jie, JIN Zhi-gang, DAI Ju-feng
(School of Electronics Engineering, Tianjin University, Tianjin 300072, China)
Abstract:With the development of Internet, new protocols and network equipments are required to develop. It is necessary to test the new protocols and network equipments extensively before deployment. This paper proposed the design and implementation of RENEW, a useable and accurate network emulator which supported both IPv4 and IPv6 protocols. Besides, it also worked on Windows platform. InIPv6 testbed,it used RENEW to emulate various network characteristics and conditions including bandwidth, delay packet loss and jitter. Compared with the expected values, results were acceptable. Through implementation and experimentation study, it shows that RENEW does provide the real-time control and change on the parameters of IPv6 network conditions effectively and expediently on Windows. It also gives enough accuracy and more satisfactory convenience to the development and test work for the new protocols.
Key words:emulator; IPv6; Windows platform
網(wǎng)絡(luò)模擬器可在實驗室為網(wǎng)絡(luò)研究人員提供可控、可再現(xiàn)的實驗環(huán)境,可加快網(wǎng)絡(luò)協(xié)議和設(shè)備的開發(fā)與應(yīng)用進(jìn)程。其優(yōu)勢在于不像用軟件仿真(simulation)那樣還需要對網(wǎng)絡(luò)協(xié)議和服務(wù)再次在仿真軟件中實現(xiàn)[1]。
目前,已經(jīng)有研究和開發(fā)人員設(shè)計和開發(fā)了一些網(wǎng)絡(luò)模擬器。例如NISTNet 是美國國家標(biāo)準(zhǔn)局提出的運行于Linux平臺的模擬器軟件包 [2];Dummynet 是小型的、有一定靈活性的模擬器軟件[3],它基于FreeBSD操作系統(tǒng)。上述兩種模擬器的缺點是需要先對操作系統(tǒng)進(jìn)行補丁操作[4]。ONE(Ohio network emulator) 是美國俄亥俄州立大學(xué)設(shè)計的運行在Sun公司的Solaris工作站環(huán)境下的模擬器軟件[5]。它工作時模仿路由器的工作,需要有兩個物理網(wǎng)卡。使用ONE模擬器時,需要運行ntpd和 inetd 等服務(wù),并且用戶界面不夠友好,模擬器功能不夠全面。對于網(wǎng)絡(luò)模擬器的需求,也有企業(yè)進(jìn)行了開發(fā),提供了較成熟的產(chǎn)品。例如PacketStorm公司的產(chǎn)品Packetstorm 是一個功能強大的網(wǎng)絡(luò)模擬器 [6]。但是其價格非常高,而且主要針對大型的網(wǎng)絡(luò)環(huán)境。
另一方面,上述模擬器一般都是在IPv4環(huán)境下對協(xié)議進(jìn)行模擬。但是隨著IP地址空間的日益緊張,下一代網(wǎng)絡(luò)將采用IPv6技術(shù)。如果不能及時提供支持IPv6功能的模擬器將影響到IPv6的推廣進(jìn)程。
微軟公司的Windows 已經(jīng)被市場廣泛認(rèn)可,并且其易用性與界面的友好性比Linux類操作系統(tǒng)要高。考慮到Windows平臺上數(shù)量巨大的各種應(yīng)用,實現(xiàn)其平臺上的模擬器對進(jìn)一步減少網(wǎng)絡(luò)協(xié)議和新應(yīng)用的重新編碼有巨大的作用。因此,本文提出了Windows平臺的同時支持IPv6和IPv4的實時、高效的網(wǎng)絡(luò)模擬器。該模擬器可對網(wǎng)絡(luò)中需要處理的數(shù)據(jù)包在傳輸過程中根據(jù)需要,修改其傳輸延遲、延遲抖動、控制傳輸帶寬、控制傳輸丟包率。
1 WE6總體設(shè)計
1.1 設(shè)計目標(biāo)
WE6的首要目標(biāo)是對IPv6的支持。當(dāng)然為了適應(yīng)各種IPv4和IPv6共存的環(huán)境,還需要支持IPv4。根據(jù)Windows平臺的特點,確定了下面的目標(biāo):
a)有效性與精確性。有效地對用戶設(shè)定的網(wǎng)絡(luò)環(huán)境進(jìn)行模擬,并且足夠精確。這些仿真應(yīng)該盡可能實時完成。
b)小干擾。當(dāng)模擬器運行時,盡可能小地對Windows的正常任務(wù)的運行進(jìn)行干擾。這樣的話,得到的模擬結(jié)果的可信性才比較高。
c)靈活性。要求網(wǎng)絡(luò)模擬器能夠?qū)崿F(xiàn)盡量多的網(wǎng)絡(luò)環(huán)境模擬,并且適應(yīng)不同的網(wǎng)絡(luò)硬件。
1.2 WE6系統(tǒng)結(jié)構(gòu)
為了實現(xiàn)上述設(shè)計目標(biāo),經(jīng)過對Windows的網(wǎng)絡(luò)協(xié)議棧的深入分析,WE6模擬器選擇了主要在數(shù)據(jù)鏈路層添加和修改Windows的代碼并且在網(wǎng)絡(luò)層進(jìn)行少量的配合代碼的方式來實現(xiàn)。WE6的系統(tǒng)結(jié)構(gòu)如圖1所示。選擇在數(shù)據(jù)鏈路層實現(xiàn)模擬器的主要原因是由于IPv6和IPv4的協(xié)議棧在網(wǎng)絡(luò)層實現(xiàn)上有較大的差異,但是在數(shù)據(jù)鏈路層實現(xiàn)基本相同。為了實現(xiàn)對IPv6和IPv4的支持,在網(wǎng)絡(luò)層使用了不同的代碼。這樣的分層結(jié)構(gòu)使WE6網(wǎng)絡(luò)模擬器可以高效、準(zhǔn)確地工作。
Windows操作系統(tǒng)提供了用戶和內(nèi)核模式。WE6模擬器由兩個主要模塊組成,如圖2所示。a)用戶界面,工作于用戶模式。模擬器的用戶可以通過此界面控制需要調(diào)整的網(wǎng)絡(luò)參數(shù)來改變網(wǎng)絡(luò)環(huán)境。b)內(nèi)核模塊,工作于內(nèi)核模式。由于其嵌入到Windows的內(nèi)核中,不會受到進(jìn)程切換和Windows工作模式的影響。內(nèi)核模塊提供了模擬器的主要模擬功能。它截獲收到的數(shù)據(jù)包,然后對其根據(jù)用戶的設(shè)置改變其傳輸?shù)难舆t、傳輸使用的帶寬和產(chǎn)生需要的丟包環(huán)境。
WE6的基本工作流程如下:每一個輸入的數(shù)據(jù)包都會被監(jiān)測,包匹配模塊根據(jù)用戶設(shè)置的規(guī)則決定是否對數(shù)據(jù)包進(jìn)行處理,以及進(jìn)行哪種處理。為了區(qū)分不同的流,本文使用了業(yè)務(wù)表,將IP 地址(源和目的)、協(xié)議類型、端口號(源和目的)組合起來構(gòu)成該表的條目。考慮到ICMP協(xié)議的特殊性,對ICMP與ICMPv6協(xié)議的業(yè)務(wù)流使用端口域存儲類型和代碼數(shù)據(jù)。為了進(jìn)一步提高對數(shù)據(jù)包匹配和處理的實時性,WE6模擬器設(shè)計和實現(xiàn)了包分類器,通過此分類器對包進(jìn)行實時匹配。
1.3 模擬功能實現(xiàn)策略
1.3.1 丟包控制
很多網(wǎng)絡(luò)協(xié)議和設(shè)備都需要驗證和測試在一定數(shù)據(jù)包丟失條件下的性能和可靠性。同時為了保證測試的可重復(fù)性,還希望此丟包場景是可準(zhǔn)確再現(xiàn)的。丟包控制實現(xiàn)了此功能。當(dāng)用戶設(shè)置的某個業(yè)務(wù)流期望的丟包率大于0時,模擬器根據(jù)期望的丟包率產(chǎn)生隨機數(shù),并且根據(jù)用戶選擇的丟包策略,如drop tail、 隨機丟包等,丟棄特定的包。
1.3.2 傳輸延遲控制
延遲是影響網(wǎng)絡(luò)協(xié)議工作的另一個主要性能參數(shù)。在一般的網(wǎng)絡(luò)中,數(shù)據(jù)包的傳輸延遲由鏈路帶寬和業(yè)務(wù)流量等確定。但是用戶為了對協(xié)議進(jìn)行測試,往往需要得到大延遲,或者延遲抖動情況下的行為。例如,網(wǎng)絡(luò)流媒體播放器需要實驗在大延遲,而且延遲抖動的環(huán)境下是否可以流暢工作。模擬器通過人工增加用戶可調(diào)節(jié)的延遲來實現(xiàn)用戶的需求。
具體實現(xiàn)的方法是,收到數(shù)據(jù)包后,將其按照需要在緩沖區(qū)中存放一定時間。其中的關(guān)鍵技術(shù)是實現(xiàn)高精度的內(nèi)核定時器。在定時器的支持下,將需要延遲發(fā)送的數(shù)據(jù)包組成timer-list。按照其定時器的失效時間升序排列該鏈表中的項。此鏈表是動態(tài)維護(hù)的,隨時可能有新的項加入,也會有表項因為定時器超時被刪除。模擬器僅需要對表頭進(jìn)行檢查,這使得其處理效率提高,實現(xiàn)實處理行。在具體實現(xiàn)時,僅使用了一個高精度定時器進(jìn)行掃描,大大降低了對CPU和內(nèi)存的消耗。為了保證高精度定時器的時間精度,將其單獨作為一個線程(主線程)。模擬器的其他功能模塊構(gòu)成另外一個線程。當(dāng)模擬器運行時,主線程負(fù)責(zé)對數(shù)據(jù)包的處理;定時器線程實現(xiàn)高精度的定時;定時器線程一旦掃描到超時的數(shù)據(jù)包就立刻將其傳遞給主線程進(jìn)行相關(guān)處理。
1.3.3 傳輸延遲抖動(delay jitter)控制
數(shù)據(jù)包在網(wǎng)絡(luò)中傳輸時會有不同的傳輸延遲,不同的延遲形成了延遲抖動。延遲抖動對于網(wǎng)絡(luò)協(xié)議的性能、設(shè)置協(xié)議工作的正確性有很大的影響。WE6網(wǎng)絡(luò)模擬器提供了對延遲抖動的控制和模擬。為了實現(xiàn)對抖動的模擬和控制,使用了文獻(xiàn)[7]中的多結(jié)構(gòu)延遲抖動模型。此模型采用了不相關(guān)采樣的概率分布函數(shù)來生成。其過程如圖3所示。
其中,拉普拉斯變換用來生成用戶指定的包傳輸延遲抖動的均值和標(biāo)準(zhǔn)差。為了與實際的抖動特性更加接近,進(jìn)一步使用下面的公式變換。
F(X)=1/2 e|X-α|/β,X≤α(1)
F(X)=1-1/2 e|X-α|/β,X≤α(2)
α=mean,β=var/2
其中,高斯白噪聲用來得到大時間尺度的延遲。
2 模擬器實現(xiàn)關(guān)鍵技術(shù)
2.1 Windows 下的原型
為了實現(xiàn)對數(shù)據(jù)包的處理,模擬器需要控制所有穿越的數(shù)據(jù)。Windows操作系統(tǒng)的數(shù)據(jù)鏈路層功能是在網(wǎng)絡(luò)驅(qū)動程序中實現(xiàn)的。因此,WE6模擬器需要修改和擴(kuò)展Windows的網(wǎng)絡(luò)驅(qū)動程序。將模擬器作為Windows XP (sp2)的設(shè)備驅(qū)動程序的擴(kuò)展模塊。Windows XP平臺下的實現(xiàn)框架如圖4所示。
WE6模擬器采用了NDIS (network driver interface specification)規(guī)范,并使用WDM (Windows driver model) 編程模型。修改后的網(wǎng)絡(luò)驅(qū)動程序?qū)⒉煌木W(wǎng)卡看做不相互獨立的關(guān)系。數(shù)據(jù)包可以在用戶配置的控制下在卡間流動。通過NDIS技術(shù),模擬器實現(xiàn)了對數(shù)據(jù)包的修改、延遲和丟包等操作。
當(dāng)模擬器初始化時,主線程綁定到所有的網(wǎng)卡或設(shè)備句柄。一旦完成初始化,就啟動定時器線程。當(dāng)有數(shù)據(jù)包到達(dá)時,主線程對其進(jìn)行分類處理。另一方面,WE6模擬器雖然作為網(wǎng)絡(luò)驅(qū)動的模塊加入到Windows內(nèi)核中,但是沒有修改原來驅(qū)動程序的功能模塊,保證了Windows的網(wǎng)絡(luò)功能不受影響。
2.2 高精度定時器實現(xiàn)
采用Windows提供的kernel dispatcher 對象來實現(xiàn)高精度定時器。在任意時刻,對象處于signaled 或 not-signaled 狀態(tài)之一。通過使用API函數(shù)KeWaitForSingleObject(), 可以阻塞某個線程,或者讓某個線程等待被signaled。在Windows操作系統(tǒng)的核心態(tài),并且使用非分頁內(nèi)存時,等待的時間單位是100 ns(即0.1 μs)。而直接使用Windows提供的默認(rèn)定時器的定時精度是10 ms [8]。在Windows系統(tǒng)上對這類定時器的實際測量表明,當(dāng)系統(tǒng)的負(fù)荷高時,定時器的精度很難保證。WE6模擬器使用kernel dispatcher對象方式實現(xiàn)的高精度定時器可以通過提高定時器線程的優(yōu)先級來解決這些問題。
模擬器將kernel dispatcher 對象與截獲的數(shù)據(jù)包進(jìn)行關(guān)聯(lián),并且將對象的失效時刻也關(guān)聯(lián)上。這樣一來,僅需要對對象是否超時失效進(jìn)行檢查,就可以實現(xiàn)精確的定時。
3 模擬器實驗驗證
3.1 實驗環(huán)境
為了驗證模擬器的功能,特別是其IPv6功能,在天津大學(xué)的IPv6網(wǎng)絡(luò)中進(jìn)行了實驗。天津大學(xué)是Cernet的地區(qū)主節(jié)點,是Cernet Ⅱ純IPv6網(wǎng)絡(luò)的節(jié)點。實驗中,源節(jié)點和目的節(jié)點間通過WE6模擬器連接,使用的是100 Mbps的鏈路。模擬器軟件安裝在一臺Dell PC上 (Dimension3000),配置了兩個以太網(wǎng)卡,標(biāo)記為D3000。目的節(jié)點是一臺Dell 筆記本電腦 (INSPIRON2200), 標(biāo)記為 I2200。源節(jié)點是一臺ASUS 筆記本電腦 (U5 series),標(biāo)記為 U5。邏輯連接如圖5所示。
3.2 模擬器實驗
為了測試對傳輸延遲的改變能力,對傳輸延遲實驗增加了延遲的范圍為0~100 ms。在源節(jié)點發(fā)送數(shù)據(jù)至目的節(jié)點。其中,設(shè)置延遲為50 ms時的屏幕截圖如圖6。可以看出模擬器的誤差非常小,其平均延遲誤差大約為3.8%。為了驗證模擬器的帶寬控制功能,使用了Iperf 工具來測量帶寬。實驗使用的是 The version of Iperf 1.7.0,支持IPv6。實驗中設(shè)置的帶寬測試范圍是0 Kbps~1 Mbps。圖7 給出了60 s的平均帶寬,平均誤差為6%。
測試數(shù)據(jù)包丟失率的控制同樣使用了Iperf工具。圖8給出了設(shè)置期望丟包率為10%情況下實際測量的截圖。實驗數(shù)據(jù)表明,丟包率的相對誤差不超過3.4%。
WE6網(wǎng)絡(luò)模擬器的另外一個重要功能是對傳輸延遲抖動的控制,實驗中采用Winpcap 4.0來進(jìn)行截包和測量。將Winpcap得到的數(shù)據(jù)包的到達(dá)時刻進(jìn)行處理,得到間隔時間,然后使用MATLAB繪制了延遲的變化圖。圖9中期望的延遲是50 ms,期望的延遲標(biāo)準(zhǔn)差為4 ms。
4 結(jié)束語
網(wǎng)絡(luò)模擬器對于協(xié)議的設(shè)計和驗證、網(wǎng)絡(luò)設(shè)備的應(yīng)用與調(diào)試具有重要作用。功能全面、用戶友好的模擬器可加快上述過程,并提供一個用戶可控、場景可再現(xiàn)的網(wǎng)絡(luò)環(huán)境。本文設(shè)計了Windows平臺的IPv6網(wǎng)絡(luò)模擬器:WE6。在NDIS框架基礎(chǔ)上,設(shè)計和實現(xiàn)了通過對網(wǎng)絡(luò)驅(qū)動程序擴(kuò)展來完成對數(shù)據(jù)包的處理的能力。通過使用Windows的特殊對象方式獲得了高精度的定時器,解決了數(shù)據(jù)包的定時問題。在此基礎(chǔ)上,針對模擬器的主要功能:傳輸延遲、帶寬控制、傳輸丟包率、延遲抖動等(圖9)進(jìn)行了設(shè)計和實現(xiàn)。實驗表明其主要功能工作良好,實現(xiàn)了實時、高效的網(wǎng)絡(luò)模擬功能。大量實驗表明,該模擬器的精度較高,適合IPv6環(huán)境。
參考文獻(xiàn):
[1]JIN Zhi-gang,WU Xiu-li,SHU Yan-tai. Designing and implementing of a wireless network emulator[C]//Proc of IEEE Canadian Confe-rence on Electrical and Computer Engineering.Ontario:IEEE Publication,2004:341-344.
[2]NIST Internetworking Technology Group.NIST net network emulation package[EB/OL]. http://snad.ncsl.nist.gov/itg/nistnet .
[3]RIZZO L.Dummynet:a simple approach to the evaluation of network protocols [J].ACM Computer Communication Review, 1997,27(1):31-41.
[4]KAYSSI A,El-HAJ-MAHMOUD A. EmuNET: a real-time network emulator[C]//Proc of ACM Symposium on Applied Computing.New York: ACM Publication,2004:357-362.
[5]ALLMAN M, CALDWELL A, OSTEMANN S. ONE:the Ohio network emulator,TechReport TR-19972[R].[S.l.]:Ohio University,1997.
[6]PacketStorm Communication Inc.White papers of PacketStorm[EB/OL].http://www.packetstorm.com .
[7]DANIEL E, CHRISTOPHER W, TEAGUE K.An inter-arrival delay jitter model using multi-structure network delay characteristics for packet networks[C]//Conference Record of the Asilomar Conference on Signals, Systems and Computers.Asilomar Ground: IEEE Publication,2003:1738-1742.
[8]DDK document[EB/OL]. http://msdn2. microsoft.com /en-us/library/aa973517.aspx.
注:本文中所涉及到的圖表、注解、公式等內(nèi)容請以PDF格式閱讀原文