【計算機網絡篇】UDP協議

?作者簡介:大家好,我是小楊
📃個人主頁:「小楊」的csdn博客

🐳希望大家多多支持🥰一起進步呀!


UDP協議

1,UDP 簡介

UDP(User Datagram Protocol)是一種無連接的傳輸層協議,它提供了一種簡單的、不可靠的數據傳輸服務。

UDP 提供了不面向連接的通信,且不對傳送的數據報進行可靠的保證,適用于一次傳送少量的數據,不適用于傳輸大量的數據。


2,UDP 特點

UDP 的主要特點為無連接,不可靠傳輸,面向數據報,全雙工通信。下面對這些特點進行逐一解釋:

1,無連接:UDP是一種無連接的傳輸協議,這意味著在通信之前不需要進行連接建立的過程。發送方直接向目標主機發送數據報,接收方無需事先建立連接就能接收數據。

2,不可靠傳輸:UDP不保證數據傳輸的可靠性。它將數據劃分為獨立的數據報,并通過網絡發送,但不提供丟包重傳、數據校驗和錯序整理等機制。如果在傳輸過程中發生數據丟失、損壞或重復,UDP協議不會進行任何處理,這使得UDP的傳輸不可靠。

3,面向數據報:UDP以數據報(Datagram)為單位進行通信。每個UDP數據包是一個獨立的數據報,具有自己的報頭,其中包含源端口號、目標端口號和數據長度等信息。這使得UDP的通信單位獨立,不受其他數據報的影響,獨立地發送和接收數據。

4,全雙工通信:UDP支持全雙工通信,允許發送方和接收方同時發送和接收數據。發送方可以隨時發送數據報,而接收方可以在任何時間接收數據報,而不受發送方的限制。這使得UDP在實現實時雙向通信時具有優勢。


3,UDP 段格式

UDP協議的數據包(也稱為UDP報文)由兩部分組成:UDP頭部和UDP數據部分。

UDP 協議段格式示意圖:

UDP 數據包中的各字段代表含義如下:

1,源端口號(Source Port):16位字段,表示發送方的端口號,用于標識發起UDP通信的應用程序的發送端口。

2,目標端口號(Destination Port):16位字段,表示接收方的端口號,用于標識接收方應用程序的接收端口。

3,長度(Length):16位字段,表示UDP報文的長度,包括UDP頭部和數據部分的總長度。

4,校驗和(Checksum):16位字段,用于檢測UDP報文在傳輸過程中是否發生錯誤或被篡改。

5,數據區(Data):可選字段,用于攜帶實際的應用數據內容。

UDP 數據包中的注意事項:

1,UDP協議的首部固定為8個字節,即源端口、目的端口、長度和校驗和,其中校驗和字段為可選字段,可以不包含校驗和。

2,UDP報文長度包括UDP頭部和數據部分,最大長度為16位,UDP數據報的最大長度被限制為65535 B ,也就是最多只能傳輸64KB的數據。如果應用程序需要傳輸更大的數據,則需要將數據進行分片,并在應用層協議中進行重組,或者采用TCP協議。

3,UDP首部中的源端口和目的端口用于標識發送方和接收方的應用程序或服務。這兩個字段共同決定了數據包的傳輸路徑,以確保正確地將數據包傳送到相應的應用程序或服務。


4,UDP 擴展知識


拓展:端口號介紹

端口號是在傳輸層中使用的概念,用于標識不同應用程序或服務的網絡進程。

在傳輸層協議中,頭部中的源端口和目的端口用于標識發送方和接收方的應用程序或服務。

這兩個字段共同決定了數據包的傳輸路徑,以確保正確地將數據包傳送到相應的應用程序或服務。

端口號是一個16比特(2字節)的無符號整數,代表的取值范圍為0 ~ 65535,在該范圍內被劃分3部分,分別為:

  1. 知名端口:從0到1023的端口號被指定為知名端口,用于一些廣泛使用的標準服務。
  2. 注冊端口:從1024到49151的端口號被指定為注冊端口,用于一些用戶注冊的應用程序或服務。
  3. 動態或私有端口:從49152到65535的端口號是動態或私有端口,也稱為臨時端口。

下面是一些常見的知名端口號的定義和用途:

  • 22:SSH端口,用于安全外殼協議,用于遠程登錄和安全文件傳輸。
  • 53:DNS端口,用于域名系統解析域名到IP地址。
  • 80:HTTP端口,用于超文本傳輸協議,用于Web瀏覽器和服務器之間的通信。
  • 143:IMAP端口,用于Internet消息訪問協議,用于電子郵件客戶端與服務器之間的通信。
  • 443:HTTPS端口,用于安全的超文本傳輸協議,通過SSL/TLS加密的HTTP通信。
  • 3306:MySQL數據庫服務器的默認端口號。

進程與端口號之間的關系:

一個進程可以綁定多個端口號,但是一個端口號不能被多個進程綁定。


拓展:校驗和字段介紹

校驗和的作用是用于驗證UDP數據包的完整性,以確保數據在傳輸過程中沒有被篡改或損壞。

