謝慧,劉釗(中國電子科技集團(tuán)公司第二十研究所,西安 710068)
?
基于無連接網(wǎng)絡(luò)的文件可靠傳輸算法
謝慧,劉釗
(中國電子科技集團(tuán)公司第二十研究所,西安710068)
摘要:
關(guān)鍵詞:
目前我們所應(yīng)用的無連接傳輸層協(xié)議[2]在數(shù)據(jù)傳輸之前數(shù)據(jù)發(fā)送端與接收端無握手和協(xié)商等行為,在數(shù)據(jù)傳輸過程中亦無傳輸控制和確認(rèn)行為,對傳輸?shù)臄?shù)據(jù)沒有可靠性的保障。本文提出了一種基于不可靠無連接網(wǎng)絡(luò)的文件可靠傳輸方法,可提供高可靠性的文件傳輸服務(wù)。
基于無連接網(wǎng)絡(luò)的應(yīng)用層大文件可靠傳輸方式是在無連接網(wǎng)絡(luò)現(xiàn)有協(xié)議棧的基礎(chǔ)之上,通過在應(yīng)用層對文件發(fā)送的發(fā)送端和接收端進(jìn)行處理,實(shí)現(xiàn)可靠傳輸文件的功能。接收端與發(fā)送端同時(shí)連接在同一個(gè)無連接網(wǎng)絡(luò)中;且任意一個(gè)發(fā)送端可以向無連接網(wǎng)絡(luò)中出自身外的任一接收端節(jié)點(diǎn)發(fā)送文件。
在發(fā)送端,從文件頭開始讀取未被處理過的數(shù)據(jù),并在讀取出的數(shù)據(jù)開頭位置通過增加時(shí)間、報(bào)文索引、報(bào)文標(biāo)識(shí)位和報(bào)文長度封裝為數(shù)據(jù)分組,以保證數(shù)據(jù)分組的唯一性[1]。分裝完成的數(shù)據(jù)分組將被傳輸。在接收端,每接收到一個(gè)數(shù)據(jù)分組將會(huì)生成一個(gè)應(yīng)答報(bào)文[3],該應(yīng)答報(bào)文包含時(shí)間、報(bào)文索引、報(bào)文標(biāo)識(shí)位和報(bào)文長度。數(shù)據(jù)分組將被按照報(bào)文索引值的升序加入緩沖區(qū)內(nèi)。當(dāng)緩沖區(qū)數(shù)據(jù)分組滿足寫入條件就會(huì)寫入文件。在發(fā)送端,處理接收到的應(yīng)答報(bào)文,并且計(jì)算被應(yīng)答的報(bào)文從發(fā)出時(shí)刻到接收到應(yīng)答時(shí)刻的時(shí)間差,該時(shí)間差將作為流量控制算法計(jì)算發(fā)送分組數(shù)量的依據(jù),流量控制算法會(huì)控制數(shù)據(jù)包的發(fā)送速率。在傳輸過程中,如果有數(shù)據(jù)分組未及時(shí)接收到應(yīng)答,將會(huì)被重傳。基于無連接網(wǎng)絡(luò)可靠傳輸示意圖見圖1。
文件發(fā)送端將文件中的數(shù)據(jù)讀取并封裝為數(shù)據(jù)分組,傳輸過程中發(fā)送文件采用雙隊(duì)列的方法,一個(gè)發(fā)送隊(duì)列,一個(gè)傳輸隊(duì)列。兩個(gè)隊(duì)列分別表示的含義為:發(fā)送隊(duì)列中存放了網(wǎng)絡(luò)中已經(jīng)發(fā)送,但是尚未得到反饋信息確認(rèn)的數(shù)據(jù)包;傳輸隊(duì)列中存放了需要發(fā)送的數(shù)據(jù)包。
文件傳輸時(shí)發(fā)送端與接收端首先進(jìn)行握手,確保傳輸信道的連通建立連接,將需要發(fā)送的原始文件進(jìn)行分段處理,每段數(shù)據(jù)添加數(shù)據(jù)頭并生成唯一的校驗(yàn)合法性文件,將這些數(shù)據(jù)包按照順序放入發(fā)送隊(duì)列,正確傳輸?shù)綄Χ说臄?shù)據(jù)包需要反饋信息到發(fā)送端,對于丟失的數(shù)據(jù)包或者因合法性檢驗(yàn)錯(cuò)誤而被丟棄的數(shù)據(jù)包接收端均無需反饋信息。反饋的信息中包含了正確接受數(shù)據(jù)包的序號,數(shù)據(jù)包接收時(shí)間。每當(dāng)發(fā)送端接收到反饋信息后,會(huì)將發(fā)送隊(duì)列中相應(yīng)的數(shù)據(jù)包取出隊(duì)列。傳輸?shù)却〞r(shí)器超時(shí)后,發(fā)送隊(duì)列中的數(shù)據(jù)包就是接收端沒有正確接收的數(shù)據(jù)包,對剩余的數(shù)據(jù)包進(jìn)行再次傳輸。

