1 UDP特點(diǎn)
??用戶數(shù)據(jù)報(bào)協(xié)議UDP(User Datagram Protocol)只在IP的數(shù)據(jù)報(bào)服務(wù)至上增加了一點(diǎn)的功能铅搓。這就是復(fù)用和分用功能和差錯檢測的功能舞竿。
?UDP的主要特點(diǎn):
??(1) UDP 是無連接的。即發(fā)送數(shù)據(jù)之間不需要建立連接奉芦,因此減少了開銷和發(fā)送數(shù)據(jù)之間的時(shí)延赵抢。
??(2) UDP使用盡最大努力交付,即不保證可靠交付声功,因此主機(jī)不需要維持復(fù)雜的連接狀態(tài)表烦却。
??(3) UDP是面向報(bào)文的。
??發(fā)送方UDP對應(yīng)用程序交下來的報(bào)文先巴,在添加首部后就向下交付IP層其爵。UDP對應(yīng)用層交下來的報(bào)文,既不合并伸蚯,也不拆分摩渺,而是保留這些報(bào)文的邊界。這就是說剂邮,應(yīng)用層交給UDP多長的報(bào)文摇幻,UDP就照樣發(fā)送,即UDP一次交付一個完整的報(bào)文挥萌。
??因此绰姻,應(yīng)用程序必須選擇合適大小的報(bào)文。若報(bào)文太長引瀑,UDP把它交給IP層后狂芋,IP層在傳送時(shí)可能要進(jìn)行分片,這會降低IP層的效率憨栽。反之帜矾,如果報(bào)文太短,UDP把它交給IP層后徒像,會使IP數(shù)據(jù)報(bào)的首部相對長度太大黍特,也降低了IP層的效率。
??(4) UDP沒有擁塞控制锯蛀。
UDP沒有擁塞控制灭衷,因此網(wǎng)絡(luò)出現(xiàn)擁塞不會使源主機(jī)降低發(fā)送速率,這對實(shí)時(shí)應(yīng)用很重要旁涤。對于一些實(shí)時(shí)應(yīng)用(如IP電話翔曲,實(shí)時(shí)視頻會議等)要求源主機(jī)以恒定的速率發(fā)送數(shù)據(jù)迫像,并且允許網(wǎng)絡(luò)發(fā)生擁塞時(shí)丟失一些數(shù)據(jù),但卻不允許數(shù)據(jù)有太大的時(shí)延瞳遍。
??(5) UDP首部開銷很小闻妓,只有8個字節(jié)。
??當(dāng)然掠械,一些實(shí)時(shí)應(yīng)用需要對UDP的不可靠傳輸會進(jìn)行適當(dāng)?shù)母倪M(jìn)(如前向糾錯或重傳已丟失的報(bào)文)由缆,以減少數(shù)據(jù)的丟失。
2 UDP的首部格式
??用戶數(shù)據(jù)報(bào)UDP有兩個字段:數(shù)據(jù)字段和首部字段猾蒂。首部字段只有8個字節(jié)均唉,由四個字段組成,每個字段長度都是兩個字節(jié)肚菠。
??(1) 源端口:源端口號舔箭。不是必須的,只有在需要對方回信時(shí)選用蚊逢,不需要時(shí)可用全0层扶。
??(2) 目的端口:目的端口號。這在終點(diǎn)交付報(bào)文時(shí)必須使用烙荷。
??(3) 長度:UDP數(shù)據(jù)報(bào)的長度镜会,首部和數(shù)據(jù)部分長度之和,其最小值是8(即UDP用戶數(shù)據(jù)報(bào)沒有數(shù)據(jù)部分)奢讨。
??(4) 校驗(yàn)和:檢測UDP在傳輸中是否出錯稚叹,如果有錯就丟棄。
??當(dāng)運(yùn)輸層IP層收到UDP數(shù)據(jù)報(bào)時(shí)拿诸,就根據(jù)首部中的目的端口扒袖,把UDP數(shù)據(jù)報(bào)通過相應(yīng)的端口交付給上層應(yīng)用進(jìn)程。如果接收方UDP發(fā)現(xiàn)收到的報(bào)文的目的端口號不正確(即不存在對應(yīng)于該端口號的應(yīng)用進(jìn)程)亩码,即丟棄該報(bào)文季率,并由網(wǎng)際控制報(bào)文協(xié)議ICMP發(fā)送“端口不可達(dá)”差錯報(bào)文給發(fā)送方。
在ICMP協(xié)議一文中描沟,在討論Traceroute時(shí)飒泻,就是讓發(fā)送的UDP用戶數(shù)據(jù)報(bào)故意使用一個非法的UDP端口,結(jié)果ICMP就返回一個端口不可達(dá)的差錯報(bào)文吏廉,從而達(dá)到測試的目的泞遗。
3 UDP偽首部和校驗(yàn)和計(jì)算
??UDP檢驗(yàn)和提供差錯檢測功能。在計(jì)算校驗(yàn)和時(shí)席覆,要在UDP用戶數(shù)據(jù)報(bào)之前增加12字節(jié)的偽首部史辙。
所謂“偽首部”是因?yàn)閭问撞坎⒉皇荱DP用戶數(shù)據(jù)報(bào)真正的首部,只是在計(jì)算校驗(yàn)和時(shí),臨時(shí)添加在UDP用戶數(shù)據(jù)報(bào)前面聊倔,得到一個臨時(shí)的UDP用戶數(shù)據(jù)報(bào)晦毙。
??校驗(yàn)和就是按照這個臨時(shí)的UDP用戶數(shù)據(jù)報(bào)計(jì)算來的,偽首部既不向下傳送也不向上遞交耙蔑,僅僅是為了計(jì)算校驗(yàn)和见妒。
??(1) 源IP地址和目的IP地址:和IP數(shù)據(jù)一樣,各占4個字節(jié)甸陌。
??(2) 偽首部第3個字段是全零须揣。
??(3) 協(xié)議字段:以前說過,UDP協(xié)議的協(xié)議字段值是17邀层。
??(4) UDP長度:UDP用戶數(shù)據(jù)報(bào)長度返敬,首部長度和數(shù)據(jù)部分長度之和遂庄。
??UDP計(jì)算校驗(yàn)和的步驟:
(1) 將校驗(yàn)和字段置位0寥院。
(2) 將偽首部和UDP用戶數(shù)據(jù)報(bào)(首部和數(shù)據(jù)部分)看成是以16位為單位的二進(jìn)制組成(如果用戶數(shù)據(jù)報(bào)數(shù)據(jù)部分不是偶數(shù)字節(jié),用0填充)涛目,依次進(jìn)行二進(jìn)制反碼求和秸谢。
(3) 將求和的結(jié)果的反碼寫入校驗(yàn)和字段。
??這里先介紹以下二進(jìn)制反碼求和霹肝,1+1 = 0估蹄,高位進(jìn)1、1 + 0 = 0 + 1 = 1沫换、0 + 0 = 1臭蚁,如果最后一次加法有溢出,結(jié)果需要加1讯赏。如下圖垮兑,一個簡單的二進(jìn)制反碼求和
??下面用一個例子說明下,校驗(yàn)和的計(jì)算漱挎,假設(shè)源IP地址為153.19.0.104系枪,目的IP地址為171.3.14.11,UDP用戶數(shù)據(jù)報(bào)長度為15磕谅,源端口1087私爷,目的端口13。根據(jù)UDP用戶數(shù)據(jù)報(bào)的長度可知膊夹,數(shù)據(jù)部分是7(15 - 8) 字節(jié)衬浑,所以需要用0填充一個字節(jié)使之成為16位(偶數(shù)字節(jié))的整數(shù)倍。
??下圖給出了校驗(yàn)和計(jì)算的過程放刨,每16個二進(jìn)制作為1行工秩,逐行按二進(jìn)制反碼求和,圖中給出了前3行的求和結(jié)果,下面的計(jì)算過程相似拓诸,就略去了侵佃。
??從上可以看出,UDP校驗(yàn)和是把首部和數(shù)據(jù)部分一起校驗(yàn)奠支,而IP校驗(yàn)和僅僅校驗(yàn)IP首部馋辈。
??在接收方,把收到的UDP用戶數(shù)據(jù)報(bào)連同偽首部(以及可能的填充零字節(jié))一起倍谜,按二進(jìn)制反碼求這些16位字的和迈螟,當(dāng)無差錯時(shí)期其結(jié)果應(yīng)為全為1。否則就表明出現(xiàn)了差錯尔崔,接收方就應(yīng)丟棄這個UDP用戶數(shù)據(jù)報(bào)(也可以上交給應(yīng)用層答毫,但附上差錯的警告)。
這種簡單的差錯檢驗(yàn)方法的檢錯能力并不強(qiáng)季春,但是好處是簡單洗搂,處理起來較快。
4 小結(jié)
??
??
??
??
??