一、UDP
UDP(User Datagram Protocol,用戶數據報協議)是傳輸層的一種協議,和 TCP 并列。與 TCP 不同,UDP 是無連接、不可靠、面向報文的協議,它的設計目標是追求更快的數據傳輸速度和更小的開銷。
UDP 為應用程序提供盡最大努力交付(best-effort delivery)的數據傳輸服務,它不保證:
- 數據可靠送達;
- 數據到達順序正確;
- 數據不被重復。
核心特點:
特性 | 說明 |
---|---|
無連接 | 不進行握手,通信前無需建立連接 |
不可靠 | 不重傳、無確認、無流量控制 |
面向報文 | 每個UDP報文獨立,不進行分段重組 |
支持多播廣播 | 可用于局域網廣播或多播通信 |
開銷小、速度快 | 頭部僅8字節,傳輸效率高 |
注:
- UDP和TCP,都屬于傳輸層協議。
二、UDP 報文結構(僅 8 字節頭部)
參考書——計算機網絡 (第8版)- 謝希仁。
用戶數據報UDP有兩個字段: 數據字段和首部字段。
首部字段很簡單, 只有8個字節, 由4個字段組成, 每個字段的長度都是2字節。
各字段意義如下:
- 源端口:源端口號。在需要對方回信時選用,不需要時可用全0 。
- 目的端口:目的端口號。這在終點交付報文時必須使用。
- 長度:UDP用戶數據報的長度, 其最小值是8(僅有首部)。
- 檢驗和:檢測UDP用戶數據報在傳輸中是否有錯。有錯就丟棄。
注:
- 相比 TCP 的復雜報頭(20 字節起),UDP 簡潔快速。
三、UDP vs TCP
比較項 | UDP | TCP |
---|---|---|
是否連接 | 無連接(無需握手) | 面向連接(三次握手) |
是否可靠 | 不可靠(無確認、無重傳) | 可靠(確認、重傳、排序) |
數據結構 | 面向報文 | 面向字節流 |
報文大小 | 最多 65,535 字節(通常小于 MTU) | 不限,但需拆分 |
頭部開銷 | 小(8 字節) | 大(20 字節起) |
傳輸速度 | 快 | 相對較慢 |
應用場景 | 實時通信、多播、DNS、視頻等 | HTTP、SSH、文件傳輸、數據庫等 |
四、UDP 實現可靠性的方法(由應用層補充)
雖然 UDP 不可靠,但很多應用通過在應用層設計可靠機制來實現“可靠UDP”:
技術手段 | 說明 |
---|---|
應用層ACK確認 | 對關鍵數據加ACK機制 |
序列號機制 | 檢測亂序或重傳 |
超時重傳 | 定時檢測未確認數據重新發送 |
FEC 前向糾錯 | 通過冗余數據修復丟失內容 |
QUIC 協議 | Google開發的基于UDP的可靠協議 |
五、UDP 常配合的協議
UDP 是傳輸層協議,很多高層協議基于它:
協議 | 描述 |
---|---|
DNS | 域名解析協議,UDP端口53 |
DHCP | 動態主機配置協議,UDP端口 67/68 |
SNMP | 網絡管理協議,UDP端口 161/162 |
TFTP | 簡單文件傳輸協議,UDP端口 69 |
RTP/RTCP | 實時音視頻協議 |
六、典型應用場景
場景 | 使用說明 |
---|---|
視頻/音頻通話 | 容忍部分丟包,優先保證低延遲(如 WebRTC) |
網絡游戲 | 游戲位置、狀態頻繁更新,丟幾個包不影響體驗 |
DNS 查詢 | 請求簡單、短小、允許偶爾失敗再重試 |
實時監控 | 安防攝像頭、遠程傳感器數據流 |
廣播/多播 | 如局域網設備發現、直播推流 |