【網絡協議】精講 UDP 協議特點和報文格式!圖解超讚超詳細!!!
大家好,我是 風雲說通信 ,深耕無線通信網絡協議領域:
CSDN 博客: https://blog.csdn.net/jly_20220520?type=blog
1. UDP 定義
UDP 是工作在 OSI(開放系統互連,Open Systems Interconnection)模型中傳輸層的協議。它使用 IP 作爲底層協議,是爲應用程序提供一種以最少的協議機制向其他程序發送消息的協議。其主要特點是無連接,不保證可靠傳輸和麪向報文。RFC 768 爲 IETF(互聯網工程部,Internet Engineering Task Force)提供的 UDP 標準。
2. UDP 主要特點
-
UDP 是無連接的。即發送數據前不需要建立連接,發送數據結束也沒有連接釋放,因此減少了開銷和發送數據前的時延。
-
UDP 使用盡最大努力交付。即 不保證可靠交付,因此不需要維護複雜的連接狀態表 (有許多參數)。
-
UDP 是面向數據報的。發送方的 UDP 對應用層交付的報文,在添加首部後直接交付給 IP 層。UDP 對應用層交付的報文,既不合並,也不拆分,而是保留這些報文的邊界。也就是說,應用層給 UDP 多長報文,UDP 就發多長,一次發送一個報文,如下圖:
-
在接收方的 UDP,對於 IP 層交付的 UDP 用戶數據報,在去除 UDP 首部後也直接交付應用層,不作任何處理,一次交付一個完整的報文。因此這就將控制報文長度的工作交給了應用層:應用層要選擇合適大小的報文。若報文太長,UDP 封裝後交給 IP 層,IP 層在傳輸時可能要進行分片處理,減低了 IP 層的效率。反之,應用層報文太短,效率也低。
-
UDP 沒有擁塞控制。因此網絡出現的擁塞不會使源主機的發送速率降低。這對某些實時應用很重要,如 IP 電話,實時視頻會議等,要求源主機以恆定的速率發送數據,並且允許在網絡擁塞時丟失一部分數據,但不允許數據有太大的時延。
-
UDP 支持一對一,一對多,多對一和多對多的交互通信。
-
UDP 的首部開銷小,只有 8 字節,比 TCP 的 20 字節的首部短。
3. UDP 報文格式
UDP 協議和 TCP 協議同位於傳輸層,介於網絡層(IP)和應用層之間:UDP 數據部分爲應用層報文,而 UDP 報文在 IP 中承載。如下圖:
UDP 報文格式相對於簡單,如下圖:
UDP 報文有兩大部分組成:報頭 + 有效載荷 (數據),其中有效載荷就是應用層交付給 UDP 協議層的報文,首部字段有 8 個字節,由四個字段組成,每個字段的長度都是 2 字節。
3.1 首部
在學習協議報文時,首先要解決兩個問題:1. 報頭和有效載荷如何分離 2. 有效載荷如何向上交付
第一個問題:報頭和有效載荷如何分離
在 UDP 中,報頭的大小是固定的——8 字節。所以只要截取前 8 字節,後面就都是有效載荷了。
第二個問題:有效載荷如何向上交付
UDP 是傳輸層的,上層是應用層。而應用層程序會綁定端口號,UDP 報頭中有 16 位 (bit 位) 目的端口號,根據端口號做到向上交付。
UDP 報頭由 4 部分組成,各字段含義如下:
源端口號: 發送方的端口號
目的端口號: 目的主機的端口號
UDP 長度: UDP 報文的長度,單位字節,包括報頭和有效載荷,即 header+data 總長度
** UDP 校驗和:** 僞頭部,頭部,data 三部分校驗和。**僞頭部,文末稍作解釋**。保證報文完整性和正確性,出錯就丟棄。
如果接收方 UDP 發現收到的報文中的端口號不存在,就丟棄該報文,並由國際控制報文協議 ICMP 發送 “端口不可達” 差錯報文給發送方。
3.2 校驗和
UDP 用戶數據報首部中的校驗和的計算方法較爲特殊。在計算校驗和前,要在 UDP 用戶數據報之前增加 12 字節的僞首部。僞首部不是 UDP 報文的真正首部,只是在計算校驗和時,臨時添加的字段。僞首部既不向下傳送也不向上遞交,只是爲了計算校驗和。下圖給出僞首部字段內容:
UDP 的校驗和是把首部和數據部分一起檢驗。
發送方: 首先將全零放入首部的校驗和字段,再把僞首部以及 UDP 報文看成是由許多 16 位的字串拼接起來的。若 UDP 報文的數據部分不是偶數個字節,還要填入一個全零字節(但此字節不發送)。然後按照二進制反碼計算出這些 16 位字的和。將此和的二進制反碼寫入校驗和字段。
接收方: 將收到的 UDP 報文 (添加僞首部和可能填充的全零字節) 一起按照二進制反碼求這些 16 位字的和。當無差錯時其結果應爲全 1。否則就表明有差錯出現,接收方就丟棄這個 UDP 報文(也可以上交給應用層,但附上差錯警告)。
3.3 僞頭部(只需瞭解)
UDP 校驗和中的僞頭部,並非 UDP 報文中的有效數據,是提取了 IP 數據報中的源 IP,目的 IP 信息並加上協議等字段構造的數據。僞頭部在實際網絡傳輸中,僅用作校驗和計算使用,並不發送!因此稱爲僞頭部。事實上在 TCP 校驗和計算中也用到了僞頭部,與 UDP 一致。一句話講:僞首部既不向下傳送也不向上遞交,而僅僅是爲了計算檢驗和。
綜上我們應該知道真正 UDP 報文格式應如下:
4. UDP 的緩衝區
UDP 報頭中,UDP 長度爲 16,即最長 UDP 報文時 64KB(包含報頭),如果長度超過 64KB,需要應用層手動分包,多次發送,並在接收方手動拼接。因爲 UDP 是面向數據報的,上層一次交付多少數據,就發送多少數據,所以 UDP 是沒有發送緩衝區的,但是有接受緩衝區,因爲需要等待上層處理。所以 UDP 是全雙工的 (可同時收發數據)。
5. 常見的 UDP 應用層協議
基於 UDP 的應用層協議有:DNS,TFTP,SNMP,NTP
本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源:https://mp.weixin.qq.com/s/lnv7C0rxArpzQHiYmRcaKA