單 翔,姜勝明
(上海海事大學信息工程學院,上海201306)
多跳無線網絡是一種無中心的分布式網絡,在吞吐量、丟包率以及端到端時延等通信效率層面上具有較大的不確定性,而TCP是針對有線網絡設計而成,網絡中發生丟包即當做擁塞,在其中易產生擁塞誤判,通信效率低下。基于跨層設計思想產生的Semi-TCP協議,對傳輸層的端到端擁塞控制功能引入數據鏈路層的MAC層[1]。通過逐跳的擁塞控制,使得擁塞判斷更為準確,充分避免擁塞誤判,加快擁塞控制速度,明顯優化了多跳無線網絡下節點通信效率。
對于Semi-TCP協議,已經有過大量軟件仿真層面上的實現和測試,譬如文獻[2]中提出的一種基于RTS/CTS反饋機制的實現方法。文獻[3]中提出的在文獻[2]的基礎上改進RTSC/CTSC,使其攜帶擁塞信息。文獻[4]中提出的通過ACK攜帶擁塞信息,通知發送節點是否擁塞。文獻[5]中提出的在傳輸層和MAC子層之間增加一個虛擬層VTCP,通過VACK,即虛擬ACK幀來調節滑動窗口及發送速率,并且將RTS幀中的subtype字段修改,從而判定是否擁塞。文獻[6]中發明了在節點被動偵聽以及網絡中通信數據幀自動調度實現方法。在硬件仿真層面,文獻[7]以ARM開發板為實際節點,通過軟定義數據幀的方式,使得幀體域攜帶節點緩存信息,從而傳遞擁塞信息。文獻[8]以nRF51822藍牙開發板做為實際節點,提出了將Semi-TCP與ARQ聯合實現的方法。上述實現方法充分驗證了其可行性和優越性,但軟件仿真和硬件仿真都存在一定局限性,前者因為多跳無線網絡的復雜環境,很難進行精確建模,無法準確反映Semi-TCP在實際環境中的性能表現;后者目前僅局限于單跳網絡情形的實現和測試,因為硬件平臺自身MAC內存較小,不具備存儲轉發功能,難以構成多跳系統,雖得到的實驗數據較為準確,但靈活性差,成本高、效率低,在極端條件下無法獲得系統的性能指標。
針對上述問題,提出半實物仿真方法對Semi-TCP進行實現和測試。與文獻[2]-文獻[8]相比,該方法中Semi-TCP協議易于實現安裝,代碼量改動較小,仿真結果比軟件仿真更真實可靠,且不用受硬件仿真中MAC層內存的限制,網絡規模符合多跳情形。
Semi-TCP協議主要是針對傳統TCP協議中的擁塞控制功能進行改動,重新規劃了傳輸控制層以及數據鏈路層等各層功能分布。分離擁塞控制功能,將其引入到數據鏈路層中去。它僅保持可靠性控制功能。結合IEEE802.11的DCF機制在MAC層進行擁塞控制。Semi-TCP協議架構如圖1所示。

圖1 Semi-TCP協議架構
Semi-TCP協議是通過節點自身的擁塞判斷來進行無線網絡中的擁塞控制。判斷某節點是否擁塞,主要取決于該節點中的緩存值與擁塞閾值之間的關系。當緩存值超過設置的擁塞門限時,節點狀態變為擁塞狀態,節點快速將擁塞信息反饋給之前的節點。導致源節點很快可以控制網絡數據流量以減少擁塞。通過節點本身判斷是否發生擁塞,可以提高擁塞判斷的準確性,提高擁塞處理的效率,并減少網絡中的擁塞持續時間。
本文中Semi-TCP協議實現和測試場景為多跳無線網絡,具體包含兩個部分,虛擬場景和真實場景。
虛擬場景為運行Exata軟件的主機所構建的虛擬網絡。Exata是一款優秀的網絡仿真軟件,區別于前身QualNet,其擁有模擬和仿真雙內核,依靠完善的協議庫對無線網絡進行仿真,使仿真網絡可以準確替代實際的網絡環境。開發人員可以根據需要來添加和修改相關協議,是一個測試協議及其增強功能的良好平臺。Exata協議棧結構如圖2所示。

