邢衛(wèi)國 趙亞松(中國電子科技集團(tuán)公司第五十四研究所河北 石家莊 050081)
一種提高UDP傳輸可靠性的簡(jiǎn)捷方法
邢衛(wèi)國 趙亞松
(中國電子科技集團(tuán)公司第五十四研究所河北 石家莊 050081)
UDP通信簡(jiǎn)單且支持組播,在工程中得到廣泛應(yīng)用,但是傳輸是不可靠的。為了解決傳輸可靠性問題,經(jīng)常采用多數(shù)判決機(jī)制或應(yīng)答確認(rèn)機(jī)制,但這些機(jī)制都或多或少地增加了程序的復(fù)雜性,帶來了一些其他的問題,比如延時(shí)和不穩(wěn)定等。針對(duì)這一問題,提出了對(duì)幀序號(hào)進(jìn)行判決的重發(fā)機(jī)制,對(duì)接口格式及收發(fā)雙方的程序邏輯進(jìn)行了簡(jiǎn)要介紹。經(jīng)過工程實(shí)驗(yàn)驗(yàn)證,該方法簡(jiǎn)便有效,切實(shí)可行。
UDP 重發(fā) 可靠傳輸
用戶數(shù)據(jù)報(bào)協(xié)議(User Datagram Protocol,UDP)依靠基礎(chǔ)網(wǎng)際協(xié)議從一臺(tái)機(jī)器到另一臺(tái)機(jī)器傳送UDP報(bào)文,提供一種像IP那樣的不可靠的無連接遞送服務(wù)。這種服務(wù)不用確認(rèn)保證報(bào)文到達(dá),不對(duì)到來的報(bào)文排序,對(duì)2臺(tái)機(jī)器之間的信息流速率也不提供反饋控制,因而UDP報(bào)文可能丟失、重份或順序錯(cuò)亂[1,2]。
UDP通信采用UDP報(bào)文進(jìn)行通信,簡(jiǎn)單方便,支持組播,得到廣泛的應(yīng)用。在工程實(shí)踐中,對(duì)于大量的非關(guān)鍵數(shù)據(jù)經(jīng)常采用UDP進(jìn)行通信,但是存在數(shù)據(jù)包丟失現(xiàn)象。經(jīng)常采用的方法之一是三取二判決,即發(fā)送3次同樣的數(shù)據(jù),只要有2組數(shù)據(jù)相同就認(rèn)為正確接收。但是判斷邏輯較復(fù)雜,首先要等待一定的時(shí)間才能進(jìn)行判決,對(duì)數(shù)據(jù)傳送間隔要求較高,有時(shí)上一組數(shù)據(jù)混入下一組數(shù)據(jù)中進(jìn)行判斷,造成邏輯混亂,降低了程序的可靠性。
另外一種方法就是采用ARQ機(jī)制,即帶重傳的肯定確認(rèn)機(jī)制,這種技術(shù)要求與發(fā)送者通信的接收者,每接收一幀數(shù)據(jù),就送回一個(gè)確認(rèn)幀。發(fā)送者對(duì)每個(gè)發(fā)出去的幀保留一份記錄,等到收到確認(rèn)之后再發(fā)送下一幀。發(fā)送者在發(fā)送一個(gè)幀的時(shí)候還啟動(dòng)一個(gè)定時(shí)器,若定時(shí)器計(jì)數(shù)完畢,確認(rèn)還未到達(dá),則發(fā)送者重發(fā)一次數(shù)據(jù)[3],該方法實(shí)現(xiàn)起來邏輯較復(fù)雜,異常情況下的調(diào)試也比較困難。
在實(shí)踐中,采用上述幾種方法都感到有些缺陷,經(jīng)摸索發(fā)現(xiàn)只需對(duì)三取二方法稍許改進(jìn),,可達(dá)到很好的效果。
2.1 幀格式
對(duì)要在發(fā)送方與接收方之間傳輸?shù)臄?shù)據(jù),進(jìn)行頭封裝,增加幀序號(hào)字段。
封裝包格式如表1所示。
表1 封裝包格式
PACKET HEADER:包括常規(guī)的發(fā)送者標(biāo)識(shí)、接收者標(biāo)識(shí)、信息類型和信息長(zhǎng)度等內(nèi)容,長(zhǎng)度一般根據(jù)要傳輸?shù)膬?nèi)容自行約定;
幀計(jì)數(shù):為每個(gè)傳輸幀按順序編號(hào),從0開始,65 535后歸零重新開始;
數(shù)據(jù):發(fā)送者與接收者要傳輸?shù)膶?shí)際數(shù)據(jù)。
2.2 發(fā)送過程
每一個(gè)傳輸幀有一個(gè)唯一的幀計(jì)數(shù)編號(hào),對(duì)同一幀數(shù)據(jù),發(fā)送方連續(xù)發(fā)送2遍或多遍數(shù)據(jù),但幀序號(hào)不增加。連續(xù)發(fā)送的間隔沒有限制,越快越好,程序?qū)崿F(xiàn)時(shí),可以是2個(gè)連續(xù)的發(fā)送函數(shù)調(diào)用(發(fā)送內(nèi)容為buf,格式為封裝包格式,幀序號(hào)已經(jīng)填好,長(zhǎng)度為len)[4]:
發(fā)送流程如圖1所示,每一幀的重發(fā)次數(shù)可以通過界面或配置文件進(jìn)行設(shè)定,當(dāng)發(fā)現(xiàn)丟幀次數(shù)增多時(shí),重發(fā)次數(shù)增加,反之重發(fā)次數(shù)減小。
圖1 發(fā)送流程
2.3 接收過程
接收方對(duì)收到的數(shù)據(jù)進(jìn)行幀序號(hào)判斷,若幀序號(hào)大于上一幀的幀序號(hào),就認(rèn)為是一個(gè)有效數(shù)據(jù)幀,立即進(jìn)行處理;若幀序號(hào)與上一幀的幀序號(hào)相同,則認(rèn)為是上一幀數(shù)據(jù)的冗余傳輸,作為無效數(shù)據(jù)丟棄,接收流程如圖2所示。
圖2 接收流程
值得注意的地方是第一幀的接收情況,由于不知道上一幀的幀序號(hào),所以接收方無法判斷是否為重發(fā)數(shù)據(jù),這就需要發(fā)送方作出標(biāo)識(shí),表明是程序啟動(dòng)后的第一幀數(shù)據(jù),接收方無需判斷幀序號(hào)?;蛘?,發(fā)送者發(fā)送一幀握手信號(hào),不傳輸實(shí)際內(nèi)容,只對(duì)幀序號(hào)的開始值進(jìn)行通報(bào)即可。
另外,接收時(shí)要判斷幀計(jì)數(shù)從最大值65535到0的歸零情況,進(jìn)行特殊處理。
2.4 性能分析
從UDP的傳輸原理上分析,造成UDP包丟失的原因包括網(wǎng)絡(luò)擁堵、arp尋址和緩存溢出等[5],但是2個(gè)連續(xù)幀同時(shí)丟失的概率遠(yuǎn)小于一幀丟失的概率[6]。同理,3個(gè)連續(xù)幀同時(shí)丟失的概率就更小了,所以從原理上分析,重傳數(shù)據(jù)幀大大提高了傳輸?shù)目煽啃浴?/p>
從發(fā)送接收過程可以看出,邏輯非常簡(jiǎn)單,而且接收方不需等待收到第二幀再進(jìn)行處理,提高了數(shù)據(jù)的時(shí)效性。再進(jìn)一步擴(kuò)展,連續(xù)發(fā)送3次或4次數(shù)據(jù),程序邏輯不變,進(jìn)一步提高傳輸可靠性,但付出的代價(jià)就是傳輸流量的增加,但在網(wǎng)速不斷提高的今天,流量已經(jīng)不是問題了。
利用重發(fā)計(jì)數(shù)判決,程序邏輯簡(jiǎn)單及不易出故障,穩(wěn)定性得到提高,同時(shí)也基本杜絕了丟幀現(xiàn)象,在工程實(shí)踐中取得了很好的效果。但該方法僅限于通信雙方自行約定接口的情況,對(duì)于外購的成品設(shè)備,因?yàn)榻涌谝呀?jīng)做好,就無能為力了,另外,對(duì)于可靠性要求及其嚴(yán)格的設(shè)備,如遙控指令等僅采取這些措施還是不夠的。
[1]梁振軍,梁 波.計(jì)算機(jī)互聯(lián)網(wǎng)技術(shù)與TCP/IP協(xié)議[M].北京:海洋出版社,1991.
[2](美)科默.用TCP/IP進(jìn)行網(wǎng)際互聯(lián)[M].北京:電子出版社, 1998.
[3]劉西洋.基于RUDP(Reliable UDP)統(tǒng)一網(wǎng)管接口設(shè)計(jì)與實(shí)現(xiàn)[D].陜西:西安電子科技大學(xué),2009.
[4]譚浩強(qiáng).C程序設(shè)計(jì)[M].北京:清華大學(xué)出版社,2004.
[5]武 忠,于紅曾.IP報(bào)文分片技術(shù)及其在故障分析中的應(yīng)用[J].計(jì)算機(jī)與網(wǎng)絡(luò),2014,40(8):64-67
[6]金旭燕.IP分片及其故障處理[J].科技信息,2013(24): 264-265
A Simple Method to Improve the Reliability of UDP Transmission
XING Wei-guo ZHAO Ya-song
(The 54th Research Institute of CETC,Shijiazhuang Hebei 050081,China)
The UDP communication is widely used in engineering,it is simple and supports multicasting,but has unreliable transmission.In order to solve the transmission reliability problem,the majority judgment mechanism or the ARQ mechanism is often used,but these mechanisms more or less increase the procedure's complexity,which causes some other problems such as delay and instability.Aiming at this problem,this paper proposes a resending mechanism for judging the frame number,briefly introduces the interface format and the program logic of transmitter and receiver.The engineering experiment results show that this method is simple, effective and feasible.
UDP;resending;reliable transmission
TP393
A
1008-1739(2014)22-58-3
定稿日期:2014-10-26