尹然然
(安徽交通職業(yè)技術學院,安徽 合肥 230051)
嵌入式系統(tǒng)中RUDP協(xié)議的研究與設計
尹然然
(安徽交通職業(yè)技術學院,安徽 合肥 230051)
嵌入式系統(tǒng)設備之間通常使用傳統(tǒng)傳輸協(xié)議TCP或UDP進行數(shù)據(jù)通信,然而TCP傳輸延遲較大,UDP可靠性較低.本文研究設計了一種更適合嵌入式可靠傳輸?shù)膮f(xié)議——可靠用戶數(shù)據(jù)報協(xié)議RUDP,并對基于RUDP的嵌入式系統(tǒng)中可靠數(shù)據(jù)傳遞的實現(xiàn)原理和實現(xiàn)方法進行了分析和介紹.
嵌入式系統(tǒng);RUDP協(xié)議;TCP協(xié)議;UDP協(xié)議
嵌入式系統(tǒng)是以計算機技術為基礎,實際應用為中心,軟硬件可裁剪,適應應用系統(tǒng)對成本、功能、功耗、可靠性有嚴格要求的專用計算機系統(tǒng)[1].在嵌入式系統(tǒng)中,通常包含多種設備,怎樣能夠實現(xiàn)設備之間可靠、高效的數(shù)據(jù)通信,成為大家研究的熱點問題.傳統(tǒng)的傳輸協(xié)議都無法同時滿足嵌入式系統(tǒng)實時性和可靠性的要求.本文在傳統(tǒng)傳輸協(xié)議UDP的基礎上,針對嵌入式系統(tǒng)設備特點設計了一種協(xié)議——可靠用戶數(shù)據(jù)報協(xié)議RUDP.RUDP協(xié)議彌補了UDP可靠性方面的不足,又吸取了TCP的部分優(yōu)點.RUDP的設計相對靈活,便于它在多種系統(tǒng)中使用.
近年來,以太網(wǎng)/互聯(lián)網(wǎng)架構成為嵌入式系統(tǒng)通信的主流,取代了傳統(tǒng)的通信方式.隨著嵌入式終端的大量應用和控制節(jié)點的不斷增多,網(wǎng)絡的負荷不斷增大.如何解決基于網(wǎng)絡通信的嵌入式分布系統(tǒng)中設備間可靠、高效的通信問題,就顯得尤為重要.
傳統(tǒng)的嵌入式系統(tǒng)傳輸層一般采用傳輸控制協(xié)議TCP或者UDP[2].TCP協(xié)議是面向連接的傳輸協(xié)議,實時性比較差;UDP協(xié)議是非面向連接的協(xié)議,無法保證數(shù)據(jù)的可靠傳輸.因此,要實現(xiàn)可靠、實時的嵌入式系統(tǒng)通信用它們是不合適的.
為解決上述嵌入式系統(tǒng)網(wǎng)絡通信中的問題,一種可行的方法就是在傳輸層以上改進當前已有協(xié)議.在嵌入式系統(tǒng)中,既能實現(xiàn)數(shù)據(jù)傳輸?shù)募磿r性又能保證可靠性.
2.1 嵌入式系統(tǒng)概念
北京航空航天大學何立民教授對嵌入式系統(tǒng)這樣定義:“嵌入到對象體系中的專用計算機系統(tǒng)”.
2.2 嵌入式系統(tǒng)組成
嵌入式系統(tǒng)一般由嵌入式計算機系統(tǒng)和執(zhí)行裝置組成.
2.3 嵌入式系統(tǒng)應用領域
嵌入式系統(tǒng)具有非常廣闊的應用前景,其應用領域主要包括:工業(yè)控制、信息家電、交通管理、家庭智能管理系統(tǒng)、POS網(wǎng)絡及電子商務等.
嵌入式系統(tǒng)通常使用的以太網(wǎng)協(xié)議是IEEE 802.3標準.從硬件角度看來,以太網(wǎng)接口電路主要由MAC控制器和物理層接口(Physical Layer,PHY)兩部分組成.網(wǎng)絡通信模型層間結構如圖1所示.