校驗和的作用過程:發送方在發送UDP數據包時,會計算數據包的校驗和(校驗和的計算涉及UDP頭部和數據部分),并將校驗和值存儲在校驗和字段中。接收方在接收到UDP數據包后,會重新計算數據包的校驗和,并將計算得到的校驗和值與接收到的校驗和字段進行比對。如果兩者一致,則說明數據包在傳輸過程中沒有損壞;如果兩者不一致,則說明數據包可能在傳輸過程中發生了錯誤。

校驗和字段為可選字段,在UDP協議中是可以不選,是否使用校驗和可以根據應用程序的需求和對數據完整性的要求來決定。

  • 對于實時性要求高、數據可靠性要求較低的應用,可以選擇不使用校驗和以減少開銷和延遲。
  • 對于對數據的可靠性要求較高的應用,可以自行添加校驗和機制來保證數據的完整性。

經典問題:基于傳輸層UDP協議,來實現一個可靠傳輸,應該如何設計?

問題引入:雖然校驗和可以提供一定程度的數據完整性檢查,但是因為UDP本身是一種不可靠傳輸協議,即使檢測到錯誤或數據篡改,UDP也不會進行任何恢復操作,具體就是不提供丟包重傳、數據校驗和錯序整理等機制。

若想基于傳輸層UDP協議,來實現一個可靠傳輸,那就是從下面這幾個方面來考慮:

  1. 數據包序列號:為每個發送的數據包分配一個唯一的序號。序號可以是一個遞增的數字或其他唯一標識符,接收方根據序列號對接收到的數據包進行排序和重組,以確保數據包按正確的順序傳遞給應用層。
  2. 確認應答機制:接收端需要向發送端發送確認消息以確認已收到的數據包。發送端在收到確認消息后才能發送下一個數據包。如果發送端沒有收到確認消息,則會啟動超時重傳機制。
  3. 超時重傳:當發送端發送一個數據包后,如果在一定時間內沒有收到確認消息,則認為數據包丟失或發生了錯誤。發送端需要啟動超時重傳機制,重新發送丟失的數據包。

結語

這就是本期博客的全部內容啦!如果有什么其他的問題無法自己解決,可以在評論區留言哦!

最后,如果你覺得這篇文章寫的還不錯的話或者有所收獲的話,麻煩小伙伴們動動你們的小手,給個三連唄(點贊👍,評論?,收藏📖),多多支持一下!各位的支持是我最大的動力,后期不斷更新優質的內容來幫助大家,一起進步。那我們下期見!

在這里插入圖片描述


本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/41005.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/41005.shtml
英文地址,請注明出處:http://en.pswp.cn/news/41005.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Flink學習筆記(一)

流處理 批處理應用于有界數據流的處理,流處理則應用于無界數據流的處理。 有界數據流:輸入數據有明確的開始和結束。 無界數據流:輸入數據沒有明確的開始和結束,或者說數據是無限的,數據通常會隨著時間變化而更新。 在…

Kaptcha的基本應用

Kaptcha Kaptcha 是一個用于生成和驗證驗證碼的 Java 庫,提供了豐富的生成和驗證功能,并支持自定義配置。它可以用于增加應用程序的安全性,防止機器人和惡意攻擊。 Kaptcha 可以生成各種類型的驗證碼,包括數字、字母、數字字母組…

KDD 2023 獲獎論文公布,港中文、港科大等獲最佳論文獎

ACM SIGKDD(國際數據挖掘與知識發現大會,KDD)是數據挖掘領域歷史最悠久、規模最大的國際頂級學術會議,也是首個引入大數據、數據科學、預測分析、眾包等概念的會議。 今年,第29屆 KDD 大會于上周在美國加州長灘圓滿結…

HTTP--Request詳解

請求消息數據格式 請求行 請求方式 請求url 請求協議/版本 GET /login.html HTTP/1.1 請求頭 客戶端瀏覽器告訴服務器一些信息 請求頭名稱: 請求頭值 常見的請求頭: User-Agent:瀏覽器告訴服務器,我訪問你使用的瀏覽器版本信息 可…

藍橋杯每日N題 (消滅老鼠)

大家好 我是寸鐵 希望這篇題解對你有用,麻煩動動手指點個贊或關注,感謝您的關注 不清楚藍橋杯考什么的點點下方👇 考點秘籍 想背純享模版的伙伴們點點下方👇 藍橋杯省一你一定不能錯過的模板大全(第一期) 藍橋杯省一你一定不…

【日常積累】HTTP和HTTPS的區別

背景 在運維面試中,經常會遇到面試官提問http和https的區別,今天咱們先來簡單了解一下。 超文本傳輸協議HTTP被用于在Web瀏覽器和網站服務器之間傳遞信息,HTTP協議以明文方式發送內容,不提供任何方式的數據加密,如果…

09- DMA(DirectMemoryAccess直接存儲器訪問)

DMA 09 、DMA(DirectMemoryAccess直接存儲器訪問)DMA配置流程 09 、DMA(DirectMemoryAccess直接存儲器訪問) DMA配置流程 dma.c文件 main.c文件 詳見《stm32中文參考手冊》表57。

