每日一問21——UDP

簡(jiǎn)介

用戶數(shù)據(jù)報(bào)協(xié)議UDP(User Datagram Protocol)[RFC 793]

  • 無連接的,即發(fā)送數(shù)據(jù)之前不需要建立連接,因此減少了開銷和發(fā)送數(shù)據(jù)之前的時(shí)延。
  • 不保證可靠交付,因此主機(jī)不需要為此復(fù)雜的連接狀態(tài)表
  • 面向報(bào)文的,意思是 UDP 對(duì)應(yīng)用層交下來的報(bào)文,既不合并,也不拆分,而是保留這些報(bào)文的邊界,在添加首部后向下交給 IP 層。
  • 沒有阻塞控制,因此網(wǎng)絡(luò)出現(xiàn)的擁塞不會(huì)使發(fā)送方的發(fā)送速率降低。
  • 支持一對(duì)一、一對(duì)多、多對(duì)一和多對(duì)多的交互通信,也即是提供廣播和多播的功能。
  • 首部開銷小,首部只有 8 個(gè)字節(jié),分為四部分。
udp報(bào)文結(jié)構(gòu)
6FCC9F4EDE80F784BD11ED9FA76FA375.png

源端口:源端口號(hào),在需要對(duì)方回信時(shí)選用,不需要時(shí)可全 0.
目的端口:目的端口號(hào),在終點(diǎn)交付報(bào)文時(shí)必須要使用到。
長(zhǎng)度:UDP 用戶數(shù)據(jù)報(bào)的長(zhǎng)度,在只有首部的情況,其最小值是 8 。
檢驗(yàn)和:檢測(cè) UDP 用戶數(shù)據(jù)報(bào)在傳輸中是否有錯(cuò),有錯(cuò)就丟棄。

UDP 如何進(jìn)行校驗(yàn)和:

UDP 數(shù)據(jù)報(bào)首部中檢驗(yàn)和的計(jì)算方法比較特殊。
在計(jì)算檢驗(yàn)和時(shí),要在數(shù)據(jù)報(bào)之前增加 12 個(gè)字節(jié)的偽首部,用來計(jì)算校驗(yàn)和。
偽首部并不是數(shù)據(jù)報(bào)真正的首部,是為了計(jì)算校驗(yàn)和而臨時(shí)添加在數(shù)據(jù)報(bào)前面的,在真正傳輸?shù)臅r(shí)候并不會(huì)把偽首部一并發(fā)送。

3D9C291187835C3571A111952201B4FF.png

第一字段,源 IP 地址
第二字段,目的 IP 地址
第三字段,字段全 0
第四字段,IP 首部中的協(xié)議字段的值,對(duì)于 UDP,此字段值為 17
第五字段,UDP 用戶數(shù)據(jù)報(bào)的長(zhǎng)度

UDP與TCP對(duì)比

D65D7EB6-22CB-48C1-AF5B-10BCBD244B01.png
TCP與UDP的連接方式
從程序?qū)崿F(xiàn)的角度來看
1363304870_3150.jpg

tcp中需要客戶端向服務(wù)器發(fā)起連接,服務(wù)器需要接受客戶端的連接以后才可以收發(fā)數(shù)據(jù)。而udp中客戶端不需要向服務(wù)器發(fā)起連接,只需要知道服務(wù)器綁定的端口就可以向服務(wù)器發(fā)送數(shù)據(jù)。由此可知,tcp是面向連接的,udp是非面向連接的。

UDP面向報(bào)文 ,TCP面向字節(jié)流
  • UDP是面向報(bào)文。
    發(fā)送方的UDP對(duì)應(yīng)用程序交下來的報(bào)文在添加首部后就向下交付給IP層,對(duì)交下來的報(bào)文既不合并也不拆分。因此,應(yīng)用進(jìn)程必須選擇合適大小的報(bào)文,若報(bào)文太長(zhǎng),UDP把它交付給IP層后,IP層在傳送時(shí)可能要進(jìn)行分片,這會(huì)降低IP層的效率;反之,若報(bào)文太短,UDP把它交給IP層后,會(huì)使IP數(shù)據(jù)報(bào)的首部的相對(duì)長(zhǎng)度太大,也降低了IP層的效率。

  • TCP面向字節(jié)流。
    雖然應(yīng)用程序和TCP的交互是一次一個(gè)數(shù)據(jù)塊,但TCP把應(yīng)用程序交下來的數(shù)據(jù)看成是一連串的務(wù)結(jié)構(gòu)的字節(jié)流。TCP不保證接收方應(yīng)用程序所收到的數(shù)據(jù)塊和發(fā)送方應(yīng)用程序所發(fā)出的數(shù)據(jù)塊具有對(duì)應(yīng)大小的關(guān)系(例如,發(fā)送方應(yīng)用程序交給發(fā)送方TCP共有10個(gè)數(shù)據(jù)塊,但接收方TCP可能只用了4個(gè)數(shù)據(jù)塊就把收到的字節(jié)流交付給了上層應(yīng)用程序)。但接收方應(yīng)用程序收到的字節(jié)流必須和發(fā)送方應(yīng)用程序發(fā)出的字節(jié)流完全一樣。(原理參考每日一問20——TCP中tcp滑動(dòng)窗口的介紹)

