王玨 何秋燕 王露凱
摘要:在數(shù)據(jù)傳輸網(wǎng)絡(luò)中,與其它協(xié)議相比,UDP協(xié)議在速度上有一定的優(yōu)勢, 但也存在著傳輸可靠性差及缺乏擁塞控制機(jī)制的問題, 該文在UDP協(xié)議的基礎(chǔ)上,通過增加簡單的三次握手,確認(rèn)重傳機(jī)制,滑動窗口機(jī)制,設(shè)計出了一種基于UDP的可靠傳輸協(xié)議,使其在可靠性和傳輸效率之間達(dá)到一個良好的統(tǒng)一與折衷,并對協(xié)議的主要模塊的實現(xiàn)做出了具體描述并進(jìn)行了實際測試。
關(guān)鍵詞:可靠UDP;確認(rèn)重傳;滑動窗口
中圖分類號:TP311 文獻(xiàn)標(biāo)識碼:A 文章編號:1009-3044(2015)09-0071-03
Abstract:In data transmission network, compared with the other protocol, UDP protocol has certain advantages in speed, but there is also the transmission reliability is poor and the problem of lack of congestion control mechanism in this paper, on the basis of the UDP protocol, by adding a simple three-way handshake, confirm the retransmission mechanism, the sliding window mechanism, designed a reliable transport protocol based on UDP, make it between the reliability and efficiency to achieve a good unity and compromise, and implementation of the agreement of the main module has made a detailed description and the actual test.
Key words: reliable UDP; confirm the retransmission; the sliding window
由于傳統(tǒng)的數(shù)據(jù)傳輸協(xié)議所針對的業(yè)務(wù)不同,在數(shù)據(jù)傳輸?shù)乃俣群涂煽啃灾g不能達(dá)到很好的平衡。車險理賠系統(tǒng)中采用的是移動理賠的思想,手持終端機(jī)通過移動通信網(wǎng)絡(luò)和后臺中心系統(tǒng)進(jìn)行數(shù)據(jù)交互。目前國內(nèi)的通信事業(yè)并不是很發(fā)達(dá),信號覆蓋率并不全面,移動通信網(wǎng)絡(luò)的帶寬和傳輸質(zhì)量會受到地域的影響,為確保理賠現(xiàn)場與后臺系統(tǒng)間數(shù)據(jù)的及時可靠傳輸,需要基于移動通信的網(wǎng)絡(luò)環(huán)境設(shè)計高效可靠的數(shù)據(jù)傳輸功能。本章在UDP傳輸協(xié)議基礎(chǔ)上,通過應(yīng)用層封裝和可靠性設(shè)計的方法,采用數(shù)據(jù)包的確認(rèn)重傳、流量控制等機(jī)制,設(shè)計并實現(xiàn)基于UDP協(xié)議的可靠數(shù)據(jù)傳輸功能。
1 TCP與UDP的對比
TCP和UDP都屬于傳輸層協(xié)議,負(fù)責(zé)承擔(dān)數(shù)據(jù)傳輸?shù)娜蝿?wù)[1]。兩者之間的主要區(qū)別有:
(1) TCP和UDP是傳輸層的兩個協(xié)議,它們最大的區(qū)別是是否面向連接。TCP,在客戶端和服務(wù)器端進(jìn)行通信之前,首先要交換傳輸層控制信息,為雙方的通信做好準(zhǔn)備。UDP是一個非連接的協(xié)議,傳輸數(shù)據(jù)之前雙方不建立連接,當(dāng)傳送數(shù)據(jù)時,簡單的抓取來自應(yīng)用程序的數(shù)據(jù),并盡可能快的把數(shù)據(jù)傳送到網(wǎng)絡(luò)上。
(2) UDP協(xié)議的數(shù)據(jù)傳輸不需要維護(hù)收發(fā)狀態(tài)和連接狀態(tài)等,與TCP相比,網(wǎng)絡(luò)有效利用率得到很大的提高。
(3) TCP協(xié)議提供數(shù)據(jù)確認(rèn)重傳、擁塞控制等可靠性保證,UDP協(xié)議不提供可靠性保證,也不提供流量控制。
TCP協(xié)議由于需要確認(rèn)的狀態(tài)和對數(shù)據(jù)包的操作過多,數(shù)據(jù)傳輸?shù)乃俣炔桓咔揖W(wǎng)絡(luò)延遲較大,所以雖然協(xié)議可靠但并不適合面向移動通信的數(shù)據(jù)傳輸;而UDP協(xié)議由于不用建立連接,沒有超時重發(fā)等可靠機(jī)制,網(wǎng)絡(luò)延遲小且數(shù)據(jù)傳輸速度很快。本文設(shè)計的理賠系統(tǒng)面向移動通信網(wǎng)絡(luò)實現(xiàn)理賠現(xiàn)場與后臺系統(tǒng)間的數(shù)據(jù)傳輸,網(wǎng)絡(luò)環(huán)境不如光纖接入網(wǎng)絡(luò)穩(wěn)定可靠,對數(shù)據(jù)的高效可靠傳輸有著很高的要求。因此,本章選用UDP協(xié)議,并在其基礎(chǔ)上,設(shè)計了連接確認(rèn)、數(shù)據(jù)確認(rèn)等可靠機(jī)制,滿足了系統(tǒng)對于高效可靠傳輸功能的需求。
2基于UDP 改進(jìn)的可靠傳輸協(xié)議實現(xiàn)
2.1 主要功能模塊及任務(wù)結(jié)構(gòu)
綜合文獻(xiàn)【2】的可靠機(jī)制描述,可靠UDP數(shù)據(jù)傳輸協(xié)議的模塊結(jié)構(gòu)如圖1所示。
從模塊結(jié)構(gòu)上看,本模塊主要由以下幾個任務(wù)實現(xiàn)模塊功能:
? 通信處理模塊
1) 發(fā)送方發(fā)起數(shù)據(jù)傳輸請求,三次握手成功后,發(fā)送方進(jìn)入數(shù)據(jù)包封裝模塊。
2) 超時定時器的啟動和關(guān)閉。
3) 當(dāng)數(shù)據(jù)傳輸結(jié)束時,接收方向發(fā)送方主動發(fā)起傳輸結(jié)束的請求。
? 數(shù)據(jù)包封裝/解析模塊
1) 發(fā)送方將要發(fā)送的的數(shù)據(jù)按照協(xié)商大小分塊,排序。
2) 發(fā)送方將分塊的數(shù)據(jù)協(xié)商的數(shù)據(jù)報文結(jié)構(gòu)封裝成要發(fā)送的消息包。
3) 接收方讀取數(shù)據(jù)包后根據(jù)協(xié)商的數(shù)據(jù)報文結(jié)構(gòu)拆分?jǐn)?shù)據(jù)包,根據(jù)數(shù)據(jù)包的類型讀取信息。
? 消息發(fā)送/接收模塊
1) 發(fā)送方判斷發(fā)送隊列和消息隊列是否為空后,將要發(fā)送的數(shù)據(jù)包處理后發(fā)送。
2) 接收方從接收隊列中讀取數(shù)據(jù)包。
? 數(shù)據(jù)重組模塊
1) 由于網(wǎng)絡(luò)問題,發(fā)送方按序發(fā)送的數(shù)據(jù)包不一定會按序到達(dá),所以接收方在經(jīng)過數(shù)據(jù)包解析模塊讀取數(shù)據(jù)后,根據(jù)該消息的字節(jié)序號判斷是否為亂序的分組。
2) 若是順序的分組,將分組與以前收到的消息按序排列;若是要求重傳的分組,將該分組放入到所應(yīng)在的位置中。
3) 如果滿足重發(fā)條件,則向發(fā)送方發(fā)送重發(fā)包請求。
2.2 核心事件處理流程
2.2.1 通信處理進(jìn)程
通信處理模塊中的通信處理進(jìn)程主要負(fù)責(zé)三次握手的發(fā)起和確認(rèn)的請求,數(shù)據(jù)傳輸結(jié)束后結(jié)束連接等任務(wù)。具體流程見圖2。首先,通信的接收方發(fā)起握手的請求,即建立一個虛連接,雙方必須確保該連接成功建立后才可以進(jìn)行下一步數(shù)據(jù)傳輸?shù)牟僮鳌H缓?,在接收方一端啟動定時器,接收方的數(shù)據(jù)處理進(jìn)程接收發(fā)送方發(fā)送的數(shù)據(jù),同時接收方根據(jù)定時計時器發(fā)送反饋消息;或判斷接收到的報文數(shù),當(dāng)達(dá)到數(shù)據(jù)包累積計數(shù)器設(shè)定的數(shù)值時,向發(fā)送方發(fā)送反饋消息。
2.2.2 發(fā)送方發(fā)送報文
數(shù)據(jù)報文的發(fā)送,主要是發(fā)送方向接收方發(fā)送數(shù)據(jù)報文和消息報文,流程如圖3所示,具體的算法為:
if(發(fā)送隊列非空)
{
從隊列中取出消息;
if (消息類型為數(shù)據(jù)包)
發(fā)送數(shù)據(jù)包;
else 發(fā)送確認(rèn)包;
}
else if (消息隊列非空)
{
打包要發(fā)送的數(shù)據(jù)并將數(shù)據(jù)放入發(fā)送隊列中;
套接口處當(dāng)前序號加1;
}
3 實驗結(jié)果與分析
3.1 開發(fā)環(huán)境
系統(tǒng)的編程實現(xiàn)是在Windows XP上進(jìn)行的,使用的編程工具為Visual C++6.0。
3.2 系統(tǒng)測試
3.2.1 測試環(huán)境
本測試是是在無線通信網(wǎng)絡(luò)下進(jìn)行的,配置了兩臺計算機(jī)用作數(shù)據(jù)間收發(fā)的測試,操作系統(tǒng)為Windows XP。華為E261 3G上網(wǎng)卡兩張,用于連接無線網(wǎng)絡(luò),測試拓?fù)浣Y(jié)構(gòu)如圖4所示。
3.2.2 測試內(nèi)容
本測試采用傳輸不同大小文件的方式來對數(shù)據(jù)速度進(jìn)行測試,每次傳輸重復(fù)測試三次,然后取平均值作為參考數(shù)據(jù),測試結(jié)果見表1和表2。其中,表1是在最大連接速率7.2Mbps環(huán)境下的測試結(jié)果,表2是在連接速率為2.2Mbps環(huán)境下的測試結(jié)果。
由表1可見,在移動通信的網(wǎng)絡(luò)連接環(huán)境為7.2Mbps時,當(dāng)傳輸1MB的數(shù)據(jù)時,TCP協(xié)議測試耗時9.75s,平均傳輸速度約為105KB/s;可靠UDP耗時8.25s,平均傳輸速度約為124KB/s。當(dāng)傳輸數(shù)據(jù)為32MB時,TCP耗時295.89s,平均傳輸速度約為120KB/s;可靠UDP耗時197.05s平均傳輸速度約為168KB/s。
由表2可見,在移動通信的網(wǎng)絡(luò)連接環(huán)境為2.2Mbps時,由于連接環(huán)境較差,測試文件并不大,當(dāng)傳輸0..36s,平均傳輸速度約為21KB/s;可靠UDP耗時190.81s,平均傳輸速度約為43KB/s。
由此可得出:
(1) 可靠UDP傳輸協(xié)議的優(yōu)勢隨著傳輸數(shù)據(jù)量的增大而越來越明顯。
(2) 可靠UDP傳輸協(xié)議的優(yōu)勢隨著網(wǎng)絡(luò)環(huán)境的變差而越來越明顯。
參考文獻(xiàn):
[1] Douglas E.Comer. 用TCP/IP進(jìn)行網(wǎng)際互聯(lián)——原理、協(xié)議與結(jié)構(gòu)(第五版)[M]. 林瑤, 張娟, 王海,等譯. 北京:電子工業(yè)出版社,2009.
[2] 王玨, 何秋燕, 王露凱.基于UDP 改進(jìn)的可靠傳輸協(xié)議設(shè)計[J].電子世界,2014(22).
[3] 王繼剛, 顧國昌, 徐立峰,等.可靠UDP數(shù)據(jù)傳輸協(xié)議的研究與設(shè)計[J].計算機(jī)工程與應(yīng)用,2006(15):113-116.
[4] 靳海力.一種增強(qiáng)型可靠UDP的設(shè)計及應(yīng)用[D].合肥:中國科學(xué)技術(shù)大學(xué),2009.
[5] 王艷芳.基于UDP的數(shù)據(jù)可靠傳輸技術(shù)研究與應(yīng)用[J].計算機(jī)工程與應(yīng)用,2012(1).