Linux網絡編程(三-UDP協議)

目錄

一、UDP概述

二、UDP的首部格式

三、UDP緩沖區

四、基于UDP的應用層協議

五、常見問題?


一、UDP概述

UDP(User Datagram Protocol,用戶數據協議報)是傳輸層協議,提供不可靠服務,其特點包括:

  • 無連接:知道對端的IP和端口號就能直接進行傳輸,不需要建立連接。
  • 不可靠:沒有確認應答機制,沒有重傳機制,如果因為網絡故障導致數據無法發送到對方,UDP協議層也不會給應用層返回任何的錯誤信息。
  • 面向數據報:不能夠靈活的控制讀寫數據的次數和數量,應用層交給UDP多長的報文,UDP原樣發送,既不會拆分,也不會合并。如用UDP傳輸100個字節的數據,如果發送端調用一次sendto,發送100個字節,那么接收端也必須調用對應的recvfrom一次接收100個字節,而不能循環調用10次recvfrom,每次接收10字節。

二、UDP的首部格式

UDP數據報分為首部用戶數據部分,整個UDP數據報作為IP數據報的數據部分封裝在IP數據報中,UDP數據報文結構如圖所示:

UDP首部有8個字節,由4個字段構成,每個字段都是兩個字節

  • ?源端口號:表示發送端的端口號,字段長16位。該字段是可選項,有時候可能不會設置源端口號。沒有源端口號的時候該字段的值設置為0,可用于不需要返回的通信中。
  • 目的端口號:表示接收端的端口號,字段長度16位。
  • UDP長度:UDP的數據報的長度(包括首部和數據)其最小值為8(只有首部)。
  • UDP校驗和:檢測UDP數據報在傳輸中是否出錯,出錯則丟棄。該字段是可選的,當源主機不想計算校驗和,則直接令該字段全為0。

三、UDP緩沖區

  • UDP沒有真正意義上的發送緩沖區,調用sendto會直接交給內核,由內核將數據傳給網絡層協議進行后續的傳輸動作。
  • UDP具有接收緩沖區,但是這個接收緩沖區不能保證收到的UDP報的順序和發送UDP報的順序一致,如果緩沖區滿了,再到達的UDP數據就會被丟棄。

四、基于UDP的應用層協議

  • NFS:網絡文件系統
  • TFTP:簡單文件傳輸協議
  • DHCP:動態主機配置協議
  • BOOTP:啟動協議(用于無盤設備啟動)
  • DNS:域名解析協議

五、常見問題

1. UDP報文的分離方式

先拿到固定長度的報頭(8字節),在從報頭中拿到16位UDP長度,使用16位UPD長度減去8字節,就是有效載荷(數據)。

2. UDP報文的交付方式

根據首部中的16位端口號,進行向上交付,因為進程綁定了端口號,所以會交付到進程中。

3. 為什么應用層編寫代碼,端口號用uint16_t的變量來保存

因為UDP協議的端口號是16位的

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

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

相關文章

CSP-202309-3-梯度求解

