張紹鳳,羅佳偉,姜勝明
(上海海事大學信息工程學院,上海 201306)
Semi-TCP[1]通過將TCP的擁塞控制下放到鏈路層,已經提高了無線多跳網絡下的擁塞控制性能[2],但是實現可靠性控制的ARQ重傳機制和TCP并沒有結合,因此導致ARQ傳輸節點傳輸壓力很大,針對該種現狀,Semi-TCP與ARQ協議相結合的差錯控制的研究是很有意義的。ARQ是一種基于幀的差錯控制技術[3],主要是通過重傳鏈路中丟失或出錯的數據幀來提高數據傳輸的可靠性,一般來講,ARQ協議涉及了以下機制:鏈路錯誤檢測、定時器、確認和重傳。當發送方無法確認接收方是否正確收到某些數據幀時[4],它就自動重傳這些幀。因此提出在無線多跳網絡下,通過將數據鏈路層的ARQ協議和現有Semi-TCP聯合實現來提高數據傳輸可靠性。
Semi-TCP協議已經在實際平臺ARM開發板得以實現[3],現基于ARM內核的nRF51822開發板,通過C語言修改相關函數完成數據收發、手動定義發送幀、以及設置相應參數、不修改已有MAC層的底層幀和現有的硬件配置信息,完成鏈路層ARQ協議的添加并進行功能和性能測試[5]。
差錯控制一般是指監測和改正錯誤數據包的機制[6]。大多數ARQ的差錯控制技術是基于ACK/NACK和重傳。一般情況下有三種基本的ARQ理論[7]:stopand-wait ARQ,go-back-N ARQ 和 selective-repeat ARQ。
在stop-and-wait ARQ中,發送端每發出一個數據包都必須等待確認信號,在收到確認信號之前不發任何新的數據包。它的主要優點是構造簡單、算法復雜度低,缺點是效率低下,目前很少單獨使用。在goback-N ARQ中,發送端不考慮接收端的接收情況連續發出數據包,若沒有錯誤產生,接收端確認所有收到的幀。如果接收端檢測到錯誤,則向發送端發出NACK信號,發送端收到此信號后開始重新發送從錯誤包開始之后的所有數據,這樣以來重發的數據包個數N不能確定,因此稱作go-back-N ARQ。在接收端,如果一個數據包存在錯誤,那么在此數據包之后所收到的N個數據包都將被丟棄。這種算法的主要優點是復雜度低,缺點是信道利用率不高,當信道條件較差的時候通過率急劇下降。在selective-repeat ARQ中,僅重傳錯誤數據包。它的效率最高,但是存在一個影響其應用的缺點:為保證重傳數據包邏輯順序的正確,接收端需要一個足夠大的緩存來存儲已經接收到的所有數據包直到錯誤數據重傳成功。隨著傳輸速率的加大,這種重傳方案所需要的緩存數量是驚人的。
基于nRF51822開發板低功耗并且接收到數據能及時轉發同時擦除緩存數據,采用selective-repeat ARQ相對較適宜,因此主要實現selective-repeat ARQ的算法流程。
ARQ協議的實現場景適用于無線網絡場景下,而nRF51822作為一個一款集成nRF51x系列無線收發器的超低功耗的片上系統(SoC),包含32位ARM Cortex-M0 CPU等,同時具有完善的藍牙協議棧,支持網絡協議的添加和更改,是測試協議及其增強的良好平臺,藍牙協議棧的無線架構如圖1所示。

圖1 藍牙協議棧無線架構概覽
圖1中從上到下依次是應用層、主協議層以及控制層,其中控制層(Controller)中從下到上分別是物理層、數據鏈路層和主機控制層(HCI),這三層主要位于控制器中。其中物理層主要負責從信道中發送接收數據,使數據符合數據流的格式;而數據鏈路層則負責鏈路的管理和控制,包括創建、維護、釋放等;主機控制器則負責與數據無關的藍牙系統的操作,例如詢問藍牙設備是否存在,連接藍牙設備,或者讓本地的藍牙可以被其他設備發現或連接。為了執行響應的功能,HCI要求及通過基帶的資源控制器訪問傳輸媒介。同時,設備管理器還通過HCI命令控制本地設備的控制行為。
主協議層(Host)包括邏輯鏈路控制和適配協議(L2CAP),應用程序和服務提供了基于信道的抽象,包括進行數據分片化和組裝應用程序的數據,復用和反復用多通道共享一個邏輯鏈路。除了L2CAP,主協議層還包括安全管理協議(SMP)和屬性協議(ATT);安全管理協議(SMP)負責使用信道實現設備之間安全功能,屬性協議(ATT)提供了在一個固定的L2CAP信道上傳輸少量數據的方法,也用于確定其他設備的服務和其他設備的功能;而通用屬性(GATT)配置文件指定了配置文件數據交換的結構,該結構定義概要文件中使用的基本元素,如服務和特性;最后通用訪問配置文件(GAP)定義了藍牙設備的基本要求。
應用層(Apps)上定義了三種規范:特征、服務和概述。每種規范都是建立在GAP上,GAP定義了特征和服務的屬性,應用層則定義如何使用這些屬性組。
nRF51822屬于挪威NORDIC公司推出的nRF51系列2.4G無線低功耗片上方案解決系統中的一員,以Cortex M0內核為基礎,結合BLE4.0的SoC,因此開發軟件也與其他ARM芯片類似,都采用Keil進行開發,而Keil MDK-ARM是美國Keil軟件公司出品的支持ARM微控制器的一款集成開發環境,包含了工業標準的編譯器和調試器等組件,是目前來說比較完善的開發環境。一般而言,nRF51822芯片有兩種開發方式,一種是直接在上面編寫應用程序;一種是使用nRF51822的SoftDevice,SoftDevice是一個低功耗藍牙協議棧,這個協議棧并沒有像TI一樣做成系統形式直接和應用代碼一起下載,而是先必須把協議棧燒錄到芯片內,然后再用Keil通過仿真器下載應用代碼,并且安裝協議棧工具nRFgostudio來實現協議棧的代碼。
ARQ協議的實現關鍵在于對于幀結構的定義以及定時器的設置。就停等式ARQ協議而言,發送數據的同時設置定時器開始計時,接收端收到數據則發送ACK確認幀,定時器規定時間內收到接收端的確認幀則發送成功,若數據幀在發送過程中丟失,則不會產生確認幀,等定時器時間到后重新發送該數據,若確認幀丟失,則也重新發送,最后若定時器未超時,數據校驗后出現錯誤,也要重傳數據。該ARQ協議實現流程如圖2所示。

