UDP
不屬於
鏈接型協議,於是具備
資源消耗小,
處理速度快的特色,因此一般
音頻、視頻和普通數據在傳送時使用UDP較多,由於他們及時偶爾丟失一兩個數據,也不會對接受結果產生太大影響。
傳輸層沒法確保數據的可靠傳輸,只能經過應用層來實現。實現的方式能夠參考TCP可靠性傳輸的方式,只是實現不在傳輸層,實現轉移到應用層。算法
實現肯定機制、重傳機制、窗口確認機制。服務器
若是你不利用Linux協議棧以及上層socket機制,本身經過抓包和發包的方式去實現可靠性傳輸,那麼必須經過以下功能:markdown
目前有以下開源程序利用UDO實現了可靠的數據傳輸,分別是RUDP
、RTP
、UDT
網絡
RUDP提供一組數據服務質量加強機制,如擁塞控制的改進、重發機制及淡化服務器算法等,從而在包丟失和網絡擁塞的狀況下,RTP客戶機(實時位置)面前呈現的就是一個高質量的RTP流。在不干擾協議的實時特性的同時,可靠UDP的擁塞控制機制容許TCP方式下的流控制行爲。session
實時傳輸協議(RTP
)爲數據提供了具備實時特徵的端到端傳送服務,如在組播或單播網絡服務下的交互式視頻音頻或模擬數據。應用程序一般在UDP上運行RTP以便使用其多路節點和校驗服務;這兩種協議都提供了傳輸層協議的功能。可是RTP能夠與其餘適合的底層網絡或傳輸協議一塊兒使用。若是底層網絡提供組播方式,那麼RTP可使用該組播表傳輸數據到多個目的地。socket
RTP自己沒有提供按時發送機制或其餘服務質量(QoS)保證,它依賴於底層服務區實現這一過程。RTP並不保證傳送或防止無序傳送,也不肯定底層網絡的可靠性。RTP實行有序傳送,RTP中的序列號容許接收方重組發送發的包序列,同時序列號也能用於決定適當的包位置,例如:在視頻解碼中,就不須要順序解碼。oop
基於UDP的數據傳輸協議(UDT
)是一種互聯網數據傳輸協議。UDT的主要目的是支持高速廣域網上的海量數據傳輸,而互聯網上的標準數據傳輸協議TCP在高帶寬長距離網絡上性能不好。顧名思義,UDT建於UDP之上,並引入新的擁塞控制和數據可靠性控制機制。UDT是面向鏈接的雙向的應用層協議。它同時支持可靠的數據流
傳輸和部分可靠的數據報
傳輸。因爲UDT徹底在UDP上實現,它也能夠應用在除了高速數據傳輸以外的其餘應用領域,例如點到點技術(P2P),防火牆穿透,多媒體數據傳輸等等。性能
UDT並非在瓶頸帶寬相對較小的和大量多元短文檔流的狀況下用來替代TCP的。spa
UDT
主要做爲TCP的朋友,和TCP
並存,UDT分配的帶寬不該該超過根據MAX-MIN規則的最大最小公平共享原則(備註:最大最小規則容許UDT在高BDP鏈接下分配TCP不能使用的可用帶寬)。.net
UDT是雙工的,每一個UDT實體有兩個部分:發送和接受。
發送者根據流量控制和速率控制來發送(和重傳)應用程式數據。
接受者根據數據包和控制包,並根據接收到的包發送控制包。發送和接受程式共享同一個UDP端口來發送和接收。
接受者也負責觸發和處理任何的控制事件,包括擁塞控制和可靠性控制和他們的相對機制,例如RTT估計、帶寬估計、應答和重傳。
UDT
老是試着將應用層數據打包成固定的大小,除非數據不夠這麼大。和TCP類似的是,這個固定的包大小叫作MSS(最大包大小)。因爲指望UDT用來傳輸大塊數據流,咱們假定只能很小的一部分不規則的大小的包在UDT session中。MSS可以經過應用程式來安裝,MTU是其最優值。
UDT擁塞控制算法將速率控制在窗口(流量控制)合併起來,前者調整包的發送週期,後者限制最大的位被應答的包。在速率控制中使用的參數經過帶寬估計技術來更新,它繼承來之基於接受的包方法。同時,速率控制週期是估計RTT的常量,流控制參數參考與對方的數據到達速度,另外接收端釋放的緩衝區的大小。
幾乎全部內容來源於:udp如何實現可靠性傳輸?