簡介
用戶數(shù)據(jù)報協(xié)議UDP(User Datagram Protocol)[RFC 793]
- 無連接的,即發(fā)送數(shù)據(jù)之前不需要建立連接他膳,因此減少了開銷和發(fā)送數(shù)據(jù)之前的時延。
- 不保證可靠交付,因此主機不需要為此復(fù)雜的連接狀態(tài)表
- 面向報文的,意思是 UDP 對應(yīng)用層交下來的報文饼煞,既不合并,也不拆分诗越,而是保留這些報文的邊界砖瞧,在添加首部后向下交給 IP 層。
- 沒有阻塞控制嚷狞,因此網(wǎng)絡(luò)出現(xiàn)的擁塞不會使發(fā)送方的發(fā)送速率降低块促。
- 支持一對一荣堰、一對多、多對一和多對多的交互通信竭翠,也即是提供廣播和多播的功能振坚。
- 首部開銷小,首部只有 8 個字節(jié)斋扰,分為四部分渡八。
udp報文結(jié)構(gòu)
源端口:源端口號,在需要對方回信時選用褥实,不需要時可全 0.
目的端口:目的端口號呀狼,在終點交付報文時必須要使用到裂允。
長度:UDP 用戶數(shù)據(jù)報的長度损离,在只有首部的情況,其最小值是 8 绝编。
檢驗和:檢測 UDP 用戶數(shù)據(jù)報在傳輸中是否有錯僻澎,有錯就丟棄。
UDP 如何進行校驗和:
UDP 數(shù)據(jù)報首部中檢驗和的計算方法比較特殊十饥。
在計算檢驗和時窟勃,要在數(shù)據(jù)報之前增加 12 個字節(jié)的偽首部,用來計算校驗和逗堵。
偽首部并不是數(shù)據(jù)報真正的首部秉氧,是為了計算校驗和而臨時添加在數(shù)據(jù)報前面的,在真正傳輸?shù)臅r候并不會把偽首部一并發(fā)送蜒秤。
第一字段汁咏,源 IP 地址
第二字段,目的 IP 地址
第三字段作媚,字段全 0
第四字段攘滩,IP 首部中的協(xié)議字段的值,對于 UDP纸泡,此字段值為 17
第五字段漂问,UDP 用戶數(shù)據(jù)報的長度
UDP與TCP對比
TCP與UDP的連接方式
從程序?qū)崿F(xiàn)的角度來看
tcp中需要客戶端向服務(wù)器發(fā)起連接,服務(wù)器需要接受客戶端的連接以后才可以收發(fā)數(shù)據(jù)女揭。而udp中客戶端不需要向服務(wù)器發(fā)起連接蚤假,只需要知道服務(wù)器綁定的端口就可以向服務(wù)器發(fā)送數(shù)據(jù)。由此可知吧兔,tcp是面向連接的磷仰,udp是非面向連接的。
UDP面向報文 掩驱,TCP面向字節(jié)流
UDP是面向報文芒划。
發(fā)送方的UDP對應(yīng)用程序交下來的報文在添加首部后就向下交付給IP層冬竟,對交下來的報文既不合并也不拆分。因此民逼,應(yīng)用進程必須選擇合適大小的報文泵殴,若報文太長,UDP把它交付給IP層后拼苍,IP層在傳送時可能要進行分片笑诅,這會降低IP層的效率;反之疮鲫,若報文太短吆你,UDP把它交給IP層后,會使IP數(shù)據(jù)報的首部的相對長度太大俊犯,也降低了IP層的效率妇多。TCP面向字節(jié)流。
雖然應(yīng)用程序和TCP的交互是一次一個數(shù)據(jù)塊燕侠,但TCP把應(yīng)用程序交下來的數(shù)據(jù)看成是一連串的務(wù)結(jié)構(gòu)的字節(jié)流者祖。TCP不保證接收方應(yīng)用程序所收到的數(shù)據(jù)塊和發(fā)送方應(yīng)用程序所發(fā)出的數(shù)據(jù)塊具有對應(yīng)大小的關(guān)系(例如,發(fā)送方應(yīng)用程序交給發(fā)送方TCP共有10個數(shù)據(jù)塊绢彤,但接收方TCP可能只用了4個數(shù)據(jù)塊就把收到的字節(jié)流交付給了上層應(yīng)用程序)七问。但接收方應(yīng)用程序收到的字節(jié)流必須和發(fā)送方應(yīng)用程序發(fā)出的字節(jié)流完全一樣。(原理參考每日一問20——TCP中tcp滑動窗口的介紹)
UDP單播茫舶,廣播械巡,多播
- 單播把數(shù)據(jù)報發(fā)送給單一主機
- 廣播把數(shù)據(jù)報發(fā)送給指定網(wǎng)絡(luò)上的所有主機
- 多播發(fā)送給指定的多個主機
廣播
廣播域
首先我們來了解一下廣播域的概念。
廣播域是網(wǎng)絡(luò)中能接收任一臺主機發(fā)出的廣播幀的所有主機集合饶氏。也就是說讥耗,如果廣播域內(nèi)的其中一臺主機發(fā)出一個廣播幀,同一廣播域內(nèi)所有的其它主機都可以收到該廣播幀嚷往。
廣播域的計算
如何知道一臺主機是屬于哪一個廣播域呢葛账?其實計算很簡單,只要用主機的IP地址與子網(wǎng)掩碼進行與運算即可知道該主機屬于哪一個廣播域皮仁。例如:一臺主機的IP地址為192.168.23.150籍琳,子網(wǎng)掩碼為255.255.255.0,那么它所屬的廣播域就是192.168.23.150&255.255.255.0=192.168.23.0贷祈。那么其它的在廣播域192.168.23.0內(nèi)的所有主機就可以到該設(shè)備發(fā)送的廣播包趋急。如果把子網(wǎng)掩碼改為255.255.0.0,那么它所屬的廣播域就是192.168.23.150&255.255.0.0=192.168.0.0势誊。那么其它的在廣播域192.168.0.0內(nèi)的所有主機都可以收到該設(shè)備發(fā)送的廣播包呜达。
廣播地址的計算
要想相同廣播域內(nèi)的其它主機能收到的廣播幀,還需要在發(fā)送廣播包的時候指定當前所屬廣播域內(nèi)的廣播地址粟耻。廣播地址的計算方法為子網(wǎng)掩碼取反再與廣播域進行或運算查近。
例如:如果主機當前所屬廣播域為192.168.0.0眉踱,子網(wǎng)掩碼為255.255.0.0,那么廣播地址則為192.168.255.255霜威。
使用UDP進行跨網(wǎng)段廣播
要使主機A發(fā)送的廣播包能夠被另一網(wǎng)段的主機B收到谈喳,那么只需要更改主機A的子網(wǎng)掩碼使得與主機B在同一個廣播域內(nèi),再使用新的廣播域的廣播地址發(fā)送廣播包即可戈泼。
例如:要使用192.168.23.150發(fā)送廣播包讓192.168.27.135收到婿禽,只需要設(shè)置192.168.23.150的子網(wǎng)掩碼為255.255.0.0,然后再使用廣播地址192.168.255.255即可大猛。
廣播UDP與單播UDP的區(qū)別就是IP地址不同扭倾,廣播使用廣播地址255.255.255.255,將消息發(fā)送到在同一廣播網(wǎng)絡(luò)上的每個主機挽绩。
多播
多播是一組主機的標示符膛壹,它已經(jīng)加入到一個多播組中。在以太網(wǎng)中琼牧,多播地址是一個48位的標示符恢筝,命名了一組應(yīng)該在這個網(wǎng)絡(luò)中應(yīng)用接收到一個分組的站點哀卫。在IPv4中巨坊,它歷史上被叫做D類地址,一種類型的IP地址此改,它的范圍從224.0.0.0到239.255.255.255趾撵。D類地址用于組播。
相關(guān)文章:
TCP/IP詳解學(xué)習(xí)筆記(6)-UDP
多播(組播)原理分析
UDP廣播原理簡介
UDP 和 TCP 的不同