張閃閃,甄 雪
(曲阜師范大學(xué) 信息科學(xué)與工程學(xué)院,山東 日照 276826)
無線傳感器網(wǎng)絡(luò)(wireless sensor networks,WSNs)是大量小型或微型低能耗傳感器節(jié)點(diǎn)協(xié)作地感知和采集監(jiān)測(cè)區(qū)域的各種信息并處理后,通過自組織多跳的方式形成短距離的無線通信網(wǎng)絡(luò)。目前,WSNs已經(jīng)廣泛應(yīng)用于智能建筑[1]、搶險(xiǎn)救災(zāi)[2]、健康監(jiān)測(cè)[3]、目標(biāo)跟蹤[4]等重要領(lǐng)域[5]。WSNs在用來提供更好服務(wù)的同時(shí)又面臨很多挑戰(zhàn)。由于WSNs中的節(jié)點(diǎn)大都采用電池供電,能量非常有限,并且節(jié)點(diǎn)一旦部署很難回收,所以對(duì)WSNs的能量效率研究一直是熱點(diǎn)和難點(diǎn)問題。像所有共享媒體的網(wǎng)絡(luò)一樣,MAC是實(shí)現(xiàn)網(wǎng)絡(luò)成功操作的重要技術(shù)。但是現(xiàn)有的無線媒體訪問控制協(xié)議,例如藍(lán)牙和802.11MAC協(xié)議都不能被直接應(yīng)用到WSNs中,因?yàn)樗鼈兌紱]有將節(jié)能作為主要目標(biāo)。
已有許多研究表明,空閑監(jiān)聽消耗接收所需能量的50%~100%。例如,Stemm和Katz測(cè)量到空閑:接收:發(fā)送比率為1∶1.05∶1.4[6],而Digitan 2 Mbps無線局域網(wǎng)模塊(IEEE 802.11/2 Mbps)規(guī)范中空閑:接收:發(fā)送比率為1∶2∶2.5[7]。因此,為了延長(zhǎng)網(wǎng)絡(luò)的生存周期,有很多協(xié)議采用占空比機(jī)制來減少空閑監(jiān)聽造成的能量消耗。在占空比機(jī)制中,每個(gè)節(jié)點(diǎn)周期性地在活躍期和睡眠期之間切換。在活躍期,節(jié)點(diǎn)監(jiān)聽信道并且傳輸數(shù)據(jù),在睡眠期,節(jié)點(diǎn)切換到低功率狀態(tài)(例如關(guān)閉收發(fā)器)進(jìn)入睡眠模式。過低的占空比雖然節(jié)省能量但會(huì)造成密集傳輸,所以設(shè)計(jì)一個(gè)好的MAC協(xié)議,選擇合適的占空比數(shù)值來實(shí)現(xiàn)高吞吐量低時(shí)延是WSNs的設(shè)計(jì)難點(diǎn)。
采用占空比機(jī)制的MAC協(xié)議一般分為兩類:同步競(jìng)爭(zhēng)和異步競(jìng)爭(zhēng)。它們都是通過減少空閑監(jiān)聽,增加睡眠時(shí)間來節(jié)約能量的。有許多同步占空比協(xié)議被提出,例如S-MAC[8]、T-MAC[9]、CL-MAC[10]、TAS-MAC[11]。但是這類同步協(xié)議要求每個(gè)節(jié)點(diǎn)可能會(huì)維持一個(gè)或多個(gè)同步時(shí)間表,并且對(duì)節(jié)點(diǎn)之間的時(shí)鐘同步要求嚴(yán)格,這會(huì)產(chǎn)生很大的控制開銷以及能量消耗,而且當(dāng)網(wǎng)絡(luò)負(fù)載發(fā)生變化時(shí),高負(fù)載沖突較多,低負(fù)載空閑偵聽較多,所以同步協(xié)議并不能達(dá)到很好的效果。依靠前導(dǎo)符采樣的異步協(xié)議,例如B-MAC[12]、Wise-MAC[13]、X-MAC[14]、L-MAC[15],允許節(jié)點(diǎn)維持自己獨(dú)立的工作周期,收發(fā)雙方不需要同步,采用低功率監(jiān)聽(LPL)前導(dǎo)序列技術(shù)喚醒接收節(jié)點(diǎn),消除了同步協(xié)議的限制,在吞吐量延遲以及能量高效性方面超過了許多同步協(xié)議。但是,此類協(xié)議也有自身的缺點(diǎn),例如長(zhǎng)的前導(dǎo)符造成的非目標(biāo)節(jié)點(diǎn)的串音問題以及異步之間互相等待引起的較高端到端時(shí)延等。
文中提出了一種基于緩沖區(qū)隊(duì)列長(zhǎng)度的異步MAC協(xié)議,不同于其他考慮接收節(jié)點(diǎn)操作的算法,而是從發(fā)送節(jié)點(diǎn)出發(fā),利用緩沖區(qū)隊(duì)列長(zhǎng)度判斷網(wǎng)絡(luò)負(fù)載改變占空比,當(dāng)網(wǎng)絡(luò)負(fù)載高時(shí)節(jié)點(diǎn)可以延長(zhǎng)發(fā)送時(shí)間來降低節(jié)點(diǎn)的端到端時(shí)延,盡快降低網(wǎng)絡(luò)負(fù)載,網(wǎng)絡(luò)負(fù)載低時(shí),在保證數(shù)據(jù)發(fā)送量的條件下增加節(jié)點(diǎn)的睡眠時(shí)間,節(jié)省能量。
由于固定的占空比在網(wǎng)絡(luò)負(fù)載變化時(shí)不能表現(xiàn)更好的性能,因此希望設(shè)計(jì)一個(gè)能根據(jù)網(wǎng)絡(luò)負(fù)載大小改變占空比的異步MAC協(xié)議。首先將每個(gè)節(jié)點(diǎn)的周期分為非活躍階段和活躍階段,非活躍階段即睡眠期,活躍階段包括監(jiān)聽和傳輸,節(jié)點(diǎn)在這兩個(gè)周期之間進(jìn)行轉(zhuǎn)換。設(shè)每個(gè)節(jié)點(diǎn)開始的睡眠-喚醒周期長(zhǎng)度為T。
活躍階段:此階段包括檢測(cè)事件、競(jìng)爭(zhēng)信道、信標(biāo)包和數(shù)據(jù)包的傳輸和確認(rèn)。協(xié)議開始時(shí)設(shè)定的活躍時(shí)間為Tactive,其中包括檢測(cè)事件Td,競(jìng)爭(zhēng)時(shí)間為Tcontend,每個(gè)信標(biāo)包的傳輸時(shí)間為tbeacon,接收一個(gè)確認(rèn)包的時(shí)間為tack,傳輸數(shù)據(jù)時(shí)間為Tdata,包括對(duì)分組的確認(rèn)時(shí)間。
睡眠階段:此階段節(jié)點(diǎn)轉(zhuǎn)入睡眠狀態(tài)來節(jié)約能量,設(shè)睡眠時(shí)間開始時(shí)為Tsleep。在睡眠狀態(tài)下,節(jié)點(diǎn)將采集的數(shù)據(jù)放入自己的緩沖隊(duì)列中。
從以下幾個(gè)階段來詳細(xì)介紹設(shè)計(jì)的MAC協(xié)議在這兩個(gè)階段的通信過程:
眾所周知,兩個(gè)節(jié)點(diǎn)通信時(shí)雙方必須都處于活躍階段,所以源節(jié)點(diǎn)發(fā)送數(shù)據(jù)時(shí)要等待目的節(jié)點(diǎn)喚醒才可以。異步通信中普通的前導(dǎo)符采樣采用以下原理:節(jié)點(diǎn)周期性地喚醒一小段時(shí)間來對(duì)信道進(jìn)行采樣。如果信道是空閑的,那么節(jié)點(diǎn)立刻回到睡眠狀態(tài)。如果檢測(cè)到信道忙,則節(jié)點(diǎn)保持監(jiān)聽狀態(tài)直到所有的數(shù)據(jù)都被接收或者是發(fā)生超時(shí)。這個(gè)方法要求在第一個(gè)數(shù)據(jù)幀前加上一個(gè)前導(dǎo)符,這個(gè)前導(dǎo)符的長(zhǎng)度至少是一個(gè)信道采樣間隔的長(zhǎng)度,以免接收節(jié)點(diǎn)睡眠過程錯(cuò)過前導(dǎo)序列。但是此種方法非目標(biāo)節(jié)點(diǎn)在長(zhǎng)前導(dǎo)符發(fā)完之前不能發(fā)現(xiàn)該包并不是發(fā)給自己的,這造成了很大的能量浪費(fèi)并且與節(jié)點(diǎn)密度成正比。為了避免這種問題,采用分組的前導(dǎo)符采樣來進(jìn)行異步喚醒。使用文獻(xiàn)[16]中提出的STEM-B前導(dǎo)符變形,利用一系列的信標(biāo)包來作為前導(dǎo)符,每個(gè)信標(biāo)包包含了發(fā)送端和接受端的MAC地址以及此信標(biāo)包的序列號(hào)。因此節(jié)點(diǎn)能夠判斷它是不是即將進(jìn)行數(shù)據(jù)傳輸?shù)哪繕?biāo)節(jié)點(diǎn),與傳統(tǒng)的前導(dǎo)符采集協(xié)議相比,非目標(biāo)節(jié)點(diǎn)可以盡早丟棄分組從而更早進(jìn)入睡眠。當(dāng)源節(jié)點(diǎn)喚醒時(shí),在Td時(shí)間內(nèi)檢測(cè)是否有事件發(fā)生,如果有事件發(fā)生則發(fā)送信標(biāo)包等待目標(biāo)節(jié)點(diǎn)喚醒。因?yàn)槊總€(gè)節(jié)點(diǎn)周期性的喚醒和睡眠,當(dāng)網(wǎng)絡(luò)中節(jié)點(diǎn)密度大,網(wǎng)絡(luò)負(fù)載高時(shí),可能有多個(gè)節(jié)點(diǎn)同時(shí)喚醒想要發(fā)送數(shù)據(jù),所以會(huì)產(chǎn)生沖突,因此利用CSMA機(jī)制進(jìn)行信道爭(zhēng)用。設(shè)信道爭(zhēng)用時(shí)間為Tcontend,在此時(shí)間內(nèi)沒有收到任何信息則獲得信道發(fā)信標(biāo)等待目的節(jié)點(diǎn)喚醒,bn就是信標(biāo)包,如果接收到信標(biāo),則判斷信標(biāo)是否發(fā)給自己,如果是則回復(fù)ACK等待接收數(shù)據(jù),如果不是則轉(zhuǎn)入睡眠,等待下一周期重復(fù)上述過程。
當(dāng)節(jié)點(diǎn)獲得信道與目的節(jié)點(diǎn)建立通信后開始傳輸數(shù)據(jù),如果將一個(gè)長(zhǎng)消息裝入數(shù)據(jù)包后,一旦損壞就需要重傳整個(gè)長(zhǎng)消息,而無線信道中傳輸差錯(cuò)與消息的長(zhǎng)度成正比例關(guān)系,因此長(zhǎng)消息有著比短消息更低的成功傳輸概率,這會(huì)有很大的能量時(shí)間以及帶寬消耗。因此該協(xié)議不像SW-MAC[17]和DS-MAC[18]那樣發(fā)送大分組轉(zhuǎn)入睡眠,而是將長(zhǎng)消息分段,在喚醒時(shí)間連續(xù)發(fā)送數(shù)據(jù)包,并等待確認(rèn),直到喚醒時(shí)間到期,如圖1所示。
圖1 QL-MAC協(xié)議數(shù)據(jù)傳輸
所以節(jié)點(diǎn)喚醒之后有以下幾種情況發(fā)生:
(1)節(jié)點(diǎn)有數(shù)據(jù)發(fā)送且獲得信道,發(fā)送一系列含有目標(biāo)地址和序列號(hào)的信標(biāo)包,然后在信標(biāo)包之間預(yù)留接收目的節(jié)點(diǎn)確認(rèn)的時(shí)間tack。然后開始傳輸數(shù)據(jù),所以此時(shí)數(shù)據(jù)傳輸總時(shí)間為:
Ta-Td-Tcontend-p(tbeacon+tack)
(1)
此處p為傳輸?shù)降趐個(gè)信標(biāo)包時(shí)目的節(jié)點(diǎn)喚醒。若在Tcontend期間收到了信標(biāo),則判斷此信標(biāo)是否是發(fā)給自己的,如果是則回復(fù)ACK準(zhǔn)備接收數(shù)據(jù),如果不是則丟棄。
(2)節(jié)點(diǎn)有數(shù)據(jù)發(fā)送但沒有獲得信道,為節(jié)省能量節(jié)點(diǎn)轉(zhuǎn)入睡眠,所以活躍時(shí)間為:
(2)
(3)節(jié)點(diǎn)喚醒但是在Td時(shí)間沒有數(shù)據(jù)要發(fā)送,此時(shí)設(shè)置監(jiān)聽時(shí)間為Tlisten=tbeacon+tack,在此時(shí)間內(nèi)如果有信標(biāo)包接收則接收信標(biāo)包,回復(fù)ACK并轉(zhuǎn)發(fā)數(shù)據(jù),此時(shí)數(shù)據(jù)傳輸時(shí)間為:
(3)
如果沒有接收到信標(biāo)包則睡眠,此時(shí)
(4)
文中希望利用提出的協(xié)議根據(jù)網(wǎng)絡(luò)負(fù)載的大小來自適應(yīng)調(diào)整節(jié)點(diǎn)的睡眠時(shí)間。因此,就需要提出一種方法來度量網(wǎng)絡(luò)負(fù)載情況。檢測(cè)網(wǎng)絡(luò)負(fù)載一般有以下幾種方法:一是通過串聽RTS/CTS等控制分組,二是通過估算傳輸分組之間的端到端時(shí)延,三是通過緩沖區(qū)隊(duì)列長(zhǎng)度。這是因?yàn)樵诓捎肅SMA協(xié)議的數(shù)據(jù)傳輸中,對(duì)于競(jìng)爭(zhēng)失敗的節(jié)點(diǎn),數(shù)據(jù)會(huì)積壓在此節(jié)點(diǎn)本身的緩沖區(qū)隊(duì)列中等待下一次爭(zhēng)用信道。所以當(dāng)網(wǎng)絡(luò)負(fù)載處于較高情境時(shí),緩沖區(qū)內(nèi)積壓的數(shù)據(jù)分組就會(huì)增加,可以傳輸?shù)墓?jié)點(diǎn)很難在較短的活躍期內(nèi)傳輸完所有數(shù)據(jù),并且其他沒有獲得信道從而處于退避階段的節(jié)點(diǎn)也會(huì)有很多數(shù)據(jù)分組在緩沖區(qū)內(nèi)積壓。所以可以通過緩沖區(qū)隊(duì)列長(zhǎng)度反應(yīng)網(wǎng)絡(luò)負(fù)載。因此傳感器節(jié)點(diǎn)通過本地緩沖區(qū)隊(duì)列內(nèi)待發(fā)數(shù)據(jù)分組的積壓情況就可以真實(shí)迅速反映網(wǎng)絡(luò)當(dāng)前的負(fù)載情況,于是就利用這個(gè)特性來自適應(yīng)調(diào)整節(jié)點(diǎn)在該周期的睡眠時(shí)間。
對(duì)于發(fā)送節(jié)點(diǎn):
因?yàn)橄MO(shè)計(jì)的協(xié)議能根據(jù)網(wǎng)絡(luò)負(fù)載調(diào)整占空比,文中的重點(diǎn)在于找到一個(gè)緩沖區(qū)隊(duì)列的閾值來判斷網(wǎng)絡(luò)負(fù)載大小。所以計(jì)算在整個(gè)睡眠-喚醒周期中能傳輸?shù)姆纸M數(shù)量為:
(5)
其中,tpacket是一個(gè)分組傳輸?shù)臅r(shí)間。
在最好的情況下信道空閑,節(jié)點(diǎn)僅傳輸一個(gè)信標(biāo)就接收到來自接收端的ACK,此時(shí)時(shí)間為tpacket+tack,那么可求出最大傳輸分組個(gè)數(shù)nmax為:
(6)
實(shí)際情況中,由于可能產(chǎn)生信道爭(zhēng)用,并且接收節(jié)點(diǎn)的喚醒時(shí)間可能不會(huì)那么及時(shí),所以一次能發(fā)送的分組個(gè)數(shù)遠(yuǎn)小于nmax。
假設(shè)每個(gè)節(jié)點(diǎn)在Td時(shí)間計(jì)算其緩沖區(qū)當(dāng)前隊(duì)列長(zhǎng)度即緩沖區(qū)中分組數(shù)量,記為L(zhǎng)。雖然一次能發(fā)送分組的個(gè)數(shù)遠(yuǎn)小于nmax,但是單純的nmax作為閾值來和隊(duì)列長(zhǎng)度比較,當(dāng)出現(xiàn)L和nmax很接近的時(shí)候,占空比調(diào)整會(huì)過于頻繁,所以將2nmax和nmax/2作為閾值。L>2nmax,說明此時(shí)網(wǎng)絡(luò)負(fù)載大,L 圖2 改變節(jié)點(diǎn)占空比 如圖2所示,在加倍占空比操作中,保持周期T不變,通過延長(zhǎng)活躍時(shí)間來實(shí)現(xiàn)。在減半占空比操作中,保持活躍時(shí)間不變通過延長(zhǎng)睡眠時(shí)間增大周期T來實(shí)現(xiàn)。這樣做的好處是:當(dāng)網(wǎng)絡(luò)負(fù)載大時(shí),喚醒時(shí)間加倍,這樣可以盡快發(fā)送完分組且降低節(jié)點(diǎn)的端到端時(shí)延;當(dāng)網(wǎng)絡(luò)負(fù)載小時(shí),喚醒時(shí)間不變,睡眠時(shí)間延長(zhǎng),這可以在保證節(jié)點(diǎn)每個(gè)周期發(fā)送數(shù)據(jù)量的情況下增加節(jié)點(diǎn)的睡眠時(shí)間,節(jié)省能量。 對(duì)于接收節(jié)點(diǎn): 當(dāng)發(fā)送節(jié)點(diǎn)的占空比改變時(shí),接收節(jié)點(diǎn)也要做出相應(yīng)改變,這種情況只需要在占空比加倍時(shí)候改變,否則就會(huì)出現(xiàn)當(dāng)占空比加倍時(shí)發(fā)送端沒有發(fā)送完但接收端的活躍時(shí)間已經(jīng)到期的情況。為了避免此類情況發(fā)生,在信標(biāo)包和確認(rèn)包中加入一個(gè)1 bit的Flag字段,正常占空比用0來表示,如果占空比加倍則改為1,接收節(jié)點(diǎn)根據(jù)Flag位對(duì)自己做出調(diào)整。而發(fā)送節(jié)點(diǎn)占空比減半時(shí)接收節(jié)點(diǎn)不需要改變,因?yàn)榻邮展?jié)點(diǎn)也會(huì)接收到其他節(jié)點(diǎn)的數(shù)據(jù)包,不能僅根據(jù)其中一個(gè)發(fā)送節(jié)點(diǎn)就延長(zhǎng)自己的睡眠時(shí)間。 在數(shù)據(jù)傳輸?shù)倪^程中,當(dāng)另一個(gè)節(jié)點(diǎn)在發(fā)送的時(shí)候節(jié)點(diǎn)喚醒,那么可能發(fā)生串聽。為了解決這個(gè)問題,使用虛擬載波監(jiān)聽(virtual carrier sense,VCS)。VCS采用網(wǎng)絡(luò)分配向量NAV獲得信道控制信息。在通信范圍內(nèi)的任何節(jié)點(diǎn)都能看到此值,它采用單位時(shí)間來維護(hù)并基于本地時(shí)鐘遞減。當(dāng)NAV的值不為0的時(shí)候表明信道被占用。在睡眠階段NAV計(jì)時(shí)器保持工作直到減為0。當(dāng)NAV的值為0的時(shí)候節(jié)點(diǎn)處在活躍狀態(tài),那么節(jié)點(diǎn)喚醒競(jìng)爭(zhēng)信道,如果節(jié)點(diǎn)處于睡眠狀態(tài)則繼續(xù)睡眠等待下一個(gè)周期。 圖3 信標(biāo)包和確認(rèn)包格式 如圖3所示,可以在信標(biāo)包和確認(rèn)包中的duration字段添加兩個(gè)節(jié)點(diǎn)的通信時(shí)間來配置NAV值。這可以在發(fā)送端和接收端占用信道的時(shí)候,告知其他節(jié)點(diǎn)信道忙,無須爭(zhēng)用信道,對(duì)于其他節(jié)點(diǎn)來說,可以減少不必要的爭(zhēng)用,并且減少串聽。占空比變化和NAV配置如下所示: (1)若L>2nmax,則表明緩沖區(qū)隊(duì)列長(zhǎng)度遠(yuǎn)大于此周期內(nèi)能傳輸?shù)淖畲蠓纸M數(shù)量,說明節(jié)點(diǎn)此時(shí)的網(wǎng)絡(luò)負(fù)載已經(jīng)偏高,此時(shí)需要盡快發(fā)送分組,睡眠時(shí)間不變,通過延長(zhǎng)喚醒時(shí)間將占空比加倍,此時(shí)Ta=2Ta,NAV=2Ta-Td-Tcontend。 (2)若L (3)其余情況執(zhí)行原占空比,NAV=Ta-Td-Tcontend。 具體節(jié)點(diǎn)操作的偽代碼如下所示。State(NAV,channel state,node state)分別代表NAV值,信道狀態(tài)和節(jié)點(diǎn)狀態(tài)。在NAV值中,0代表NAV=0,1代表NAV≠0。信道狀態(tài)分為忙和空閑。節(jié)點(diǎn)狀態(tài)包括活躍和睡眠。φ代表任意狀態(tài)。 算法:節(jié)點(diǎn)數(shù)據(jù)傳輸。 1 if node A has data to transmit then 2 node A contends the channel; 3 node A detects the queue length L; 4 switch the state(NAV,channel state,node state) do 5 case(0,idle,active); 6 ifL>2nmaxthen 7 double the dutycycle 8 set NAV=2Ta-Td-Tcontend 9 else ifL 10 half the dutycycle 11set NAV=L*(tpacket+tack) 12 end if 13 else 14 keep original dutycycle 15 set NAV=Ta-Td-Tcontend 16 end if 17 node A send beacon packet to node B 18 case(0,φ,sleep) 19 node continues sleep and waits for next cycle 20 case(0,φ,φ) 21 node countdowns NAV 22 else if node A received the beacon packet then 23 check flag 24 if flag=1 then 25 setTa=2Ta 26Ts=T-2Ta 27 node A replies ACK to sender 28 else 29 node A replies ACK to sender 30 end if 31 end if 32 else 33 node keeps active until the end ofTlisten 34 node turns to sleep and wakes up in the next cycle 35 end if 當(dāng)節(jié)點(diǎn)喚醒之后,先監(jiān)聽信道,若檢測(cè)到信道忙則進(jìn)入睡眠狀態(tài)倒計(jì)時(shí)NAV,當(dāng)NAV=0時(shí)且節(jié)點(diǎn)處于活躍狀態(tài)則再次接入信道,否則繼續(xù)睡眠等待下一周期。若檢測(cè)到信道空閑且NAV=0,那么根據(jù)當(dāng)前緩沖區(qū)長(zhǎng)度判斷是否需要更改占空比,若負(fù)載過大,則將占空比加倍,過小則將占空比減半,并且設(shè)置NAV持續(xù)時(shí)間占用信道發(fā)送數(shù)據(jù),若負(fù)載正常則占空比不變;如果一個(gè)節(jié)點(diǎn)在最大監(jiān)聽時(shí)間內(nèi)沒有事件發(fā)生,即不發(fā)送數(shù)據(jù)也不接收數(shù)據(jù),直接轉(zhuǎn)入睡眠狀態(tài)節(jié)省能量。圖4給出了節(jié)點(diǎn)的有限狀態(tài)機(jī)轉(zhuǎn)換圖。 圖4 有限狀態(tài)機(jī) 為了驗(yàn)證QL-MAC的性能,在OMNET++(Version:5.2.1)仿真器中對(duì)QL-MAC協(xié)議和X-MAC,S-MAC協(xié)議在端到端時(shí)延和能量有效性方面作性能比較。S-MAC是無線傳感器網(wǎng)絡(luò)的典型同步MAC協(xié)議,而X-MAC解決了異步MAC協(xié)議中前導(dǎo)符過長(zhǎng)的缺點(diǎn),二者在無線傳感器網(wǎng)絡(luò)中都表現(xiàn)出了很好的性能。使用鏈?zhǔn)酵負(fù)浜托切屯負(fù)洹T诜抡嬷?,每個(gè)節(jié)點(diǎn)之間的距離是200 m,通信范圍是250 m,確保節(jié)點(diǎn)僅能和一跳鄰居通信。采用單信道進(jìn)行通信,節(jié)點(diǎn)工作在半雙工模式下,不考慮干擾,利用源節(jié)點(diǎn)產(chǎn)生數(shù)據(jù)分組的時(shí)間間隔來表示網(wǎng)絡(luò)中的負(fù)載情況。設(shè)置此間隔從1 s變化到10 s,當(dāng)間隔為1 s的時(shí)候表示此時(shí)網(wǎng)絡(luò)負(fù)載最高,10 s時(shí)表示網(wǎng)絡(luò)負(fù)載最低。在實(shí)驗(yàn)過程中,每個(gè)仿真運(yùn)行60 s,節(jié)點(diǎn)初始占空比為10%,每個(gè)周期為1 s。 圖5 端到端時(shí)延對(duì)比 如圖5所示,不論鏈?zhǔn)酵負(fù)溥€是星型拓?fù)?,隨著包間隔時(shí)間的增加,X-MAC的網(wǎng)絡(luò)延遲逐漸降低并趨于平穩(wěn),當(dāng)包間隔時(shí)間為10 s時(shí),網(wǎng)絡(luò)延遲最小。在鏈?zhǔn)酵負(fù)湎?,QL-MAC的時(shí)延逐漸增加然后趨于平穩(wěn),這是因?yàn)镼L-MAC在高負(fù)載時(shí),增加活躍時(shí)間,減少睡眠可以獲得比低負(fù)載下更好的時(shí)延,即使后來時(shí)延增加也是低于X-MAC。在星型拓?fù)湎?,高?fù)載時(shí)節(jié)點(diǎn)競(jìng)爭(zhēng)激烈,X-MAC的preamble包競(jìng)爭(zhēng)變強(qiáng),導(dǎo)致比鏈?zhǔn)礁叩臅r(shí)延,但是當(dāng)負(fù)載低時(shí),由于跳數(shù)減少時(shí)延下降明顯,此后趨于平穩(wěn)。QL-MAC在星型的高負(fù)載下也是競(jìng)爭(zhēng)激烈,相比鏈?zhǔn)綍r(shí)延增加,但是仍然低于X-MAC,隨負(fù)載變低,QL-MAC的優(yōu)勢(shì)逐漸降低,但是仍然和X-MAC不相上下。 圖6 節(jié)點(diǎn)平均能量消耗對(duì)比 從圖6可以看出,隨著網(wǎng)絡(luò)負(fù)載變低,系統(tǒng)消耗的平均功率在降低。當(dāng)高負(fù)載時(shí),X-MAC數(shù)據(jù)傳輸效率低,節(jié)點(diǎn)需要喚醒睡眠多次才可傳完,而QL-MAC協(xié)議會(huì)根據(jù)高負(fù)載延長(zhǎng)活躍時(shí)間,減少多次睡眠喚醒之間消耗的能量,從而節(jié)約小部分能量,在低負(fù)載下QL-MAC優(yōu)勢(shì)更加明顯。總之,QL-MAC協(xié)議在能量有效性方面比S-MAC和X-MAC要好。 提出了一種基于CSMA和緩沖區(qū)隊(duì)列長(zhǎng)度的異步MAC協(xié)議,主要目的是用來減少動(dòng)態(tài)鏈路負(fù)載下的端到端時(shí)延。該協(xié)議使用CSMA爭(zhēng)用信道,從發(fā)送節(jié)點(diǎn)出發(fā)根據(jù)緩沖區(qū)隊(duì)列長(zhǎng)度自適應(yīng)改變節(jié)點(diǎn)的睡眠時(shí)間,當(dāng)網(wǎng)絡(luò)負(fù)載較大時(shí),增大活躍時(shí)間,當(dāng)網(wǎng)絡(luò)負(fù)載較小時(shí),延長(zhǎng)睡眠時(shí)間,并通知接收節(jié)點(diǎn)做出相應(yīng)改變。最后通過仿真表明,該協(xié)議獲得了良好的時(shí)延和高能效。1.4 虛擬載波監(jiān)聽
2 節(jié)點(diǎn)操作
3 仿真與分析
4 結(jié)束語