方嬌莉,劉 明
(昆明理工大學計算中心,云南昆明650093)
在嵌入式系統的通信中,一般采用232或485方式進行通信。近年來,為了兼容性與擴展性的考慮,多數嵌入式系統設計中,已經逐步開始采用了IP協議模塊進行通信。一般在嵌入式系統中,通信的特點是:數據傳輸量少,而響應速度要求高。傳輸層協議中的UDP協議使用盡最大努力交付的特性能夠滿足數據高速傳輸的要求,但不能保證數據傳輸的可靠性。目前,對UDP協議的可靠性應用設計已有一些探討和論述,[1]大多卻設計過于復雜而不適合嵌入式系統。在嵌入式系統中,由于內存小,處理性能有限,對實現的算法要求簡捷、高效。這里主要針對嵌入式系統的特點,提出了一系列有效的算法,實現了嵌入式系統中數據的可靠傳輸。
在Internet協議族的傳輸層中,有兩種協議:TCP和UDP。TCP協議是可靠的傳輸協議,但開銷較大,尤其在建立和釋放連接時需要多次應答,會帶來較大的傳輸延時,很難滿足實時性要求較高的嵌入式系統的需求。UDP協議是一種無連接的協議,即發送數據時不需要建立連接,不保證數據的可靠傳輸。因此UDP協議傳輸速率高,同時無需像TCP協議那樣維護連接狀態表,而系統開銷較小,比較適合于在嵌入式系統中使用。在網絡質量比較高(如:局域網或光纖網絡)的通信環境中,直接使用標準UDP協議進行通信,可以保證數據的正常傳輸。而在通信質量不太高的網絡(如:Internet因特網),大量的測試表明,丟包率往往會達到30%以上,而不能保證系統的正常運行。因此,如果采用標準UDP協議進行通信,必須加入可靠性控制,建立基于UDP協議的可靠傳輸協議(RUDP)。也可以說,在應用層對UDP數據報進行可靠性控制。
通常在傳輸協議實現要素上,[2]包括:連接管理、流量控制與緩沖、多路復用、確認技術、出錯重傳等。如果在RUDP的實現中,將流量控制、連接管理、確認及出錯重傳等機制全都考慮進去的話似乎成了另外的一種TCP協議,[3]很難達到減少系統開銷,提高實時性而滿足嵌入式系統開發的需求,也失去了RUDP設計與實現的意義。考慮到嵌入式系統的特點:實時性要求高和數據傳輸量小。在設計上不考慮連接管理,主要考慮數據確認技術、出錯重傳機制、緩沖區管理的實現以及簡單的流量控制,以期提高可靠性的同時,能夠保證系統的實時性。在嵌入式系統中,網絡體系結構如圖1所示,UDP可靠性應用協議(RUDP)工作在應用層(也可以看做是一個獨立的層次)。對應網絡層次結構,數據分組形成嵌套層次。
(一)數據分組。
數據分組分為兩種類型:數據報文和應答報文。數據報文為上層業務功能模塊提供有效的數據,應答報文僅用于接收到數據報文時進行應答。這兩種數據分組,從嵌套層次來看,都是UDP數據報的凈荷。格式如圖2所示,數據分組由首字節+數據構成。首字節的首位為標記位,標記位為0表示數據報文;標記位為1表示應答報文。首字節的后7位為序號,序號僅取7位,取值范圍為0~127。序號主要是考慮到嵌入式系統的內存較小,不能緩存過多的數據。如果系統內存開銷允許的情況下,可以適當增加序號的位數,以便能緩存更大的數據。


