無線傳感器網(wǎng)絡(luò)高效的MAC協(xié)議研究
摘要:目前無線傳感器網(wǎng)絡(luò)中的MAC協(xié)議可分為發(fā)送端啟動和接收端啟動兩類。同步的發(fā)送端啟動協(xié)議同步代價高,基于前導(dǎo)的異步協(xié)議網(wǎng)絡(luò)利用率低,而接收端啟動的算法會產(chǎn)生發(fā)送端盲等等問題。本文結(jié)合這兩類協(xié)議的優(yōu)點,提出一種可自適應(yīng)變換數(shù)據(jù)傳輸模式的MAC協(xié)議(IL-MAC)。該協(xié)議根據(jù)節(jié)點的消息隊列長度決定當前使用哪種傳輸模式,并通過局部同步算法減少發(fā)送端與接收端在建立連接時的盲等,解決了以上問題。在網(wǎng)絡(luò)仿真平臺NS2上的仿真實驗表明,IL-MAC要優(yōu)于RL-MAC,尤其在高負載下優(yōu)勢明顯。
關(guān)鍵詞:無線傳感器網(wǎng)絡(luò);MAC協(xié)議;自適應(yīng)傳輸模式變換
0 引言
無線傳感器網(wǎng)絡(luò)(Wireless Sensor Networks)由大量具有感知、計算和無線通信能力的廉價節(jié)點組成,通過節(jié)點間協(xié)作地感知和處理網(wǎng)絡(luò)分布區(qū)域中監(jiān)測對象的相關(guān)信息,為人們提供有關(guān)監(jiān)測對象的詳實而可靠的信息,可廣泛應(yīng)用于環(huán)境監(jiān)測、搶險救災(zāi)、戰(zhàn)場監(jiān)視、城市交通、智能家居等多個領(lǐng)域。
MAC協(xié)議負責在傳感器節(jié)點間分配有限的通信資源,構(gòu)建傳感器網(wǎng)絡(luò)系統(tǒng)的底層通信結(jié)構(gòu),因此是傳感器網(wǎng)絡(luò)研究的一個重要方面。
文獻統(tǒng)計了傳感器節(jié)點中通信單元、處理單元和傳感單元的能量消耗,如圖1所示。從圖中可以看到,傳感單元和處理單元的能耗遠遠低于通信單元的能耗,而在通信單元的四種狀態(tài)中,能耗依次按休眠、監(jiān)聽、接收及發(fā)送遞增,所以盡量增大節(jié)點休眠時間是節(jié)省能耗的一個重要措施。目前傳感器網(wǎng)絡(luò)中的MAC協(xié)議都將節(jié)省能耗作為研究重點,大部分協(xié)議都是通過節(jié)點周期性休眠以及不需要時關(guān)閉無線電收發(fā)器來節(jié)省能量。
目前傳感器網(wǎng)絡(luò)中的MAC協(xié)議大致可以分為發(fā)送端啟動和接收端啟動兩類。在發(fā)送端啟動的同步協(xié)議中,各節(jié)點使用相同的休眠調(diào)度表,在各自規(guī)定的時間醒來參與通信活動,保證節(jié)點盡可能多地休眠而不會錯過任何一個數(shù)據(jù)。這類協(xié)議的典型代表有S-MAC、T-MAC等。此類協(xié)議可以極大地減少節(jié)點空閑監(jiān)聽的時間,但要求節(jié)點間保持精確同步,而其開銷卻是不可忽視的。在發(fā)送端啟動的異步協(xié)議中,各節(jié)點不需要按照相同的休眠調(diào)度表工作,發(fā)送端在有數(shù)據(jù)發(fā)送時在信道中發(fā)送一個長度略長于接收端休眠時間的前導(dǎo)信號,接收節(jié)點在醒來監(jiān)聽到前導(dǎo)信號時便開始接收數(shù)據(jù)。這類協(xié)議消除了顯式同步的需要,但由于大量的前導(dǎo)消息增大信道的壓力,降低了信道的整體利用率。這類協(xié)議的典型代表有B-MAC、X-MAC等。
接收端啟動的協(xié)議是近兩年提出的一種新協(xié)議,典型代表為RI-MAC。發(fā)送端有數(shù)據(jù)發(fā)送時在信道中靜默監(jiān)聽,接收端醒來后即發(fā)送信標(beacon消息),發(fā)送端在監(jiān)聽到信標后發(fā)送數(shù)據(jù)。該算法由于消除了發(fā)送端前導(dǎo)信號對信道的占用,提高了信道的利用率。但是在高負載情況下,發(fā)送端的盲等、過聽會造成節(jié)點能量的大量消耗,另外正在發(fā)送的節(jié)點可能會較長時間占用信道,導(dǎo)致其它節(jié)點的數(shù)據(jù)包傳輸延遲增大。
1 問題描述與分析
由上述分析可知,異步的RI-MAC協(xié)議沒有采用發(fā)送端前導(dǎo)偵聽技術(shù),這既是它的優(yōu)點,也是它的缺點。優(yōu)點是避免了某個發(fā)送節(jié)點長時間占用信道,缺點是發(fā)送端和接收端失去了有效的溝通渠道,在負載較大時可能導(dǎo)致發(fā)送端盲等和數(shù)據(jù)傳輸延遲增加。在圖2的例子中,S1和S2監(jiān)聽信道,等待各自的接收端R1和R2醒來。R2首先醒來發(fā)送beacon消息,s2向。R2發(fā)送數(shù)據(jù)。在此過程中R1醒來,發(fā)現(xiàn)信道被占用后轉(zhuǎn)入休眠。隨后S3監(jiān)聽信道準備向R3發(fā)送數(shù)據(jù),R3醒來后與S3建立數(shù)據(jù)傳輸。在此過程中S1再次醒來,發(fā)現(xiàn)信道仍被占用,再次轉(zhuǎn)入休眠。S1監(jiān)聽整個時間段,始終未監(jiān)聽到R1,數(shù)據(jù)傳輸被長時間推遲。
在發(fā)送端啟動的異步MAC協(xié)議中,前導(dǎo)被發(fā)送端用來獲取信道并聲明有數(shù)據(jù)發(fā)送,只要相應(yīng)的接收端如期醒來,數(shù)據(jù)傳輸就能夠完成。而RJ-MAC依靠接收端發(fā)送beacon消息來聲明自己的存在,能否進行數(shù)據(jù)傳輸要取決于是否有發(fā)送端正準備向其發(fā)送數(shù)據(jù)。也就是說,作為數(shù)據(jù)生產(chǎn)者或轉(zhuǎn)發(fā)者的發(fā)送節(jié)點,只能被動等待傳輸請求,卻無法主動要求進行數(shù)據(jù)傳輸。
作為一個異步MAC協(xié)議,RI-MAC去除了節(jié)點間的同步。這在避免節(jié)點同步開銷的同時,也使得發(fā)送節(jié)點無法知道接收端什么時候醒來。從而發(fā)送節(jié)點必須一直監(jiān)聽,直至數(shù)據(jù)成功傳輸。在圖2的例子中,S1長時間監(jiān)聽信道而得不到發(fā)送的機會。此外,接收端在接收完一幀數(shù)據(jù)后,使用beacon消息作為響應(yīng),發(fā)送端有數(shù)據(jù)可繼續(xù)向其發(fā)送。這種策略使得接收端一旦開始接收數(shù)據(jù)后,將一直占用信道,直到發(fā)送結(jié)束。
基于以上分析,本文考慮對RI-MAC協(xié)議進行改進。
2 IL-MAC協(xié)議設(shè)計要點
IL-MAC主要在以下幾個方面對RI-MAC進行改進:
2.1 自適應(yīng)前導(dǎo)技術(shù)
自適應(yīng)前導(dǎo)技術(shù)在網(wǎng)絡(luò)負載較輕時,發(fā)送端不使用前導(dǎo):在數(shù)據(jù)積累較多時,發(fā)送端發(fā)送前導(dǎo),主動請求數(shù)據(jù)傳輸,以期盡快進行數(shù)據(jù)傳輸。為此,每個發(fā)送端設(shè)定一個隊列長度門限Qmax。發(fā)送端有數(shù)據(jù)要發(fā)送時檢查隊列長度,小于等于Qmax則采用無前導(dǎo)方式,監(jiān)聽信道等待接收端醒來;若大于Omax,發(fā)送前導(dǎo)主動要求與接收端建立連接。
在圖3中,S的隊列長度小于等于Qmax,S監(jiān)聽信道等待R醒來;R醒來后發(fā)送hello消息;S聽到后向R發(fā)送數(shù)據(jù);R發(fā)送hello消息告知傳輸完畢。在圖4中,S的隊列長度大于Qmax,S主動發(fā)送一系列包含接收節(jié)點(R)地址的前導(dǎo)消息(preamble);R醒來后聽到前導(dǎo)消息,在前導(dǎo)發(fā)送的間隔回復(fù)hello消息;S發(fā)送數(shù)據(jù);R接收完畢后發(fā)送hello消息,告知接收完畢。
進一步地,算法還可以在每個數(shù)據(jù)包中加入產(chǎn)生時間或優(yōu)先級等信息,節(jié)點可以根據(jù)數(shù)據(jù)包的緊急程度選擇采用何種發(fā)送方式。
2.2 局部同步
RI-MAC的發(fā)送端并不主動尋求與接收端同步,而是靜靜地監(jiān)聽信道。IL-MAC通過引入局部同步來改善這一點。節(jié)點在廣播的hello消息中均包含該節(jié)點的休眠調(diào)度信息,這樣鄰居節(jié)點可以建立起一個休眠調(diào)度表。發(fā)送端有數(shù)據(jù)要發(fā)送時,先檢查鄰居休眠調(diào)度表;若表中有接收節(jié)點的休眠調(diào)度信息,可休眠并在接收端醒來前的某個時刻醒來;如沒有接收節(jié)點的調(diào)度信息,堅持監(jiān)聽信道。
一般來說,每個節(jié)點都有一個常規(guī)的休眠周期,即沒有數(shù)據(jù)收發(fā)情況下的休眠周期。自適應(yīng)前導(dǎo)技術(shù),在常規(guī)的休眠周期中引入一些臨時性的休眠調(diào)度,但臨時調(diào)度行為不會干擾節(jié)點固有的休眠調(diào)度周期。圖5為某個節(jié)點的實際休眠調(diào)度周期圖,其中每個slot為一個正常的休眠周期。節(jié)點在slot1收發(fā)完數(shù)據(jù)后休眠;在slot2醒來,發(fā)現(xiàn)隊列長度大于QImax,查看鄰居休眠表后再轉(zhuǎn)入休眠;若干時間后醒來發(fā)送前導(dǎo),與接收端完成數(shù)據(jù)傳輸后,再次進入休眠。在slot3醒來后,為等待接收端的hello消息而長時間監(jiān)聽信道,直至slot4完成傳輸后休眠;在slot5仍按時醒來。
由于晶振頻率的不一致,各節(jié)點會有計時上的誤差,即時鐘偏移,需要進行同步。節(jié)點在所發(fā)送的每個hello消息中都包含最近一次按常規(guī)調(diào)度醒來的時間,并在hello包上打上發(fā)送時間戳。收到hello消息的節(jié)點將包中的發(fā)送時間戳加上hello消息的發(fā)送延遲(消息長度/發(fā)送速度),得到鄰居節(jié)點的當前時鐘值(忽略信號傳播時間)。節(jié)點將自己的當前時鐘值減去鄰居節(jié)點的當前時鐘值,得到相對于該鄰居節(jié)點的時鐘偏移量。為減小估計誤差,可對最近n次的時鐘偏移量取算術(shù)平均值,作為當前時刻相對于該鄰居節(jié)點的時鐘偏移。
各節(jié)點通過與鄰居節(jié)點交換hello消息,獲得與鄰居節(jié)點的時鐘偏差,并以此修正鄰居休眠調(diào)度表。由于每個節(jié)點的調(diào)度周期相同,所以鄰居休眠調(diào)度表中只記錄每個鄰居最近一次常規(guī)調(diào)度醒來的時間。
2.3 競爭信道
在RI-MAC中,接收端接收完一幀后發(fā)送的beacon消息有兩個作用,一是告知數(shù)據(jù)接收完畢,二是詢問是否還有節(jié)點要向它發(fā)送。因此,正在通信的接收端具有優(yōu)先使用信道的權(quán)利,這在某些情況下會導(dǎo)致接收節(jié)點長時間占用信道。例如在一個樹型網(wǎng)絡(luò)中,所有節(jié)點都要向樹根傳輸數(shù)據(jù),越靠近樹根的節(jié)點轉(zhuǎn)發(fā)壓力越大。假如有兩個靠近樹根的節(jié)點是鄰居,就可能出現(xiàn)一個節(jié)點長時間占用信道,而另一個節(jié)點長時間無法接收數(shù)據(jù)的情況。
取消beacon消息的第二個作用可以較好地避免這個問題,即當一個節(jié)點接收完數(shù)據(jù)后放棄信道,然后所有節(jié)點重新競爭信道,這會使網(wǎng)絡(luò)中的數(shù)據(jù)傳輸更均衡。
2.4 消息格式
Hello包在IEEE 802.1 5.4的beacon幀基礎(chǔ)上設(shè)計,如圖6所示。其中,幀長度、FCF(Frame Control Field)和FCS(Frame Check Seq-uence)為原有的域。Hello消息增加了用于標記幀功能的H域、接收節(jié)點和發(fā)送節(jié)點ID,記錄最近一次常規(guī)調(diào)度醒來時間的sys域和hello包發(fā)送時間戳time-stamp。
節(jié)點發(fā)送的hello消息(查詢是否有發(fā)送給自己的數(shù)據(jù))中Dst及BW域為空,發(fā)生沖突后填入KBW值,確認傳輸成功的hello幀中填入Dst域,防止其它節(jié)點向其傳輸數(shù)據(jù)。H域的第一位(0/1)標識該幀是接收節(jié)點發(fā)送的探詢Hello消息還是響應(yīng)發(fā)送端前導(dǎo)的hello消息,第二位(0/1)標識該幀中BW域是否有效,第三位(0/1)標識該幀中Dst域是否有效,其余位置0。
圖7為前導(dǎo)消息格式,也是在IEEE 802.15.4的幀基礎(chǔ)上設(shè)計的,其中除Hardware Preamble、Frame length、FCF及FCS四個固定域以外,加入了接收節(jié)點ID(Dst域)。
3 仿真實驗
我們在NS2平臺上仿照了RI-MAC的實驗設(shè)置在網(wǎng)狀拓撲結(jié)構(gòu)下比較了RI-MAC與IL-MAC算法,其中節(jié)點傳輸半徑為250m,無線鏈路速率250 kb/s,前導(dǎo)包長度6個字節(jié),數(shù)據(jù)包長度50字節(jié),回退窗口大小0~255,最大重傳次數(shù)5次,自定義的Hello包長度為13字節(jié)。
實驗場景采用7×7的網(wǎng)格拓撲結(jié)構(gòu),每個格點上設(shè)一個節(jié)點,每個格子的邊長為200m,接收節(jié)點位于網(wǎng)絡(luò)中心,每個節(jié)點的通信半徑為250m。在實驗中利用不同范圍內(nèi)的節(jié)點依次產(chǎn)生數(shù)據(jù)包,在相關(guān)的空間范圍內(nèi)指定數(shù)據(jù)流來模擬網(wǎng)絡(luò)負載。實驗以接收節(jié)點為中心,依次采用9個節(jié)點(500m×500m,8個發(fā)送節(jié)點和1個接收節(jié)點)和49個節(jié)點(1500m×1500m,48個發(fā)送節(jié)點和1個接收節(jié)點)的正方形區(qū)域劃分為兩組實驗,在每組實驗中每個發(fā)送節(jié)點每秒產(chǎn)生10、20和30個包依次進行對比試驗。仿真時間為30分鐘,觀察網(wǎng)絡(luò)中的平均延遲、平均能耗以及吞吐量,取10次實驗的平均值作為實驗結(jié)果。
圖8、9為平均延遲隨節(jié)點發(fā)包數(shù)量變化的曲線。從圖8可以看出,在網(wǎng)絡(luò)中負載較低、節(jié)點數(shù)量較少時,IL-MAC中節(jié)點的平均延遲稍稍好于RI-MAC。而當節(jié)點數(shù)量增加時,如圖9所示,IL-MAC算法在延遲上要明顯好于RI-MAC。這是因為IL-MAC能夠通過發(fā)送端傳輸模式的變換及時進行傳輸,將一些延遲高的數(shù)據(jù)通過前導(dǎo)優(yōu)先發(fā)送。
圖10、11為平均能耗隨節(jié)點數(shù)量及發(fā)送速率的變化曲線。總的來說,IL-MAC協(xié)議在耗能上低于RL-MAC。由于IL-MAC在網(wǎng)絡(luò)初始化時需要進行局部同步,會有一定的額外開銷,因此在發(fā)送節(jié)點較少時IL-MAC的優(yōu)勢并不明顯。但是隨著發(fā)送節(jié)點的增多,節(jié)點之間的相互影響增大,IL-MAC通過睡眠調(diào)度節(jié)省能耗的優(yōu)勢逐漸顯現(xiàn)出來。如圖11中,IL-MAC在較高負載時的性能要遠遠好于RI-MAC算法。
圖12、13為平均吞吐量隨發(fā)送節(jié)點及發(fā)包速率的變化曲線。IL-MAC協(xié)議在9個節(jié)點的網(wǎng)絡(luò)中吞吐量與RI-MAC基本持平,在7×7的網(wǎng)絡(luò)中表現(xiàn)出較好的性能提升。由于去除前導(dǎo)技術(shù)在發(fā)送節(jié)點過多時,因接收端相同發(fā)生沖突的概率很大,會造成吞吐量下降。如圖13中,當發(fā)包速度提高到每秒30個包時,RI-MAC的吞吐量有一定的下降。而前導(dǎo)傳輸較少產(chǎn)生沖突,隨著局部同步的引入,發(fā)送節(jié)點能夠盡量縮短前導(dǎo)的長度,相比較于產(chǎn)生沖突的去前導(dǎo)來說,IL-MAC能得到更高的吞吐量。
4 結(jié)束語
本文結(jié)合傳感器網(wǎng)絡(luò)中發(fā)送端啟動和接收端啟動算法的優(yōu)點,設(shè)計和實現(xiàn)了一個能夠自適應(yīng)轉(zhuǎn)換前導(dǎo)發(fā)送模式并具有局部同步功能的IL-MAC協(xié)議。該協(xié)議根據(jù)發(fā)送端消息隊列的長度來決定是否采用前導(dǎo)發(fā)送模式,減少了接收端的饑餓狀態(tài);當網(wǎng)絡(luò)中負載較大時,避免了多個節(jié)點同時向一個節(jié)點發(fā)送數(shù)據(jù)帶來的沖突,確保發(fā)送端能盡快與接收端完成消息傳遞;采用局部同步算法,大大減少了發(fā)送節(jié)點實時監(jiān)聽的時間。IL-MAC在RI-MAC基礎(chǔ)上進行的一些改進充分利用了網(wǎng)絡(luò)中的調(diào)度信息,克服了RI-MAC存在的不足,有效地降低了網(wǎng)絡(luò)延遲,也在一定程度上克服了網(wǎng)絡(luò)中一些隨機、可變的因素,使算法性能更加穩(wěn)定、均衡。
此外在實驗過程中也發(fā)現(xiàn),由于本算法基于單信道通訊,若通信范圍內(nèi)有節(jié)點在傳輸消息,則鄰居節(jié)點只能進行休眠。而多信道可以利用不同的頻率同時進行傳輸,在很大程度上減少沖突的發(fā)生,提高網(wǎng)絡(luò)的吞吐量,下一步擬采用多信道傳輸?shù)腎L-MAC,使其能更好地適應(yīng)更多應(yīng)用的需要。