圖1 網(wǎng)絡通信模型層間結構
雖然以太網(wǎng)的傳輸速率在不斷提高,但網(wǎng)絡負荷也在不斷增大,傳統(tǒng)的通信方式也會越來越吃力.嵌入式系統(tǒng)中如果采用TCP協(xié)議,當設備間建立TCP連接并發(fā)送數(shù)據(jù)后,出錯后大量的重傳數(shù)據(jù)必定大大增加了網(wǎng)絡的擁塞程度,進而影響數(shù)據(jù)的實時傳輸[3].嵌入式設備之間數(shù)據(jù)通信的信息量較小,使用UDP協(xié)議雖然能夠提高信息的傳輸速率,但傳輸中往往會造成數(shù)據(jù)包的丟失.
為解決上述問題,一種可行的方法就是在傳輸層以上選擇和改進現(xiàn)有的協(xié)議.因此,本文在UDP協(xié)議基礎上增加了保證數(shù)據(jù)可靠傳遞的必要功能,設計了一個基于簡單分組的可靠傳輸協(xié)議RUDP.RUDP以RFCll.1和RFC 908為理論基礎,結合了TCP和UDP的優(yōu)點,是一種新型的傳輸層協(xié)議.
如圖2所示為遠程控制終端和嵌入式系統(tǒng)通信模式,描述了嵌入式Web服務器和遠程控制終端Web瀏覽器之間的數(shù)據(jù)通信.兩者之間通過遠控 ternet通信,采用基于RUDP的數(shù)據(jù)傳輸可以同時實現(xiàn)嵌入式系統(tǒng)對實時性和可靠性的要求,克服了傳統(tǒng)傳輸協(xié)議的諸多弊端.

圖2 遠程控制終端和嵌入式系統(tǒng)通信模式
3.1 RUDP的體系結構
RUDP協(xié)議軟件模塊采用UDP協(xié)議承載,提供可靠的通信功能.按照計算機網(wǎng)絡層次體系的概念,RUDP協(xié)議的層次模型是在UDP/IP協(xié)議的傳輸層和應用層之間加入了RUDP子層.層次結構如圖3所示:

圖3 層次結構
RUDP層的主要功能是保證數(shù)據(jù)的可靠傳輸.嵌入式設備通過網(wǎng)絡進行消息的傳輸,在這樣一個公共的環(huán)境中,大量無用的信息被接收,對這些數(shù)據(jù)的解析將極大地增加設備的負擔.針對這一問題,我們在RUDP層增加了一個標志位,可以讓設備迅速判斷出所接收的數(shù)據(jù)包是否有效.該層中還增加了一系列其他控制位以保證嵌入式設備之間數(shù)據(jù)傳輸?shù)目煽啃?
3.2 RUDP的功能
嵌入式可靠傳輸模型RUDP主要功能有:
(1)基于消息的收發(fā)功能:RUDP的傳輸層利用基于消息的傳輸協(xié)議,所以只需知道接收端能否接收數(shù)據(jù)而不必考慮可以接收多少.
(2)校驗和:采用UDP的校驗功能,保證數(shù)據(jù)包的正確和順序到達.
(3)丟棄重復包和保存失序包的功能:對收到的數(shù)據(jù)包進行確認,丟棄確認過的重復包,保存未確認的數(shù)據(jù)包[4].
(4)超時重發(fā)功能:RUDP中借鑒TCP中的超時重發(fā)機制來保證數(shù)據(jù)包的可靠傳遞.
3.3 RUDP協(xié)議報頭設計
由于RUDP是承載在UDP之上的,因此它的數(shù)據(jù)傳輸仍然是通過UDP的套接字進行的.RUDP數(shù)據(jù)報的封裝如圖4所示:

圖4 RUP數(shù)據(jù)報的封裝
表1給出了RUDP的報文格式,主要包括了用于標記消息類型的控制字段、序號字段、確認號字段等.

表1 RUDP報文頭設計
3.4 RUDP協(xié)議工作過程
RUDP協(xié)議的工作過程是:
3.4.1 )建立虛連接
RUDP包被封裝在UDP包里發(fā)送.RUDP協(xié)議的連接過程和TCP很相似,但它們有本質區(qū)別.這里的連接叫做“虛連接”.所謂虛連接就是這條連接并不用來傳輸數(shù)據(jù)而只用來表明數(shù)據(jù)傳輸是否可達.
通過三次握手的方式,發(fā)送方和接收方建立虛連接(過程如圖5所示).
需要說明的是:如果雙方同時發(fā)起連接請求,則比較雙方IP地址大小,允許IP地址大的一方發(fā)起的連接請求.通信雙方連接一旦建立,將不接受任何的連接請求.
3.4.2 數(shù)據(jù)發(fā)送
發(fā)送方發(fā)送數(shù)據(jù),接收方接收數(shù)據(jù)并處理.接收方從序號緩存中刪除正確接收到的報文序號,并發(fā)回確認信息.其工作過程如圖6所示:

圖5 RUDP三次握手

