5.2.1UDP概述
一、UDP 的定義
用戶數據報協議 (User Datagram Protocol, UDP) 是傳輸層的無連接、不可靠協議。它提供最小化的協議機制,僅支持數據報的簡單傳輸,不保證數據順序或可靠性。
二、UDP 的核心特點
-
無連接
- 通信前無需建立連接,直接發送數據報。
- 類似“寄信”,無需確認對方是否準備好。
-
不可靠傳輸
- 不保證數據到達目的地、不保證順序、無重傳機制。
- 若數據丟失或損壞,UDP 不會自動修復。
-
面向報文
- 應用層交給 UDP 的每個報文都會被完整發送(不拆分、不合并)。
- 接收方必須一次性接收整個報文。
-
首部開銷小
- UDP 首部僅 8 字節,遠小于 TCP 的 20 字節。
-
無擁塞控制
- 無論網絡狀態如何,UDP 始終以固定速率發送數據。
-
支持單播、多播、廣播
- 適合一對多或多對多通信(如視頻會議)。
三、UDP 首部格式
- 源端口:發送方端口號(可選,可置0)。
- 目的端口:接收方端口號(必填)。
- 長度:整個 UDP 數據報的長度(首部+數據,單位字節)。
- 校驗和:用于檢測數據是否損壞(可選,但推薦啟用)。
四、UDP 校驗和計算
-
偽首部參與校驗
包括 IP 首部中的源 IP、目的 IP、協議類型和 UDP 數據長度。
保證 IP 層錯誤(如錯發到其他主機)能被檢測到。 -
計算步驟
- 將 UDP 數據報視為 16 位整數序列。
- 將偽首部添加到 UDP 數據報前,計算反碼和。
- 將結果的反碼存入校驗和字段。
五、UDP 通信流程
六、UDP 的適用場景
- 實時應用
- 視頻會議、在線直播(容忍部分丟包,追求低延遲)。
- 簡單查詢/響應
- DNS 查詢、SNMP 監控(單次交互,無需連接)。
- 多播/廣播通信
- 網絡時間協議 (NTP)、路由器發現協議。
七、UDP 與 TCP 對比
特性 | UDP | TCP |
---|---|---|
連接方式 | 無連接 | 面向連接(三次握手) |
可靠性 | 不可靠 | 可靠(確認、重傳、有序) |
首部開銷 | 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. 校驗和計算流程
- 在發送方:
- 將校驗和字段置0。
- 添加12字節的偽首部到UDP報文前。
- 對偽首部、UDP首部、數據部分計算二進制反碼求和。
- 結果取反碼填充到校驗和字段。
- 在接收方:
- 接收完整數據報。
- 再次計算校驗和,若結果為全1(0xFFFF),則數據無誤。
4. 與TCP首部對比
特性 | UDP | TCP |
---|---|---|
首部長度 | 固定8字節(無選項) | 可變(20~60字節) |
可靠性保證 | 無 | 有序、可靠傳輸 |
校驗和 | 可選(可置0) | 強制 |
流量控制 | 無 | 滑動窗口機制 |
5. 示例報文分析
十六進制UDP首部示例:06 32 00 45 00 1C E2 17
- 源端口:0x0632 ? 1586(十進制)
- 目的端口:0x0045 ? 69(常用于TFTP協議)
- 長度:0x001C ? 28字節(首部8字節 + 數據20字節)
- 校驗和:0xE217(驗證是否被篡改)。
問答回顧
-
為何UDP首部沒有首部長度字段?
答:UDP首部尺寸固定為8字節,無需單獨說明長度。 -
若檢驗和為0會怎樣?
答:在UDP規范中,校驗和為0表示禁用校驗(非推薦做法)。正常實現需將全0轉換為全1(0xFFFF)。