UDP實現可靠性傳輸

1、簡介

UDP 不屬於 鏈接型協議,於是具備 資源消耗小處理速度快的特色,因此一般 音頻、視頻和普通數據在傳送時使用UDP較多,由於他們及時偶爾丟失一兩個數據,也不會對接受結果產生太大影響。

傳輸層沒法確保數據的可靠傳輸,只能經過應用層來實現。實現的方式能夠參考TCP可靠性傳輸的方式,只是實現不在傳輸層,實現轉移到應用層。算法

實現肯定機制、重傳機制、窗口確認機制服務器

若是你不利用Linux協議棧以及上層socket機制,本身經過抓包和發包的方式去實現可靠性傳輸,那麼必須經過以下功能:markdown

  • 發送:包的分片、包肯定、包的重發
  • 接受:包的調序、包的序號肯定

目前有以下開源程序利用UDO實現了可靠的數據傳輸,分別是RUDPRTPUDT網絡


2、RUDP

RUDP提供一組數據服務質量加強機制,如擁塞控制的改進重發機制淡化服務器算法等,從而在包丟失和網絡擁塞的狀況下,RTP客戶機(實時位置)面前呈現的就是一個高質量的RTP流。在不干擾協議的實時特性的同時,可靠UDP的擁塞控制機制容許TCP方式下的流控制行爲。session


3、RTP

實時傳輸協議RTP)爲數據提供了具備實時特徵端到端傳送服務,如在組播或單播網絡服務下的交互式視頻音頻或模擬數據。應用程序一般在UDP上運行RTP以便使用其多路節點和校驗服務;這兩種協議都提供了傳輸層協議的功能。可是RTP能夠與其餘適合的底層網絡或傳輸協議一塊兒使用。若是底層網絡提供組播方式,那麼RTP可使用該組播表傳輸數據到多個目的地。socket

RTP自己沒有提供按時發送機制其餘服務質量(QoS)保證,它依賴於底層服務區實現這一過程。RTP並不保證傳送或防止無序傳送,也不肯定底層網絡的可靠性。RTP實行有序傳送,RTP中的序列號容許接收方重組發送發的包序列,同時序列號也能用於決定適當的包位置,例如:在視頻解碼中,就不須要順序解碼。oop


4、UDT

基於UDP的數據傳輸協議UDT)是一種互聯網數據傳輸協議。UDT的主要目的是支持高速廣域網上的海量數據傳輸,而互聯網上的標準數據傳輸協議TCP在高帶寬長距離網絡上性能不好。顧名思義,UDT建於UDP之上,並引入新的擁塞控制數據可靠性控制機制。UDT是面向鏈接雙向應用層協議。它同時支持可靠的數據流傳輸部分可靠的數據報傳輸。因爲UDT徹底在UDP上實現,它也能夠應用在除了高速數據傳輸以外的其餘應用領域,例如點到點技術(P2P),防火牆穿透,多媒體數據傳輸等等。性能


一、UDT應用層協議

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如何實現可靠性傳輸?

相關文章
相關標籤/搜索