計算機網絡筆記(三十)——5.2用戶數據報協議UDP

5.2.1UDP概述

一、UDP 的定義

用戶數據報協議 (User Datagram Protocol, UDP) 是傳輸層的無連接、不可靠協議。它提供最小化的協議機制,僅支持數據報的簡單傳輸,不保證數據順序或可靠性。

二、UDP 的核心特點

  1. 無連接

    • 通信前無需建立連接,直接發送數據報。
    • 類似“寄信”,無需確認對方是否準備好。
  2. 不可靠傳輸

    • 不保證數據到達目的地、不保證順序、無重傳機制。
    • 若數據丟失或損壞,UDP 不會自動修復。
  3. 面向報文

    • 應用層交給 UDP 的每個報文都會被完整發送(不拆分、不合并)。
    • 接收方必須一次性接收整個報文。
  4. 首部開銷小

    • UDP 首部僅 8 字節,遠小于 TCP 的 20 字節。
  5. 無擁塞控制

    • 無論網絡狀態如何,UDP 始終以固定速率發送數據。
  6. 支持單播、多播、廣播

    • 適合一對多或多對多通信(如視頻會議)。

三、UDP 首部格式

在這里插入圖片描述

  • 源端口:發送方端口號(可選,可置0)。
  • 目的端口:接收方端口號(必填)。
  • 長度:整個 UDP 數據報的長度(首部+數據,單位字節)。
  • 校驗和:用于檢測數據是否損壞(可選,但推薦啟用)。

四、UDP 校驗和計算

  1. 偽首部參與校驗
    包括 IP 首部中的源 IP、目的 IP、協議類型和 UDP 數據長度。
    保證 IP 層錯誤(如錯發到其他主機)能被檢測到。

  2. 計算步驟

    • 將 UDP 數據報視為 16 位整數序列
    • 將偽首部添加到 UDP 數據報前,計算反碼和。
    • 將結果的反碼存入校驗和字段。

五、UDP 通信流程

在這里插入圖片描述

六、UDP 的適用場景

  1. 實時應用
    • 視頻會議、在線直播(容忍部分丟包,追求低延遲)。
  2. 簡單查詢/響應
    • DNS 查詢、SNMP 監控(單次交互,無需連接)。
  3. 多播/廣播通信
    • 網絡時間協議 (NTP)、路由器發現協議。

七、UDP 與 TCP 對比

特性UDPTCP
連接方式無連接面向連接(三次握手)
可靠性不可靠可靠(確認、重傳、有序)
首部開銷8 字節20 字節(無選項)
傳輸控制無擁塞控制、無流量控制擁塞控制、滑動窗口
數據單位數據報(保留邊界)字節流(無邊界)

總結

UDP 以“簡單高效”為核心,犧牲可靠性換取低延遲,適用于對實時性要求高、能容忍少量數據丟失的場景。

5.2.2UDP的首部格式

UDP(用戶數據報協議)首部格式是 固定8字節,由4個字段組成。

1. UDP首部格式圖示

在這里插入圖片描述

2. 首部字段詳解

(1) 源端口(Source Port)

  • 2字節(16位)
  • 作用:發送方的端口號。
  • 取值范圍:0~65535。
  • 可選性:可以為0,表示無需回復(如單播、廣播通信)。

(2) 目的端口(Destination Port)

  • 2字節(16位)
  • 作用:接收方的端口號。
  • 關鍵性:必須正確指定,否則接收方無法將數據交付給應用進程。

(3) 長度(Length)

  • 2字節(16位)
  • 作用:指示UDP數據報的總長度(首部+數據)。
  • 取值范圍:最小值是8(僅首部),最大值受IP分片限制(通常≤65535字節)。

(4) 校驗和(Checksum)

  • 2字節(16位)
  • 作用:驗證首部和數據的完整性。
  • 計算范圍
    • 數據報首部 + 數據。
    • 偽首部(包含IP層信息):

3. 校驗和計算流程

  1. 在發送方:
    • 將校驗和字段置0。
    • 添加12字節的偽首部到UDP報文前。
    • 對偽首部、UDP首部、數據部分計算二進制反碼求和。
    • 結果取反碼填充到校驗和字段。
  2. 在接收方:
    • 接收完整數據報。
    • 再次計算校驗和,若結果為全1(0xFFFF),則數據無誤。

4. 與TCP首部對比

特性UDPTCP
首部長度固定8字節(無選項)可變(20~60字節)
可靠性保證有序、可靠傳輸
校驗和可選(可置0)強制
流量控制滑動窗口機制

5. 示例報文分析

十六進制UDP首部示例06 32 00 45 00 1C E2 17

  • 源端口:0x0632 ? 1586(十進制)
  • 目的端口:0x0045 ? 69(常用于TFTP協議)
  • 長度:0x001C ? 28字節(首部8字節 + 數據20字節)
  • 校驗和:0xE217(驗證是否被篡改)。

問答回顧

  1. 為何UDP首部沒有首部長度字段?
    答:UDP首部尺寸固定為8字節,無需單獨說明長度。

  2. 若檢驗和為0會怎樣?
    答:在UDP規范中,校驗和為0表示禁用校驗(非推薦做法)。正常實現需將全0轉換為全1(0xFFFF)。

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

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

相關文章

Java異步編程之消息隊列疑難問題拆解

前言 在Java里運用消息隊列實現異步通信時,會面臨諸多疑難問題。這里對實際開發中碰到的疑難為題進行匯總及拆解,使用RabbitMQ和Kafka兩種常見的消息隊列中間件來作為示例,給出相應的解決方案: 一、消息丟失問題 消息在傳輸過程…

香橙派3B學習筆記10:snap打包C/C++程序與動態鏈接庫(.so)

esnap打包C/C程序與動態鏈接庫(.so) 之前已經學會了snap基本的打包程序,現在試試打包C/C程序與動態鏈接庫(.so) ssh : orangepi本地ip 密碼 : orangepi 操作系統發行版: 基于 Ubun…

【Python工具開發】k3q_arxml 簡單但是非常好用的arxml編輯器,可以稱為arxml殺手包

k3q_arxml 介紹 倉庫地址1 倉庫地址2 極簡的arxml編輯庫,純python實現 用法 from pprint import pp # 可以美化打印對象,不然全打印在一行 import k3q_arxml # 加載arxml文件 io_arxml k3q_arxml.IOArxml(filepaths[test/model_merge.arxml])# 打印…

【CSS-8】深入理解CSS選擇器權重:掌握樣式優先級的關鍵

CSS選擇器權重是前端開發中一個基礎但極其重要的概念,它決定了當多個CSS規則應用于同一個元素時,哪條規則最終會被瀏覽器采用。理解權重機制可以幫助開發者更高效地編寫和維護CSS代碼,避免樣式沖突帶來的困擾。 1. 什么是CSS選擇器權重&…

大語言模型原理與書生大模型提示詞工程實踐-學習筆記

📘 第五期書生葡語實戰營講座總結 🎙 主講人:王明(東部大學 數據挖掘實驗室 博士生) 一、大語言模型的生成原理 架構基礎:采用 Transformer(Decoder-only)架構,如 GPT …

李沐 《動手學深度學習》 | 實戰Kaggle比賽:預測房價

文章目錄 1.下載和緩存數據集2.數據預處理讀取樣本預處理樣本數值型特征處理特征標準化的好處離散值處理轉換為張量表示 訓練K折交叉驗證模型選擇最終模型確認及結果預測代碼總結提交到Kaggle 房價預測比賽鏈接:https://www.kaggle.com/c/house-prices-advanced-reg…

一鍵部署Prometheus+Grafana+alertmanager對網站狀態進行監控

在建設監控體系的過程中,針對一個系統的監控是多維度的,除了服務器資源狀態、中間件狀態、應用狀態外,對系統訪問狀態的監控也是很有必要,可以在系統訪問出現異常時第一時間通知到我們。本文介紹使用 Docker-compose 方式一鍵部署…

康謀方案 | 高精LiDAR+神經渲染3DGS的完美融合實踐

目錄 一、從點云到高精地圖的重建 1、數據采集 2、點云聚合 3、高精地圖建模 4、三維建模與裝飾 二、顛覆性革新:NeRF 與 3DGS 重建 1、僅需數日,完成街景重建 2、進一步消除 Domain gap,場景逼真如實地拍攝 3、降本增效&#xff0c…

MySQL-事務(TRANSACTION-ACID)管理