UDP單播,廣播,多播
  • 單播把數(shù)據(jù)報(bào)發(fā)送給單一主機(jī)
  • 廣播把數(shù)據(jù)報(bào)發(fā)送給指定網(wǎng)絡(luò)上的所有主機(jī)
  • 多播發(fā)送給指定的多個(gè)主機(jī)
廣播
廣播域

首先我們來了解一下廣播域的概念。
廣播域是網(wǎng)絡(luò)中能接收任一臺(tái)主機(jī)發(fā)出的廣播幀的所有主機(jī)集合。也就是說,如果廣播域內(nèi)的其中一臺(tái)主機(jī)發(fā)出一個(gè)廣播幀,同一廣播域內(nèi)所有的其它主機(jī)都可以收到該廣播幀。

廣播域的計(jì)算

如何知道一臺(tái)主機(jī)是屬于哪一個(gè)廣播域呢?其實(shí)計(jì)算很簡(jiǎn)單,只要用主機(jī)的IP地址與子網(wǎng)掩碼進(jìn)行與運(yùn)算即可知道該主機(jī)屬于哪一個(gè)廣播域。例如:一臺(tái)主機(jī)的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)的所有主機(jī)就可以到該設(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)的所有主機(jī)都可以收到該設(shè)備發(fā)送的廣播包。

廣播地址的計(jì)算

要想相同廣播域內(nèi)的其它主機(jī)能收到的廣播幀,還需要在發(fā)送廣播包的時(shí)候指定當(dāng)前所屬廣播域內(nèi)的廣播地址。廣播地址的計(jì)算方法為子網(wǎng)掩碼取反再與廣播域進(jìn)行或運(yùn)算。
例如:如果主機(jī)當(dāng)前所屬廣播域?yàn)?92.168.0.0,子網(wǎng)掩碼為255.255.0.0,那么廣播地址則為192.168.255.255。

使用UDP進(jìn)行跨網(wǎng)段廣播

要使主機(jī)A發(fā)送的廣播包能夠被另一網(wǎng)段的主機(jī)B收到,那么只需要更改主機(jī)A的子網(wǎng)掩碼使得與主機(jī)B在同一個(gè)廣播域內(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ò)上的每個(gè)主機(jī)。

多播

多播是一組主機(jī)的標(biāo)示符,它已經(jīng)加入到一個(gè)多播組中。在以太網(wǎng)中,多播地址是一個(gè)48位的標(biāo)示符,命名了一組應(yīng)該在這個(gè)網(wǎng)絡(luò)中應(yīng)用接收到一個(gè)分組的站點(diǎn)。在IPv4中,它歷史上被叫做D類地址,一種類型的IP地址,它的范圍從224.0.0.0到239.255.255.255。D類地址用于組播。

相關(guān)文章:

TCP/IP詳解學(xué)習(xí)筆記(6)-UDP
多播(組播)原理分析
UDP廣播原理簡(jiǎn)介
UDP 和 TCP 的不同

最后編輯于
?著作權(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)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

  • 個(gè)人認(rèn)為,Goodboy1881先生的TCP /IP 協(xié)議詳解學(xué)習(xí)博客系列博客是一部非常精彩的學(xué)習(xí)筆記,這雖然只是...
    貳零壹柒_fc10閱讀 5,215評(píng)論 0 8
  • 1.這篇文章不是本人原創(chuàng)的,只是個(gè)人為了對(duì)這部分知識(shí)做一個(gè)整理和系統(tǒng)的輸出而編輯成的,在此鄭重地向本文所引用文章的...
    SOMCENT閱讀 13,390評(píng)論 6 174
  • 11.1 引言 UDP是一個(gè)簡(jiǎn)單的面向數(shù)據(jù)報(bào)的運(yùn)輸層協(xié)議:進(jìn)程的每個(gè)輸出操作都正好產(chǎn)生一個(gè)UDP數(shù)據(jù)報(bào),并組裝成一...
    張芳濤閱讀 2,976評(píng)論 1 6
  • 名詞延伸 通俗的說,域名就相當(dāng)于一個(gè)家庭的門牌號(hào)碼,別人通過這個(gè)號(hào)碼可以很容易的找到你。如果把IP地址比作一間房子...
    楊大蝦閱讀 20,830評(píng)論 2 56
  • 春風(fēng)送客猴去急, 春雨打春金雞立; 大年初五包和合, 共圓美夢(mèng)在一七。 家家戶戶迎財(cái)神, 財(cái)神進(jìn)門有驚喜; 財(cái)神老...
    琢玉書生閱讀 227評(píng)論 0 1

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