【Linux篇章】再續傳輸層協議UDP :從低可靠到極速傳輸的協議重生之路,揭秘無連接通信的二次進化密碼!

📌本篇摘要:

  • 本篇將承接上次的UDP系列網絡編程,來深入認識下UDP協議結構,特性,底層原理,注意事項及應用場景

在這里插入圖片描述
在這里插入圖片描述

🏠歡迎拜訪🏠:點擊進入博主主頁
📌本篇主題📌:再續UDP協議
📅制作日期📅: 2025.09.01
🧭隸屬專欄🧭:點擊進入所屬Linux專欄

一. 🔍再識UDP協議

  • 傳輸層:負責數據能夠從發送端傳輸到接收端。

  • 可以先理解成用于數據在傳輸層封裝的協議。

💡再認識傳輸層上面那常見的幾個層結構:

會話層: 用于連接與斷開的(如tcp)。

表示層:可以理解成之前我們用于序列化與反序列化。

應用層:用戶設計一些通信完成的功能。

這里UDP就是在這層工作的:
在這里插入圖片描述

二. 🔥重新認識下端口號

  • TCP/IP協議(包含UDP)中常見五元組:“源 IP”, “源端口號”, “目的 IP”, “目的端口號”, “協議號”(可以用netstat -n 查看)。

端口號范圍劃分

  • 0 - 1023: 知名端口號, HTTP, FTP, SSH 等這些廣為使用的應用層協議, 他們的端口號都是固定的。

  • 1024 - 65535: 操作系統動態分配的端口號. 客戶端程序的端口號, 就是由操作系統從這個范圍分配的。</font>

認識知名端口號(Well-Know Port Number)

有些服務器是非常常用的,為了使用方便,人們約定一些常用的服務器,都是用以下這些固定的端口號:

  • ssh 服務器,使用 22 端口。

  • ftp 服務器,使用 21 端口。

  • telnet 服務器,使用 23 端口。

  • http 服務器,使用 80 端口。

  • https 服務器,使用 443端口。

使用下面指令查看知名端口號(也就是我們網絡通信的時候綁定要避開的端口號):

cat /etc/services

如下:

在這里插入圖片描述

💡重新認識下之前的兩個問題:

  • 一個進程是否可以 bind 多個端口號?
  • 一個端口號是否可以被多個進程 bind?

原因:端口號的目的是通過它找到指定進程!

三.?? UDP 協議端格式

首先看張圖了解下:
在這里插入圖片描述

上面有了五大元組的目的端口號與源端口號(剩下的會在ip層完成封裝)

  • 16 位 UDP 長度表示整個數據報(UDP 首部+UDP 數據)的最大長度。

  • 16位UDP校驗和:如果校驗和出錯,就會直接丟棄。

?? 那么數據如果要是有的話,可以是2^16-1-8個字節數據, 如果比它多了就需要應用層手動的分包,多次發送,并在接收端手動拼裝

其實傳輸的就是上面樣式的結構體:

struct udphdr {
uint16_t uh_sport;/* 源端口 */
uint16_t uh_dport;/*目的端口 */
uint16_t uh_ulen;/* UDP 長度 */
uint16 _t uh_sum;/*校驗和 */
};

因為內核規定的端口號就是16位,因此我們要傳遞的就是這個格式。

四. ?UDP特點

  • 無連接: 知道對端的 IP 和端口號就直接進行傳輸,不需要建立連接。

  • 不可靠: 沒有確認機制,沒有重傳機制;如果因為網絡故障該段無法發到對方,UDP 協議層也不會給應用層返回任何錯誤信息。

  • 面向數據報:不能夠靈活的控制讀寫數據的次數和數量。

下面再深入了解下不可靠性以及面向數據報

1. 🎆對于它的不可靠性:

- udp無發送緩沖區,故不能像tcp那樣可以先把數據儲存在發送緩沖區,如果它的接收緩沖區滿了導致沒收到數據,就可以再次把保存在發送緩沖區的數據再發一次! udp如果發送的時候接收緩沖區滿了,或者其他原因就會丟包現象!

2. 🎆對于面向數據報:

  • 應用層交給 UDP 多長的報文,UDP 原樣發送,既不會拆分,也不會合并:

比如UDP傳輸100字節數據,如果發送端調用一次 sendto,發送 100 個字節,那么接收端也必須調用對應的100次 recvfrom,接收 100 個字節; 而不能循環調用 10 次recvfrom,每次接收 10 個字節

  • 可以簡單理解成udp對數據發的信息原樣轉發出去,不能像tcp那樣靈活讀取,這里就認為是一團數據,一口氣發送或者接收!

五. UDP緩沖區

  • UDP 沒有真正意義上的 發送緩沖區.調用 sendto 會直接交給內核,由內核將數據傳給網絡層協議進行后續的傳輸動作。

  • UDP 具有接收緩沖區.但是這個接收緩沖區不能保證收到的 UDP 報的順序和發送 UDP 報的順序一致; 如果緩沖區滿了,再到達的 UDP 數據就會丟棄。

這里有個疑問,為啥它沒發送緩沖區?

  • 面向用戶數據報:它只要遇到用戶準備的數據就直接進行轉發!

  • 無連接特性:不用像tcp那樣先連接好才能通信,需要等待這個時間,所以把它放到對應的發送緩沖區!

  • 3.盡力而為服務:它是不可靠的,udp只管完成認為把用戶準備發的信息發送出去,不管可靠交付、順序到達以及無重復等!

  • 4.實時性要求:一般適用于如音頻、視頻流的傳輸等需要實時更新的任務,如果設置了發送緩沖區,就會導致數據等待而產生延遲,這點就不能保證了!

六. 底層基于 UDP 的應用層協議

  • NFS: 網絡文件系統。

  • TFTP:簡單文件傳輸協議。

  • DHCP:動態主機配置協議 比如路由器給電腦分配的ip地址。

  • BOOTP:啟動協議(用于無盤設備啟動)。

  • DNS:域名解析協議 http時候的解析域名成ip。

  • 當然,也包括自己寫 UDP 程序時自定義的應用層協議。

常用于 可靠性低 允許丟包 語音 比賽等實時性高的通信任務!

七. 🎃OS如何管理封裝的報文

首先我們說到了UDP有接收緩沖區,當收到數據包的時候,OS也是需要管理的。

首先我們先理解一下sk _buff這里就是os用來管理在那幾層傳遞的報文:

下面看張圖(這里把TCP換成UDP是一樣的):
在這里插入圖片描述

  • 假設操作系統收到對應的報文,在鏈路層進行“先描述后組織“(可以認為就是對sk_buff進行鏈表式的組織然后就能通過里面對應的指針找到內存里的數據!),再一層一層往上交互進行解包等操作。

這里只需要認識四個指針:

  • head,end就是對應的內存空間劃分。

  • data,tail就會是對應數據,當進行發送就要添加不同層的報頭,那么此時data就–,如果是進行接收也就是解包,此時data再++,tail標識的就是這段報文的結尾.

也就是根據 報文 =報頭+ 有效載荷 這一原則進行的。

sk_buff結構代碼如下:

struct sk_buff {/* List management pointers */struct sk_buff_head *list;struct sk_buff *next;/* Control buffer for private use */char cb[48] __aligned(8);/* Pointers to the data in the buffer */unsigned char *head, *data;unsigned char *tail, *end;/* Length of the buffer */unsigned int truesize;/* Reference count */atomic_t users;/* State flags */unsigned int state;/* Destructor function */void *destructor;/* Protocol type */__be16 protocol;/* Length of the packet */unsigned int len;/* Length of the data in the buffer */unsigned int data_len;/* MAC header length */__u16 mac_len;/* Network header length */__u16 network_header_len;/* Transport header length */__u16 transport_header_len;/* Timestamp */struct timespec64 tstamp;/* Socket pointer */struct sock *sk;/* Network device pointer */struct net_device *dev;/* Space in front of data (headroom) */unsigned int headroom;/* Space at the end of data (tailroom) */unsigned int tailroom;
};

這里只需大致了解一下即可!

?此時還有個小問題:

如果應用層正在進行報文的解析,處理,會不會影響OS繼續從網絡中讀取報文?

  • 答:不會,因此我們就可以知道,當udp在進行數據接收后在進行解析的時候(應用層),但是底層還是會不斷接收信息(以sk_buff形式管理),也就是利用了os的中斷機制了,因此是可以同時進行的!

八. 📌UDP協議總結

🔍特性分析

  • 核心特性:無連接、不可靠傳輸,以數據報為單位,首部僅8字節,傳輸效率高。

  • 優勢:無需建立連接,傳輸速度快、延遲低,支持廣播/多播 ,資源消耗少。

  • 劣勢:不保障數據完整性、有序性,易丟包,網絡差時問題更突出。

🔍應用場景及注意事項:

  • 實時音視頻(直播、視頻會議、語音通話)

應用原因:低延遲保證畫面、聲音連貫性。

注意事項:需在應用層補充丟包恢復機制(如FEC前向糾錯)、抗抖動緩沖處理。

  • 在線游戲

應用原因:快速傳輸玩家操作信息,確保游戲流暢。

注意事項:增加狀態同步機制,解決少量數據丟失或亂序問題。

  • 網絡管理(SNMP)

應用原因:頻繁發送管理信息,UDP開銷小更合適。

注意事項:關鍵管理指令需設計應用層確認重傳機制。

  • 廣播與多播(網絡電視、在線廣播)

應用原因:支持同時向多目標發送相同數據。

注意事項:對帶寬依賴高,需控制數據報大小,避免網絡擁塞 。

九. 📌本篇小結

  • 本篇介紹了在之前經歷了UDP編程后,有了一定基礎認識,再深入的了解了UDP大致結構及相關信息后,更加豐富了對UDP的理解,后續將進行TCP相關的講解,歡迎訂閱!

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

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

相關文章

《A Study of Probabilistic Password Models》(IEEE SP 2014)——論文閱讀

提出更高效的密碼評估工具&#xff0c;將統計語言建模技術引入密碼建模&#xff0c;系統評估各類概率密碼模型性能&#xff0c;打破PCFGw的 “最優模型” 認知。一、研究背景當前研究存在兩大關鍵問題&#xff1a;一是主流的 “猜測數圖” 計算成本極高&#xff0c;且難以覆蓋強…

校園外賣點餐系統(代碼+數據庫+LW)

摘要 隨著校園生活節奏的加快&#xff0c;學生對外賣的需求日益增長。然而&#xff0c;傳統的外賣服務存在諸多不便&#xff0c;如配送時間長、菜品選擇有限、信息更新不及時等。為解決這些問題&#xff0c;本研究開發了一款校園外賣點餐系統&#xff0c;采用前端 Vue、后端 S…

友思特案例 | 食品行業視覺檢測案例集錦(三)

食品制造質量檢測對保障消費者安全和產品質量穩定至關重要&#xff0c;覆蓋原材料至成品全階段&#xff0c;含過程中檢測與成品包裝檢測。近年人工智能深度學習及自動化系統正日益融入食品生產。本篇文章將介紹案例三&#xff1a;友思特Neuro-T深度學習平臺進行面餅質量檢測。在…

SQLynx 3.7 發布:數據庫管理工具的性能與交互雙重進化

目錄 &#x1f511; 核心功能更新 1. 單頁百萬級數據展示 2. 更安全的數據更新與刪除機制 3. 更智能的 SQL 代碼提示 4. 新增物化視圖與外表支持 5. 數據庫搜索與過濾功能重構 ? 總結與思考 在大數據與云原生應用快速發展的今天&#xff0c;數據庫管理工具不僅要“能用…

10G網速不是夢!5G-A如何“榨干”毫米波,跑出比5G快10倍的速度?

5G-A&#xff08;5G-Advanced&#xff09;網絡技術已經在中國福建省廈門市軟件園成功實現萬兆&#xff08;10Gbps&#xff09;速率驗證&#xff0c;標志著我國正式進入5G增強版商用階段。這一突破性成果不僅驗證了5G-A技術的可行性&#xff0c;也為6G網絡的發展奠定了堅實基礎。…

Linux筆記---UDP套接字實戰:簡易聊天室

1. 項目需求分析 我們要設計的是一個簡單的匿名聊天室&#xff0c;用戶的客戶端要求用戶輸入自己的昵稱之后即可在一個公共的群聊當中聊天。 為了簡單起見&#xff0c;我們設計用戶在終端當中與客戶端交互&#xff0c;而在一個文件當中顯式群聊信息&#xff1a; 當用戶輸入的…

RTP打包與解包全解析:從RFC規范到跨平臺輕量級RTSP服務和低延遲RTSP播放器實現

引言 在實時音視頻系統中&#xff0c;RTSP&#xff08;Real-Time Streaming Protocol&#xff09;負責會話與控制&#xff0c;而 RTP&#xff08;Real-time Transport Protocol&#xff09;負責媒體數據承載。開發者在實現跨平臺、低延遲的 RTSP 播放器或輕量級 RTSP 服務時&a…

Ubuntu 用戶和用戶組

一、 Linux 用戶linux 是一個多用戶操作系統&#xff0c;不同的用戶擁有不同的權限&#xff0c;可以查看和操作不同的文件。 Ubuntu 有三種用戶1、初次創建的用戶2、root 用戶---上帝3、普通用戶初次創建的用戶權限比普通用戶要多&#xff0c;但是沒有 root 用戶多。Linux 用戶…

FastGPT社區版大語言模型知識庫、Agent開源項目推薦

? FastGPT 項目說明 項目概述 FastGPT 是一個基于大語言模型&#xff08;LLM&#xff09;的知識庫問答系統&#xff0c;提供開箱即用的數據處理和模型調用能力&#xff0c;支持通過可視化工作流編排實現復雜問答場景。 技術架構 前端: Next.js TypeScript Chakra UI 后…

jsencrypt公鑰分段加密,支持后端解密

前端使用jsencryp實現分段加密。 解決長文本RSA加密報錯問題。 支持文本包含中文。 支持后端解密。前端加密代碼&#xff1a; // import { JSEncrypt } from jsencrypt const JSEncrypt require(jsencrypt) /*** 使用 JSEncrypt 實現分段 RSA 加密&#xff08;正確處理中文字符…

生成一份關于電腦電池使用情況、健康狀況和壽命估算的詳細 HTML 報告

核心作用 powercfg /batteryreport 是一個在 Windows 命令提示符或 PowerShell 中運行的命令。它的核心作用是&#xff1a;生成一份關于電腦電池使用情況、健康狀況和壽命估算的詳細 HTML 報告。 這份報告非常有用&#xff0c;特別是對于筆記本電腦用戶&#xff0c;它可以幫你&…

從 0 到 1 實現 PyTorch 食物圖像分類:核心知識點與完整實

食物圖像分類是計算機視覺的經典任務之一&#xff0c;其核心是讓機器 “看懂” 圖像中的食物類別。隨著深度學習的發展&#xff0c;卷積神經網絡&#xff08;CNN&#xff09;憑借強大的特征提取能力&#xff0c;成為圖像分類的主流方案。本文將基于 PyTorch 框架&#xff0c;從…

Python 值傳遞 (Pass by Value) 和引用傳遞 (Pass by Reference)

Python 值傳遞 {Pass by Value} 和引用傳遞 {Pass by Reference}1. Mutable Objects and Immutable Objects in Python (Python 可變對象和不可變對象)2. Pass by Value and Pass by Reference2.1. What is Pass by Value in Python?2.2. What is Pass by Reference in Python…

aippt自動生成工具有哪些?一文看懂,總有一款適合你!

在當今快節奏的工作與學習環境中&#xff0c;傳統耗時的PPT制作方式已難以滿足高效表達的需求。隨著人工智能技術的發展&#xff0c;AI自動生成PPT工具應運而生&#xff0c;成為提升演示文稿制作效率的利器。這類工具通過自然語言處理和深度學習技術&#xff0c;能夠根據用戶輸…

Langflow 框架中 Prompt 技術底層實現分析

Langflow 框架中 Prompt 技術底層實現分析 1. Prompt 技術概述 Langflow 是一個基于 LangChain 的可視化 AI 工作流構建框架&#xff0c;其 Prompt 技術是整個系統的核心組件之一。Prompt 技術主要負責&#xff1a; 模板化處理&#xff1a;支持動態變量替換的提示詞模板變量驗證…

前端、node跨域問題

前端頁面訪問node后端接口跨域報錯 Access to XMLHttpRequest at http://192.18.31.75/api/get?namess&age19 from origin http://127.0.0.1:5500 has been blocked by CORS policy: No Access-Control-Allow-Origin header is present on the requested resource. 這個報…

超越馬力歐:如何為經典2D平臺游戲注入全新靈魂

在游戲開發的世界里&#xff0c;2D平臺游戲仿佛是一位熟悉的老朋友。從《超級馬力歐兄弟》開啟的黃金時代到現在&#xff0c;這個類型已經經歷了數十年的演變與打磨。當每個基礎設計似乎都已被探索殆盡時&#xff0c;我們如何才能打造出一款令人耳目一新的平臺游戲&#xff1f;…

基于Springboot + vue3實現的時尚美妝電商網站

項目描述本系統包含管理員和用戶兩個角色。管理員角色&#xff1a;商品分類管理&#xff1a;新增、查看、修改、刪除商品分類。商品信息管理&#xff1a;新增、查看、修改、刪除、查看評論商品信息。用戶管理&#xff1a;新增、查看、修改、刪除用戶。管理員管理&#xff1a;查…

網絡協議之https?

寫在前面 https協議還是挺復雜的&#xff0c;本人也是經過了很多次的學習&#xff0c;依然感覺一知半解&#xff0c;無法將所有的知識點串起來&#xff0c;本次學習呢&#xff0c;也是有很多的疑惑點&#xff0c;但是還是盡量的輸出內容&#xff0c;來幫助自己和在看文章的你來…

word運行時錯誤‘53’,文件未找到:MathPage.WLL,更改加載項路徑完美解決

最簡單的方法解決&#xff01;&#xff01;&#xff01;安裝Mathtype之后粘貼顯示&#xff1a;運行時錯誤‘53’&#xff0c;文件未找到&#xff1a;MathPage.WLLwin11安裝mathtype后會有這個錯誤&#xff0c;這是由于word中加載項加載mathtype路徑出錯導致的&#xff0c;這時候…