目錄 一、什么是事務? 1.1.事務的定義 1.2.事務的基本語句 1.3.事務的四大特性(ACID) 二、數據庫的并發控制 2.1.什么是并發及并發操作帶來的影響? 2.2.并發操作帶來的隔離級別 三、使用事務的場景 3.1.銀行轉賬場景示例 3.2.模擬…

centos系統docker配置milvus教程

本人使用的是京東云服務器配置milvus 參考教程:https://blog.csdn.net/withme977/article/details/137270087 首先確保安裝了docker 、docker compose docker -- version docker-compose --version創建milvus工作目錄 mkdir milvus # 進入到新建的目錄 cd milvu…

什么是JSON ?從核心語法到編輯器

一、什么是JSON ? JSON,即 JavaScript 對象表示法,是一種輕量級、跨語言、純文本的數據交換格式 。它誕生于 JavaScript 生態,但如今已成為所有編程語言通用的 “數據普通話”—— 無論前端、后端,還是 Python、Java&…

計算機網絡(7)——物理層

1.數據通信基礎 1.1 物理層基本概念 物理層(Physical Layer)是所有網絡通信的物理基礎,它定義了在物理介質上傳輸原始比特流(0和1)所需的機械、電氣、功能、過程和規程特性 1.2 數據通信系統模型 信源:生成原始數據的終端設備,常見形態包括…

深度學習基礎知識總結

1.BatchNorm2d 加速收斂:Batch Normalization 可以使每層的輸入保持較穩定的分布(接近標準正態分布),減少梯度更新時的震蕩問題,從而加快模型訓練速度。 減輕過擬合:批歸一化引入了輕微的正則化效果&#…

iOS 抖音首頁頭部滑動標簽的實現

抖音首頁的頭部滑動標簽(通常稱為"Segmented Control"或"Tab Bar")是一個常見的UI組件,可以通過以下幾種方式實現: 1. 使用UISegmentedControl 最簡單的實現方式是使用系統自帶的UISegmentedControl: let segmentedCo…

ThreadLocal實現原理

ThreadLocal 是 Java 中實現線程封閉(Thread Confinement)的核心機制,它通過為每個線程創建變量的獨立副本來解決多線程環境下的線程安全問題。 Thread └── ThreadLocalMap (threadLocals) // 每個線程持有的專屬Map├── Entry[] tab…

【筆記】結合 Conda任意創建和配置不同 Python 版本的雙軌隔離的 Poetry 虛擬環境

如何結合 Conda 任意創建和配置不同 Python 版本的雙軌隔離的Poetry 虛擬環境? 在 Python 開發中,為不同項目配置獨立且適配的虛擬環境至關重要。結合 Conda 和 Poetry 工具,能高效創建不同 Python 版本的 Poetry 虛擬環境,接下來…

defineAsyncComponent

下面,我們來系統的梳理關于 defineAsyncComponent 懶加載 的基本知識點: 一、異步組件核心概念 1.1 什么是異步組件? 異步組件是 Vue 中一種按需加載組件的機制,允許將組件代碼拆分為獨立的 chunk,在需要時再從服務器加載。這種技術能顯著提升應用初始加載速度。 1.2 為…

ANeko v1.0.3 | 在手機里養只寵物貓 實時互動 動畫細膩

ANeko是一款專為喜歡貓咪的用戶設計的互動養寵應用。它讓你在手機屏幕上擁有一只可愛的貓咪動畫,這只貓咪會實時跟隨你的手指觸摸軌跡,帶來生動有趣的互動體驗。該應用不僅保留了用戶熟悉的交互式貓動畫,還結合了現代高清圖形技術&#xff0c…

人工智能AI

AI 簡介 AI 使我們能夠生成可以改進衛生保健的出色軟件,讓人能夠克服生理上的不便,改進智能基礎結構,創造令人驚嘆的娛樂體驗,甚至拯救地球! 什么是 AI? 簡而言之,AI 就是一種模仿人類行為和能力的軟件。 關鍵工作負載包括: 機器學習 - 它通常是 AI 系統的基礎,也是…

Vue 中 data 選項:對象 vs 函數

Vue 中 data 選項&#xff1a;對象 vs 函數 在 Vue 開發中&#xff0c;data 選項可以使用對象或函數形式&#xff0c;了解它們的使用場景非常重要。下面我將通過一個直觀的示例來展示兩者的區別和適用場景。 <!DOCTYPE html> <html lang"zh-CN"> <h…