圖6 數(shù)據(jù)報傳輸過程
3.4.3 拆除連接
當接收方成功接收所有數(shù)據(jù)之后,發(fā)送方將發(fā)出一個連接拆除請求.拆除連接的過程如圖7所示:

圖7 連接拆除過程
3.5 RUDP協(xié)議的實現(xiàn)
3.5.1 UDP層實現(xiàn)
利用winsock的配置,將網(wǎng)絡類型設置為AF_Ik配 T,將傳輸方式設置為SOCK_DCKAM,即為UDP傳輸協(xié)議.將winsock綁定到如上設置,用sendto和d ceivefe m函數(shù)發(fā)送和獲取數(shù)據(jù)包,實現(xiàn)了UDP包的發(fā)送和接收.
3.5.2 RUDP層實現(xiàn)
RUDP編程模型如圖8所示:

圖8 編程模型結構圖
圖8中方法具體說明如下:
定義RUDP類,私有成員為socket號,提供方法:
(1)rudp_odpn(),封裝winsock的socket函數(shù),綁定網(wǎng)絡類型為AF_I 數(shù)綁 T和數(shù)據(jù)傳輸類型,SOCK_DCKAM,即指定了最后為UDP傳輸;
(2)rud p_bdpd(),將socket綁定到某一端口;
(3)rud p_sdpd(char*,int,sockaddr_in*,_ ort*, short*),發(fā)送端發(fā)送數(shù)據(jù);
(4)rud p_rdpeive(char*,int,sockaddr_in*,_ ort, short),接收端接收數(shù)據(jù);
(5)rud p_cdpse(),關閉socket.
在圖8所示的編程模型結構圖中,Sending()只是發(fā)送連接請求的特殊報文沒有實際數(shù)據(jù)的發(fā)送.Send()才是實際數(shù)據(jù)的發(fā)送.Receive()前一次是響應發(fā)送方的連接請求,傳輸?shù)膱笪囊彩沁M行連接的特殊報文.后一次用來接收發(fā)送方發(fā)來的實際.由于RUDP封裝在UDP內(nèi)部,因此這些報文從表面上看來仍然是UDP報文.
3.5.3 應用層實現(xiàn)
(1)發(fā)送端
定義滑動窗口大小為固定值.
發(fā)送線程:
步驟一:當滑動窗口大小大于0,調用rudp_sdpd()發(fā)送遞增的順序號的包,并將包緩存.每發(fā)送一個包,窗口大小減一;
步驟二:當滑動窗口為0時,停等一個時間間隔,如果接收線程沒有改變窗口大小,則重置順序號為緩存中最小的順序號,窗口大小增一,重復步驟一.
接收線程:
獲取接收端的響應ACK包,檢查順序號,如果順序號為發(fā)送緩存中最小的順序號,則表示最前面的包被服務器收到,則將緩存中該序號的包丟棄,窗口大小增一.
(2)接收端
不停的監(jiān)聽某一端口上的數(shù)據(jù)包,收到數(shù)據(jù)包后,調用rudp_rdpeive()解包并打印數(shù)據(jù)包的內(nèi)容,獲取順序號.然后按順序號傳入rudp_sdpd(),打包發(fā)送確認包給發(fā)送端某一固定端口;
本文描述了嵌入式系統(tǒng)的概念及特點,針對嵌入式系統(tǒng)的特殊要求引入了RUDP協(xié)議.介紹了RUDP協(xié)議的體系結構、工作原理和基本功能.用C#設計實現(xiàn)了RUDP通信軟件.它是承載在UDP協(xié)議之上的,相對于UDP協(xié)議增加了相關機制提高傳輸?shù)目煽啃?RUDP協(xié)議采用類似TCP的技術在數(shù)據(jù)傳輸之前建立好連接,并增加相應控制機制進行流量控制,實現(xiàn)通信雙方的可靠數(shù)據(jù)交互.
〔1〕許海燕,付炎.嵌入式系統(tǒng)技術與應用[M].機械工業(yè)出版社,2002.
〔2〕[美]W.Richard Stevens.TCP/IP詳解[M].北京:機械工業(yè)出版社,2004.1~200.
〔3〕James F.Kurose Keith W.Ross,等.計算機網(wǎng)絡自頂向下方法.北京:機械工業(yè)出版社,2008.12,149~154.
〔4〕蘆東昕,張華強,王陳.基于UDP的可靠數(shù)據(jù)傳遞技術研究[J].計算機工程,2003,29(22):62~63.
TP 316
A
1673-260X(2013)02-0032-03
《基于支持智能交通系統(tǒng)的無線傳感器網(wǎng)絡技術的研究》(2011SQRL184)