首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C++ >> 關於C++

UDP 協議核心規格速覽:標頭格式、校驗機制與應用場景

     編輯:關於C++

協議定位

UDP (User Datagram Protocol) 是網際網路傳輸層的無連線、不可靠、面向資料報協議。假設底層為 IP,提供最簡單的「發送即忘」服務。需可靠傳輸請改用 TCP。

UDP 標頭結構(共 8 位元組)

欄位長度說明
Source Port16 bits來源埠(選填,0 表無)。回覆時作為目的埠。
Destination Port16 bits目的埠(配合 IP 定址)。
Length16 bits整個 UDP 資料報長度(含標頭),單位:位元組。最小值 8。
Checksum16 bits覆蓋「偽標頭 + UDP 標頭 + 資料」的 16 位元組補數和。0 表示未計算。

偽標頭與校驗計算

為防止誤送,校驗時在 UDP 標頭前加上 12 位元組偽標頭:

0                   1                   2                   3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                      Source IP Address                          |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                    Destination IP Address                       |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|  Zero  |  Protocol (17) |        UDP Length (again)            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  • 計算方式:將偽標頭 + UDP 標頭 + 資料視為 16 位元組字串,若長度為奇數尾端補 0。全部做 1 的補數加總,結果再取 1 的補數。
  • 若結果為 0,傳送時填入 0xFFFF(全 1),接收端驗證結果應為 0xFFFF。

使用者介面需求(RFC 768 摘要)

  • 建立接收埠
  • 接收操作回傳:資料、來源 IP、來源埠
  • 發送操作需指定:資料、目的 IP、目的埠、來源埠(可選)

IP 層介面需求

  • UDP 模組需能決定來源/目的 IP,並從 IP 標頭得知協議號(17 / 0x11)。
  • 建議介面:接收時返回完整 IP 標頭;發送時由 IP 層填寫偽標頭欄位並計算 IP 校驗和。

典型應用場景

  • DNS:查詢/回應極小,容忍丟包重傳,極適合 UDP。
  • TFTP / 簡易檔案傳輸:無連線開銷。
  • 串流媒體 / VoIP / 遊戲:即時性優於可靠性,少量丟包可接受。
  • SNMP / RIP / DHCP:管理/路由協議常用 UDP。

協議號

IP 協議號欄位固定為 17 (十進制) / 0x11 (十六進制) / 21 (八進制)。

快速對照:UDP vs TCP

特性UDPTCP
連線建立無三向交握
可靠性無保證序號/ACK/重傳
順序保證無有
流控/擁塞控制無滑動窗口
標頭開銷8 bytes≥20 bytes
適用場景即時、廣播、小資料檔案、郵件、Web

結語

UDP 以極簡設計支撐起 DNS、VoIP、遊戲等關鍵基礎設施。理解其標頭、校驗與偽標頭機制,是網路程式開發與封包分析的基本功。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved