《計(jì)算機(jī)網(wǎng)絡(luò)——自頂向下方法》運(yùn)輸層——無(wú)連接運(yùn)輸:UDP

無(wú)連接運(yùn)輸:UDP

運(yùn)輸層最低限度必須提供一種復(fù)用、分解服務(wù),以便在網(wǎng)絡(luò)層與正確的應(yīng)用及進(jìn)程之間傳遞數(shù)據(jù)。UDP就是只做了運(yùn)輸層協(xié)議能夠做的最少工作。除了復(fù)用/分解功能及少量的差錯(cuò)檢測(cè)之外,它幾乎沒(méi)有對(duì)IP增加別的東西。在使用UDP時(shí),發(fā)送方和接收方的運(yùn)輸層實(shí)體之間沒(méi)有握手,正因?yàn)槿绱耍琔DP被稱(chēng)為是無(wú)連接的。
既然TCP提供了可靠的數(shù)據(jù)傳輸服務(wù),而UDP不能提供,那么TCP是否總是首選?答案是否定的,因?yàn)樵S多應(yīng)用程序更適合用UDP,原因主要有以下幾點(diǎn):

  • 關(guān)于合適、發(fā)送什么數(shù)據(jù)的應(yīng)用層控制更為精細(xì)
  • 無(wú)需連接建立 ,UDP不會(huì)引起建立連接的時(shí)延;
  • 無(wú)連接狀態(tài) ,TCP需要在端系統(tǒng)中維護(hù)連接狀態(tài),此連接狀態(tài)包括接收和發(fā)送緩存,擁塞控制參數(shù)以及序號(hào)與確定號(hào)參數(shù)。要實(shí)現(xiàn)TCP可靠數(shù)據(jù)傳輸與擁塞控制這些狀態(tài)信息是必要的。另一方面,UDP不需要維護(hù)這些狀態(tài)信息,也不跟蹤這些參數(shù),因此,某些撞門(mén)用于某種特定應(yīng)用的服務(wù)器當(dāng)應(yīng)用程序運(yùn)行在UDP而不是在TCP上時(shí),一般都能支持更多的活躍用戶(hù)。
  • 分組首部開(kāi)銷(xiāo)小, 每個(gè)TCP報(bào)文段都有20字節(jié)的首部開(kāi)銷(xiāo),而UDP僅有8字節(jié)的開(kāi)銷(xiāo)。
    需要提出的是:使用UDP的應(yīng)用時(shí)可以實(shí)現(xiàn)可靠數(shù)據(jù)傳輸?shù)?,這可以通過(guò)在應(yīng)用程序自身中建立可靠機(jī)制來(lái)完成。

UDP報(bào)文段結(jié)構(gòu)

UDP報(bào)文段結(jié)構(gòu)如下圖所示。應(yīng)用層數(shù)據(jù)占用UDP報(bào)文段的數(shù)據(jù)字段。UDP的首部只有4個(gè)字段,每個(gè)字段有兩個(gè)字節(jié)組成。通過(guò)端口號(hào)可以使目的主機(jī)將應(yīng)用數(shù)據(jù)交給運(yùn)行在目的端系統(tǒng)中的相應(yīng)進(jìn)程。長(zhǎng)度字段指示了在UDP報(bào)文段中的字節(jié)數(shù)(首部加數(shù)據(jù))。因?yàn)閿?shù)據(jù)字段的長(zhǎng)度在一個(gè)UDP段中不用一在另一個(gè)段中,故需要一個(gè)明確的長(zhǎng)度。接收方使用檢驗(yàn)和來(lái)檢查該報(bào)文段中是否出現(xiàn)了差錯(cuò)。實(shí)際上計(jì)算檢驗(yàn)和時(shí),除了UDP報(bào)文段以外還包括了IP首部的一些字段。


image

UDP檢驗(yàn)和

UDP檢驗(yàn)和提供了差錯(cuò)檢測(cè)功能。檢驗(yàn)和用于確定當(dāng)UDP報(bào)文段從源到達(dá)目的地移動(dòng)時(shí),其中的比特是否發(fā)生了改變。
發(fā)送方的UDP報(bào)文段中的所有16比特的字的和進(jìn)行反碼運(yùn)算,求和遇到溢出時(shí)都被回卷(將異常位加到最低位)。得到的結(jié)果放在UDP報(bào)文段中的檢驗(yàn)和字段。
舉例來(lái)說(shuō)我們有下滿(mǎn)3個(gè)16比特的字:
\begin{aligned} &0110011001100000\\ &0101010101010101\\ &1000111100001100 \end{aligned}
這些16比特的字的前兩個(gè)之和是:
\begin{aligned} &0110011001100000\\ &\frac{0101010101010101}{1011101110110101} \end{aligned}
再將上面的和與第三個(gè)字相加是:
\begin{aligned} &1011101110110101\\ &\frac{1000111100001100}{0100101011000010} \end{aligned}
※ 最后一次加法有溢出它要被回卷。
因此將該和0100101011000010求反碼的結(jié)果是:1011010100111101,這變?yōu)榱藱z驗(yàn)和。
在接收方,全部的4個(gè)比特字(包括檢驗(yàn)和)加在一起。如果該分組中沒(méi)有引入差錯(cuò),則顯然在接收方處該和將是1111111111111111.如果這些比特之一是0,那么我們就知道分組中已經(jīng)出現(xiàn)了差錯(cuò)。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容