韓多亮,杜秀娟,朱建連
(青海師范大學 青海省物聯網重點實驗室,青海 西寧 810008)
隨著海洋資源在國際競爭中的地位日益重要,海洋開發和信息產業不斷發展,水下傳感器網絡(Under-Water Sensor Network, UWSN)成為人們研究的熱點,可廣泛應用于海洋資源勘探、海洋環境監測以及資源開發等領域[1]。水下傳感器網絡具有長延時、低帶寬和高誤碼率等特點,在一定范圍內信號不能同時傳輸,所以水下傳感器網絡是共享信道??梢姡O計節能、高傳輸可靠性的MAC協議,在水下通信中非常重要[2]。
合理有效的MAC協議是解決UWSN通信中數據包沖突的有效方法。MAC協議根據節點對信道的占用方式,主要分為無競爭的MAC協議和基于競爭的MAC協議[3]。無競爭的MAC協議有TDMA、FDMA和CDMA,根據水下信道的特殊性,實現水聲通信的資源復用。基于競爭的MAC協議,節點通過隨機接入信道或者握手進行信道預約,然后有選擇性地接入信道[4]。
針對水下傳感器網絡,研究者已經提出了很多MAC協議。
夏威夷大學于1968年提出了Aloha協議,節點只要有數據產生,就會將數據立即發送到信道上,若在規定時間內收到回復,則表示發送成功;否則,發送節點重新發送數據。傳輸過程中,如果數據產生沖突,則會等待一段隨機的時間再次發送,直到數據成功發送為止[5]。該協議在數據傳輸過程中重傳和沖突處理機制較少,導致交付率和能耗較大。
Roberts等于1972年提出了時隙Aloha協議,將時間分為離散的時間片,節點如果要發送數據,必須等到下一個時間片開始,因此避免了節點隨意的發送數據[6]。與Aloha協議相比,時隙Aloha協議減小了信道沖突,節約了能耗,但沒有對重傳和回復確認做處理,沖突較大,能量損耗嚴重。
Marcal Molins等提出了Slotted FAMA協議。該協議引入了時隙結構,節點在數據傳輸過程中進行三次握手。節點在發送數據前利用控制報文預約信道,如果預約成功,則在時隙開始時發送報文;如果預約失敗,則節點進入退避狀態,等待下一次的信道預約[7]。該協議保證了在某一時刻信道上只有一對節點進行通信,有效減少了通信中的報文沖突。
Professor Du 等提出了一種基于RLT編碼的無握手可靠傳輸的MAC協議(RLT Code Based Handshake-Free,RCHF),節點根據自身和鄰居狀態進行數據的發送與接收[8]。本文針對RCHF MAC協議實驗過程中發現的問題進行優化改進,利用NS3網絡平臺進行仿真,并在青海湖進行測試,根據實驗過程中的輸出信息,對改進后節點的狀態和層級變化進行驗證。實驗結果表明,改進后的RCHF MAC協議能準確及時地更新節點的狀態和層級。
網絡初始化狀態:30個傳感器節點隨機均勻分布在M×N×N的長方體內。1個sink節點布在水面(長方體上表面),模型如圖1所示,圖中“·”表示傳感器節點,“●”表示sink節點,假設水下傳感器網絡具有以下性質:
(1)水下傳感器網絡是由固定在水下的靜態節點、懸浮在水中的動態節點和水面的sink節點構成;
(2)所有節點都具有唯一的ID,非sink節點均勻地分布在水下;
(3)節點能感知本身的深度信息;
(4)節點根據預先設置好的功率進行數據通信,部署完成后,功率不再發生改變;
(5)節點根據數據獲取時間,周期性采集信息,并將數據傳送至sink節點;
(6)節點具有相似的處理數據的能力[9]。

圖1 網絡模型
RCHF MAC協議中,源節點將數據包分組為k個數據塊。然后,源節點對分組后的數據包編碼并發送。編碼后的分組會被逐跳轉發至sink節點,從而上傳至服務器。
網絡初始化后,每個節點維護一個鄰居動態表,主要包括節點的id、層級和狀態。狀態字段記錄鄰居節點的實時狀態。狀態“0”表示鄰居節點處于發送狀態,狀態“1”表示鄰居節點處于接收狀態,“2”表示處于未知狀態,“3”表示鄰居節點處于發送避免階段。
當節點具有發送數據資格時,先在鄰居表中搜索狀態為“2”或者“3”的下一跳節點,如果發送節點自身狀態為接收或者未知,發送節點則發送第一幀,并將自己的狀態切換為接收狀態,準備接收接收節點回復的第一幀確認控制報文(ACK)。收到第一幀ACK后,將剩余的N-1幀發送出去,再將自己的狀態切換為接收狀態,準備接收最后一幀ACK控制幀。如果狀態為“0”或“1”,它將推遲交付,直到狀態大于“1”。
數據發送流程如圖2所示。