圖2 ARQ算法實現流程圖
在進行協議添加之前首先需要完成協議棧的初始化,其中包括使用timers_init()函數完成定時器的初始化,以及使用ble_stack_init()完成藍牙協議棧的初始化,同時還有使用device_manager_init(eraser_bonds)完成設備管理初始化等,還包括使用gap_params_init()函數完成GAP參數的初始化,使用services_init()函數完成服務初始化和使用conn_params_init()函數完成更新過程的初始化,更為重要的是需要使用nrf_esb_init()函數完成esb初始化,然后通過nrf_esb_enable()函數打開esb。開發板進行通信之前也需要完成相應的參數配置,參數配置完成以及初始化完成后進行數據的相應發送和接收,主要通過application_timers_start()實現定時器開始計時,使用nrf_esb_add_packet_to_tx_fifo()將相應數據加入發送隊列,發送方板子通過rx_char_add發送數據,接收方板子通過tx_char_add接收數據,接收到數據之后查看定時器時間,若未超時則觸發函數發送ACK確認幀,然后根據判定條件完成數據分析,若判定條件為正確的,則完成一次數據發送。若規定時間內未收到發送數據或者數據分析判定條件顯示錯誤,則不發送ACK確認幀,只等待數據的下一次發送。發送方在規定時間內未接收到ACK確認幀,則重新發送數據。
測試的目的主要是為了測試ARQ協議添加之后網絡是否出現異常以及ARQ協議是否按照最初設想完成相應協議功能。測試環境首先需要兩臺開發板測試機,一臺作為發送方測試機,一臺作為接收方,然后通過端到端的連通測試工具ping命令對網絡連通狀態進行判斷和分析[2],通過ping命令的反饋查看網絡連通狀態是否良好,是否連接暢通;其次在通過ARQ協議收發ACK確認幀數據的同時,也設置了相應的收發判斷函數,通過該判斷函數查看數據是否同ACK幀反應的收發情況一致。
通過ping命令反應發送方與接收方之間網絡連接暢通,丟包率為0,只是時延略有一點延長;同時通過函數 void nrf_esb_tx_success(uint32_t tx_pipe,int32_t rssi)以及函數 void nrf_esb_tx_failed(uint32_t tx_pipe)以及函 數 void nrf_esb_rx_data_ready(uint32_trx_pipe,int32_t rssi)以及 void nrf_esb_disabled(void)完成結果測試,最終發現測試函數反映的數據收發情況與ACK確認幀反映的數據收發情況一致。
隨著對網絡協議的研究深入,網絡協議在實際平臺上的實現與測試也變得愈發重要。在實際平臺nRF51822開發板,通過函數的調用與協議棧的參數設置聯合實現Semi-TCP與ARQ協議,并通過建立ARQ不同的糾錯能力的多個場景,根據具體測試函數完成對該方案的測試,對其的性能進行分析。由此得知,Semi-TCP與ARQ協議的聯合實現,確實在一定程度上提高了通信的可靠性,減小了ARQ節點傳輸壓力,但仍需在平臺不斷調試優化。
[1]Jiang Sheng-ming,Zuo Qin,Wei Gang.Decoupling Congestion Control from TCP for Multi-hop Wireless Networks:Semi-TCP[C].Proc.of the 4th ACM Workshop on Challenged Networks.Beijing,China:ACM Press,2009.
[2]劉杰,姜勝明.Semi-Tcp協議在ARM開發板RP4412下的實現方法.上海:1007-1423(2017)11-0065-05,2017-04-10
[3]謝希仁.計算機網絡[M](第4版).北京:電子工業出版社,2003.
[4]莫國慶,馬濤.具有鏈路層ARQ機制的TCP研究.解放軍理工大學,2007.
[5]熊晨霖.Semi-TCP在海洋互聯網中的應用仿真研究[D].華南理工大學,2016.
[6]劉梅,姜勝明,陸以勤.無線多跳網絡中Semi-TCP協議的實現[J].計算機工程,2012(09):79-82.
[7]W.Stallings.Data and Computer Communications.Upper Saddle River,NJ.Prentice Hall,1997.