無(wú)線(xiàn)傳感器網(wǎng)絡(luò)是當(dāng)前國(guó)際上備受關(guān)注的、涉及多學(xué)科高度交叉,、知識(shí)高度集成的前沿?zé)狳c(diǎn)研究領(lǐng)域,。未來(lái)的無(wú)線(xiàn)傳感器網(wǎng)絡(luò)將向海、陸,、空,、天立體化網(wǎng)絡(luò)系統(tǒng)的方向發(fā)展,最終將成為人類(lèi)生產(chǎn)和生活不可分割的一部分,。無(wú)線(xiàn)傳感器網(wǎng)絡(luò)無(wú)論是在國(guó)防,,還是在國(guó)民經(jīng)濟(jì)的各個(gè)領(lǐng)域均有著廣闊的應(yīng)用前景。對(duì)該技術(shù)的深入研究與推廣應(yīng)用將推動(dòng)我國(guó)信息化建設(shè)的進(jìn)程,,并極大地帶動(dòng)相關(guān)產(chǎn)業(yè)和學(xué)科的發(fā)展,。
在開(kāi)展的無(wú)線(xiàn)傳感器網(wǎng)絡(luò)的研究中,我們都力求圍繞網(wǎng)絡(luò)的各種關(guān)鍵性能對(duì)無(wú)線(xiàn)傳感器網(wǎng)絡(luò)的各種技術(shù)進(jìn)行改進(jìn),。然而受有限的資金和網(wǎng)絡(luò)條件的限制,,在實(shí)驗(yàn)室構(gòu)建大規(guī)模的實(shí)驗(yàn)平臺(tái)比較昂貴。因此,充分利用現(xiàn)有資源,,構(gòu)建虛擬的仿真環(huán)境是非常有意義的,。
本文在無(wú)線(xiàn)傳感器網(wǎng)絡(luò)特點(diǎn)和協(xié)議棧的研究基礎(chǔ)上,利用網(wǎng)絡(luò)仿真軟件NS2進(jìn)行了研究和二次開(kāi)發(fā),,構(gòu)建了一個(gè)基于各種無(wú)線(xiàn)傳感器網(wǎng)絡(luò)關(guān)鍵性能的仿真界面,。使得用戶(hù)可以通過(guò)仿真界面來(lái)自主配置網(wǎng)絡(luò)元素,搭建網(wǎng)絡(luò),,運(yùn)行并直觀(guān)地顯示各種關(guān)鍵性能,,以對(duì)其研究起到一定的指導(dǎo)作用。
1 無(wú)線(xiàn)傳感器網(wǎng)絡(luò)體系結(jié)構(gòu)及NS2仿真機(jī)制
1.1 無(wú)線(xiàn)傳感器網(wǎng)絡(luò)體系結(jié)構(gòu)
網(wǎng)絡(luò)體系結(jié)構(gòu)是網(wǎng)絡(luò)的協(xié)議分層以及網(wǎng)絡(luò)協(xié)議的集合,,是對(duì)網(wǎng)絡(luò)及其部件所應(yīng)完成功能的定義和描述,。對(duì)于無(wú)線(xiàn)傳感器網(wǎng)絡(luò)來(lái)說(shuō),圖l是傳感器節(jié)點(diǎn)使用的最典型的網(wǎng)絡(luò)協(xié)議體系結(jié)構(gòu),,包括物理層,、數(shù)據(jù)鏈路層、網(wǎng)絡(luò)層和應(yīng)用層,,與互聯(lián)網(wǎng)協(xié)議棧的五層協(xié)議相對(duì)應(yīng),。此外,還包括網(wǎng)絡(luò)管理模塊,。這些管理平臺(tái)使得傳感器節(jié)點(diǎn)能夠按照能源高效的方式協(xié)同工作,,在節(jié)點(diǎn)移動(dòng)的傳感器網(wǎng)絡(luò)中轉(zhuǎn)發(fā)數(shù)據(jù),并支持多任務(wù)和資源共享,。該模型既參考了現(xiàn)有通用網(wǎng)絡(luò)的TCP/IP和0sI模型的架構(gòu),,同時(shí)又包含了傳感器網(wǎng)絡(luò)特有的電源管理、移動(dòng)管理及任務(wù)管理,。應(yīng)用層為不同的應(yīng)用提供了一個(gè)相對(duì)統(tǒng)一的高層接口,;如果需要,傳輸層可為傳感器網(wǎng)絡(luò)保持?jǐn)?shù)據(jù)流或保證與Internet連接,;網(wǎng)絡(luò)層主要關(guān)心數(shù)據(jù)的路由,;數(shù)據(jù)鏈路層協(xié)調(diào)無(wú)線(xiàn)媒質(zhì)的訪(fǎng)問(wèn),盡量減少相鄰節(jié)點(diǎn)廣播時(shí)的沖突,;物理層為系統(tǒng)提供一個(gè)簡(jiǎn)單,、穩(wěn)定的調(diào)制、傳輸和接收系統(tǒng),。除此而外,,電源、移動(dòng)和任務(wù)管理負(fù)責(zé)傳感節(jié)點(diǎn)能量,、移動(dòng)和任務(wù)分配的監(jiān)測(cè),,幫助傳感節(jié)點(diǎn)協(xié)調(diào)感測(cè)任務(wù),,盡量減少整個(gè)系統(tǒng)的功耗。
1.2 NS2的仿真機(jī)制
NS是美國(guó)加州Lawrence Berkeley國(guó)家實(shí)驗(yàn)室于1989年開(kāi)始開(kāi)發(fā)的軟件,。NS是一種可擴(kuò)展,、以配置和可編程的事件驅(qū)動(dòng)的仿真工具,可以提供有線(xiàn)網(wǎng)絡(luò),、無(wú)線(xiàn)網(wǎng)絡(luò)中鏈路層及其上層,,精確到數(shù)據(jù)包的一系列行為的仿真。最值得一提的是,,NS中的許多協(xié)議代碼都和真實(shí)網(wǎng)絡(luò)中的應(yīng)用代碼十分接近,,其真實(shí)性和可靠性高居世界仿真軟件的前列。
NS底層的仿真引擎主要由C++編寫(xiě),,同時(shí)利用0TCL語(yǔ)言作為仿真命令和配置的接口語(yǔ)言,,網(wǎng)絡(luò)仿真的過(guò)程由一段OTCL的腳本來(lái)描述,這段腳本通過(guò)調(diào)用引擎中各類(lèi)屬性,、方法,,定義網(wǎng)絡(luò)的拓?fù)洌渲迷垂?jié)點(diǎn),、目的節(jié)點(diǎn),,建立連接,產(chǎn)生所有事件的時(shí)間表,,運(yùn)行并跟蹤仿真結(jié)果,,還可以對(duì)結(jié)果進(jìn)行相應(yīng)的統(tǒng)計(jì)處理或制圖。
通常情況下,,NS仿真器的工作從創(chuàng)建仿真器類(lèi)(simulator)的實(shí)例開(kāi)始,,仿真器調(diào)用各種方法生成節(jié)點(diǎn),進(jìn)而構(gòu)造拓?fù)鋱D,,對(duì)仿真的各個(gè)對(duì)象進(jìn)行配置,,定義事件,然后根據(jù)定義的事件,,模擬整個(gè)網(wǎng)絡(luò)活動(dòng)的過(guò)程。
仿真器封裝了多個(gè)功能模塊:
(1)事件調(diào)度器:由于NS是基于事件驅(qū)動(dòng)的,,調(diào)度器也成為NS的調(diào)度中心,,可以跟蹤仿真時(shí)間,,調(diào)度當(dāng)前事件鏈中的仿真時(shí)間并交由產(chǎn)生該事件的對(duì)象處理,。
(2)節(jié)點(diǎn):是一個(gè)復(fù)合組件,,在NS中可以表示端節(jié)點(diǎn)和路由器,,節(jié)點(diǎn)為每個(gè)連接到他的節(jié)點(diǎn)分配不同的端口,用于模擬實(shí)際網(wǎng)絡(luò)中的端口,。
(3)鏈路:有多個(gè)組件復(fù)合而成,,用來(lái)連接網(wǎng)絡(luò)節(jié)點(diǎn)。
(4)代理:代理類(lèi)包含源及目的節(jié)點(diǎn)地址,,數(shù)據(jù)包類(lèi)型,、大小、優(yōu)先級(jí)等狀態(tài)變量,,每個(gè)代理鏈接到一個(gè)網(wǎng)絡(luò)節(jié)點(diǎn)上,,通常連接到端節(jié)點(diǎn),由該節(jié)點(diǎn)給他分配端口號(hào),。
(5)包:由頭部和數(shù)據(jù)兩部分組成,。
NS采取對(duì)真實(shí)網(wǎng)絡(luò)元素進(jìn)行抽象,保留其基本特征,,并運(yùn)用等效描述的方法來(lái)建立網(wǎng)絡(luò)仿真模型,。他們由大量的仿真組件所構(gòu)成,用于實(shí)現(xiàn)對(duì)真實(shí)網(wǎng)絡(luò)的抽象和模擬,。
2 仿真平臺(tái)設(shè)計(jì)
2.1 系統(tǒng)整體結(jié)構(gòu)
NS2的主代碼主要采用Tcl和C++兩種語(yǔ)言進(jìn)行編寫(xiě),。C++的程序運(yùn)行時(shí)間很短,轉(zhuǎn)換時(shí)間很長(zhǎng),,適合具體協(xié)議的實(shí)現(xiàn),,而Tcl運(yùn)行較慢但轉(zhuǎn)換很快,,正好用來(lái)仿真的配置,。Tcl提供了一個(gè)強(qiáng)有力的平臺(tái),可以生成面向多種平臺(tái)的應(yīng)用程序,、協(xié)議、驅(qū)動(dòng)程序等等,。他與Tk(too1kit)協(xié)作,可生產(chǎn)GUI應(yīng)用程序,。Tk是基于Tcl的圖形程序開(kāi)發(fā)工具箱,是Tcl的重要擴(kuò)展部分,。利用Tcl/Tk進(jìn)行界面編程速度快,,且界面編程工作可以從應(yīng)用程序的其余部分分離開(kāi)來(lái),,開(kāi)發(fā)人員可以先集中精力實(shí)現(xiàn)程序的核心部分,然后逐步建立用戶(hù)界面,。
本文主要就是采用Tk工具包來(lái)作出友好的無(wú)線(xiàn)傳感器網(wǎng)絡(luò)用戶(hù)操作界面,,將所要運(yùn)行的ns代碼嵌入其中,通過(guò)Nam動(dòng)畫(huà)演示來(lái)展現(xiàn)網(wǎng)絡(luò)運(yùn)行的過(guò)程,,用Xgraph靜態(tài)圖表來(lái)分析網(wǎng)絡(luò)的各種關(guān)鍵性能,。通過(guò)Tcl腳本來(lái)描述在用戶(hù)界面上所定義的網(wǎng)絡(luò)拓?fù)洹?chǎng)景參數(shù)以及網(wǎng)絡(luò)協(xié)議等網(wǎng)絡(luò)場(chǎng)景信息,。
系統(tǒng)體系結(jié)構(gòu)如圖2所示,。系統(tǒng)主要有網(wǎng)絡(luò)場(chǎng)景模塊和性能分析模塊組成,網(wǎng)絡(luò)場(chǎng)景模塊主要包括環(huán)境參數(shù)設(shè)定,、拓?fù)渖梢约熬W(wǎng)絡(luò)協(xié)議添加的實(shí)現(xiàn),。當(dāng)設(shè)定好基站以及普通節(jié)點(diǎn)拓?fù)浞秶螅S機(jī)生成一個(gè)網(wǎng)絡(luò)節(jié)點(diǎn)拓?fù)湮募?,結(jié)合其余的環(huán)境參數(shù)和網(wǎng)絡(luò)協(xié)議,,便可完成網(wǎng)絡(luò)環(huán)境的初始化。
在NS2仿真器中,,模擬的配置被作為一種程序設(shè)計(jì)而不是一種靜態(tài)的配置,。一次模擬的場(chǎng)景為模擬的運(yùn)行定義了一個(gè)輸入配置,NS采用Tcl腳本來(lái)描述用戶(hù)提交的網(wǎng)絡(luò)模擬場(chǎng)景,。
當(dāng)提交網(wǎng)絡(luò)模擬場(chǎng)景后,,根據(jù)參數(shù)便會(huì)生成Tcl模擬腳本并調(diào)用NS仿真器進(jìn)行模擬運(yùn)行網(wǎng)絡(luò),模擬結(jié)束后性能分析模塊即被激活,,性能分析模塊主要包括Nam動(dòng)畫(huà)演示和Xgraph靜態(tài)性能分析的實(shí)現(xiàn),。其中靜態(tài)分析實(shí)現(xiàn)了網(wǎng)絡(luò)能量、延時(shí),、丟包以及吞吐量等關(guān)鍵性能的仿真,。
2.2 系統(tǒng)具體實(shí)現(xiàn)
系統(tǒng)具體的用戶(hù)操作界面如圖3所示:
在網(wǎng)絡(luò)場(chǎng)景模塊中,場(chǎng)景參數(shù)的設(shè)定僅由用戶(hù)界面輸入便可完成,,提交參數(shù)時(shí)可自動(dòng)添加至后臺(tái)運(yùn)行的Tcl腳本中并調(diào)用NS仿真器進(jìn)行運(yùn)行,,然而如若添加自定義網(wǎng)絡(luò)協(xié)議,則需進(jìn)行相應(yīng)的NS二次開(kāi)發(fā),,先開(kāi)發(fā)出想添加的網(wǎng)絡(luò)協(xié)議,,并添加至后臺(tái)運(yùn)行的Tcl腳本中,然后才能添至用戶(hù)界面中,。
在性能分析模塊中,網(wǎng)絡(luò)動(dòng)畫(huà)演示主要是通過(guò)調(diào)用Nam可視化工具來(lái)實(shí)現(xiàn),,網(wǎng)絡(luò)主要關(guān)鍵性能的靜態(tài)顯示則是通過(guò)gawk語(yǔ)言對(duì)網(wǎng)絡(luò)運(yùn)行的跟蹤文件進(jìn)行讀取,、處理,,最后通過(guò)Xgraph圖表化得到的。
3 仿真性能分析
我們以經(jīng)典層次路由協(xié)議leach協(xié)議的運(yùn)行為例,,來(lái)觀(guān)察系統(tǒng)用戶(hù)操作界面的使用,。
在用戶(hù)界面中輸入需要的環(huán)境參數(shù),在MAC協(xié)議下拉選項(xiàng)中選取Mac/Sensor,,在routing協(xié)議中選取leach,,然后確認(rèn)輸入點(diǎn)擊控件0K?進(jìn)行提交網(wǎng)絡(luò)模擬場(chǎng)景設(shè)置。然后點(diǎn)擊控件Run調(diào)用Ns仿真器進(jìn)行運(yùn)行模擬網(wǎng)絡(luò)(其中Clear控件用來(lái)清楚輸入,,Reset控件用來(lái)恢復(fù)默認(rèn)設(shè)置),。待模擬完成后,性能分析模塊被激活,,如圖4所示,。
此時(shí),我們便可觀(guān)察網(wǎng)絡(luò)的各種性能分析,,控件dynamic run可調(diào)甩Nam根據(jù)模擬返回結(jié)果NamTrace文件來(lái)動(dòng)態(tài)演示網(wǎng)絡(luò)的模擬過(guò)程,,Nam的動(dòng)態(tài)演示如圖5所示。在energy一欄中,,有三個(gè)控件:node alived,、received data和energy consume,分別表示剩余節(jié)點(diǎn)數(shù)目,、基站接收的數(shù)據(jù)量和網(wǎng)絡(luò)消耗能量,。如圖6、7,、8所示,。
由圖6、7,、8可以看出,,網(wǎng)絡(luò)總共運(yùn)行時(shí)間為505s,第一個(gè)節(jié)點(diǎn)在330s左右死亡,,到505s左右網(wǎng)絡(luò)還剩余4個(gè)節(jié)點(diǎn),,基站接收到的數(shù)據(jù)量隨著時(shí)間大致呈線(xiàn)性上升,而網(wǎng)絡(luò)消耗的能量卻隨著節(jié)點(diǎn)的死亡呈現(xiàn)指數(shù)上升趨勢(shì),。觀(guān)察一下網(wǎng)絡(luò)的時(shí)延狀況,,在delay一欄中,有三個(gè)控件:delay/packet,、delay/time和jitter,,分別表示每個(gè)包的延時(shí),單位時(shí)間內(nèi)的延時(shí)和延時(shí)抖動(dòng),,下面僅以delay/time和jitter為例,,如圖9,、lO所示:
從圖9、10中可以看出,,網(wǎng)絡(luò)的延時(shí)存在一定的周期性,,這與1each協(xié)議的“回合”過(guò)程是有一定密切關(guān)系的,而且從圖10中也可以看出,,網(wǎng)絡(luò)整體慢慢趨于穩(wěn)定狀態(tài),。
下面看一下網(wǎng)絡(luò)的丟包和吞吐量。這里的丟包率為了防止網(wǎng)絡(luò)中存在一對(duì)多的傳輸情況(排除了廣播),,定義為:丟包率=丟棄的數(shù)據(jù)包/(接收的數(shù)據(jù)包+丟棄的數(shù)據(jù)包),。在drop一欄中,有兩個(gè)控件:drop ratio和get ratio,,這是兩個(gè)對(duì)立的概念,,一個(gè)表示丟包率,一個(gè)表示接收率(丟包率+接收率=1),,僅以接收率為例,,如圖11所示,,網(wǎng)絡(luò)的吞吐量用單位時(shí)間內(nèi)網(wǎng)絡(luò)發(fā)送和接收的數(shù)據(jù)量表示,,如圖12所示。
由圖11,,在leach協(xié)議中,,節(jié)點(diǎn)在成簇過(guò)程中即為簇內(nèi)每個(gè)節(jié)點(diǎn)按照TDMA方法安排了傳送數(shù)據(jù)的時(shí)間片,,這一點(diǎn)保證了節(jié)點(diǎn)傳輸數(shù)據(jù)時(shí)不會(huì)發(fā)生相互碰撞,也進(jìn)一步保證了數(shù)據(jù)的接收率,,圖12,,網(wǎng)絡(luò)的吞吐量也與傳輸延時(shí)保持一致,與成簇周期存在一定的周期對(duì)應(yīng)關(guān)系,。
4 結(jié)束語(yǔ)
由于NS2的安裝和使用都比較復(fù)雜,,針對(duì)于此,本文搭建了一個(gè)用戶(hù)仿真平臺(tái),,NS2仿真器對(duì)于用戶(hù)是透明的,,面對(duì)用戶(hù)的只是設(shè)計(jì)平臺(tái)上的參數(shù)和協(xié)議的選定,用戶(hù)即可以利用NS2仿真器所提供的強(qiáng)大功能來(lái)進(jìn)行那個(gè)網(wǎng)絡(luò)模擬研究又可以省去搭建網(wǎng)絡(luò)的復(fù)雜過(guò)程。
本文提出的系統(tǒng)通過(guò)采用NS2作為后臺(tái)仿真器給用戶(hù)提供了強(qiáng)大的網(wǎng)絡(luò)仿真能力,,滿(mǎn)足了無(wú)線(xiàn)傳感器網(wǎng)絡(luò)的多種仿真要求,,同時(shí)由Tk軟件包所設(shè)計(jì)的仿真平臺(tái)也為不同網(wǎng)絡(luò)環(huán)境的重復(fù)性實(shí)驗(yàn)提供了種種便利,,具有良好的可控,、可視和可擴(kuò)充性。