許坤 趙亮

摘 ? 要:UDP協議提供面向操作的簡單而非可靠的數據傳輸服務。為了同時獲得數據傳輸的高效性和可靠性,本文仿照TCP協議,在應用層建立報文確認與超時重發機制,基于UDP協議設計了一種可靠的數據傳輸方法并在工程項目中得到了應用。本文對兩種協議的特點進行了探討,基于UDP協議設計了一種可靠的數據傳輸方法并在工程項目中得到了應用。
關鍵詞:UDP ?可靠傳輸 ?報文確認與超時重發機制
中圖分類號:TP3017 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 文獻標識碼:A ? ? ? ? ? ? ? ? ? ? ? ?文章編號:1674-098X(2019)06(b)-0007-02
1 ?概述
隨著計算機網絡技術的快速發展,網絡數據傳輸的實時性、可靠性越來越得到重視。而數據傳輸的性能與選擇使用的網絡協議密切相關。目前應用最廣泛的計算機協議是TCP/IP協議。TCP/IP協議棧中與數據傳輸相關的協議主要包括TCP和UDP兩種。這兩種協議各有優勢,TCP協議面向連接,更加可靠;UDP協議面向操作,簡單高效。在一些實際工程應用中,期望同時獲得數據傳輸的實時性、高效性和可靠性。
2 ?UDP協議與TCP協議的比較
2.1 TCP協議的特點
TCP(傳輸控制協議)提供了一種面向連接的實現可靠傳輸的通信方式。通信雙方經“三次握手”機制進入連接狀態。通過設置滑動窗口,接收方只允許發送方發送其緩沖區能夠容納的數據,實現流量控制。發送方對用戶數據進行分片,由接收方對分片進行重組排序。接收方對收到的數據進行校驗,如果數據校驗和有差錯,則丟棄該數據。若數據校驗無誤,則接收方向發送方發出確認信息;而發送方在發出數據后啟動定時器,若超時未收到確認信息則向接收方重新發出數據。
2.2 UDP協議的特點
UDP(用戶數據報協議)提供了一種面向操作的簡單而非可靠的數據傳輸服務。數據發送時沒有建立明確的連接,不提供可靠性,也不提供報文確認、分片與重組排序以及流量控制等功能。UDP只負責把應用層傳來的數據包發送出去,但不保證數據能達到目的地。因此存在數據包丟失、重復和亂序的可能性。接收端進行數據校驗,并丟棄校驗和有差錯的數據,這與TCP是相同的。
2.3 UDP與TCP協議的比較
簡而言之,UDP與TCP協議的差異,見表1。
表1可見,在數據傳輸的可靠性上,TCP具有顯而易見的優勢。由于建立了明確的連接,加上有確認與超時重發、流量控制等功能,端與端之間進行數據傳輸穩定可靠。這樣的通信方式比較適合于網絡環境復雜的廣域網,數據傳輸可能跨越多個不可預知的網段的場合。然而,如果我們的應用是在網絡環境簡單明確、各網段因素可預知的局域網,或者當我們更加強調數據的快速傳輸而不是數據的完整性時,UDP是更合適的通信協議。它的優勢體現在以下幾點。
(1)充分利用局域網本身的可靠性,無需連接,節省系統開銷;
(2)不存在分片與重組管理,節省系統開銷;
(3)無需對數據分片進行確認,提高了網絡使用效率;
(4)支持組播和廣播,提高了數據傳輸效率。
對局域網而言,在實際工程應用中,我們可以借鑒TCP的一些特點,在UDP的應用層進行改進,從而在實現數據高效傳輸的同時,提高數據傳輸的可靠性。
3 ?UDP協議下數據可靠傳輸的思路
對于網絡拓撲結構比較簡單的局域網來說,各段網路的性能參數是可知的,通信質量可預測,可靠性比較好,因此在進行網絡數據傳輸時建立連接的步驟可以省略。當網絡環境處于較差狀態下,可能會存在小概率的丟包問題。解決這一問題的方法,是仿照TCP協議,在應用層建立報文確認與超時重發機制。
所謂報文確認與超時重發機制,就是當接收方收到來自發送方的數據報文后,立即反饋一條確認報文給發送方;發送方發出數據報文后,開啟計時器;當計時達到某一時長仍未收到對應的確認報文,則重新發出數據報文。采取多次重發的方法,可以解決偶發性的丟包問題。
4 ?UDP協議下數據可靠傳輸的實現
4.1 報文結構設置
把UDP數據報分為兩種:數據報文與確認報文。數據報文負責傳遞業務信息,確認報文負責對收到的數據報文進行應答。數據報文結構定義見表2。(字段1-3為報文頭)
確認報文只包含上表中所示的報文頭,不包含數據字段。
對于發出的報文,序列號從1開始,依次遞增(對于超時重發的報文則保持原序列號),到255再循環回到1。當發出數據報文時,報文中的確認號設置為0;當發出確認報文時,確認號設置為接收到的數據報文的序列號。
4.2 報文確認與超時重發機制的實現
首先建立兩個環形數據緩沖區:報文緩沖區、超時緩沖區,同時啟動一個定時器。報文緩沖區存放待確認報文,超時緩沖區存放超時表。定時器周期性發出消息用于報文超時重發的倒計時。超時表是記錄數據報文的重發次數和超時值的數據結構,其結構定義見表3。應用程序對發出的每條數據報文維護一個超時表,當發出的數據報文得到接收方的確認反饋,則把超時表從超時緩沖區中移除。
報文確認與超時重發機制的相關流程如下。
(1)發出數據報文,同時把該數據報文投入報文緩沖區,把該報文對應的超時表投入超時緩沖區。超時表中重發次數設置為初始值0,超時值根據需要而定,比如100ms。
(2)收到一條報文時,先判斷確認號(假設為ACK)。若ACK為0,表示收到的是數據報文,根據數據報文的序列號sn,立即反饋一條確認報文,其確認號設置為等于sn。若ACK非0,表示收到的是確認報文,下一步操作是在報文緩沖區中搜索序列號等于ACK的待確認報文,并從緩沖區中移除該報文,同時在超時緩沖區中搜索序列號等于ACK的超時表,并從緩沖區中移除該超時表。
(3)周期性發出消息,而應用程序響應這個消息,對超時緩沖區中每個超時表的超時值進行倒計時更新,一旦某個超時表的超時值歸0,則應用程序將判斷其重發次數N:若N=0或1,則N自加1,而超時值更新為100ms(根據需要而定),并從報文緩沖區中提取與超時表序列號對應的數據報文重新發出;若N=2,則把報文緩沖區中與該超時表序列號對應的數據報文移除,把該超時表從超時緩沖區中移除。
按照上述方法設計的程序,應用于某工程項目中,在局域網環境比較惡劣、報文擁塞的情況下,測試了數據報文的丟包率,結果丟包率為0,達到了預期目的。
5 ?結語
引進報文確認與超時重發機制,有效改善了UDP協議下數據傳輸的可靠性,在特定局域網環境中,同時獲得了實時高效與可靠傳輸的特性。在實際工程應用中,報文重發次數、重發超時時間、定時器消息周期等參數,可根據需要進行設定。
參考文獻
[1] 趙飛,葉震.UDP協議與TCP協議的對比分析與可靠性改進[J].計算機技術與發展,2006,16(9):219-221.
[2] 朱華剛,周祥龍,吳永剛.簡單可靠實時傳送UDP協議的研究和應用[J].水雷戰與艦船防護,2010,18(3):50-53.
[3] 陳佳.基于UDP的數據傳輸可靠性保障機制研究及應用[D].西安理工大學,2017.
[4] W.Richard Stevens. TCP/IP詳解 卷1:協議[M].范建華,胥光輝,張濤,等譯.北京:機械工業出版社, 2008.
[5] 謝希仁.計算機網絡[M].北京:電子工業出版社,2008.