?作者簡(jiǎn)介:大家好,我是小楊
??個(gè)人主頁(yè):「小楊」的csdn博客
??希望大家多多支持??一起進(jìn)步呀!
UDP協(xié)議
1,UDP 簡(jiǎn)介
UDP(User Datagram Protocol)是一種無(wú)連接的傳輸層協(xié)議,它提供了一種簡(jiǎn)單的、不可靠的數(shù)據(jù)傳輸服務(wù)。
UDP 提供了不面向連接的通信,且不對(duì)傳送的數(shù)據(jù)報(bào)進(jìn)行可靠的保證,適用于一次傳送少量的數(shù)據(jù),不適用于傳輸大量的數(shù)據(jù)。
2,UDP 特點(diǎn)
UDP 的主要特點(diǎn)為無(wú)連接,不可靠傳輸,面向數(shù)據(jù)報(bào),全雙工通信。下面對(duì)這些特點(diǎn)進(jìn)行逐一解釋?zhuān)?/p>
1,無(wú)連接:UDP是一種無(wú)連接的傳輸協(xié)議,這意味著在通信之前不需要進(jìn)行連接建立的過(guò)程。發(fā)送方直接向目標(biāo)主機(jī)發(fā)送數(shù)據(jù)報(bào),接收方無(wú)需事先建立連接就能接收數(shù)據(jù)。
2,不可靠傳輸:UDP不保證數(shù)據(jù)傳輸?shù)目煽啃?。它將?shù)據(jù)劃分為獨(dú)立的數(shù)據(jù)報(bào),并通過(guò)網(wǎng)絡(luò)發(fā)送,但不提供丟包重傳、數(shù)據(jù)校驗(yàn)和錯(cuò)序整理等機(jī)制。如果在傳輸過(guò)程中發(fā)生數(shù)據(jù)丟失、損壞或重復(fù),UDP協(xié)議不會(huì)進(jìn)行任何處理,這使得UDP的傳輸不可靠。
3,面向數(shù)據(jù)報(bào):UDP以數(shù)據(jù)報(bào)(Datagram)為單位進(jìn)行通信。每個(gè)UDP數(shù)據(jù)包是一個(gè)獨(dú)立的數(shù)據(jù)報(bào),具有自己的報(bào)頭,其中包含源端口號(hào)、目標(biāo)端口號(hào)和數(shù)據(jù)長(zhǎng)度等信息。這使得UDP的通信單位獨(dú)立,不受其他數(shù)據(jù)報(bào)的影響,獨(dú)立地發(fā)送和接收數(shù)據(jù)。
4,全雙工通信:UDP支持全雙工通信,允許發(fā)送方和接收方同時(shí)發(fā)送和接收數(shù)據(jù)。發(fā)送方可以隨時(shí)發(fā)送數(shù)據(jù)報(bào),而接收方可以在任何時(shí)間接收數(shù)據(jù)報(bào),而不受發(fā)送方的限制。這使得UDP在實(shí)現(xiàn)實(shí)時(shí)雙向通信時(shí)具有優(yōu)勢(shì)。
3,UDP 段格式
UDP協(xié)議的數(shù)據(jù)包(也稱(chēng)為UDP報(bào)文)由兩部分組成:UDP頭部和UDP數(shù)據(jù)部分。
UDP 協(xié)議段格式示意圖:
UDP 數(shù)據(jù)包中的各字段代表含義如下:
1,源端口號(hào)(Source Port):16位字段,表示發(fā)送方的端口號(hào),用于標(biāo)識(shí)發(fā)起UDP通信的應(yīng)用程序的發(fā)送端口。
2,目標(biāo)端口號(hào)(Destination Port):16位字段,表示接收方的端口號(hào),用于標(biāo)識(shí)接收方應(yīng)用程序的接收端口。
3,長(zhǎng)度(Length):16位字段,表示UDP報(bào)文的長(zhǎng)度,包括UDP頭部和數(shù)據(jù)部分的總長(zhǎng)度。
4,校驗(yàn)和(Checksum):16位字段,用于檢測(cè)UDP報(bào)文在傳輸過(guò)程中是否發(fā)生錯(cuò)誤或被篡改。
5,數(shù)據(jù)區(qū)(Data):可選字段,用于攜帶實(shí)際的應(yīng)用數(shù)據(jù)內(nèi)容。
UDP 數(shù)據(jù)包中的注意事項(xiàng):
1,UDP協(xié)議的首部固定為8個(gè)字節(jié),即源端口、目的端口、長(zhǎng)度和校驗(yàn)和,其中校驗(yàn)和字段為可選字段,可以不包含校驗(yàn)和。
2,UDP報(bào)文長(zhǎng)度包括UDP頭部和數(shù)據(jù)部分,最大長(zhǎng)度為16位,UDP數(shù)據(jù)報(bào)的最大長(zhǎng)度被限制為65535 B ,也就是最多只能傳輸64KB的數(shù)據(jù)。如果應(yīng)用程序需要傳輸更大的數(shù)據(jù),則需要將數(shù)據(jù)進(jìn)行分片,并在應(yīng)用層協(xié)議中進(jìn)行重組,或者采用TCP協(xié)議。
3,UDP首部中的源端口和目的端口用于標(biāo)識(shí)發(fā)送方和接收方的應(yīng)用程序或服務(wù)。這兩個(gè)字段共同決定了數(shù)據(jù)包的傳輸路徑,以確保正確地將數(shù)據(jù)包傳送到相應(yīng)的應(yīng)用程序或服務(wù)。
4,UDP 擴(kuò)展知識(shí)
拓展:端口號(hào)介紹
端口號(hào)是在傳輸層中使用的概念,用于標(biāo)識(shí)不同應(yīng)用程序或服務(wù)的網(wǎng)絡(luò)進(jìn)程。
在傳輸層協(xié)議中,頭部中的源端口和目的端口用于標(biāo)識(shí)發(fā)送方和接收方的應(yīng)用程序或服務(wù)。
這兩個(gè)字段共同決定了數(shù)據(jù)包的傳輸路徑,以確保正確地將數(shù)據(jù)包傳送到相應(yīng)的應(yīng)用程序或服務(wù)。
端口號(hào)是一個(gè)16比特(2字節(jié))的無(wú)符號(hào)整數(shù),代表的取值范圍為0 ~ 65535,在該范圍內(nèi)被劃分3部分,分別為:
- 知名端口:從0到1023的端口號(hào)被指定為知名端口,用于一些廣泛使用的標(biāo)準(zhǔn)服務(wù)。
- 注冊(cè)端口:從1024到49151的端口號(hào)被指定為注冊(cè)端口,用于一些用戶注冊(cè)的應(yīng)用程序或服務(wù)。
- 動(dòng)態(tài)或私有端口:從49152到65535的端口號(hào)是動(dòng)態(tài)或私有端口,也稱(chēng)為臨時(shí)端口。
下面是一些常見(jiàn)的知名端口號(hào)的定義和用途:
- 22:SSH端口,用于安全外殼協(xié)議,用于遠(yuǎn)程登錄和安全文件傳輸。
- 53:DNS端口,用于域名系統(tǒng)解析域名到IP地址。
- 80:HTTP端口,用于超文本傳輸協(xié)議,用于Web瀏覽器和服務(wù)器之間的通信。
- 143:IMAP端口,用于Internet消息訪問(wèn)協(xié)議,用于電子郵件客戶端與服務(wù)器之間的通信。
- 443:HTTPS端口,用于安全的超文本傳輸協(xié)議,通過(guò)SSL/TLS加密的HTTP通信。
- 3306:MySQL數(shù)據(jù)庫(kù)服務(wù)器的默認(rèn)端口號(hào)。
進(jìn)程與端口號(hào)之間的關(guān)系:
一個(gè)進(jìn)程可以綁定多個(gè)端口號(hào),但是一個(gè)端口號(hào)不能被多個(gè)進(jìn)程綁定。
拓展:校驗(yàn)和字段介紹
校驗(yàn)和的作用是用于驗(yàn)證UDP數(shù)據(jù)包的完整性,以確保數(shù)據(jù)在傳輸過(guò)程中沒(méi)有被篡改或損壞。
校驗(yàn)和的作用過(guò)程:發(fā)送方在發(fā)送UDP數(shù)據(jù)包時(shí),會(huì)計(jì)算數(shù)據(jù)包的校驗(yàn)和(校驗(yàn)和的計(jì)算涉及UDP頭部和數(shù)據(jù)部分),并將校驗(yàn)和值存儲(chǔ)在校驗(yàn)和字段中。接收方在接收到UDP數(shù)據(jù)包后,會(huì)重新計(jì)算數(shù)據(jù)包的校驗(yàn)和,并將計(jì)算得到的校驗(yàn)和值與接收到的校驗(yàn)和字段進(jìn)行比對(duì)。如果兩者一致,則說(shuō)明數(shù)據(jù)包在傳輸過(guò)程中沒(méi)有損壞;如果兩者不一致,則說(shuō)明數(shù)據(jù)包可能在傳輸過(guò)程中發(fā)生了錯(cuò)誤。
校驗(yàn)和字段為可選字段,在UDP協(xié)議中是可以不選,是否使用校驗(yàn)和可以根據(jù)應(yīng)用程序的需求和對(duì)數(shù)據(jù)完整性的要求來(lái)決定。
- 對(duì)于實(shí)時(shí)性要求高、數(shù)據(jù)可靠性要求較低的應(yīng)用,可以選擇不使用校驗(yàn)和以減少開(kāi)銷(xiāo)和延遲。
- 對(duì)于對(duì)數(shù)據(jù)的可靠性要求較高的應(yīng)用,可以自行添加校驗(yàn)和機(jī)制來(lái)保證數(shù)據(jù)的完整性。
經(jīng)典問(wèn)題:基于傳輸層UDP協(xié)議,來(lái)實(shí)現(xiàn)一個(gè)可靠傳輸,應(yīng)該如何設(shè)計(jì)?
問(wèn)題引入:雖然校驗(yàn)和可以提供一定程度的數(shù)據(jù)完整性檢查,但是因?yàn)閁DP本身是一種不可靠傳輸協(xié)議,即使檢測(cè)到錯(cuò)誤或數(shù)據(jù)篡改,UDP也不會(huì)進(jìn)行任何恢復(fù)操作,具體就是不提供丟包重傳、數(shù)據(jù)校驗(yàn)和錯(cuò)序整理等機(jī)制。
若想基于傳輸層UDP協(xié)議,來(lái)實(shí)現(xiàn)一個(gè)可靠傳輸,那就是從下面這幾個(gè)方面來(lái)考慮:
- 數(shù)據(jù)包序列號(hào):為每個(gè)發(fā)送的數(shù)據(jù)包分配一個(gè)唯一的序號(hào)。序號(hào)可以是一個(gè)遞增的數(shù)字或其他唯一標(biāo)識(shí)符,接收方根據(jù)序列號(hào)對(duì)接收到的數(shù)據(jù)包進(jìn)行排序和重組,以確保數(shù)據(jù)包按正確的順序傳遞給應(yīng)用層。
- 確認(rèn)應(yīng)答機(jī)制:接收端需要向發(fā)送端發(fā)送確認(rèn)消息以確認(rèn)已收到的數(shù)據(jù)包。發(fā)送端在收到確認(rèn)消息后才能發(fā)送下一個(gè)數(shù)據(jù)包。如果發(fā)送端沒(méi)有收到確認(rèn)消息,則會(huì)啟動(dòng)超時(shí)重傳機(jī)制。
- 超時(shí)重傳:當(dāng)發(fā)送端發(fā)送一個(gè)數(shù)據(jù)包后,如果在一定時(shí)間內(nèi)沒(méi)有收到確認(rèn)消息,則認(rèn)為數(shù)據(jù)包丟失或發(fā)生了錯(cuò)誤。發(fā)送端需要啟動(dòng)超時(shí)重傳機(jī)制,重新發(fā)送丟失的數(shù)據(jù)包。
結(jié)語(yǔ)
這就是本期博客的全部?jī)?nèi)容啦!如果有什么其他的問(wèn)題無(wú)法自己解決,可以在評(píng)論區(qū)留言哦!
最后,如果你覺(jué)得這篇文章寫(xiě)的還不錯(cuò)的話或者有所收獲的話,麻煩小伙伴們動(dòng)動(dòng)你們的小手,給個(gè)三連唄(點(diǎn)贊??,評(píng)論?,收藏??),多多支持一下!各位的支持是我最大的動(dòng)力,后期不斷更新優(yōu)質(zhì)的內(nèi)容來(lái)幫助大家,一起進(jìn)步。那我們下期見(jiàn)!文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-653898.html
文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-653898.html
到了這里,關(guān)于【計(jì)算機(jī)網(wǎng)絡(luò)篇】UDP協(xié)議的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!