tsconfig.json和jsconfig.json配置

{// 編譯選項"compilerOptions": {// 生成代碼的語言版本:將我們寫的 TS 代碼編譯成哪個版本的 JS 代碼// 命令行: tsc --target es5 11-測試TS配置文件.ts"target": "es5",// 指定要包含在編譯中的 library"lib&quo…

3年 Android 開發的面試心經(后悔當初沒有拿 N+1)

作者:勇闖天涯 當某人順利通過大廠面試時,總會有人認為這是運氣比較好罷了,但他們不曾得知對方之前受過多少苦和委屈,又付出了多少努力一步步去突破這些困境。正是因為他們的努力付出,在合適的時間與地點,用…

SSH連接工具匯總

xshell 這是個熟悉的軟件啦,目前我正在使用Xshell_7 鏈接:https://www.xshell.com/zh/xshell/ FinalShell 國產軟件,有windows和MAC版本;使用方便而且免費,但是軟件比較占用內存。但是都2021年了,筆記本…

AlphaZero能否從圍棋和國際象棋飛躍到量子計算?

一項新的研究表明,DeepMind驚人的游戲算法AlphaZero可以幫助釋放量子計算的力量和潛力。 自兩年多前出現以來,AlphaZero一再證明了其快速學習能力,將自己提升到圍棋,國際象棋和將棋(日本象棋)的特級大師級別…

VHDL記錄

文章目錄 使用function名稱作為“常量”numeric_std包集中使用乘法的注意項variable的使用對于entity設置屬性的方法在entity聲明中嵌入function的定義VHDL仿真讀寫文件File declaration/File handingFile readingFile writing小例子 使用函數 模塊中打印出調試信息 使用functi…

RTC實驗

一、RTC簡介 RTC(Real Time Clock)即實時時鐘,它是一個可以為系統提供精確的時間基準的元器件,RTC一般采用精度較高的晶振作為時鐘源,有些RTC為了在主電源掉電時還可以工作,需要外加電池供電BCD碼,四位二進制表示一位…

Java Persistence APl(JPA)——JPA是啥? SpringBoot整合JPA JPA的增刪改查 條件模糊查詢 多對一查詢

目錄 引出Jpa是啥?Jpa的使用創建實體類寫dao接口類寫服務類 crud增刪改查增加修改根據id刪除全查詢分頁查詢 條件查詢模糊查詢單條件查詢多條件查詢模糊查詢排序查詢 多對一查詢定義實體類auto主鍵策略下新增進行全查詢測試 全部代碼application.yml配置類pom配置文…

Java反射機制是什么?

Java反射機制是 Java 語言的一個重要特性。 在學習 Java 反射機制前,大家應該先了解兩個概念,編譯期和運行期。 編譯期是指把源碼交給編譯器編譯成計算機可以執行的文件的過程。在 Java 中也就是把 Java 代碼編成 class 文件的過程。編譯期只是做了一些…

Python學習筆記第五十二天(Pandas 安裝)

Python學習筆記第五十二天 Pandas 安裝查看安裝版本 安裝驗證后記 Pandas 安裝 安裝 pandas 需要基礎環境是 Python,開始前我們假定你已經安裝了 Python 和 Pip。 使用 pip 安裝 pandas: pip install pandas安裝成功后,我們就可以導入 pandas 包使用&…

iPhone(iPad)安裝deb文件

最簡單的方法就是把deb相關的文件拖入手機對應的目錄,一般是DynamicLibraries文件夾 參考:探討手機越獄和安裝deb文件的幾種方式研究 1、在 Mac 上安裝 dpkg 命令 打包 deb 教程之在 Mac 上安裝 dpkg 命令_xcode打包root權限deb_qq_34810996的博客-CS…

神經網絡基礎-神經網絡補充概念-26-前向和反向傳播

簡單比較 前向傳播(Forward Propagation): 前向傳播是神經網絡中的正向計算過程,用于從輸入數據開始,逐層計算每個神經元的輸出值,直到得到最終的預測值。在前向傳播過程中,我們按以下步驟進行…

驅動DAY4 字符設備驅動分步注冊和ioctl函數點亮LED燈

頭文件 #ifndef __HEAD_H__ #define __HEAD_H__ typedef struct{unsigned int MODER;unsigned int OTYPER;unsigned int OSPEEDR;unsigned int PUPDR;unsigned int IDR;unsigned int ODR; }gpio_t; #define PHY_LED1_ADDR 0X50006000 #define PHY_LED2_ADDR 0X50007000 #d…

一百五十八、Kettle——Kettle各版本及其相關安裝包分享(網盤鏈接,不需積分、不需驗證碼) 持續更新、持續分享

一、目的 最近因為kettle9.3的shim問題看了好多博客,都沒有網盤分享。后來有一位博主分享了kettle9.2的shim安裝包,已經很感謝他,但是是博客分享,下載還需要搞驗證碼下載碼之類的。 kettle9.2的shim安裝包下載好后,一…