圖2 Exata協議棧結構
EXata協議棧的每一層都執行各自特定的網絡功能,通過仿真系統的函數庫自帶的接口(API)在相鄰層之間交換信息。不相鄰層無法直接通信。譬如,傳輸層中協議主要是提供發送方到接收方之間的數據傳輸,流程首先從網絡層獲取數據包,對數據包進行處理并將其傳遞給應用層;之后從應用層接收數據包,處理之后向下傳遞到網絡層。然而,傳輸層和MAC層的協議不能直接交換信息。如果為特定網絡設計了新的網絡協議,譬如本文所設計的Semi-TCP協議,研究人員可以基于跨層設計以編程方式實現。
真實場景為兩塊TiPot開發板以操作主機的身份所構建的真實網絡。TIPoT研發平臺套件是功能豐富的科學研究和原型開發平臺,用于實驗性研究或開發無線傳感器網絡原型設備,以及用于在基于IEEE 802.15.4的無線傳感器網絡上運行TCP /IPv6協議的解決方案標準。可以使用此平臺來設計和開發具有完整TCP /IPv6網絡功能的低能耗,低速率自組織無線傳感器網絡。用戶可以輕松地訪問自己的傳感器,添加網絡節點,并基于設計的IPv6無線傳感器網絡開發和評估新應用程序的功能和性能。
裝有Exata軟件的PC機作為仿真服務器,在仿真服務器中搭建虛擬網絡,兩個真實設備TiPot開發板作為操作主機,將操作主機與仿真服務器中的虛擬節點建立映射關系并通過修改相關函數配置映射參數,從而實現操作主機與仿真服務器的數據交互。此外,通過修改傳輸層TCP協議文件,并加入到Exata模型庫中的Makefile—common文件,來將Semi-TCP協議加入Exata自帶的協議棧,以此實現并測試Semi-TCP協議在多跳無線網絡中的通信效率。
半實物仿真(hardware in loop simulation)使用真實網絡設備在網絡中加載比較復雜難以模擬的部分,譬如一些隨機的、非線性的構成,簡單部分則在虛擬環境中進行建模[10]。相比于其它系統測試和仿真方法,譬如軟件仿真、硬件仿真等傳統測試方法,半實物仿真可以實現對真實環境模擬的更高的準確度,并且是仿真技術中置信度最高的方法[11],其主要有以下應用場景:
1)檢查構成實際系統的某些物理組件或全部系統的性能表現和可靠性。
2)仿真系統中的某些模塊難以精確建模一些隨機的、非線性的影響因素,導致仿真結果很難取得預期效果。
3)檢查實驗中建立系統是否正確可靠,數學模型的仿真結果的是否具有可信度。
本文實現基于Semi-TCP協議的半實物仿真平臺,平臺由真實和虛擬兩個場景部分組成。虛擬場景部分為PC機中運行的Exata軟件構建而成的仿真服務器,是一個典型的多跳無線網絡,如圖3所示;真實場景部分為TiPot開發套件所構成的操作主機,如圖4所示。

圖3 虛擬網絡實驗場景圖

圖4 真實網絡實驗場景圖
3.2.1 虛擬場景-Exata仿真服務器
虛擬場景的搭建包括以下部分:對真實網絡拓撲進行建模、對網絡中的每個節點建模、發送源建模以及信道建模等。本文實驗場景中設置8個無線節點,包括1個源節點、1個目的節點和6個中間節點,源節點和目的節點之間有一條CBR的業務流量,這些節點分布在500m*500m*100m的三維空間中,通信參數設置如表1所示。選用Exata自由協議庫中的TCP協議模型,在此基礎上加入Semi-TCP協議文件,建立基于Semi-TCP協議的仿真場景,對其進行仿真與分析。

表1 通信參數設置表
3.2.3 真實場景-Tipot操作主機
真實場景部分為TiPot開發套件所構成的操作主機,該開發板使用基于ARM Cortex的 STM32F103微處理器(MCU),其無線通信由符合IEEE 802.15.4標準的ATMEL AT86RF231無線收發芯片實現。使用免費的開源嵌入式操作系統Contiki,在映射為虛擬節點之前,使用C++語言編寫客戶端和服務端收發函數對操作主機進行收發TCP通信測試。
左邊開發板為發送節點,發送信息“Semi-TCP半實物仿真平臺測試<序列號>from shanxiang.”到接收節點。右邊開發板為接收節點,接收從發送節點發來的數據流,最終在Eclipse的Console窗口中與RSSI(接收信號強度)以及LQI(鏈路質量指示)數據一起顯示,如圖5所示。

圖5 開發板通信試驗測試圖
測試實驗具體包含以下步驟:
1)用J-Link仿真器連接客戶端節點板并刷TCP-client固件。
2)斷開客戶端節點板和J-Link仿真器的連接。
3)用J-Link仿真器連接服務器端節點板并刷TCP-server固件。
4)客戶端節點板連接上電源(比如用另一條micro USB線接到計算機)。
5)在Eclipse里運行服務器端的應用。2.3 Semi-TCP協議實現方法
在前面真實場景和虛擬場景分別搭建完成之后,需要將真實網絡接入虛擬網絡,使兩者能夠連接為一個整體半實物網絡,進行數據流的通信交互,Semi-TCP半實物仿真平臺整體示意圖如圖6所示。

圖6 Semi-TCP半實物仿真平臺
操作主機映射接入主要包括以下步驟:
1)三者通過路由器或者以太網交換機連接在同一個局域網下面;
2)將網關地址設置為仿真服務器的IP地址;
3)仿真服務器主機上運行Exata軟件并搭建多跳無線網絡場景;
4)在Exata軟件工具欄中選擇仿真模式為Emulation,之后選擇Mapping按鈕,在連接管理器對話框中為兩個操作主機分配IP地址,如圖7所示。