圖1 基于無連接網(wǎng)絡(luò)可靠傳輸示意圖
2.1文件發(fā)送算法
首先將文件中的數(shù)據(jù)讀取并封裝為數(shù)據(jù)分組,并且發(fā)送;數(shù)據(jù)分組發(fā)送完成后,啟動(dòng)定時(shí)器。定時(shí)器的等待時(shí)間twait與底層網(wǎng)絡(luò)延時(shí)tdelay和應(yīng)用層處理時(shí)間tprocess密切相關(guān),其關(guān)系由下述公式描述:

底層網(wǎng)絡(luò)延時(shí)tdelay是網(wǎng)絡(luò)特性;應(yīng)用層處理時(shí)間tprocess是指處理一段數(shù)據(jù),從封裝到發(fā)送的時(shí)延。若在定時(shí)器等待的時(shí)間內(nèi)收到所有應(yīng)答,且發(fā)送隊(duì)列已經(jīng)為空,定時(shí)器關(guān)閉;若未收到應(yīng)答,則再次發(fā)送數(shù)據(jù)。發(fā)送處理流程見圖2。
在文件不斷的發(fā)送過程中會(huì)收到相應(yīng)的應(yīng)答,通過從應(yīng)答報(bào)文頭中獲取時(shí)間信息為Tp,并且獲取當(dāng)前時(shí)刻系統(tǒng)信息為Tc,那么往返時(shí)延計(jì)算公式為:

RTTarv是平均往返時(shí)延,其初始值為0,將公式(2)計(jì)算得到的往返時(shí)延RTT將帶入下式(3),由公式(3)迭代計(jì)算得到RTTarv:


圖2 發(fā)送處理流程
根據(jù)計(jì)算出的時(shí)延對文件發(fā)送進(jìn)行流量控制,在網(wǎng)絡(luò)負(fù)載較大的時(shí)候,減小數(shù)據(jù)包的發(fā)送速率,減輕網(wǎng)絡(luò)的負(fù)載盡量不讓網(wǎng)絡(luò)出現(xiàn)擁塞而導(dǎo)致丟包;在網(wǎng)絡(luò)負(fù)載較輕時(shí),加快數(shù)據(jù)包的發(fā)送速率,盡可能地利用帶寬。
同時(shí)獲取應(yīng)答報(bào)文頭中的索引值信息,并且用該索引值遍歷發(fā)送隊(duì)列。如果發(fā)送隊(duì)列中有數(shù)據(jù)分組的和應(yīng)答報(bào)文的索引值相同,那么將該分組從發(fā)送隊(duì)列中刪除;否則,不對發(fā)送隊(duì)列中的數(shù)據(jù)做處理。應(yīng)答處理流程見圖3。
2.2文件接收算法
當(dāng)接收到數(shù)據(jù)分組時(shí),首先根據(jù)數(shù)據(jù)分組產(chǎn)生對應(yīng)的應(yīng)答報(bào)文,并將應(yīng)答包文封裝,封裝的信息包含:時(shí)間、報(bào)文索引、報(bào)文標(biāo)識(shí)位和報(bào)文長度。上述若干項(xiàng)信息中時(shí)間和報(bào)文索引來自于接收到的數(shù)據(jù)分組,報(bào)文標(biāo)識(shí)位和報(bào)文長度設(shè)置為應(yīng)答報(bào)文默認(rèn)值。封裝完成后,將該應(yīng)答報(bào)文發(fā)送。
同時(shí)處理收到的數(shù)據(jù)分組,獲取數(shù)據(jù)分組頭中的報(bào)文索引獲得索引值IN。首先判斷該索引值IN是否小于已寫入文件的最大分組索引值。如果索引值IN小于已寫入文件的最大分組索引值,繼續(xù)接收分組數(shù)據(jù);否則,將繼續(xù)判斷該索引值IN是否已經(jīng)在緩沖區(qū)內(nèi),如果該索引值IN已經(jīng)在緩沖區(qū)內(nèi),丟棄該數(shù)據(jù);否則,依據(jù)獲取數(shù)據(jù)分組頭中的索引值IN,遍歷緩沖區(qū)內(nèi)所有數(shù)據(jù)分組。當(dāng)滿足條件:Sx,Sx+1是緩沖區(qū)內(nèi)連續(xù)的兩個(gè)分組,滿足Sx.IN<IN<Sx+1.IN(x∈R),那么將接收到的數(shù)據(jù)分組將插入到Sx后;或者滿足條件Srear.IN<IN(Srear.IN是緩沖區(qū)中最后一個(gè)分組),那么將接收到的數(shù)據(jù)分組將插入到Srear后。接收處理流程見圖4。

