概述
UDP不屬于連接協(xié)議唠雕,具有資源消耗少,處理速度快的優(yōu)點吨述,所以通常音頻岩睁,視頻和普通數(shù)據(jù)在傳送時,使用UDP較多揣云,因為即使丟失少量的包捕儒,也不會對接受結(jié)果產(chǎn)生較大的影響。
傳輸層無法保證數(shù)據(jù)的可靠傳輸,只能通過應(yīng)用層來實現(xiàn)了刘莹。實現(xiàn)的方式可以參照tcp可靠性傳輸?shù)姆绞窖忠悖皇菍崿F(xiàn)不在傳輸層,實現(xiàn)轉(zhuǎn)移到了應(yīng)用層点弯。
最簡單的方式是在應(yīng)用層模仿傳輸層TCP的可靠性傳輸扇调。下面不考慮擁塞處理,可靠UDP的簡單設(shè)計蒲拉。
- 1肃拜、添加seq/ack機制,確保數(shù)據(jù)發(fā)送到對端
- 2雌团、添加發(fā)送和接收緩沖區(qū),主要是用戶超時重傳士聪。
- 3锦援、添加超時重傳機制。
詳細說明:送端發(fā)送數(shù)據(jù)時剥悟,生成一個隨機seq=x灵寺,然后每一片按照數(shù)據(jù)大小分配seq。數(shù)據(jù)到達接收端后接收端放入緩存区岗,并發(fā)送一個ack=x的包略板,表示對方已經(jīng)收到了數(shù)據(jù)。發(fā)送端收到了ack包后慈缔,刪除緩沖區(qū)對應(yīng)的數(shù)據(jù)叮称。時間到后,定時任務(wù)檢查是否需要重傳數(shù)據(jù)藐鹤。
目前有如下開源程序利用udp實現(xiàn)了可靠的數(shù)據(jù)傳輸瓤檐。分別為RUDP、RTP娱节、UDT挠蛉。
開源程序
1、RUDP(Reliable User Datagram Protocol)
RUDP 提供一組數(shù)據(jù)服務(wù)質(zhì)量增強機制肄满,如擁塞控制的改進谴古、重發(fā)機制及淡化服務(wù)器算法等,從而在包丟失和網(wǎng)絡(luò)擁塞的情況下稠歉, RTP 客戶機(實時位置)面前呈現(xiàn)的就是一個高質(zhì)量的 RTP 流掰担。在不干擾協(xié)議的實時特性的同時,可靠 UDP 的擁塞控制機制允許 TCP 方式下的流控制行為轧抗。
2恩敌、RTP(Real Time Protocol)
RTP為數(shù)據(jù)提供了具有實時特征的端對端傳送服務(wù),如在組播或單播網(wǎng)絡(luò)服務(wù)下的交互式視頻音頻或模擬數(shù)據(jù)横媚。
應(yīng)用程序通常在 UDP 上運行 RTP 以便使用其多路結(jié)點和校驗服務(wù)纠炮;這兩種協(xié)議都提供了傳輸層協(xié)議的功能月趟。但是 RTP 可以與其它適合的底層網(wǎng)絡(luò)或傳輸協(xié)議一起使用。如果底層網(wǎng)絡(luò)提供組播方式恢口,那么 RTP 可以使用該組播表傳輸數(shù)據(jù)到多個目的地孝宗。
RTP 本身并沒有提供按時發(fā)送機制或其它服務(wù)質(zhì)量(QoS)保證,它依賴于底層服務(wù)去實現(xiàn)這一過程耕肩。 RTP 并不保證傳送或防止無序傳送因妇,也不確定底層網(wǎng)絡(luò)的可靠性。 RTP 實行有序傳送猿诸, RTP 中的序列號允許接收方重組發(fā)送方的包序列婚被,同時序列號也能用于決定適當?shù)陌恢茫纾涸谝曨l解碼中梳虽,就不需要順序解碼址芯。
3、UDT(UDP-based Data Transfer Protocol)
基于UDP的數(shù)據(jù)傳輸協(xié)議(UDP-basedData Transfer Protocol窜觉,簡稱UDT)是一種互聯(lián)網(wǎng)數(shù)據(jù)傳輸協(xié)議谷炸。UDT的主要目的是支持高速廣域網(wǎng)上的海量數(shù)據(jù)傳輸,而互聯(lián)網(wǎng)上的標準數(shù)據(jù)傳輸協(xié)議TCP在高帶寬長距離網(wǎng)絡(luò)上性能很差禀挫。
顧名思義旬陡,UDT建于UDP之上,并引入新的擁塞控制和數(shù)據(jù)可靠性控制機制语婴。UDT是面向連接的雙向的應(yīng)用層協(xié)議描孟。它同時支持可靠的數(shù)據(jù)流傳輸和部分可靠的數(shù)據(jù)報傳輸。由于UDT完全在UDP上實現(xiàn)腻格,它也可以應(yīng)用在除了高速數(shù)據(jù)傳輸之外的其它應(yīng)用領(lǐng)域画拾,例如點到點技術(shù)(P2P),防火墻穿透菜职,多媒體數(shù)據(jù)傳輸?shù)鹊取?/p>