(二)數據發送緩沖區管理。
確認技術是提高可靠性的重要機制。在TCP協議中使用了多種確認技術,但都會導致較大的系統開銷和延時而不適合于嵌入式系統中使用。停止等待協議比較簡單,易于實現,但執行效率將會是很低,[3]延時較大。為提高實時性,提高傳輸速度,不必等待一個數據報文發送成功后,再發送下一個數據報文,就需要設置緩沖區。在嵌入式系統中,為盡量節省內存,緩沖區管理方面,只考慮發送緩沖區的管理。緩沖區管理是實現數據可靠傳輸的關鍵。緩沖區的大小由數據分組的序號確定,這里使用首字節的的7位序號,緩沖區的最大值為128,即最大能緩存128個數據分組。使用循環數組結構,形成一個環形隊列。數據分組的序號同時也對應著數據在緩沖區中的位置,其基本結構圖3所示。發送緩沖區管理的核心就是緩沖區釋放與分配,集中體現在序號的管理,接下來將詳細論述實現的流程。

(三)數據發送的實現。
如果有數據要發送,必須先獲得一個空閑的存儲空間的序號,將數據放入對應的緩沖區隊列中。如圖4所示,定時器中斷后即檢查緩沖區中是否有待發數據。而在發送過程中,發送次數和發送計時器是發送設計中的關鍵。發送計時器管理同一個數據報上次發送和當次發送的時間間隔,這個時間間隔不能小于某一設定值。這樣做的目的是為了讓接收方來得及處理和接收,根據發送成功率動態改變時間間隔的設定值在這種RUDP協議中可以實現簡單的流量控制。其基本思想是:在發送成功率高的情況下適當減少時間間隔;發送成功率降低的情況下,適當加大時間間隔。發送次數管理,是為了避免數據無限制的發送下去,通過發送次數的管理可以及時判斷網絡物理連通性。

序號按順序獲取,往往在系統運行一段時間后,序號會變得不連續。序號是否連續在這一層并不重要。在嵌入式系統中,通常數據量小,一般情況下,一次傳輸的數據只需要一個數據報就能完成,不需要多個數據報進行組合,而更重要的是實時性。在需要多個數據分組組合的情況下,相關的處理交于上一層的應用來完成。當接收方收到數據分組后,立即向發送方發送應答分組;發送方根據應答分組的序號,釋放相應的緩沖區。
(四)數據接收的實現。
數據接收相對于發送管理較簡單,如圖5所示。進入定時中斷程序后,即檢查是否有有效數據。在數據校驗方面,為了避免過大的開銷,僅采用UDP協議中的簡單的校驗和方式進行數據校驗。如果需要較強的檢錯能力,可以在應用層來實現。接收數據流程的關鍵是判斷應答數據報還是數據報,如果是應答數據報,表明接收方已經接收到了該序號對應的數據,則將對應的數據包從發送緩沖隊列中移除。如果是數據包則交由上層應用來處理,同時向發送方發送應答數據包。

測試環境的建立,可以在互聯網環境中,通過運行多種通信軟件模擬一個擁塞的網絡環境進行測試,通過ping測試在丟包率達到30%的情況下,若采用標準的UDP協議進行傳送數據,其丟包率仍然在30%左右,也就是標準UDP協議的丟包率基本和ping測試的丟包率一致的。應用這種可靠的UDP協議,重發次數設置為3,計時器重復時間間隔初始值設為300ms,可以保證數據正常的傳送,丟包率為0。這種方式較大程度上提高了數據傳輸的可靠性,與此同時由于減少了建立和釋放連接的應答次數,較TCP協議實時性也有了較大的提高。
本文主要介紹了一種基于RUDP思想的可靠數據傳輸協議的實現。這種基于UDP協議的可靠傳輸方法很好的解決了嵌入式系統中實時性與可靠性的要求,實現的一系列算法簡捷高效,能夠有效的滿足嵌入式系統的性能需求。
[1]Bova.T Krivoruchka.Reliable UDP Protocol.draft- ietfsigtran -reliable-udp-00.txt.Cisco Systems,1999 -02.
[2]Andrew S.Tanenbaum.Computer Networks.北京:清華大學出版社,2008.
[3]謝希仁.計算機網絡[M].北京:電子工業出版社,2008.
[4]蘆東昕,張華強,王陳.基于UDP的可靠數據傳遞技術研究[J].計算機工程,2003,(22):62-63.