無(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首部的一些字段。

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比特的字:
這些16比特的字的前兩個(gè)之和是:
再將上面的和與第三個(gè)字相加是:
※ 最后一次加法有溢出它要被回卷。
因此將該和求反碼的結(jié)果是:
,這變?yōu)榱藱z驗(yàn)和。
在接收方,全部的4個(gè)比特字(包括檢驗(yàn)和)加在一起。如果該分組中沒(méi)有引入差錯(cuò),則顯然在接收方處該和將是.如果這些比特之一是0,那么我們就知道分組中已經(jīng)出現(xiàn)了差錯(cuò)。