邢衛國 趙亞松(中國電子科技集團公司第五十四研究所河北 石家莊 050081)
一種提高UDP傳輸可靠性的簡捷方法
邢衛國 趙亞松
(中國電子科技集團公司第五十四研究所河北 石家莊 050081)
UDP通信簡單且支持組播,在工程中得到廣泛應用,但是傳輸是不可靠的。為了解決傳輸可靠性問題,經常采用多數判決機制或應答確認機制,但這些機制都或多或少地增加了程序的復雜性,帶來了一些其他的問題,比如延時和不穩定等。針對這一問題,提出了對幀序號進行判決的重發機制,對接口格式及收發雙方的程序邏輯進行了簡要介紹。經過工程實驗驗證,該方法簡便有效,切實可行。
UDP 重發 可靠傳輸
用戶數據報協議(User Datagram Protocol,UDP)依靠基礎網際協議從一臺機器到另一臺機器傳送UDP報文,提供一種像IP那樣的不可靠的無連接遞送服務。這種服務不用確認保證報文到達,不對到來的報文排序,對2臺機器之間的信息流速率也不提供反饋控制,因而UDP報文可能丟失、重份或順序錯亂[1,2]。
UDP通信采用UDP報文進行通信,簡單方便,支持組播,得到廣泛的應用。在工程實踐中,對于大量的非關鍵數據經常采用UDP進行通信,但是存在數據包丟失現象。經常采用的方法之一是三取二判決,即發送3次同樣的數據,只要有2組數據相同就認為正確接收。但是判斷邏輯較復雜,首先要等待一定的時間才能進行判決,對數據傳送間隔要求較高,有時上一組數據混入下一組數據中進行判斷,造成邏輯混亂,降低了程序的可靠性。
另外一種方法就是采用ARQ機制,即帶重傳的肯定確認機制,這種技術要求與發送者通信的接收者,每接收一幀數據,就送回一個確認幀。發送者對每個發出去的幀保留一份記錄,等到收到確認之后再發送下一幀。發送者在發送一個幀的時候還啟動一個定時器,若定時器計數完畢,確認還未到達,則發送者重發一次數據[3],該方法實現起來邏輯較復雜,異常情況下的調試也比較困難。
在實踐中,采用上述幾種方法都感到有些缺陷,經摸索發現只需對三取二方法稍許改進,,可達到很好的效果。
2.1 幀格式
對要在發送方與接收方之間傳輸的數據,進行頭封裝,增加幀序號字段。
封裝包格式如表1所示。

表1 封裝包格式
PACKET HEADER:包括常規的發送者標識、接收者標識、信息類型和信息長度等內容,長度一般根據要傳輸的內容自行約定;
幀計數:為每個傳輸幀按順序編號,從0開始,65 535后歸零重新開始;
數據:發送者與接收者要傳輸的實際數據。
2.2 發送過程
每一個傳輸幀有一個唯一的幀計數編號,對同一幀數據,發送方連續發送2遍或多遍數據,但幀序號不增加。連續發送的間隔沒有限制,越快越好,程序實現時,可以是2個連續的發送函數調用(發送內容為buf,格式為封裝包格式,幀序號已經填好,長度為len)[4]:

發送流程如圖1所示,每一幀的重發次數可以通過界面或配置文件進行設定,當發現丟幀次數增多時,重發次數增加,反之重發次數減小。

圖1 發送流程
2.3 接收過程
接收方對收到的數據進行幀序號判斷,若幀序號大于上一幀的幀序號,就認為是一個有效數據幀,立即進行處理;若幀序號與上一幀的幀序號相同,則認為是上一幀數據的冗余傳輸,作為無效數據丟棄,接收流程如圖2所示。

圖2 接收流程
值得注意的地方是第一幀的接收情況,由于不知道上一幀的幀序號,所以接收方無法判斷是否為重發數據,這就需要發送方作出標識,表明是程序啟動后的第一幀數據,接收方無需判斷幀序號。或者,發送者發送一幀握手信號,不傳輸實際內容,只對幀序號的開始值進行通報即可。
另外,接收時要判斷幀計數從最大值65535到0的歸零情況,進行特殊處理。
2.4 性能分析
從UDP的傳輸原理上分析,造成UDP包丟失的原因包括網絡擁堵、arp尋址和緩存溢出等[5],但是2個連續幀同時丟失的概率遠小于一幀丟失的概率[6]。同理,3個連續幀同時丟失的概率就更小了,所以從原理上分析,重傳數據幀大大提高了傳輸的可靠性。
從發送接收過程可以看出,邏輯非常簡單,而且接收方不需等待收到第二幀再進行處理,提高了數據的時效性。再進一步擴展,連續發送3次或4次數據,程序邏輯不變,進一步提高傳輸可靠性,但付出的代價就是傳輸流量的增加,但在網速不斷提高的今天,流量已經不是問題了。
利用重發計數判決,程序邏輯簡單及不易出故障,穩定性得到提高,同時也基本杜絕了丟幀現象,在工程實踐中取得了很好的效果。但該方法僅限于通信雙方自行約定接口的情況,對于外購的成品設備,因為接口已經做好,就無能為力了,另外,對于可靠性要求及其嚴格的設備,如遙控指令等僅采取這些措施還是不夠的。
[1]梁振軍,梁 波.計算機互聯網技術與TCP/IP協議[M].北京:海洋出版社,1991.
[2](美)科默.用TCP/IP進行網際互聯[M].北京:電子出版社, 1998.
[3]劉西洋.基于RUDP(Reliable UDP)統一網管接口設計與實現[D].陜西:西安電子科技大學,2009.
[4]譚浩強.C程序設計[M].北京:清華大學出版社,2004.
[5]武 忠,于紅曾.IP報文分片技術及其在故障分析中的應用[J].計算機與網絡,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