圖2 發送數據流程
在ACK控制幀中,主要包括接收節點接收的幀的數量和錯誤率。通過比較原始包的個數和幀中塊的大小,判斷是否接收完整。如果接收節點能夠重組整個數據塊,發送節點收到ACK后,通過解析ACK控制幀;如果未收到的幀序號為0,則將自己的狀態置為“3”;如果不能重組整個數據塊,根據ACK中未收到的數據幀序號,發送節點將未收到的數據重新編碼發送給接收節點。
ACK控制幀部分信息如表1所示。

表1 ACK控制幀部分信息
當節點收到數據后先解碼,更新鄰居表,根據幀內的接收節點的id號,判斷節點本身是否是接收節點。若不是,直接丟棄數據包;若是,則判斷該幀是否是第一幀。若是,則開啟定時器并立刻回復ACK控制;若不是,則將數據發送出去。接收數據流程如圖3所示。

圖3 接收數據流程
目前,RCHF MAC協議已經應用于湖試和仿真實驗。實驗過程中,對協議做了改進與優化:(1)在ACK控制幀中添加一個控制字段,用于判斷接收節點是否成功接收數據,并直接區分接收數據的類型;(2)對鄰居表的更新做了改進,以保證節點能正確及時更新節點的狀態和層級。
在ACK確認幀幀格式中,數據字段起始處添加一個數據類型確認字段,占2比特,其中第一比特表示接收節點對一個數據幀和數據塊的確認。該比特為“0”時,表示接收節點對一個數據幀的確認;該比特為“1”時,表示對一個數據塊的確認。第二個比特表示接收節點是否完全重構數據包。該比特為“0”時,表示接收節點已經對一個數據塊中的所有原始包成功重構;該比特為“1”時,表示接收節點未完全重構一個Block中的所有原始包。優化后的ACK控制幀格式如表2所示。

表2 ACK控制幀部分信息
發送節點收到ACK控制幀,即可根據ACK幀格式中的數據字段起始處的控制字節的第二個比特,確定自身下一步的狀態和進程。若第二個比特為“0”,則發送節點將進入傳輸避免階段;若第二個比特為“1”時,則發送節點對未恢復的原始包進行重新編碼,并發送給接收節點。發送節點和接收節點可以直接根據第2個比特位的值改變自身狀態,從而確保節點的狀態能正確及時改變。
通信過程中,數據的發送與接收均基于節點狀態,所以鄰居表的維護和更新在通信過程中至關重要。
實驗中發現,節點位置發生變化,由兩跳鄰居轉變為一跳鄰居后,節點層級仍保持不變,說明問題的拓撲如圖4所示。其中,1號節點是sink節點,4號節點是源節點。實驗初始時,3號節點是1號節點的兩跳鄰居,層級為3;當3號節點位置發生變化后,3號節點變為1號節點的一跳鄰居,3號節點的層級應更新為2,但一段時間后3號節點層級仍然未變,數據傳輸不能正常進行,能耗增加。

圖4 實驗拓撲
在每個節點的鄰居表中增加一個老化時間,一段時間后節點將直接刪除鄰居表中老化時間已到的鄰居。當節點收到廣播和數據包時,根據鄰居表中的信息及時更新鄰居表,更新自身的狀態和層級,以保證數據的正常傳輸。
NS3是一款面向網絡系統的離散事件仿真軟件,相比于NS2,各層均進行了改進,得到了教育研究機構的認可。仿真實驗基于NS3進行,網絡模型如圖1所示。
根據網絡模型部署節點,針對問題和提出的解決方案進行開發實現,協議改進優化的部分代碼如下:

對協議優化進行技術上的實現后,進行湖試和仿真實驗,并對實驗過程和實驗結果中節點的狀態、層級進行分析。結果表明,經過優化改進,當節點發生移動時,節點能夠及時準確地更新層級,并根據鄰居表中的信息更新節點狀態。圖5為仿真實驗時輸出的信息,圖6為湖試時輸出的信息。

圖6 實驗輸出信息
實驗過程中,對ACK控制幀中的數據類型確認字段進行驗證,根據兩個比特值的變化,可以判斷接收節點是否成功重構數據并區分確認的數據類型,及時更新狀態。
隨著海洋資源在國際競爭中的地位日益重要,水下傳感器網絡在未來的海洋開發中將迎來更廣闊的使用前景。水下環境復雜多變,對各層協議的要求不同。MAC協議在數據傳輸過程中占據重要地位,因此本文就RCHF MAC協議在應用過程中發現的問題進行分析,做出優化改進。仿真結果表明,節點可以根據ACK控制幀和鄰居表中的信息及時更新狀態,節約了能耗,提高了傳輸可靠性。