韓多亮杜秀娟柳秀秀王麗娟張智學(xué)
(1.青海師范大學(xué)計(jì)算機(jī)學(xué)院,青海省物聯(lián)網(wǎng)重點(diǎn)實(shí)驗(yàn)室,青海 西寧 810008;2.藏語(yǔ)智能信息處理及應(yīng)用國(guó)家重點(diǎn)實(shí)驗(yàn)室,青海 西寧 810008;3.高原科學(xué)與可持續(xù)發(fā)展研究院,青海 西寧 810008)
水聲網(wǎng)絡(luò)(underwater acoustic networks,UANs)作為人類研究海洋等水下環(huán)境的主要手段,成為了各高校和科研院所的研究熱點(diǎn)[1-5]。 UANs 應(yīng)用的多樣性包括環(huán)境監(jiān)測(cè)、污染控制、自然災(zāi)害的預(yù)測(cè)和反應(yīng)、生態(tài)系統(tǒng)分析、防御應(yīng)用監(jiān)測(cè)等。 目前,這些應(yīng)用大多通過(guò)架設(shè)少量電纜或光纜提供網(wǎng)絡(luò)基礎(chǔ)設(shè)施服務(wù)并采用單跳傳輸?shù)臒o(wú)線通信技術(shù)。 水下鋪設(shè)電/光纜成本高昂,單跳無(wú)線傳輸難以提供靈活快捷部署和大范圍監(jiān)測(cè),但是,UANs 能夠?qū)崿F(xiàn)在水下快速、大范圍部署的自組多跳網(wǎng)絡(luò)應(yīng)用。 此外,UANs固有的長(zhǎng)傳播延遲、低帶寬、通信能耗大、多徑效應(yīng)以及時(shí)空變化等特性給UANs 路由協(xié)議的設(shè)計(jì)帶來(lái)了很大的挑戰(zhàn),UANs 路由受鏈路變化的影響很大,比陸地?zé)o線電信號(hào)鏈路的變化更不可預(yù)測(cè)和管理[6-9]。 設(shè)計(jì)可靠的UANs 路由機(jī)制至關(guān)重要,基于連通的UANs 節(jié)點(diǎn)路由分層方案是UANs 可靠路由設(shè)計(jì)的關(guān)鍵,因此,本文提出了基于連通的節(jié)點(diǎn)路由分層方案。
UANs 路由協(xié)議通??苫赟ink 節(jié)點(diǎn)的數(shù)量、是否需要節(jié)點(diǎn)地理位置、是否分簇、按需或主動(dòng)等進(jìn)行分類。 UANs 具有定向通信特點(diǎn),上行流量目的地為Sink 節(jié)點(diǎn),下行流量源自Sink 節(jié)點(diǎn),Sink 節(jié)點(diǎn)是UANs 的樞紐[10]。 那些靠近Sink 節(jié)點(diǎn)的水下節(jié)點(diǎn),除了感知和產(chǎn)生數(shù)據(jù)之外,還負(fù)責(zé)中繼和轉(zhuǎn)發(fā)報(bào)文。 因此,Sink 節(jié)點(diǎn)及其附近的節(jié)點(diǎn)對(duì)整個(gè)UANs具有重要的影響。 為了表示節(jié)點(diǎn)的重要程度,提高數(shù)據(jù)交付率和傳輸可靠性,近年來(lái)UANs 逐漸出現(xiàn)了基于分層的路由機(jī)制。 因此,本文根據(jù)是否采用分層機(jī)制,將路由協(xié)議分為無(wú)層級(jí)路由協(xié)議和分層路由協(xié)議。
無(wú)層級(jí)路由協(xié)議是指通信過(guò)程中,所有節(jié)點(diǎn)均不配置層級(jí),也不將層級(jí)作為節(jié)點(diǎn)的候選轉(zhuǎn)發(fā)資格的條件。 無(wú)層級(jí)的路由協(xié)議有Vector-Based Forwarding(VBF)[11]、Depth based Routing(DBR)[12]、Position based Forwarding ( PBF )[13]、 Annular Compass Routing(ACR)[14]等。 分層路由協(xié)議中,一般分為兩個(gè)階段:分層階段和數(shù)據(jù)轉(zhuǎn)發(fā)階段。 分層階段每個(gè)節(jié)點(diǎn)根據(jù)相應(yīng)信息和分層算法配置自身的層級(jí)。 通常來(lái)說(shuō),越靠近Sink 節(jié)點(diǎn)的節(jié)點(diǎn)層級(jí)越小,數(shù)據(jù)報(bào)文由層級(jí)大的節(jié)點(diǎn)傳輸至層級(jí)小的節(jié)點(diǎn),轉(zhuǎn)發(fā)節(jié)點(diǎn)在選擇下一跳接收節(jié)點(diǎn)時(shí),會(huì)將層級(jí)作為指標(biāo),選擇層級(jí)比自身層級(jí)小1 的節(jié)點(diǎn)作為候選轉(zhuǎn)發(fā)節(jié)點(diǎn),逐層將數(shù)據(jù)傳輸至Sink 節(jié)點(diǎn)。
近幾年提出的路由分層方案有基于超級(jí)節(jié)點(diǎn)配置的分層方案、基于距離或深度的分層方案、基于能量探測(cè)的分層方案等。
基于超級(jí)節(jié)點(diǎn)配置的分層方案:水面的超級(jí)節(jié)點(diǎn)以不同的發(fā)送功率廣播控制報(bào)文,其中包含與功率對(duì)應(yīng)的層級(jí)信息、超級(jí)節(jié)點(diǎn)ID 等,直到發(fā)送功率(層級(jí))達(dá)到最大,普通節(jié)點(diǎn)根據(jù)廣播包中的層級(jí)信息確定自身的層級(jí)[15]。 基于距離或深度的分層方案:通過(guò)計(jì)算Sink 節(jié)點(diǎn)與普通節(jié)點(diǎn)的距離(或節(jié)點(diǎn)深度)和層間距將網(wǎng)絡(luò)中的節(jié)點(diǎn)劃分為N 層[16]?;谀芰刻綔y(cè)的分層方案:通過(guò)廣播能量探測(cè)包將網(wǎng)絡(luò)劃分為L(zhǎng) 層[17]。
基于轉(zhuǎn)發(fā)節(jié)點(diǎn)傳輸范圍的分層方案:根據(jù)網(wǎng)絡(luò)中轉(zhuǎn)發(fā)節(jié)點(diǎn)的傳輸范圍將傳輸區(qū)域分為三層[18]。
基于超級(jí)節(jié)點(diǎn)配置分層的方案和基于距離或深度的分層方案均要求Sink 節(jié)點(diǎn)或超級(jí)節(jié)點(diǎn)不斷調(diào)整發(fā)送功率發(fā)送控制報(bào)文。 這是因?yàn)楦鶕?jù)水聲信號(hào)衰減模型,當(dāng)控制信號(hào)的強(qiáng)度在距離較遠(yuǎn)的接收節(jié)點(diǎn)處小于節(jié)點(diǎn)的最小接收功率時(shí),節(jié)點(diǎn)無(wú)法正確接收該報(bào)文,此時(shí)Sink 節(jié)點(diǎn)或超級(jí)節(jié)點(diǎn)需要以更大的發(fā)送功率發(fā)送控制報(bào)文,從而擴(kuò)大廣播包的傳輸范圍,但發(fā)送功率的不斷增大會(huì)增加額外的能耗。 基于超級(jí)節(jié)點(diǎn)配置分層的方案,水下節(jié)點(diǎn)只要收到超級(jí)節(jié)點(diǎn)發(fā)出的廣播信息,按照廣播包中的層級(jí)信息即可確定自身的層級(jí)。 基于距離或深度的分層方案中,節(jié)點(diǎn)根據(jù)自身到Sink 節(jié)點(diǎn)的距離和層間距計(jì)算并更新自身的層級(jí)信息。 基于能量探測(cè)的分層方案中節(jié)點(diǎn)根據(jù)接收到的廣播包中的能量信息更新自身的層級(jí)。 以上三種分層方案中,水下節(jié)點(diǎn)不必轉(zhuǎn)發(fā)收到的廣播報(bào)文,分層方案簡(jiǎn)單,分層過(guò)程無(wú)需消耗普通節(jié)點(diǎn)的能量,但對(duì)Sink 節(jié)點(diǎn)或超級(jí)節(jié)點(diǎn)的發(fā)送功率要求較高,不適用大規(guī)模UANs 部署。 此外,從三種分層方案中可以看出,水下節(jié)點(diǎn)的層級(jí)配置與到超級(jí)節(jié)點(diǎn)的距離密切相關(guān),凡超級(jí)節(jié)點(diǎn)(以大的發(fā)送功率)一跳傳輸范圍內(nèi)的所有水下節(jié)點(diǎn)都能獲取自身的層級(jí),但該層級(jí)與自節(jié)點(diǎn)自身到Sink 節(jié)點(diǎn)的數(shù)據(jù)傳輸方向的連通性和跳數(shù)無(wú)關(guān),因此容易形成上行路由“通信空區(qū)”問(wèn)題,降低了該分層方案的上行路由的數(shù)據(jù)傳輸?shù)目煽啃浴?/p>
Yanhai 等提出了一種基于深度的路由協(xié)議DBR。 該協(xié)議是一種典型的多Sink 節(jié)點(diǎn)網(wǎng)絡(luò)體系結(jié)構(gòu)的路由協(xié)議,節(jié)點(diǎn)不需要知道自身的全方位位置信息,只需獲取自己的深度信息[11]。 DBR 是UANs 中的典型路由協(xié)議,在此基礎(chǔ)上,出現(xiàn)了許多改進(jìn)版本。 傳統(tǒng)分層路由協(xié)議與DBR 及其眾多改進(jìn)版協(xié)議在候選轉(zhuǎn)發(fā)節(jié)點(diǎn)的選取方面采用類似的機(jī)制,因此我們以DBR 或傳統(tǒng)分層路由為例分析“通信空區(qū)”問(wèn)題。
在DBR 協(xié)議(或傳統(tǒng)分層路由)中,當(dāng)一個(gè)節(jié)點(diǎn)收到數(shù)據(jù)包時(shí),將從數(shù)據(jù)包中查看上一跳節(jié)點(diǎn)的深度(或分層)信息,并與自己的深度(或分層)信息作對(duì)比,如果自身深度(或分層)小于上一跳節(jié)點(diǎn)的深度(或分層),則說(shuō)明其可以作為轉(zhuǎn)發(fā)節(jié)點(diǎn),否則,直接將數(shù)據(jù)包丟棄。 協(xié)議中根據(jù)深度(或分層)差選擇轉(zhuǎn)發(fā)節(jié)點(diǎn),因此會(huì)出現(xiàn)多個(gè)轉(zhuǎn)發(fā)節(jié)點(diǎn),即會(huì)有冗余數(shù)據(jù)包產(chǎn)生。
DBR(或傳統(tǒng)分層路由)協(xié)議根據(jù)深度(或分層)信息執(zhí)行路由轉(zhuǎn)發(fā),在網(wǎng)絡(luò)稀疏的情況下,會(huì)造成“通信空區(qū)”,如圖1 所示。 根據(jù)DBR 協(xié)議,源節(jié)點(diǎn)S 將數(shù)據(jù)發(fā)送出去后,節(jié)點(diǎn)F 和節(jié)點(diǎn)N1將會(huì)收到該數(shù)據(jù)包,但是N1的深度(或分層)大于S,不能作為候選轉(zhuǎn)發(fā)節(jié)點(diǎn);只有節(jié)點(diǎn)F 會(huì)轉(zhuǎn)發(fā)數(shù)據(jù),但是在F的傳輸范圍內(nèi)沒有比F 深度(或分層)更小的節(jié)點(diǎn),所以本次數(shù)據(jù)將無(wú)法傳輸至Sink 節(jié)點(diǎn),形成了“通信空區(qū)”,降低了包的交付率和傳輸可靠性。
圖1 “通信空區(qū)”與有效分層問(wèn)題示意圖
在基于分層的路由機(jī)制中,數(shù)據(jù)的流向總是沿著從高層級(jí)節(jié)點(diǎn)向低層級(jí)節(jié)點(diǎn)傳輸,最終將數(shù)據(jù)傳輸至Sink 節(jié)點(diǎn)。 針對(duì)UANs 傳統(tǒng)(分層)路由協(xié)議的“通信空區(qū)”問(wèn)題,如果我們能夠設(shè)計(jì)出有效的分層算法,給那些與Sink 節(jié)點(diǎn)連通的水下節(jié)點(diǎn)配置一個(gè)有限的層級(jí),將會(huì)解決“通信空區(qū)”路由問(wèn)題。 如圖1,假設(shè)源節(jié)點(diǎn)S 的層級(jí)為L(zhǎng),N1的層級(jí)為L(zhǎng)-1,則節(jié)點(diǎn)S 可將N1作為下一跳接收節(jié)點(diǎn),直接將數(shù)據(jù)發(fā)送給N1,數(shù)據(jù)將沿著N1-N2-N3-N4-N5傳輸至Sink 節(jié)點(diǎn),而不會(huì)將數(shù)據(jù)傳輸至F,如此,即解決了“通信空區(qū)”問(wèn)題。
為了解決傳統(tǒng)分層路由的“通信空區(qū)”問(wèn)題,我們提出一種基于節(jié)點(diǎn)與Sink 節(jié)點(diǎn)連通的最小跳數(shù)的路由分層方案,即:將距離Sink 節(jié)點(diǎn)的最小跳數(shù)定義為節(jié)點(diǎn)的層級(jí)。 在基于最小跳數(shù)的分層算法中,Sink節(jié)點(diǎn)以與水下節(jié)點(diǎn)相同的發(fā)送功率定期向網(wǎng)絡(luò)泛洪包含其ID、層級(jí)(被Sink 節(jié)點(diǎn)初始化為0)和剩余能量等信息的Hello 報(bào)文,當(dāng)水下節(jié)點(diǎn)第一次收到Hello報(bào)文時(shí),提取報(bào)文頭部的層級(jí)信息,即上一跳節(jié)點(diǎn)的層級(jí)Lpre,將Lpre+1 作為自己的層級(jí)。 之后節(jié)點(diǎn)用自己的ID、層級(jí)、剩余能量等更新并繼續(xù)廣播更新后的Hello 報(bào)文。 經(jīng)過(guò)一段時(shí)間,收到Hello 報(bào)文的水下節(jié)點(diǎn)都能獲取或更新自己的層級(jí)信息,獲取了層級(jí)的節(jié)點(diǎn)會(huì)繼續(xù)更新廣播Hello 報(bào)文。
當(dāng)一個(gè)已經(jīng)獲取了層級(jí)的接收節(jié)點(diǎn)收到Hello報(bào)文時(shí),接收節(jié)點(diǎn)需要判斷是否更新層級(jí),具體規(guī)則如下:當(dāng)一個(gè)已經(jīng)獲取自身層級(jí)且該層級(jí)信息老化時(shí)間未到期的水下傳感器節(jié)點(diǎn)接收到一個(gè)Hello 報(bào)文時(shí),它將比較自身層級(jí)L_Rec 和報(bào)文中層級(jí)L_Snd 的大小。 若L_Rec>L_Snd+1 時(shí),則更新自身層級(jí)為L(zhǎng)_Rec=L_Snd+1,并用節(jié)點(diǎn)自身層級(jí)信息和節(jié)點(diǎn)ID 來(lái)替換Hello 報(bào)文中的層級(jí)和發(fā)送節(jié)點(diǎn)ID 字段信息后,進(jìn)而廣播新的Hello 報(bào)文;否則丟棄該報(bào)文,將不會(huì)轉(zhuǎn)發(fā)該報(bào)文。 當(dāng)一個(gè)已經(jīng)獲取自身層級(jí),但該層級(jí)信息老化時(shí)間已到期的水下傳感器節(jié)點(diǎn)接收到一個(gè)Hello報(bào)文時(shí),將直接更新自身層級(jí)為L(zhǎng)_Rec =L_Snd+1,重新建立該節(jié)點(diǎn)的連通性。 如果節(jié)點(diǎn)始終收不到控制報(bào)文,則該節(jié)點(diǎn)與Sink 節(jié)點(diǎn)未連通,該節(jié)點(diǎn)為孤立節(jié)點(diǎn),不能用于轉(zhuǎn)發(fā)報(bào)文。 分層算法偽代碼如算法1。
算法1 基于最小跳數(shù)的分層算法
如圖2 所示,根據(jù)基于連通和最小跳數(shù)的路由分層方案,Sink 節(jié)點(diǎn)的層級(jí)為0,轉(zhuǎn)發(fā)節(jié)點(diǎn)F1、F2、F的層級(jí)均為1,F(xiàn) 收到F1、F2轉(zhuǎn)發(fā)的控制報(bào)文后也不再更新自身的層級(jí),也即三個(gè)轉(zhuǎn)發(fā)節(jié)點(diǎn)均為Sink 節(jié)點(diǎn)的一跳鄰居。 通信時(shí),數(shù)據(jù)由高層級(jí)節(jié)點(diǎn)往低層級(jí)自下往上傳輸。
圖2 基于連通和最小跳數(shù)分層方案
在基于連通和最小跳數(shù)的分層方案中,如果水下節(jié)點(diǎn)與Sink 節(jié)點(diǎn)連通,無(wú)論經(jīng)過(guò)多少跳的轉(zhuǎn)發(fā),總能收到控制報(bào)文并確定自身的層級(jí)。
當(dāng)水下節(jié)點(diǎn)向Sink 節(jié)點(diǎn)轉(zhuǎn)發(fā)數(shù)據(jù)報(bào)文時(shí),根據(jù)基于連通和最小跳數(shù)的路由分層方案,在分層階段,由于節(jié)點(diǎn)層級(jí)的更新與上一跳節(jié)點(diǎn)的層級(jí)有關(guān)且每個(gè)節(jié)點(diǎn)均需轉(zhuǎn)發(fā)Hello 報(bào)文,因此在分層階段已經(jīng)形成了到達(dá)Sink 節(jié)點(diǎn)的一條或者多條路徑,即水下節(jié)點(diǎn)在更新層級(jí)后已與Sink 節(jié)點(diǎn)連通。 只要數(shù)據(jù)的源節(jié)點(diǎn)有一個(gè)有效的層級(jí),則數(shù)據(jù)在轉(zhuǎn)發(fā)的每一跳都會(huì)找到至少一個(gè)上層的鄰居節(jié)點(diǎn),因此數(shù)據(jù)不會(huì)被路由到“通信空區(qū)”,進(jìn)而不會(huì)出現(xiàn)路由“通信空區(qū)”問(wèn)題。 如圖3 所示,圖中L1表示層級(jí)1,L2表示層級(jí)2,N8表示節(jié)點(diǎn)8,N8的層級(jí)與N12層級(jí)均為L(zhǎng)5,源節(jié)點(diǎn)N19發(fā)出的數(shù)據(jù)傳輸至節(jié)點(diǎn)N12時(shí),N12不會(huì)將數(shù)據(jù)傳輸至N8,數(shù)據(jù)將沿著N12→N10→N7→N4→N1→Sink 節(jié)點(diǎn)的路徑,成功將數(shù)據(jù)傳輸至Sink 節(jié)點(diǎn)。 因此采用基于連通和最小跳數(shù)的路由分層方案成功避免了傳統(tǒng)分層(路由)節(jié)點(diǎn)N8的路由“通信空區(qū)”問(wèn)題。
圖3 路由“通信空區(qū)”避免
UANs 能量供應(yīng)受限且通信能耗大,節(jié)能是UANs 設(shè)計(jì)的重要目標(biāo)。 UANs 中除岸上基站中心外,普通節(jié)點(diǎn)處于水中且采用電池供電,一旦電量耗盡難以充電或更換。 UANs 通信中能量的消耗主要體現(xiàn)在發(fā)送數(shù)據(jù)和接收數(shù)據(jù)等通信狀態(tài)。 2000 年Sozer 等人提出了UANs 中的能耗衰減模型[19]。
假設(shè)Pr(常量)是網(wǎng)絡(luò)中節(jié)點(diǎn)的接收功率,則網(wǎng)絡(luò)中節(jié)點(diǎn)的發(fā)送功率為PrA(d),A(d)為衰減因子。
式中:d為兩個(gè)節(jié)點(diǎn)間的通信距離,k是能量擴(kuò)散因子,其取值由環(huán)境決定,圓柱體中取k=1,長(zhǎng)方體中是k=1.5,球體中是k=2,從吸收系數(shù)α(f)中得到的相關(guān)項(xiàng)為?,
假設(shè)一次UANs 通信中,發(fā)送節(jié)點(diǎn)與下一跳接收節(jié)點(diǎn)之間的距離(由發(fā)送節(jié)點(diǎn)在轉(zhuǎn)發(fā)之前計(jì)算自身至下一跳接收節(jié)點(diǎn)的距離)為r,則一跳轉(zhuǎn)發(fā)中消耗的能量為:
式中:Ps為發(fā)送功率,Ps=PrA(r),Tp是源節(jié)點(diǎn)或轉(zhuǎn)發(fā)節(jié)點(diǎn)發(fā)送一個(gè)數(shù)據(jù)包的傳輸時(shí)延,Pr為接收功率。
根據(jù)上述能耗衰減模型,數(shù)據(jù)傳輸中的能量消耗與傳輸距離有關(guān),長(zhǎng)距離傳輸會(huì)導(dǎo)致能量損耗較大,因此采用2.1 節(jié)的分層機(jī)制轉(zhuǎn)發(fā)節(jié)點(diǎn)F 的能量損耗較快,其壽命會(huì)縮短,進(jìn)而縮短了網(wǎng)絡(luò)的整體壽命。
在基于連通和最小跳數(shù)的路由分層方案中,Sink 節(jié)點(diǎn)的層級(jí)為0,轉(zhuǎn)發(fā)節(jié)點(diǎn)F1、F2、F 的層級(jí)均為1,F(xiàn) 收到F1、F2轉(zhuǎn)發(fā)的控制報(bào)文后也不再更新自身的層級(jí),也即三個(gè)轉(zhuǎn)發(fā)節(jié)點(diǎn)均為Sink 節(jié)點(diǎn)的一跳鄰居。 當(dāng)F 收到來(lái)自于第二層節(jié)點(diǎn)的數(shù)據(jù)后,會(huì)直接將數(shù)據(jù)傳輸至Sink 節(jié)點(diǎn),根據(jù)節(jié)3 的能耗衰減模型,數(shù)據(jù)傳輸中的能量消耗與傳輸距離有關(guān),長(zhǎng)距離傳輸會(huì)導(dǎo)致能量損耗較大,因此轉(zhuǎn)發(fā)節(jié)點(diǎn)F 的能量損耗較快,其壽命會(huì)縮短,進(jìn)而縮短了網(wǎng)絡(luò)的整體壽命。
為了減小能量消耗,延長(zhǎng)網(wǎng)絡(luò)生存期,本節(jié)對(duì)2.1 節(jié)的分層方案進(jìn)一步優(yōu)化,提出一種基于連通的節(jié)能路由分層方案。
Sink 節(jié)點(diǎn)定期向網(wǎng)絡(luò)泛洪包含其ID、層級(jí)(被Sink 節(jié)點(diǎn)初始化為0)和地理位置等信息的Hello 報(bào)文。 節(jié)點(diǎn)收到控制報(bào)文后,按以下步驟更新層級(jí)。
步驟1:提取報(bào)文頭部發(fā)送節(jié)點(diǎn)的層級(jí)字段L_Snd,判斷層級(jí)老化時(shí)間是否已到,若老化時(shí)間已到,則自身層級(jí)L_Rec 更新為L(zhǎng)_Snd+1,并立即轉(zhuǎn)發(fā)更新后的控制報(bào)文;否則,執(zhí)行步驟2;
步驟2:判斷發(fā)送者層級(jí)L_Snd 是否大于L_Rec,若L_Snd>L_Rec,說(shuō)明報(bào)文來(lái)自下游節(jié)點(diǎn),L_Rec 保持不變;否則,執(zhí)行步驟3;
步驟3:判斷L_Rec 是否等于255,若是,則L_Rec =L_Snd+1;否則,執(zhí)行步驟4;
步驟4:判斷L_Rec 是否等于L_Snd,若不是,則執(zhí)行步驟6;否則,計(jì)算當(dāng)前節(jié)點(diǎn)與當(dāng)前發(fā)送節(jié)點(diǎn)和上一次更新層級(jí)時(shí)發(fā)送節(jié)點(diǎn)的距離Dc、Dp和夾角a,執(zhí)行步驟5;
步驟5:判斷a的大小、Dc和Dp的關(guān)系,若a<30°(a閾值的得出在第4 節(jié)中給出)且Dc<Dp,則L_Rec =L_Snd+1,否則,L_Rec 保持不變。
步驟6:判斷L_Snd 是否等于L_Rec-1,若是,則更新層級(jí)老化時(shí)間;否則,執(zhí)行步驟7;
步驟7:判斷L_Snd 是否等于L_Rec-2,若不是,則執(zhí)行步驟9;否則,計(jì)算當(dāng)前節(jié)點(diǎn)與當(dāng)前發(fā)送節(jié)點(diǎn)和上一次更新層級(jí)時(shí)發(fā)送節(jié)點(diǎn)的距離Dc、Dp和夾角a,執(zhí)行步驟8;
步驟8:判斷a的大小、Dc和Dp的關(guān)系,若a<30°且Dc>Dp,則L_Rec 保持不變;否則,L_Rec =L_Snd+1。
步驟9:判斷L_Snd 是否小于L_Rec-2,若是,L_Rec 保持不變;否則,層級(jí)保持不變。
如圖4 所示,網(wǎng)絡(luò)初始化完成后,Sink 節(jié)點(diǎn)周期性廣播Hello 報(bào)文后,轉(zhuǎn)發(fā)節(jié)點(diǎn)F1、F2、F 均將首次收到Hello 報(bào)文,提取Hello 報(bào)文頭部Sink 節(jié)點(diǎn)的層級(jí)0,將自身的層級(jí)更新為1,將Hello 報(bào)文進(jìn)行更新并立即轉(zhuǎn)發(fā)。 轉(zhuǎn)發(fā)節(jié)點(diǎn)F 將會(huì)收到F1、F2轉(zhuǎn)發(fā)的Hello 報(bào)文(由于轉(zhuǎn)發(fā)節(jié)點(diǎn)F1、F2的層級(jí)均是1,下面將不再區(qū)分收到由轉(zhuǎn)發(fā)節(jié)點(diǎn)F1、F2轉(zhuǎn)發(fā)Hello 報(bào)文的先后順序),由于轉(zhuǎn)發(fā)節(jié)點(diǎn)F、F1和F2的層級(jí)均為1,發(fā)送節(jié)點(diǎn)的層級(jí)大于當(dāng)前節(jié)點(diǎn)層級(jí)的條件不成立,因此,轉(zhuǎn)發(fā)節(jié)點(diǎn)F 將計(jì)算自身到Sink 節(jié)點(diǎn)的距離和自身到轉(zhuǎn)發(fā)節(jié)點(diǎn)F1、F2的距離并計(jì)算兩者之間的夾角a,從圖4 中可以看出,轉(zhuǎn)發(fā)節(jié)點(diǎn)F 到F1、F2的距離較近且夾角a較小,因此,轉(zhuǎn)發(fā)節(jié)點(diǎn)F 將提取Hello 報(bào)文頭部F1、F2的層級(jí)1,加1 后作為自身的層級(jí)。
圖4 基于連通的的節(jié)能分層方案拓?fù)?/p>
基于連通的節(jié)能路由分層方案繼承了基于最小跳數(shù)的路由分層方案的優(yōu)勢(shì),通過(guò)Hello 報(bào)文在整個(gè)網(wǎng)絡(luò)的泛洪,形成水下節(jié)點(diǎn)到Sink 節(jié)點(diǎn)的有效路徑,在數(shù)據(jù)傳輸時(shí),轉(zhuǎn)發(fā)節(jié)點(diǎn)總能找到有效的下一跳轉(zhuǎn)發(fā)節(jié)點(diǎn),解決了“通信空區(qū)”問(wèn)題。 基于連通的節(jié)能分層方案也有其自身的優(yōu)點(diǎn),通信中,轉(zhuǎn)發(fā)節(jié)點(diǎn)F收到數(shù)據(jù)后,先將數(shù)據(jù)轉(zhuǎn)發(fā)至F1或F2,再轉(zhuǎn)發(fā)至Sink 節(jié)點(diǎn),構(gòu)成了兩跳傳輸,由于轉(zhuǎn)發(fā)節(jié)點(diǎn)F 到F1或F2的距離較近,轉(zhuǎn)發(fā)節(jié)點(diǎn)F 消耗的能量小于其直接將數(shù)據(jù)轉(zhuǎn)發(fā)至Sink 節(jié)點(diǎn)的能量,即使F1或F2有能量消耗,但在一定條件下,兩跳轉(zhuǎn)發(fā)消耗的能量仍然會(huì)小于直接將數(shù)據(jù)傳輸至Sink 節(jié)點(diǎn)消耗的能量。如果采用基于最小跳數(shù)的分層方案,轉(zhuǎn)發(fā)節(jié)點(diǎn)F 收到數(shù)據(jù)后,會(huì)直接將數(shù)據(jù)轉(zhuǎn)發(fā)至至Sink 節(jié)點(diǎn),一跳傳輸消耗的能量可能大于兩跳傳輸消耗的能量。
節(jié)5 將利用能耗模型和MATLAB 仿真對(duì)基于最小跳數(shù)和基于連通節(jié)能的兩種路由分層方案的能量消耗進(jìn)行分析。
本節(jié)以圖4 拓?fù)錇槔媚芎哪P蛯?duì)基于最小跳數(shù)的路由分層方案與基于連通的節(jié)能路由分層方案進(jìn)行對(duì)比分析。
假設(shè)轉(zhuǎn)發(fā)節(jié)點(diǎn)F 至Sink 節(jié)點(diǎn)的距離是d,轉(zhuǎn)發(fā)節(jié)點(diǎn)F 至F1、F1至Sink 節(jié)點(diǎn)的距離分別是d1、d2;數(shù)據(jù)由轉(zhuǎn)發(fā)節(jié)點(diǎn)F 直接轉(zhuǎn)發(fā)至Sink 節(jié)點(diǎn)消耗的能量為E,由轉(zhuǎn)發(fā)節(jié)點(diǎn)F 轉(zhuǎn)發(fā)至F1或F2再轉(zhuǎn)發(fā)至Sink 節(jié)點(diǎn)消耗的能量為E′,則根據(jù)式(4)得
式中:A(d)=dk?d,Ps=PrA(d),k=1.5。 由于傳輸時(shí)延Tp相同、所有節(jié)點(diǎn)的接收功率Pr均一致,因此,E和E′的計(jì)算公式如下:
假設(shè)d1與d之間的夾角是a,則根據(jù)余弦定理即得:
當(dāng)a=0°時(shí),則:
用MATLAB 仿真比較分析了E和E′的大小關(guān)系,將E和E′稱為相對(duì)能耗,仿真中,假設(shè)d的取值范圍是(0,5),單位:km,d1的取值在d的取值范圍內(nèi)取值,取值分別為:d/20、d/10、d/5、d/4、d/3、d/2、2d/3、3d/4、4d/5、5d/6,a的角度在(0°,90°)范圍內(nèi)變化,信道的中心頻率為10 kHz,仿真結(jié)果如圖5。
圖5 a=0°,d=10 時(shí),d1 與相對(duì)能耗的關(guān)系
如圖5,當(dāng)a=0°,d=10 時(shí),從圖中可以看到,一跳傳輸至Sink 節(jié)點(diǎn)的相對(duì)能耗保持不變,但是,隨著d1的逐漸增大,兩跳傳輸至Sink 節(jié)點(diǎn)的相對(duì)能耗逐漸減小。 當(dāng)d1=d2=d/2 時(shí),兩跳傳輸至Sink節(jié)點(diǎn)的相對(duì)能耗達(dá)到最小值;由于a=0°,d=10 且d1的值一直小于d,一跳傳輸至Sink 節(jié)點(diǎn)的相對(duì)能耗總大于兩跳傳輸至Sink 節(jié)點(diǎn)的相對(duì)能耗。
如圖5~圖10,當(dāng)a逐漸增大時(shí),通過(guò)兩跳傳輸至Sink 節(jié)點(diǎn)的相對(duì)能耗逐漸大于通過(guò)一跳傳輸至Sink 節(jié)點(diǎn)的相對(duì)能耗。 當(dāng)a=90°時(shí),d1的長(zhǎng)度大于d,因此,通過(guò)兩跳傳輸至Sink 節(jié)點(diǎn)的相對(duì)能耗完全大于通過(guò)一跳傳輸至Sink 節(jié)點(diǎn)的相對(duì)能耗。
圖6 a=0°,d、d1 與相對(duì)能耗的關(guān)系
圖7 a=30°,d、d1 與相對(duì)能耗的關(guān)系
圖8 a=45°,d、d1 與相對(duì)能耗的關(guān)系
圖9 a=60°,d、d1 與相對(duì)能耗的關(guān)系
圖10 a=90°,d、d1 與相對(duì)能耗的關(guān)系
綜合圖5 ~圖10,當(dāng)d1>d時(shí),通過(guò)兩跳傳輸至Sink 節(jié)點(diǎn)的相對(duì)能耗大于通過(guò)一跳傳輸至Sink 節(jié)點(diǎn)的相對(duì)能耗;當(dāng)d1<d時(shí),通過(guò)兩跳傳輸至Sink 節(jié)點(diǎn)的相對(duì)能耗小于通過(guò)一跳傳輸至Sink 節(jié)點(diǎn)的相對(duì)能耗;且當(dāng)d1=d/2 時(shí),通過(guò)兩跳傳輸至Sink 節(jié)點(diǎn)的相對(duì)能耗達(dá)到最小值。
綜合模型數(shù)學(xué)分析和MATLAB 仿真分析的結(jié)果,當(dāng)d1<d且a<=30°時(shí),通過(guò)兩跳傳輸至Sink 節(jié)點(diǎn)的相對(duì)能耗小于通過(guò)一跳傳輸至Sink 節(jié)點(diǎn)的相對(duì)能耗,因此,數(shù)據(jù)轉(zhuǎn)發(fā)時(shí)采用基于連通的節(jié)能路由分層方案?jìng)鬏?,有效減小了節(jié)點(diǎn)的能量消耗,從而提高了整個(gè)網(wǎng)絡(luò)的壽命。
NS3 是一款由華盛頓大學(xué)設(shè)計(jì)開發(fā)的全新的網(wǎng)絡(luò)模擬器,廣泛汲取了NS2、GTNetS 等優(yōu)秀模擬器的成功技術(shù)和經(jīng)驗(yàn),其性能更佳、擴(kuò)展性更好,更加接近真實(shí)網(wǎng)絡(luò)[20]。 因此,本節(jié)將用NS-3 仿真工具對(duì)分層方案進(jìn)行性能評(píng)估。 仿真中,利用文獻(xiàn)[6]中基于層級(jí)的自適應(yīng)地理路由協(xié)議,分別采用基于最小跳數(shù)的路由分層方案和基于連通的節(jié)能路由分層方案進(jìn)行路由傳輸仿真實(shí)驗(yàn),并從數(shù)據(jù)包交付率、端到端的平均延時(shí)和平均能耗三個(gè)方面進(jìn)行了對(duì)比分析,此外,還增加了和基于分層的能量均衡的路由協(xié)議(layerbased and energy-efficient routing,LEER)[21]的對(duì)比實(shí)驗(yàn)。 實(shí)驗(yàn)場(chǎng)景設(shè)置如下:15 個(gè)~45 個(gè)傳感器節(jié)點(diǎn)隨機(jī)部署在6 000 m×6 000 m×3 000 m 的長(zhǎng)方體中,將一個(gè)Sink 節(jié)點(diǎn)部署在水面(長(zhǎng)方體上表面中心),一個(gè)源節(jié)點(diǎn)部署在水底(長(zhǎng)方體下表面中心),實(shí)驗(yàn)中的其他實(shí)驗(yàn)仿真參數(shù)如表1 所示。
表1 仿真參數(shù)表
本文進(jìn)行性能評(píng)估指標(biāo)的定義如下:
包交付率(packet delivery ratio,PDR):是指Sink 節(jié)點(diǎn)成功接收的數(shù)據(jù)包數(shù)量與源節(jié)點(diǎn)發(fā)送的數(shù)據(jù)包數(shù)量之比,PDR 計(jì)算公式如下:
式中:n是仿真實(shí)驗(yàn)的次數(shù),Psend是源節(jié)點(diǎn)產(chǎn)生發(fā)送的數(shù)據(jù)包的數(shù)量,Prece為Sink 節(jié)點(diǎn)成功接收的數(shù)據(jù)包的數(shù)量。
平均能耗(average energy consumption,AEC):是指一次仿真實(shí)驗(yàn)中網(wǎng)絡(luò)的總能耗與Sink 節(jié)點(diǎn)成功接收的數(shù)據(jù)包數(shù)量之比,計(jì)算公式如下:
式中:Etotal表示網(wǎng)絡(luò)的總能耗;Psuccess表示Sink 節(jié)點(diǎn)成功接收的數(shù)據(jù)包的數(shù)量。
平均端到端的延時(shí)(average end-to-end delay,AEED):是指在一次仿真實(shí)驗(yàn)中,Sink 節(jié)點(diǎn)成功接收數(shù)據(jù)包的時(shí)刻與源節(jié)點(diǎn)發(fā)送數(shù)據(jù)時(shí)刻的差的總和和傳輸數(shù)據(jù)包次數(shù)的比值,AEED 的計(jì)算公式如下:
式中:Ntrans是一次仿真實(shí)驗(yàn)中傳輸數(shù)據(jù)包的次數(shù),TSink和Tsource分別是Sink 節(jié)點(diǎn)成功接收數(shù)據(jù)包的時(shí)刻和源節(jié)點(diǎn)發(fā)送數(shù)據(jù)的時(shí)刻。
實(shí)驗(yàn)中,分別仿真測(cè)試了節(jié)點(diǎn)個(gè)數(shù)與數(shù)據(jù)包交付率、平均能耗和網(wǎng)絡(luò)的平均端到端延時(shí)的關(guān)系,數(shù)據(jù)關(guān)系圖分別如圖11~圖13 所示。
圖11 節(jié)點(diǎn)個(gè)數(shù)與交付率
圖13 節(jié)點(diǎn)個(gè)數(shù)與延時(shí)
如圖11 中,隨著節(jié)點(diǎn)數(shù)量的逐漸增多,兩種分層方案的數(shù)據(jù)包交付率均保持在90%以上。 基于連通的節(jié)能路由分層方案的數(shù)據(jù)包交付率略低于基于最小跳數(shù)的路由分層方案,但是,交付率差值均保持在1%~3%之間。 同時(shí),LEER 協(xié)議屬于泛洪的路由協(xié)議,隨著節(jié)點(diǎn)數(shù)的增加,會(huì)提高數(shù)據(jù)包的交付率,但同時(shí)會(huì)造成沖突,所以,交付率低于利用了兩種路由分層方案的交付率。
如圖12 中,隨著部署的節(jié)點(diǎn)數(shù)量的增多,由于基于連通的節(jié)能路由分層方案實(shí)現(xiàn)了短距離多跳傳輸,因此,它的平均能耗明顯小于基于最小跳數(shù)的路由分層方案的平均能耗。 文獻(xiàn)[6]中的路由協(xié)議在數(shù)據(jù)轉(zhuǎn)發(fā)前已確定了最佳下一跳轉(zhuǎn)發(fā)節(jié)點(diǎn),每一跳參與數(shù)據(jù)轉(zhuǎn)發(fā)的節(jié)點(diǎn)只有一個(gè),且只有最佳下一跳轉(zhuǎn)發(fā)節(jié)點(diǎn)接收數(shù)據(jù)包;然而,LEER 協(xié)議屬于泛洪的路由協(xié)議,隨著節(jié)點(diǎn)數(shù)的增加,參與接收數(shù)據(jù)包的節(jié)點(diǎn)會(huì)增多,因此,提出的兩種路由分層方案的平均能耗低于LEER 協(xié)議。
圖12 節(jié)點(diǎn)個(gè)數(shù)和平均能耗
圖13 中,隨著部署的節(jié)點(diǎn)數(shù)量的增多,兩種路由分層方案的平均端到端的延時(shí)基本保持不變,然而,由于基于連通的節(jié)能路由分層方案中,傳輸跳數(shù)的增加,其平均端到端的延時(shí)稍大于基于最小跳數(shù)的路由分層方案的平均端到端的延時(shí)。 同時(shí),從圖中可以看出,采用兩種路由分層方案的路由協(xié)議的端到端的平均延時(shí)低于LEER 協(xié)議。
基于連通的節(jié)能路由分層方案中,為了均衡Sink 節(jié)點(diǎn)附近的節(jié)點(diǎn)的能量消耗,其附近節(jié)點(diǎn)的層級(jí)大于Sink 節(jié)點(diǎn),可以實(shí)現(xiàn)多跳傳輸且其單跳傳輸?shù)木嚯x較短,通信中,可以利用較小的發(fā)送功率,因此附近節(jié)點(diǎn)的能量會(huì)有效減少。 同時(shí),水下其他節(jié)點(diǎn)根據(jù)距離確定層級(jí),層與層之間的距離可以縮短,即可以實(shí)現(xiàn)短距離多跳傳輸。 綜合圖11 ~圖13,雖然基于連通的節(jié)能路由分層方案的延時(shí)稍有增加,但是其數(shù)據(jù)包交付率基本與基于最小跳數(shù)的路由分層方案的交付率保持一致且其能耗有效減少。 因此,基于連通的節(jié)能路由分層方案的性能優(yōu)于基于最小跳數(shù)的路由分層方案。
本文提出了兩種基于連通的水下節(jié)點(diǎn)路由分層方案:基于最小跳數(shù)的節(jié)點(diǎn)路由分層方案和基于連通的節(jié)能路由分層方案,實(shí)現(xiàn)了分層多跳傳輸,通過(guò)數(shù)學(xué)模型、MATLAB 分析了基于連通的節(jié)能路由分層方案?jìng)鬏數(shù)膬?yōu)勢(shì),并用NS3 仿真對(duì)比分析了兩種基于連通的路由分層方案,實(shí)驗(yàn)結(jié)果表明:①基于連通的節(jié)能路由分層方案能夠有效節(jié)省能耗,從而能夠提高網(wǎng)絡(luò)的整體壽命;②兩種基于連通的路由分層方案可以有效解決“通信空區(qū)”問(wèn)題;③本文提出的節(jié)點(diǎn)路由分層方案可以及時(shí)更新層級(jí)、實(shí)現(xiàn)短距離多跳傳輸,交付率較高且平均能耗低于LEER 協(xié)議。
UANs 的應(yīng)用環(huán)境為水中,能量供應(yīng)困難,因此設(shè)計(jì)合適的傳輸機(jī)制至關(guān)重要,基于連通的節(jié)能路由分層方案雖然在交付率和能耗方面有很大優(yōu)勢(shì),但在減小延時(shí)方面仍然存在不足,本文下一步的工作將全面考慮,提出性能更加優(yōu)越的路由分層方案。