1. 程式人生 > >如何使UDP可靠傳輸

如何使UDP可靠傳輸

下面分別介紹三種使用UDP進行可靠資料傳輸的協議

1、RUDP(Reliable User Datagram Protocol)

可靠使用者資料報協議(RUDP)是一種基於可靠資料協議(RDP: RFC908 和 1151 (第二版))的簡單分組傳輸協議。作為一個可靠傳輸協議,RUDP 用於傳輸 IP 網路間的電話訊號。它允許獨立配置每個連線屬性,這樣在不同的平臺可以同時實施不同傳輸需求下的協議。

RUDP 提供一組資料服務質量增強機制,如擁塞控制的改進、重發機制及淡化伺服器演算法等,從而在包丟失和網路擁塞的情況下, RTP 客戶機(實時位置)面前呈現的就是一個高質量的 RTP 流。在不干擾協議的實時特性的同時,可靠 UDP 的擁塞控制機制允許 TCP 方式下的流控制行為。

為了與網路 TCP 通訊量同時工作, RUDP 使用類似於 TCP 的重發機制和擁塞控制演算法。在最大化利用可用頻寬上,這些演算法都得到了很好的證明。

RUDP特性

客戶機確認響應伺服器傳送給客戶機的包;

視窗和擁塞控制,伺服器不能超出當前允許頻寬; 一旦發生包丟失,伺服器重發給客戶機; 比實時流更快速,稱為“快取溢位”。 使用者資料報協議(UDP)

2、RTP(Real Time Protocol)

RTP,實時協議被用來為應用程式如音訊,視訊等的實時資料的傳輸提供端到端(end to end)的網路傳輸功能。傳輸的模型可以是單點傳送或是多點傳送。資料傳輸被一個姐妹協議——實時控制協議(

RTCP)來監控,後者允許在一個大的多點傳送網路上監視資料傳送,並且提供最小限度的控制和識別功能。

RTP是被IETFRFC1889中提出來的。順帶提及,RTP已經被接受為實時多媒體傳送的通用標準。ITU-TIETF都在各自的系統中將這一協議標準化。

1.1 為何需要RTP?

TCP不能支援像互動視訊,會議等的實時服務,這一原因是由於TCP只是一個“慢”協議,需要三次握手。就此在IP層上UDP是一個比TCP更好的選擇。但是UDP是本質上是一個不可靠協議,不支援在包丟情況下的重傳機制。誠然,UDP有一些特性,比如多路複用跟校驗和服務,這些都是對實時服務很有利的。為了消除UDP的缺點,

RTP是作為應用層而被提出來的

RTP提供的各種服務包括有效負載識別序列編號時間戳投遞監聽RTP能夠序列化包,當這些包在收端不是按順序到達的時。序列號也能被用來識別包丟失。時間戳被用於媒體有效的播放。到達的資料一直被RTCP監聽,以通知RTP層來校正其編碼和傳輸的引數。例如,如果RTCP層檢測到包丟失,它會通知RTP層減緩傳送速率。

儘管RTP有助於實時媒體的有效的播放,但是要注意的是RTP自身並不提供任何機制來確保及時傳遞或提供其他服務質量(QoS)的保證,而是依靠低層服務來完成這些。同樣,RTP也不保證投遞或防止無序投遞。RTP被設計出來主要是為了滿足有多個參加者的多媒體會議的需要。RTP也同樣適合於象持續資料的儲存,分散式互動模擬,主動標記以及應用程式的控制和測量。

1.2 RTP特性一覽

RTP提供有效負荷型別識別,亂序重排和利用時間戳的媒體有效播放。

RTCP監控服務質量,也提供在一個當前進行的會話中傳送關於參加者的資訊作用。

RTP對於下層協議是獨立的,它能夠工作在像TCP/IPATM,幀時延等型別的網路上。

如果被下層網路支援,RTP支援利用多路技術的對於多點的資料傳輸。

RTP序列號也能被用來確定包的合適位置。例如在視訊解碼,包無需按序解碼。

3、UDT(UDP-based Data Transfer Protocol

基於UDP的資料傳輸協議(UDP-based Data Transfer Protocol,簡稱UDT)是一種網際網路資料傳輸協議。UDT的主要目的是支援高速廣域網上的海量資料傳輸,而網際網路上的標準資料傳輸協議TCP在高頻寬長距離網路上效能很差。 顧名思義,UDT建於UDP之上,並引入新的擁塞控制和資料可靠性控制機制。UDT是面向連線的雙向的應用層協議。它同時支援可靠的資料流傳輸和部分可靠的資料報傳輸。 由於UDT完全在UDP上實現,它也可以應用在除了高速資料傳輸之外的其它應用領域,例如點到點技術(P2P),防火牆穿透,多媒體資料傳輸等等。

UDT是雙工的,每個UDT實體有兩個部分:傳送和接收。傳送者根據流量控制和速率控制來發送(和重傳)應用程式資料。接收者接收資料包和控制包,並根據接收到的包傳送控制包。傳送和接收程式共享同一個UDP埠來發送和接收。

接收者也負責觸發和處理任何的控制事件,包括擁塞控制和可靠性控制和他們的相對機制,例如RTT估計、頻寬估計、應答和重傳。 UDT總是試著將應用層資料打包成固定的大小,除非資料不夠這麼大。和TCP相似的是,這個固定的包大小叫做MSS(最大包大小)。由於期望UDT用來傳輸大塊資料流,我們假定只有很小的一部分不規則的大小的包在UDT session中。MSS能夠通過應用程式來安裝,MTU是其最優值(包括任何包頭)。 UDT擁塞控制演算法將速率控制和視窗(流量控制)合併起來,前者調整包的傳送週期,後者限制最大的位被應答的包。在速率控制中使用的引數通過頻寬估計技術來更新,他繼承來自基於接收的包方法。同時,速率控制週期是估計RTT的常量,流控制引數依賴於對方的資料到達速度,另外接收端釋放的緩衝區的大小。

UDP構建可靠資料傳輸

簡單來講,要使用UDP來構建可靠的面向連線的資料傳輸,就要實現類似於TCP協議的超時重傳,有序接受,應答確認,滑動視窗流量控制等機制,等於說要在傳輸層的上一層(或者直接在應用層)實現TCP協議的可靠資料傳輸機制,比如使用UDP資料包+序列號,UDP資料包+時間戳等方法,在伺服器端進行應答確認機制,這樣就會保證不可靠的UDP協議進行可靠的資料傳輸,不過這好像也是一個難題!