圖3 應(yīng)答處理流程
判斷緩沖區(qū)內(nèi)的數(shù)據(jù)分組個(gè)數(shù)是否達(dá)到寫文件的門限,或加入緩沖區(qū)的分組是否為“最后一個(gè)分組”。如若上述兩個(gè)條件都不滿足,那么繼續(xù)接收數(shù)據(jù);否則將計(jì)算在緩沖區(qū)內(nèi),以第一個(gè)數(shù)據(jù)分組為開頭,將數(shù)據(jù)分組索引值按自然數(shù)升序計(jì)數(shù)且連續(xù)的數(shù)據(jù)分組個(gè)數(shù),將連續(xù)的分組個(gè)數(shù)記為CIN。
判斷如果在緩沖區(qū)內(nèi)的第一個(gè)數(shù)據(jù)分組的索引值S1.IN是否滿足條件:S1.IN==(已寫入文件的最大分組索引值)+1。繼續(xù)判斷緩沖區(qū)的最后一個(gè)數(shù)據(jù)分組是否為“最后一個(gè)分組”:
如果判斷結(jié)果為“真”,繼續(xù)判斷是否滿足條件Slast.IN-Shead.IN+1==CIN。如果結(jié)果為“真”那么以二進(jìn)制方式打開記錄文件,將緩沖區(qū)內(nèi)的數(shù)據(jù)分組以二進(jìn)制方式寫入記錄文件,待寫文件執(zhí)行完成后關(guān)閉記錄文件,然后更新已寫入文件最大分組索引值。

圖4 接收處理流程
如果判斷結(jié)果為“假”,繼續(xù)判斷是否滿足條件CIN≥緩沖區(qū)寫入文件門限。如果結(jié)果為“真”那么進(jìn)行寫文件操作。
判斷已寫入文件最大分組索引值是否等于標(biāo)記為“最后一個(gè)分組”的索引值,如果不相等表示文件沒有寫完,將緩沖區(qū)內(nèi)已寫入文件的數(shù)據(jù)分組刪除;否則表示文件以及寫完,將緩沖區(qū)內(nèi)所有數(shù)據(jù)分組刪除,然后結(jié)束。
本文設(shè)計(jì)的基于無連接網(wǎng)絡(luò)的文件可靠傳輸方法,通過一次發(fā)送多個(gè)數(shù)據(jù)分組可以提高傳輸?shù)男剩粚?shù)據(jù)分組求解往返時(shí)延可以感知底層網(wǎng)絡(luò)的擁塞狀況;流量控制算法可以自使用底層網(wǎng)絡(luò)并調(diào)整一次發(fā)送的數(shù)據(jù)分組的個(gè)數(shù),盡量避免網(wǎng)絡(luò)出現(xiàn)擁塞;對發(fā)送的數(shù)據(jù)分組必須受到應(yīng)答報(bào)文才能被認(rèn)為發(fā)送成功,可以提高傳輸過程的魯棒性。在接收端采用二進(jìn)制批量寫入文件的方式,可以減少打開和關(guān)閉文件的次數(shù),
參考文獻(xiàn):
[1]王穎.基于流的無連接網(wǎng)絡(luò)管理信息建模方法.北京郵電大學(xué)學(xué)報(bào),2006(6).
[2]白正.基于UDP的報(bào)文可靠傳輸技術(shù)研究.網(wǎng)絡(luò)安全技術(shù)與應(yīng)用,2013(5).
[3]丁浩.一種基于C/S數(shù)據(jù)庫系統(tǒng)的數(shù)據(jù)可靠傳輸算法.計(jì)算機(jī)工程,2005,29(8)
The Algorithms of File Reliable Transmission Based on the Connectionless Network
XIE Hui,LIU Zhao
(China Electronic Technology Company No.20,Xi'an 710068)
Abstract:
Proposes an algorithm of file reliable transmission based on connectionless network,this algorithm is used on application layer of connectionless network.In order to improve the transmission efficiency,file send port will send several groups of data at one time.Across the time delay that sending form file receive port to realize the situation of network and file transmission.The floor controlling algorithms adjust the number of data group,that avoid the congestion of network and improve the reliable of file transmission.
Keywords:
提出一種基于無連接網(wǎng)絡(luò)的文件可靠傳輸算法,該算法應(yīng)用于無連接網(wǎng)絡(luò)的應(yīng)用層,文件發(fā)送端通過一次發(fā)送多個(gè)數(shù)據(jù)分組可以提高傳輸?shù)男?,并通過對文件接收端返回的數(shù)據(jù)時(shí)延感知底層網(wǎng)絡(luò)的擁塞狀況及文件傳輸情況,通過流量控制算法調(diào)整數(shù)據(jù)分組的個(gè)數(shù),避免網(wǎng)絡(luò)擁塞,提高文件傳輸?shù)目煽啃浴?/p>
可靠傳輸;流量控制;重傳
文章編號:1007-1423(2016)14-0060-04
DOI:10.3969/j.issn.1007-1423.2016.14.013
作者簡介:
謝慧(1984-),女,陜西西安人,碩士研究生,工程師,研究方向?yàn)橥ㄐ偶夹g(shù)
劉釗(1989-),男,江蘇南京人,碩士研究生,助理工程師,研究方向?yàn)檐浖軜?gòu)
收稿日期:2016-03-25修稿日期:2016-05-10
Reliable Transmission;Flux Control;Retransmission