UDP 只是做了傳輸協(xié)議能夠做的最少工作涌献。除了多路復(fù)用/多路分解功能及少量的差錯(cuò) 檢測外枢劝,它幾乎沒有對 IP 增加別的東西。
UDP 從應(yīng)用進(jìn)程得到數(shù)據(jù),附加上多路復(fù)用/多路分解服務(wù)所需的源端口號和目的端口 號字段,及兩個(gè)其他的小字段尺碰,然后將形成的報(bào)文段交給網(wǎng)絡(luò)層。
網(wǎng)絡(luò)層將該傳輸層報(bào)文段封裝到一個(gè) IP 數(shù)據(jù)報(bào)中题篷,然后盡力而為地將此數(shù)據(jù)報(bào)交付給 接收主機(jī)偿枕。
如果該報(bào)文段到達(dá)接收主機(jī)户辫,則 UDP 使用目的端口號來將報(bào)文段中的數(shù)據(jù)交付給正確 的應(yīng)用進(jìn)程墓塌。
使用 UDP時(shí),在發(fā)送報(bào)文段之前,發(fā)送方和接收方的傳輸層實(shí)體之間沒有進(jìn)行握手。 因此,UDP被稱為無連接的育特。
DNS是一個(gè)通常使用 UDP 的應(yīng)用層協(xié)議的例子。
當(dāng)主機(jī)中的 DNS 客戶端要進(jìn)行一次查詢時(shí)先朦,它構(gòu)造了一個(gè) DNS 查詢消息并將其交給 UDP缰冤。 無須與目的端系統(tǒng)握手,主機(jī)端的 UDP 為此報(bào)文添加首部字段喳魏,然后將形成的報(bào)文段交給網(wǎng)絡(luò)層棉浸。網(wǎng)絡(luò)層將此 UDP 報(bào)文段封裝進(jìn)一個(gè) IP 數(shù)據(jù)報(bào)中,然后將其發(fā)送給一個(gè) DNS 服務(wù)器截酷。 查詢主機(jī)中的 DNS 客戶端便等待對該查詢的響應(yīng)。如果它沒有收到響應(yīng)乾戏,則要么試著向另一個(gè)名字服務(wù)器發(fā)送該查詢迂苛,要么通知調(diào)用的應(yīng)用程序它不能獲得響應(yīng)。
使用 UDP 主要有以下原因:
.應(yīng)用層能更好地技制要發(fā)送的數(shù)據(jù)和發(fā)送時(shí)間鼓择。實(shí)時(shí)應(yīng)用通常要求最快的發(fā)送速率三幻, 不想過分地延遲報(bào)文段的傳送,且能容忍一些數(shù)據(jù)丟失呐能,而 TCP 服務(wù)模型并不是特別適合這 些應(yīng)用的需求念搬。
.無需連接建立抑堡。TCP 在開始數(shù)據(jù)傳輸之前要經(jīng)過三次握手。UDP 卻不需要任何淮備即 可進(jìn)行數(shù)據(jù)傳輸朗徊。因此 UDP 不會引入建立連接的時(shí)延首妖。
.無連接狀態(tài)。TCP 需要在端系統(tǒng)中維護(hù)連接狀態(tài)爷恳。此連接狀態(tài)包括接收和發(fā)送緩存有缆、 擁塞控制參數(shù)、序號與確認(rèn)號的參數(shù)温亲。UDP 不維護(hù)連接狀態(tài)棚壁,也不跟蹤這些參數(shù)。
.分組首部開梢小栈虚。每個(gè) TCP 報(bào)文段都有 20 字節(jié)的首部開銷袖外,而 UDP 僅有 8 字節(jié)的開 銷。
因此電子郵件魂务、遠(yuǎn)程終端訪問曼验、Web 及文件傳輸都是運(yùn)行在 TCP 之上。因?yàn)樗羞@些 應(yīng)用都需要 TCP 的可靠數(shù)據(jù)傳輸服務(wù)头镊。然而蚣驼,有很多重要的應(yīng)用是運(yùn)行在 UDP 上而不是 TCP 上。UDP 被用于 RIP 選路表的更新相艇,因?yàn)?RIP 更新被周期性地發(fā)送(通常每 5 分鐘一次)颖杏,以 便丟失的更新能被最近的更新所替代,因此更新丟失或過時(shí)的 RIP 是毫無意義的坛芽。UDP 也用 于承載網(wǎng)絡(luò)管理數(shù)據(jù)(SNMP)留储。DNS 運(yùn)行在 UDP 之上,避免了TCP 的連接創(chuàng)建時(shí)延咙轩。
但是可通過在應(yīng)用程序自身中建立可靠性機(jī)制來完成 UDP 的可靠數(shù)據(jù)傳輸获讳,例如一些 音視頻客戶端程序。
1 UDP 報(bào)文段結(jié)構(gòu)
UDP 首部只有 4 個(gè)字段活喊,源和目的端口號丐膝、長度和校驗(yàn)和,每個(gè)字段由兩個(gè)字節(jié)組成钾菊。?通過目的端口號可以使目的主機(jī)將應(yīng)用數(shù)據(jù)交給運(yùn)行在目的端系統(tǒng)中的相應(yīng)進(jìn)程(即執(zhí) 行多路分解功能)帅矗。而在返回消息時(shí)使用源端口號。 接收主機(jī)使用校驗(yàn)和來檢查報(bào)文段中是否存在差錯(cuò)煞烫。 長度字段指明了包括首部在內(nèi)的 UDP 報(bào)文段長度(以字節(jié)為單位)浑此。
2 校驗(yàn)和
校驗(yàn)和提供了差錯(cuò)檢測功能,即當(dāng) UDP 報(bào)文段從源到達(dá)目的時(shí)滞详,校驗(yàn)和用于確定其中 的比特是否發(fā)生了改變(例如凛俱,由千鏈路中或者路由器中存儲數(shù)據(jù)時(shí)的噪聲干擾)紊馏。
校驗(yàn)和的計(jì)算:發(fā)送方的 UDP 對報(bào)文段中的所有 16 比特字的和進(jìn)行反碼運(yùn)算,求和時(shí) 遇到的任何溢出都被回卷蒲犬。得到的結(jié)果放在 UDP 報(bào)文段中的校驗(yàn)和字段朱监。
在接收方,全部的 3 個(gè) 16 比特字(包括校驗(yàn)和)一起相加暖哨。如果分組中無差錯(cuò)赌朋,則顯然 在接收方這個(gè)和將是 1111 1111 1111 1111。如果有 1 個(gè)比特是 0篇裁,那么我們就知道分組中出現(xiàn)了差錯(cuò)沛慢。