CSP-202309-3-梯度求解 作為一個算法小白,本人第一次接觸大模擬的題,本題的算法參考自:【CSP】202309-3 梯度求解 解題思路 1.輸入處理 getchar();:從標準輸入讀取一個字符。這里它的作用可能是用來“吃掉”(消耗&a…

Kafka_04_Topic和日志

Kafka_04_Topic和日志 Topic/PartitionTopicPartition 日志存儲存儲格式日志清理刪除壓縮 Topic/Partition Topic/Partition: Kafka中消息管理的基礎單位 Topic和Partition并不實際存在(僅邏輯上的概念) 如: Topic和Partition關系 // 每個日志文件可對應多個日志分段, 其還可…

緩存篇—緩存擊穿

在很多場景下,我們的業務通常會有幾個數據會被頻繁地訪問,比如秒殺活動,這類被頻地訪問的數據被稱為熱點數據。 如果緩存中的某個熱點數據過期了,此時大量的請求訪問了該熱點數據,就無法從緩存中讀取,直接…

《UE5_C++多人TPS完整教程》學習筆記22 ——《P23 記錄加入的玩家(Couting Incoming Players)》

本文為B站系列教學視頻 《UE5_C多人TPS完整教程》 —— 《P23 記錄加入的玩家(Couting Incoming Players)》 的學習筆記,該系列教學視頻為 Udemy 課程 《Unreal Engine 5 C Multiplayer Shooter》 的中文字幕翻譯版,UP主&#xff…

前端面試問題(jwt/布局/vue數組下標/扁平化/菜單樹形/url api/新版本)

前端面試問題(jwt/布局/vue數組下標/扁平化/菜單樹形/url api/新版本) 1. jwt鑒權邏輯 前端 JWT 鑒權邏輯通常涉及在發起請求時攜帶 JWT,并在接收到響應后處理可能的授權問題。 1. 用戶登錄: 用戶提供憑證: 用戶在登錄界面輸入用戶名和密碼…

如何使用Docker部署MongoDB并結合內網穿透實現遠程訪問本地數據庫

文章目錄 前言1. 安裝Docker2. 使用Docker拉取MongoDB鏡像3. 創建并啟動MongoDB容器4. 本地連接測試5. 公網遠程訪問本地MongoDB容器5.1 內網穿透工具安裝5.2 創建遠程連接公網地址5.3 使用固定TCP地址遠程訪問 正文開始前給大家推薦個網站,前些天發現了一個巨牛的 …

2024最佳住宅代理IP服務商有哪些?

跨境出海已成為了近幾年的最熱趨勢,大批量的企業開始開拓海外市場,而海外電商領域則是最受歡迎的切入口。新興的tiktok、Temu,老牌的Amazon、Ebay,熱門的Etsy、Mecari等等都是藍海一片。跨境入門并不難,前期的準備中不…

深入理解文件查看命令:cat、more、less、tail、head

在Linux系統中,有許多命令用于查看文件的內容,其中包括cat、more、less、tail和head。這些命令提供了不同的方式來瀏覽文本文件,適用于各種查看需求。在本篇博客中,我們將深入介紹這些命令,并通過示例演示它們的用法。…

Spring Boot打war包部署到Tomcat,訪問頁面404 !!!

水善利萬物而不爭,處眾人之所惡,故幾于道💦 文章目錄 Spring Boot打war包部署到Tomcat,訪問頁面404 !!!解決辦法:檢查Tomcat版本和Jdk的對應關系,我的Tomcat是6.x&#x…

Sping基礎篇----掌握Sping的控制反轉/依賴注入的概念【實戰案例總結】

作為一名對技術充滿熱情的學習者,我一直以來都深刻地體會到知識的廣度和深度。在這個不斷演變的數字時代,我遠非專家,而是一位不斷追求進步的旅行者。通過這篇博客,我想分享我在某個領域的學習經驗,與大家共同探討、共…

SMMU介紹

SMMU(System Memory Management Unit)是一種硬件設備,其作用是在虛擬地址空間和物理地址空間之間提供地址轉換的功能。它通常用于處理虛擬化環境中的 I/O 設備,例如虛擬機中的設備訪問或者容器環境中的設備隔離。 SMMU 的主要作用…

KVM虛擬機的克隆方式

話不多說,直接上操作 首先確定我們要克隆的模板機器,這樣可以方便我們后續克隆許多機器 IP獲取最好就是dhcp模式,這樣克隆出來的機器就不需要自己再去改ip了 確定需要克隆的模板機以后,先關機再執行克隆操作 virsh shutdown ser…

【SiamFC】《Fully-Convolutional Siamese Networks for Object Tracking》

ECCV 2016 Workshops 文章目錄 1 Background and Motivation2 Related Work3 Advantages / Contributions4 Method5 Experiments5.1 Datasets and Metrics5.2 The OTB-13 benchmark5.3 The VOT benchmarks5.4 Dataset size 6 Conclusion(own)/ Future wo…

Android系統啟動流程

android的啟動流程是從底層開始進行的,具體如下所示: Android是基于Linux內核的系統,Android的啟動過程主要分為兩個階段,首先是Linux內核的啟動,然后是Android框架的啟動。 可以將Andorid系統的啟動流程分為以下五個…

【QT 5 +Linux下軟件桌面快捷方式+qt生成軟件創建桌面圖標+學習他人文章+第二篇:編寫桌面文件.desktop】

【QT 5 Linux下軟件桌面快捷方式qt生成軟件創建桌面圖標學習他人文章第二篇:編寫桌面文件.desktop】 1、前言2、實驗環境3、自我學習總結-本篇總結1、新手的疑問,做這件事目的2、了解.desktop3、三個關鍵目錄以及文件編寫1、目錄:/opt/2、目錄…

【鴻蒙 HarmonyOS 4.0】開發工具安裝

一、準備開發環境 1.1、安裝IDE 鴻蒙應用開發需要使用配套的IDE——HUAWEI DevEco Studio。 DevEco Studio基于IntelliJ IDEA Community(IDEA社區版)構建,為鴻蒙應用提供了一站式開發環境,集成了開發、運行、調試以及發布應用的…

【leetcode刷題之路】面試經典150題(3)——哈希表+區間

文章目錄 5 哈希表5.1 【哈希表】贖金信5.2 【數學】同構字符串5.3 【數學】單詞規律5.4 【哈希表】有效的字母異位詞5.5 【哈希表】字母異位詞分組5.6 【雙指針】兩數之和5.7 【數學】快樂數5.8 【哈希表】219. 存在重復元素 II5.9 【數學】最長連續序列 6 區間6.1 【數學】匯…

Stable Diffusion 模型分享:AstrAnime(Astr動畫)

本文收錄于《AI繪畫從入門到精通》專欄,專欄總目錄:點這里。 文章目錄 模型介紹生成案例案例一案例二案例三案例四案例五 下載地址 模型介紹 AstrAnime 是一個動漫模型,畫風色彩鮮明,擅長繪制漂亮的小姐姐。 條目內容類型大模型…

fastjson解析自定義get方法導致空指針問題

背景 為了在日志中把出入參打印出來,以便驗證鏈路和排查問題,在日志中將入參用fastjson格式化成字符串輸出,結果遇到了NPE。 問題復現 示例代碼 public static void main(String[] args) {OrganizationId orgId new OrganizationId();N…

規模化強化學習 — 多任務強化學習

1 簡述 1.1 單任務強化學習(STRL) 在單任務強化學習中,一個無人機的AI系統可能被訓練來執行特定的任務,比如自主導航。在這個任務中,無人機需要學習如何有效地從起點飛行到終點,并避開障礙物。 舉例&#…