UDP:用戶數據報協議


  UDP是一個簡單的面向數據報的運輸層協議:進程的每個輸出操作都正好產生一個UDP數據報,並組裝成一份待發送的IP數據報。這與面向流字符的協議不同,如TCP,應用程序產生的全體數據與真正發送的單個IP數據報可能沒有什么聯系。

  UDP數據報封裝成一份IP數據報的格式。如下圖所示。

  

  UDP不提供可靠性:它把應用程序傳給IP層的數據發送出去,但是並不保證它們能到達目的地。

 

UDP首部

  

UDP首部

  UDP報文首部結構如上圖所示,它由RFC 768定義。應用層數據占用了UDP報文段的數據字段。例如,對於DNS引用,數據字段要么包含一個查詢報文,要么包含一個響應報文。對於流式音頻應用,音頻抽樣數據填充到數據字段。UDP首部只有4個字段,每個字段由兩個字節組成。

  端口號表示發送進程和接收進程。由於IP層已經把IP數據報分配給TCP或UDP(根據IP首部中協議字段值),因此TCP端口號由TCP來查看,而UDP端口號由UDP來查看。TCP端口號與UDP端口號是相互獨立的。

  UDP長度字段指的是UDP首部和UDP數據的字節長度。該字段最小值為8字節(發送一份0字節的UDP數據報是OK的)。這個UDP長度是有冗余的。IP數據報長度指的是數據報全長,因此UDP數據報長度是全長減去IP首部的長度。

  接收主機使用檢驗和來檢查報文段中是否存在差錯。

 

選擇UDP而不是TCP的原因

  1. 應用層能更好地控制要發送的數據和發送時間。采用UDP時,只要應用進程將數據傳遞給UDP。UDP就會將此數據打包成UDP報文段並立即將其傳遞給網絡層。另一方面,TCP有一個擁塞控制機制以便當源和目的主機間的一條或多條鏈路變得非常擁塞時,遏制運輸層TCP發送方。TCP仍將繼續重新發送數據報文段並加以確認,而不管可靠交付需要用都長時間。實時運用通常要求最快的發送速率,不想過分地延遲報文段的傳送,且能容忍一些數據丟失,而TCP服務模型並不是特別適合這些應用的需求。

  2. 無需連接建立。TCP在開始數據傳輸之前要經過三次握手。UDP卻不需要任何准備即可進行數據傳輸。因此UDP不會引入建立連接的時延。這可能是DNS運行在UDP之上而不是運行在TCP之上的主要原因(如果運行在TCP之上,則DNS會慢的多)。HTTP使用TCP而不是UDP,是因為對於具有文本數據的Web網頁來說,可靠性是至關重要的。

  3. 無連接狀態。TCP需要在端系統中維護連接狀態。此連接狀態包括接收和發送緩存、擁塞控制參數、序號與確認號的參數。另一方面,UDP不維護連接狀態,也不跟蹤這些參數。因此,某些專門應用服務器使用UDP而不是TCP,以便能支持更多的活動客戶機。

  4. 分組首部開銷小。每個TCP報文段都有20字節的首部開銷,而UDP僅有8字節的開銷。

 

使用UDP的服務

  1. DNS運行在UDP之上,從而避免了TCP的連接創建時間

  2. UDP用於承載網絡管理數據(SNMP)。在這種場合下,UDP要優於TCP,因為網絡管理應用程序通常必須在該網絡處於重壓狀態時運行,而正是在這時可靠的、擁塞受控的數據傳輸變得難以實現。

  3. TCP和UDP都可以用於因特網電話,實時視頻會議、流式存儲音頻與視頻。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM