理解 UDP

更好閱讀體驗:《理解 TCP 和 UDP》— By Gitbook

UDP 和 TCP 的不同

TCP 在傳送數據之前必須先建立連接,數據傳送結束后要釋放連接。
TCP 不提供廣播或多播服務,由于 TCP 要提供可靠的、面向連接的運輸服務,因此不可避免地增加了許多的開銷,如確認、流量控制、計時器以及連接管理等。

而 UDP 在傳送數據之前不需要先建立連接。接收方收到 UDP 報文之后,不需要給出任何確認。
雖然 UDP 不提供可靠交付,但在某些情況下 UDP 卻是一種最有效的工作方式。

簡單來說就是:

UDP:單個數據報,不用建立連接,簡單,不可靠,會丟包,會亂序;

TCP:流式,需要建立連接,復雜,可靠 ,有序。

UDP 概述

UDP 全稱 User Datagram Protocol, 與 TCP 同是在網絡模型中的傳輸層的協議。

UDP 的主要特點是:

  1. 無連接的,即發送數據之前不需要建立連接,因此減少了開銷和發送數據之前的時延。
  2. 不保證可靠交付,因此主機不需要為此復雜的連接狀態表
  3. 面向報文的,意思是 UDP 對應用層交下來的報文,既不合并,也不拆分,而是保留這些報文的邊界,在添加首部后向下交給 IP 層。
  4. 沒有阻塞控制,因此網絡出現的擁塞不會使發送方的發送速率降低。
  5. 支持一對一、一對多、多對一和多對多的交互通信,也即是提供廣播和多播的功能。
  6. 首部開銷小,首部只有 8 個字節,分為四部分。

UDP 的常用場景:

  1. 名字轉換(DNS)
  2. 文件傳送(TFTP)
  3. 路由選擇協議(RIP)
  4. IP 地址配置(BOOTP,DHTP)
  5. 網絡管理(SNMP)
  6. 遠程文件服務(NFS)
  7. IP 電話
  8. 流式多媒體通信

UDP 報文結構

UDP 數據報分為數據字段和首部字段。
首部字段只有 8 個字節,由四個字段組成,每個字段的長度是 2 個字節。

UDP 數據報結構.png

首部各字段意義

  1. 源端口:源端口號,在需要對方回信時選用,不需要時可全 0.
  2. 目的端口:目的端口號,在終點交付報文時必須要使用到。
  3. 長度:UDP 用戶數據報的長度,在只有首部的情況,其最小值是 8 。
  4. 檢驗和:檢測 UDP 用戶數據報在傳輸中是否有錯,有錯就丟棄。

UDP 如何進行校驗和

偽首部

UDP 數據報首部中檢驗和的計算方法比較特殊。
在計算檢驗和時,要在數據報之前增加 12 個字節的偽首部,用來計算校驗和。
偽首部并不是數據報真正的首部,是為了計算校驗和而臨時添加在數據報前面的,在真正傳輸的時候并不會把偽首部一并發送。

UDP 數據報結構-偽首部.png

偽首部個字段意義

  1. 第一字段,源 IP 地址
  2. 第二字段,目的 IP 地址
  3. 第三字段,字段全 0
  4. 第四字段,IP 首部中的協議字段的值,對于 UDP,此字段值為 17
  5. 第五字段,UDP 用戶數據報的長度

校驗和計算方法

校驗和的計算中,頻繁用到了二進制的反碼求和運算,運算規則見下:

二進制反碼求和運算

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容