圖7 IP地址分配圖
最后,在Exata無線網絡協議模型庫中加入semi-TCP協議進行實現和測試,步驟如下:
1)創建頭文件和源文件,并修改
transport.cpp以包括協議頭文件;
2)在傳輸層協議列表中添加協議并追蹤協議,定義協議數據類型,決定協議特定的配置參數格式;
3)閱讀協議的參數類型并調用從傳輸層協議初始化方法TRANSPORT_Initialize進行初始化;
4)編寫協議的構造函數;
5)調用協議事件調度器TRANSPORT_ProcessEvent;
6)在協議頭文件api.h里面聲明新的事件類型;
7)與網絡層集成協議,為協議定義一個ip協議號,撰寫一個函數來使iP層發送數據到協議,調用函數DeliverPacket來從ip層發送協議;
8)把代碼加入到不同的函數中來收集數據;
9)從傳輸層析構函數TRANSPORT_Finalize調用協議析構函數;
10)編寫協議析構函數,在協議析構函數中調用該函數來輸出統計信息;
11)在EXata和編譯中包括頭文件和源文件;
12)修改GUI設置文件,在ExataGUI中使用該協議文件。
Exata中的包含的Analyzer分析器可以對實驗結果進行分析,針對Semi-TCP協議,本文從平均端到端時延、平均丟包率以及平均吞吐量三個指標來衡量其性能。首先,分別在半實物仿真方法和軟件仿真方法下對Semi-TCP協議進行測試,對比并分析兩種方法的差異性;接著在本文所搭建半實物仿真平臺的基礎上將其與傳統TCP以及TCP-AP進行比較,驗證其在多跳無線場景的可行性和優越性。
對虛擬節點1和虛擬節點2不進行地址映射操作,在同一場景下針對Semi-TCP協議進行軟件仿真測試,和半實物仿真進行對比,性能指標如圖8、9和10所示。選定發送頻率為1次/s,針對兩種不同的方法列出具體的通信指標量,如表2所示。

圖8 平均端到端時延

圖9 平均丟包率

圖10 平均吞吐量

表2 方法對比表(1次/s)
分析上述圖表可知,在發送頻率為0.1次/s的時候,兩者通信效率大致相等,差值接近為0%,當隨著發送頻率以0.2次/s的間隔逐漸增大,半實物仿真的通信效率明顯差于軟件仿真,差距接近于30%~40%,但是更接近于真實數據[7],分析主要兩個原因:第一,半實物仿真的網絡配置模式為真實網絡-虛擬網絡-真實網絡,較之軟件仿真的純虛擬網絡,需要經過真實數據流和虛擬數據流的轉換過程;第二,真實網絡的環境遠比虛擬網絡復雜得多,對通信效率有更多的影響因素。考慮到半實物仿真將實物設備加入到仿真場景,可以比軟件仿真獲得更加真實的測試數據,后續仿真中也將在本文所搭建Semi-TCP半實物仿真平臺下進行半實物實驗,從而提高仿真置信度,為Semi-TCP協議的不斷完善和開發相關硬件設備的提供真實可靠的仿真依據。
同樣是從平均端到端時延、平均丟包率和平均吞吐量三個通信指標出發,本文在搭建的半實物仿真平臺的基礎上,對Semi-TCP和TCP以及TCP-AP三種協議進行測試,比較三者在多跳無線網絡中的性能表現。如圖11、12和13所示。選定發送頻率為1次/s,針對三種協議列出具體的通信指標量,如表3所示。

圖11 平均端到端時延

圖12 平均丟包率

圖13 平均吞吐量

表3 協議性能對比表格(1次/s)
分析上述圖表可知,當發送頻率為0.1次/s的時候,三種協議通信效率大致相等,此時看不出優劣。當發送頻以0.2次/s的間隔逐漸增大,網絡中的通信效率明顯變差,相比之下,Semi-TCP協議的通信效率仍然是其中最好的,比傳統TCP高20%,比TCP-AP高10%左右。分析主要有以下原因:一是剛開始數據量少,網絡負載較小,導致數據沖突量少,隨著發送頻率不斷增大,網絡中負載也隨之不斷增大,數據沖突量急劇增加;二是三種協議的擁塞機制的區別,TCP認定丟包即擁塞,持續調整滑動窗口使得發送速率得以減小,TCP-AP通過判斷丟包的類型而改變發送優先度,Semi-TCP能夠精確到節點之間的擁塞,準確的對節點進行擁塞調節。
對于軟件仿真無法準確還原真實環境,硬件仿真受限于MAC層內存及網絡規模等問題,提出半實物仿真方法,搭建半實物仿真平臺,在此基礎上對Semi-TCP協議進行實現和測試。仿真結果表明,在多跳無線場景下,Semi-TCP比TCP協議及一些改進的TCP協議通信效率更好;與軟件仿真相比,半實物仿真具有更高的置信度水平。后續將在本文所搭建的Semi-TCP半實物仿真平臺基礎上對Semi-TCP協議進一步研究,以期提出更好的實現方法。