傳輸層無法保證資料的可靠傳輸,只能通過應用層來實現了。實現的方式可以參照tcp可靠性傳輸的方式,只是實現不在傳輸層,實現轉移到了應用層。
最簡單的方式是在應用層模仿傳輸層tcp的可靠性傳輸。下面不考慮擁塞處理,可靠udp的簡單設計。
1、新增seq/ack機制,確保資料傳送到對端
2、新增傳送和接收緩衝區,主要是使用者超時重傳。
3、新增超時重傳機制。
詳細說明:送端傳送資料時,生成乙個隨機seq=x,然後每一片按照資料大小分配seq。資料到達接收端後接收端放入快取,並傳送乙個ack=x的包,表示對方已經收到了資料。傳送端收到了ack包後,刪除緩衝區對應的資料。時間到後,定時任務檢查是否需要重傳資料。
目前有如下開源程式利用udp實現了可靠的資料傳輸。分別為rudp、rtp、udt。
開源程式
1、rudp(reliable user datagram protocol)
rudp 提供一組資料服務質量增強機制,如擁塞控制的改進、重發機制及淡化伺服器演算法等,從而在包丟失和網路擁塞的情況下, rtp 客戶機(實時位置)面前呈現的就是乙個高質量的 rtp 流。在不干擾協議的實時特性的同時,可靠 udp 的擁塞控制機制允許 tcp 方式下的流控制行為。
應用程式通常在 udp 上執行 rtp 以便使用其多路結點和校驗服務;這兩種協議都提供了傳輸層協議的功能。但是 rtp 可以與其它適合的底層網路或傳輸協議一起使用。如果底層網路提供組播方式,那麼 rtp 可以使用該組播表傳輸資料到多個目的地。
3、udt(udp-based data transfer protocol)
基於udp的資料傳輸協議(udp-baseddata transfer protocol,簡稱udt)是一種網際網路資料傳輸協議。udt的主要目的是支援高速廣域網上的海量資料傳輸,而網際網路上的標準資料傳輸協議tcp在高頻寬長距離網路上效能很差。
顧名思義,udt建於udp之上,並引入新的擁塞控制和資料可靠性控制機制。udt是面向連線的雙向的應用層協議。它同時支援可靠的資料流傳輸和部分可靠的資料報傳輸。由於udt完全在udp上實現,它也可以應用在除了高速資料傳輸之外的其它應用領域,例如點到點技術(p2p),防火牆穿透,多**資料傳輸等等。
UDP實現可靠傳輸
如何讓udp實現可靠傳輸 自定義通訊協議,在應用層定義一些可靠的協議,比如檢測包的順序,重複包等問題,如果沒有收到對方的ack,重新發包 udp沒有delievery garuantee,也沒有順序保證,所以如果你要求你的資料傳送與接受既要高效,又要保證有序,收包確認等,你就需要在udp協議上構建自...
udp如何實現可靠性傳輸?
包序號應用資料 型別保留 ack序號 控制資訊字段 說明控制資訊 000協議連線握手1 32位udt版本2 32位內部順序號3 32位mss 位元組 4 32位最大流量視窗大小 位元組 001保活 沒有010 應答,位 16 31 是應答序號1 32位包序號,先前接收到的包序號2 32位,rtt 微...
怎樣實現UDP可靠傳輸
相對於tcp,由於udp是面向無連線 不可靠的傳輸協議。如果我們要用udp去實現可靠的傳輸,則需要解決兩個問題 丟包和後發先至 包的順序 解決方法 1 給資料報編號,按照包的順序接收並儲存 2 接收端接收到資料報後傳送確認資訊給傳送端,傳送端接收確認資料以後再繼續傳送下乙個包,如果接收端收到的資料報...