基于UDP協(xié)議的UDT格式介紹
UDT,類似于UDP協(xié)議。那么它的中文翻譯則是基于UDP的傳輸協(xié)議。在理解上面我們?nèi)绾芜M(jìn)行區(qū)分和理解呢?下面我們就來對這兩個(gè)協(xié)議進(jìn)行一下說明。首先,UDT是雙工的,每個(gè)UDT實(shí)體有兩個(gè)部分:發(fā)送和接收。發(fā)送者根據(jù)流量控制和速率控制來發(fā)送(和重傳)應(yīng)用程序數(shù)據(jù)。接收者接收數(shù)據(jù)包和控制包,并根據(jù)接收到的包發(fā)送控制包。發(fā)送和接收程序共享同一個(gè)UDP協(xié)議的端口來發(fā)送和接收。
接收者也負(fù)責(zé)觸發(fā)和處理所有的控制事件,包括擁塞控制和可靠性控制和他們的相對機(jī)制,例如RTT估計(jì)、帶寬估計(jì)、應(yīng)答和重傳。
UDT總是試著將應(yīng)用層數(shù)據(jù)打包成固定的大小,除非數(shù)據(jù)不夠這么大。和TCP相似的是,這個(gè)固定的包大小叫做MSS(***包大?。S捎谄谕鸘DT用來傳輸大塊數(shù)據(jù)流,我們假定只有很小的一部分不規(guī)則的大小的包在UDT session中。MSS可以通過應(yīng)用程序來安裝,MTU是其***值(包括所有包頭)。
UDT擁塞控制算法將速率控制和窗口(流量控制)合并起來,前者調(diào)整包的發(fā)送周期,后者限制***的位被應(yīng)答的包。在速率控制中使用的參數(shù)通過帶寬估計(jì)技術(shù)來更新,它繼承來自基于接收的包方法。同時(shí),速率控制周期是估計(jì)RTT的常量,流控制參數(shù)依賴于對方的數(shù)據(jù)到達(dá)速度,另外接收端釋放的緩沖區(qū)的大小。
包結(jié)構(gòu)
UDT有兩種包:數(shù)據(jù)包和控制包。他們通過包頭的***位來區(qū)分(標(biāo)志位)。如果是0,表示是數(shù)據(jù)包,1表示是控制包。
數(shù)據(jù)包
數(shù)據(jù)包結(jié)構(gòu)如下顯示:
包序號是UDT數(shù)據(jù)包頭中唯一的內(nèi)容。它是一個(gè)無符號整數(shù),使用標(biāo)志位后的31位,UDT使用包基礎(chǔ)的需要,例如,每個(gè)非重傳的包都增加序號1。序號在到達(dá)***值2^31-1的時(shí)候覆蓋。緊跟在這些數(shù)據(jù)后面的是應(yīng)用程序數(shù)據(jù)。
控制包
控制包結(jié)構(gòu)如下:
有6種類型的控制包在UDT中,bit1-3表示這些信息。前32位在包頭中必須存在??刂菩畔⒆侄伟?(例如,它不存在)或者多個(gè)32位無符號整數(shù),這由包類型決定。
UDT使用應(yīng)答子序號的方法。每個(gè)ACK/ACK2包有一個(gè)無符號的16位序號,它獨(dú)立于數(shù)據(jù)包需要。它使用位16-31。應(yīng)答需要從0到(2^16-1)。位16-31在其他控制包中沒有定義。
類型
|
說明
|
控制信息
|
000
|
協(xié)議連接握手
|
1.32位 UDT版本
2.32位內(nèi)部順序號
3.32位 MSS(字節(jié))
4.32位***流量窗口大小(字節(jié))
|
001
|
?;?/span>
|
沒有
|
010
|
應(yīng)答,位16-31是應(yīng)答序號
|
1.32位包序號,先前接收到的包序號
2.32位,RTT(微秒)
3.32位,RTT 變量或者RTTVar (微秒)
4.32位,流量窗口大?。ò臄?shù)量)
5.32位,連接容量估計(jì)(每秒包的數(shù)量)
|
011
|
Negative應(yīng)答(NAK)
|
丟失信息的32位整數(shù)數(shù)組,見3.9節(jié)
|
100
|
保留
|
這種類型的控制信息保留作為擁塞警告使用,從接收到發(fā)送端。一個(gè)擁塞警告能被ECN或包延遲增加趨勢的度量方法觸發(fā)。
|
101
|
關(guān)閉
|
|
110
|
應(yīng)答一個(gè)應(yīng)答(ACK2)
|
16-31位,應(yīng)答序號。
|
111
|
4-15的解釋
|
保留將來使用
|
注意,對于數(shù)據(jù)和控制包來說,可以從UDP協(xié)議頭中得到實(shí)際的包大小。包大小信息能被用來得到有效的數(shù)據(jù)負(fù)載和NAK包中的控制信息字段大小。
定時(shí)器
UDT在接收端使用4個(gè)定時(shí)器來觸發(fā)不同的周期事件,包括速率控制、應(yīng)答、丟失報(bào)告(negative應(yīng)答)和重傳/連接維護(hù)。
UDT中的定時(shí)器使用系統(tǒng)時(shí)間作為源。UDT接收端主動(dòng)查詢系統(tǒng)時(shí)間來檢查一個(gè)定時(shí)器是否過期。對于某個(gè)定時(shí)器T來說,其擁有周期TP,將定變量t用來記錄最近T被設(shè)置或復(fù)位的時(shí)間。如果T在系統(tǒng)時(shí)間t0(t= t0)被復(fù)位,那么任何t1(t1-t>=TP)是T過期的條件。
四個(gè)定時(shí)器是:RC定時(shí)器、ACK定時(shí)器、NAK定時(shí)器、EXP定時(shí)器。他們的周期分別是:RCTP、ATP、NTP、ETP。
RC定時(shí)器用來觸發(fā)周期性的速率控制。ACK定時(shí)器用來觸發(fā)周期性的有選擇的應(yīng)答(應(yīng)答包)。RCTP和ATP是常量值,值為:RCTP=ATP=0.01秒。
NAK被用來觸發(fā)negative應(yīng)答(NAK包)。重傳定時(shí)器被用來觸發(fā)一個(gè)數(shù)據(jù)包的重傳和維護(hù)連接狀態(tài)。他們周期依賴于對于RTT的估計(jì)。ETP值也依賴于連續(xù)EXP時(shí)間溢出的次數(shù)。推薦的RTT初始值是0.1秒,而NTP和ETP的初始值是:NTP=3*RTT,ETP=3*RTT+ATP。
在每次bounded UDP協(xié)議接收操作(如果收到一個(gè)UDP協(xié)議包,一些額外的必須的數(shù)據(jù)處理時(shí)間)時(shí)查詢系統(tǒng)時(shí)間來檢查四個(gè)定時(shí)器是否已經(jīng)過期。推薦的周期粒度是微秒。UDP接收時(shí)間溢出值是實(shí)現(xiàn)的一個(gè)選擇,這依賴于循環(huán)查詢的負(fù)擔(dān)和事件周期精確度之間的權(quán)衡。
速率控制事件更新包發(fā)送周期,UDT發(fā)送端使用STP來安排數(shù)據(jù)包的發(fā)送。假定一個(gè)在時(shí)間t0被發(fā)送,那么下一次包發(fā)送時(shí)間是(t0+ STP)。換句話說,如果前面的包發(fā)送花費(fèi)了t’時(shí)間,發(fā)送端將等待(STP-t’)來發(fā)送下一個(gè)數(shù)據(jù)包(如果STP-t’ <0,就不需要等待了)。這個(gè)等待間隔需要一個(gè)高精確度的實(shí)現(xiàn),推薦使用CPU時(shí)鐘周期粒度。