概述
UDP不屬于連接協(xié)議,具有資源消耗少,處理速度快的優(yōu)點(diǎn),所以通常音頻,視頻和普通數(shù)據(jù)在傳送時(shí),使用UDP較多,因?yàn)榧词箒G失少量的包,也不會(huì)對(duì)接受結(jié)果產(chǎn)生較大的影響。
傳輸層無(wú)法保證數(shù)據(jù)的可靠傳輸,只能通過(guò)應(yīng)用層來(lái)實(shí)現(xiàn)了。實(shí)現(xiàn)的方式可以參照tcp可靠性傳輸?shù)姆绞?,只是?shí)現(xiàn)不在傳輸層,實(shí)現(xiàn)轉(zhuǎn)移到了應(yīng)用層。
最簡(jiǎn)單的方式是在應(yīng)用層模仿傳輸層TCP的可靠性傳輸。下面不考慮擁塞處理,可靠UDP的簡(jiǎn)單設(shè)計(jì)。
- 1、添加seq/ack機(jī)制,確保數(shù)據(jù)發(fā)送到對(duì)端
- 2、添加發(fā)送和接收緩沖區(qū),主要是用戶超時(shí)重傳。
- 3、添加超時(shí)重傳機(jī)制。
詳細(xì)說(shuō)明:送端發(fā)送數(shù)據(jù)時(shí),生成一個(gè)隨機(jī)seq=x,然后每一片按照數(shù)據(jù)大小分配seq。數(shù)據(jù)到達(dá)接收端后接收端放入緩存,并發(fā)送一個(gè)ack=x的包,表示對(duì)方已經(jīng)收到了數(shù)據(jù)。發(fā)送端收到了ack包后,刪除緩沖區(qū)對(duì)應(yīng)的數(shù)據(jù)。時(shí)間到后,定時(shí)任務(wù)檢查是否需要重傳數(shù)據(jù)。
目前有如下開(kāi)源程序利用udp實(shí)現(xiàn)了可靠的數(shù)據(jù)傳輸。分別為RUDP、RTP、UDT。
開(kāi)源程序
1、RUDP(Reliable User Datagram Protocol)
RUDP 提供一組數(shù)據(jù)服務(wù)質(zhì)量增強(qiáng)機(jī)制,如擁塞控制的改進(jìn)、重發(fā)機(jī)制及淡化服務(wù)器算法等,從而在包丟失和網(wǎng)絡(luò)擁塞的情況下, RTP 客戶機(jī)(實(shí)時(shí)位置)面前呈現(xiàn)的就是一個(gè)高質(zhì)量的 RTP 流。在不干擾協(xié)議的實(shí)時(shí)特性的同時(shí),可靠 UDP 的擁塞控制機(jī)制允許 TCP 方式下的流控制行為。
2、RTP(Real Time Protocol)
RTP為數(shù)據(jù)提供了具有實(shí)時(shí)特征的端對(duì)端傳送服務(wù),如在組播或單播網(wǎng)絡(luò)服務(wù)下的交互式視頻音頻或模擬數(shù)據(jù)。
應(yīng)用程序通常在 UDP 上運(yùn)行 RTP 以便使用其多路結(jié)點(diǎn)和校驗(yàn)服務(wù);這兩種協(xié)議都提供了傳輸層協(xié)議的功能。但是 RTP 可以與其它適合的底層網(wǎng)絡(luò)或傳輸協(xié)議一起使用。如果底層網(wǎng)絡(luò)提供組播方式,那么 RTP 可以使用該組播表傳輸數(shù)據(jù)到多個(gè)目的地。
RTP 本身并沒(méi)有提供按時(shí)發(fā)送機(jī)制或其它服務(wù)質(zhì)量(QoS)保證,它依賴于底層服務(wù)去實(shí)現(xiàn)這一過(guò)程。 RTP 并不保證傳送或防止無(wú)序傳送,也不確定底層網(wǎng)絡(luò)的可靠性。 RTP 實(shí)行有序傳送, RTP 中的序列號(hào)允許接收方重組發(fā)送方的包序列,同時(shí)序列號(hào)也能用于決定適當(dāng)?shù)陌恢?,例如:在視頻解碼中,就不需要順序解碼。
3、UDT(UDP-based Data Transfer Protocol)
基于UDP的數(shù)據(jù)傳輸協(xié)議(UDP-basedData Transfer Protocol,簡(jiǎn)稱UDT)是一種互聯(lián)網(wǎng)數(shù)據(jù)傳輸協(xié)議。UDT的主要目的是支持高速?gòu)V域網(wǎng)上的海量數(shù)據(jù)傳輸,而互聯(lián)網(wǎng)上的標(biāo)準(zhǔn)數(shù)據(jù)傳輸協(xié)議TCP在高帶寬長(zhǎng)距離網(wǎng)絡(luò)上性能很差。
顧名思義,UDT建于UDP之上,并引入新的擁塞控制和數(shù)據(jù)可靠性控制機(jī)制。UDT是面向連接的雙向的應(yīng)用層協(xié)議。它同時(shí)支持可靠的數(shù)據(jù)流傳輸和部分可靠的數(shù)據(jù)報(bào)傳輸。由于UDT完全在UDP上實(shí)現(xiàn),它也可以應(yīng)用在除了高速數(shù)據(jù)傳輸之外的其它應(yīng)用領(lǐng)域,例如點(diǎn)到點(diǎn)技術(shù)(P2P),防火墻穿透,多媒體數(shù)據(jù)傳輸?shù)鹊取?/p>