王 健
(廣州大學(xué)華軟軟件學(xué)院 廣州 510990)
WSN是由大量的靜止或移動(dòng)的傳感器以自組織和多跳的方式構(gòu)成的無(wú)線網(wǎng)絡(luò),以協(xié)作地感知、采集、處理和傳輸網(wǎng)絡(luò)覆蓋地理區(qū)域內(nèi)被感知對(duì)象的信息,并最終把這些信息發(fā)送給網(wǎng)絡(luò)的所有者。無(wú)線傳感器網(wǎng)絡(luò)在救援救災(zāi)、環(huán)境檢測(cè)、醫(yī)療保健、智能家居、工業(yè)生產(chǎn)等多個(gè)領(lǐng)域有著廣泛的應(yīng)用前景,得到了學(xué)術(shù)界和工業(yè)界的廣泛關(guān)注。
仿真技術(shù)作為理論研究和實(shí)驗(yàn)研究之后的第三種認(rèn)識(shí)和改造世界的重要方法,已成為目前WSN研究的重要科學(xué)手段[4]。能夠根據(jù)應(yīng)用要求和評(píng)價(jià)指標(biāo)設(shè)計(jì)網(wǎng)絡(luò)模型,獲取在不同網(wǎng)絡(luò)參數(shù)和網(wǎng)絡(luò)協(xié)議下的運(yùn)行數(shù)據(jù),分析并驗(yàn)證網(wǎng)絡(luò)設(shè)計(jì)方案,非常適合WSN的研究[5]。一方面,由于WSN具有網(wǎng)絡(luò)規(guī)模大、設(shè)備型號(hào)各異、仿真耗時(shí)長(zhǎng)、節(jié)點(diǎn)采用分層結(jié)構(gòu)的特點(diǎn);另一方面,WSN發(fā)的展日新月異,新的協(xié)議算法層出不窮,并需要與其他系統(tǒng)協(xié)同工作才能完成預(yù)期目標(biāo)等特點(diǎn),對(duì)仿真技術(shù)提出了更高的要求[1]。在WSN仿真中常用的仿真平臺(tái)有OPNET、NS2、TinyOS、OMNeT++,鑒于OPNE擁有仿真速度快,內(nèi)存消耗少等特點(diǎn)[6],因此,本文使用OPENT對(duì)WSN進(jìn)行了建模和仿真,給出了仿真步驟及其仿真實(shí)現(xiàn)方法,驗(yàn)證了使用OPENT進(jìn)行WSN的有效性。
OPNET最早在1986年由麻省理工大學(xué)的兩個(gè)博士創(chuàng)建,于1987年實(shí)現(xiàn)商業(yè)化,企業(yè)界如Cisc,運(yùn)營(yíng)商如AT&T,均采用OPNET進(jìn)行各種模擬測(cè)試[7],特點(diǎn)是針對(duì)研究領(lǐng)域,提供了開(kāi)放的環(huán)境,為用戶使用豐富的模型庫(kù)的同時(shí),也提供了高度靈活的自定義建模方式,為通信協(xié)議和路由算法的研究提供了與真實(shí)網(wǎng)絡(luò)相同的環(huán)境,具有豐富的統(tǒng)計(jì)量收集和分析功能,可直接收集常用的各個(gè)網(wǎng)絡(luò)層次的性能統(tǒng)計(jì)參數(shù),能方便編制和輸出仿真報(bào)告[9]。
從協(xié)議間關(guān)系的角度來(lái)看,模型符合OSI標(biāo)準(zhǔn)的分層概念(業(yè)務(wù)層→TCP層→IP層→IP封裝層→ARP層→MAC層→物理層)[6],從網(wǎng)絡(luò)層次關(guān)系的角度來(lái)看,采用了靈活的三層建模機(jī)制如圖1所示,最低層為進(jìn)行模型(process),通過(guò)狀態(tài)機(jī)來(lái)技術(shù)協(xié)議;中間層為節(jié)點(diǎn)層模型(node),由相應(yīng)的協(xié)議模型構(gòu)成,反映設(shè)備的特性;最上層為網(wǎng)絡(luò)模型,通過(guò)結(jié)點(diǎn)模型來(lái)形成不同的網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)。三個(gè)層次的模型與實(shí)際的網(wǎng)絡(luò)拓?fù)洹⒂布O(shè)備、協(xié)議層完全對(duì)應(yīng),能全面地反映網(wǎng)絡(luò)的相關(guān)特性[12]。
圖1 OPNET三層建模機(jī)制
OPNET提供矢量統(tǒng)計(jì)量和標(biāo)題統(tǒng)計(jì)量,矢量統(tǒng)計(jì)量分為本地統(tǒng)計(jì)量和全局統(tǒng)計(jì)量,本地統(tǒng)計(jì)量只針對(duì)單個(gè)節(jié)點(diǎn),其結(jié)果只能反映單個(gè)節(jié)點(diǎn)的行為;全局統(tǒng)計(jì)量針對(duì)整個(gè)網(wǎng)絡(luò)模型,關(guān)注整個(gè)網(wǎng)絡(luò)的行為和性能,例如:延時(shí)、負(fù)載和性能。標(biāo)量統(tǒng)計(jì)量由用戶自定義完成,一般將仿真屬性設(shè)置為多個(gè)取值,然后運(yùn)行仿真序列,這樣可以針對(duì)每個(gè)參數(shù)設(shè)置產(chǎn)生一個(gè)仿真結(jié)果。
OPNET提供了方便的圖形化網(wǎng)絡(luò)域建模,但在進(jìn)行大規(guī)模WSN的建模時(shí),特別是幾千個(gè)節(jié)點(diǎn)時(shí),手工部署過(guò)于繁瑣,因此本文通過(guò)編輯EMA文件,使用程序隨機(jī)化部署的方式來(lái)生成網(wǎng)絡(luò)域,為了保證隨機(jī)的均勻性,采取了根據(jù)當(dāng)前節(jié)點(diǎn)的位置來(lái)隨機(jī)生成下一個(gè)節(jié)點(diǎn)的位置的方法,在生成節(jié)點(diǎn)坐標(biāo)的過(guò)程中,設(shè)定了節(jié)點(diǎn)最小距離的閾值,避免了各個(gè)節(jié)點(diǎn)的位置太近,最后生成了一個(gè)包含800個(gè)節(jié)點(diǎn)的網(wǎng)絡(luò)域模型(效果較好,基本沒(méi)有出現(xiàn)部分節(jié)點(diǎn)簇?fù)碓谝黄鸬那闆r,如圖2所示,定義362號(hào)節(jié)點(diǎn)為源節(jié)點(diǎn),396為目標(biāo)節(jié)點(diǎn),init為結(jié)果收集節(jié)點(diǎn),分別用圓圈標(biāo)記)。
圖2 網(wǎng)絡(luò)域模型
節(jié)點(diǎn)模型分為普通傳感器節(jié)點(diǎn)和結(jié)果收集節(jié)點(diǎn),普通傳感器節(jié)點(diǎn)模型分層如圖3所示。其中應(yīng)用層(sensor)定期產(chǎn)生數(shù)據(jù)包來(lái)模擬傳感器采集到的數(shù)據(jù);網(wǎng)絡(luò)層(network)接收應(yīng)用層數(shù)據(jù),按照給定的路由算法進(jìn)行發(fā)送,這一層普通節(jié)點(diǎn)模型設(shè)計(jì)的重點(diǎn),可以用來(lái)測(cè)試各種不同的路由算法;MAC初始化層是在OPNET提供的802.11標(biāo)準(zhǔn)模型上進(jìn)行修改,作為MAC層和網(wǎng)絡(luò)層中介;MAC層負(fù)責(zé)信道共享的處理。結(jié)果收集節(jié)點(diǎn)只有一個(gè)進(jìn)程,其他進(jìn)行在需要統(tǒng)計(jì)數(shù)據(jù)時(shí)給結(jié)果收集進(jìn)行發(fā)送中斷,節(jié)點(diǎn)收集進(jìn)行觸發(fā)相應(yīng)的狀態(tài)處理結(jié)果,并將運(yùn)行結(jié)果寫(xiě)到文件中。
圖3 普通結(jié)點(diǎn)模型
模型運(yùn)行時(shí)根據(jù)模型狀態(tài)流程可以分為三類(lèi)結(jié)點(diǎn),分別是源節(jié)點(diǎn)、目標(biāo)節(jié)點(diǎn)、中間節(jié)點(diǎn),對(duì)應(yīng)著數(shù)據(jù)的發(fā)送、轉(zhuǎn)發(fā)和接收這三個(gè)動(dòng)作,這一過(guò)程由普通節(jié)點(diǎn)根據(jù)相應(yīng)配置來(lái)實(shí)現(xiàn),因此進(jìn)程域建模主要工作就是普通節(jié)點(diǎn)的各個(gè)層的進(jìn)行建模。
應(yīng)用層進(jìn)程模型如圖4所示,Init初始化變量,源節(jié)點(diǎn)發(fā)送GEN_PKT中斷,Generate創(chuàng)建數(shù)據(jù)包并發(fā)送,然后發(fā)送自中斷,Sink接收網(wǎng)絡(luò)層發(fā)過(guò)來(lái)的數(shù)據(jù)包,結(jié)束后進(jìn)行Idle狀態(tài),Stop停止發(fā)送數(shù)據(jù);網(wǎng)絡(luò)進(jìn)程模型如圖5所示,如果是源節(jié)點(diǎn)狀態(tài),則發(fā)送數(shù)據(jù),并在Idle和NotifyAppSendData兩個(gè)狀態(tài)之間切換,如果是目標(biāo)節(jié)點(diǎn)狀態(tài),則接收數(shù)據(jù),在Idle和Sink兩個(gè)狀態(tài)之間切換,對(duì)于中間節(jié)點(diǎn),則轉(zhuǎn)發(fā)數(shù)據(jù),在Idle和ChkSeq、GPSR狀態(tài)之間切換。
圖4 應(yīng)用層進(jìn)程模型
圖5 網(wǎng)絡(luò)層模型
表1 網(wǎng)絡(luò)層信息統(tǒng)計(jì)
整個(gè)仿真模型采用一個(gè)結(jié)果收集節(jié)點(diǎn)來(lái)收集信息,如圖2中右上角所標(biāo)示的節(jié)點(diǎn),節(jié)點(diǎn)中只有一個(gè)全局進(jìn)程模型,其他節(jié)點(diǎn)通過(guò)對(duì)其發(fā)送中斷的形式來(lái)獲取統(tǒng)計(jì)數(shù)據(jù),結(jié)果收集節(jié)點(diǎn)進(jìn)程觸發(fā)狀態(tài)來(lái)進(jìn)行處理,然后將結(jié)果寫(xiě)入磁盤(pán)文件。以網(wǎng)絡(luò)層為例,參數(shù)的具體的計(jì)算依據(jù)如表1所示。
GPSR是一種基于地理位置信息的路由算法,采用貪婪算法來(lái)建立路由,當(dāng)源結(jié)點(diǎn)S向目標(biāo)節(jié)點(diǎn)D發(fā)送數(shù)據(jù)時(shí),它首先在自己的所有鄰居節(jié)點(diǎn)中選擇一個(gè)距節(jié)點(diǎn)D最近的節(jié)點(diǎn)作為數(shù)據(jù)分組的下一跳,然后將數(shù)據(jù)傳送給它[14]。在轉(zhuǎn)發(fā)過(guò)程中,每個(gè)轉(zhuǎn)發(fā)節(jié)點(diǎn)都知道相鄰節(jié)點(diǎn)的位置,并一直重復(fù)上述過(guò)程,直到數(shù)據(jù)分組到達(dá)目的節(jié)點(diǎn)D或某個(gè)最佳主機(jī)。圖6給出了貪婪轉(zhuǎn)發(fā)選取下一跳節(jié)點(diǎn)的示例,當(dāng)節(jié)點(diǎn)m接收到一個(gè)目標(biāo)節(jié)點(diǎn)為D的數(shù)據(jù)包時(shí),圖中陰影的圓表示節(jié)點(diǎn)m的信息覆蓋范圍,虛線的弧線是以n和D之間距離為半徑的圓弧,從圖中可知節(jié)點(diǎn)節(jié)點(diǎn)m是n覆蓋范圍內(nèi)最接近D的,所以n是m所選擇的下一跳。
圖6 GPSR下一跳選擇示例
設(shè)定仿真時(shí)間為120s,設(shè)定源節(jié)點(diǎn)2與目標(biāo)節(jié)點(diǎn)436的能量為無(wú)限,其他普通結(jié)點(diǎn)的能量受限,數(shù)據(jù)發(fā)送的路徑如圖7所示,因?yàn)槭腔谧疃搪窂降穆酚?,所以每次仿真的路由都是同一個(gè)路徑。
圖7 GPSR路由
OPNET是一個(gè)優(yōu)秀的可視化離散事件仿真軟件。本文在分析WSN路由協(xié)議的同時(shí),借助它對(duì)GPSR協(xié)議進(jìn)行了仿真。在仿真中的性能表現(xiàn)非常出色,其自身特點(diǎn)使得它完全能夠滿足無(wú)線傳感器網(wǎng)絡(luò)的需求。通過(guò)OPENT的仿真將WSN路由協(xié)議通過(guò)動(dòng)畫(huà)形象化地展示,有助于相關(guān)研究人員和初學(xué)無(wú)線傳感器仿真的研究人員更容易快捷地分析、掌握和研究無(wú)線傳感器網(wǎng)絡(luò)。