複製鏈接
請複製以下鏈接發送給好友

UDP

鎖定
UDP是工作在OSI(開放系統互連,Open Systems Interconnection)模型中傳輸層的協議。它使用IP作為底層協議,是為應用程序提供一種以最少的協議機制向其他程序發送消息的協議。其主要特點是無連接,不保證可靠傳輸和麪向報文。RFC 768為IETF(互聯網工程部,Internet Engineering Task Force)提供的UDP標準。
中文名
用户數據報協議
外文名
User Datagram Protocol
特    點
無連接、不保證可靠交付、面向報文
基    礎
IP數據包服務上增加一點功能
用    途
發送IP數據包
工作層級
傳輸層

UDP協議簡介

UDP 用户數據報的首部和偽首部 UDP 用户數據報的首部和偽首部
UDP(User Datagram Protocol,用户數據報協議)是在一組互連的計算機網絡環境中提供分組交換計算機通信的數據報模式。該協議假定使用IP作為底層協議,按照OSI模型工作在傳輸層。UDP為應用程序提供了一種以最少的協議機制向其他程序發送消息的過程 [1]  。該協議是面向事務的,不保證傳遞和重複保護。需要有序、可靠地傳輸數據流的應用程序應使用傳輸控制協議 (TCP)。

UDP報文格式

UDP首部格式

用户數據報首部格式 用户數據報首部格式
用户數據報UDP有兩個字段,數據字段和首部字段。首部字段有8個字節,由四個字段組成,每個字段的長度都是2字節 [1]  。各字段意義如下:
<1> 源端口(Source Port)源端口號,在要求對方回信時選用,不要求時可使用全0。
<2> 目的端口 (Destination Port)目的端口號。這在終點交付報文時必須使用。
<3> 長度(Length)UDP用户數據報的長度,包括首部和數據,其最小值是8(僅有首部)。
<4> 檢驗和(Checksum) 若檢驗和用於檢測UDP用户數據包在傳輸中是否有錯,如果出錯則將報文丟棄。計算檢驗和時,首先將全零放入檢驗和字段,再把偽首部以及UDP用户數據報看成是由許多16位字串接起來的。若UDP用户數據包的數據部分不是偶數個字節,則要跳入一個全零字節(此字節不發送),然後按二進制反碼計算出這些16位字的和 [2] 

UDP偽首部(Pseudo Header)

在計算檢驗和時,要在UDP用户數據報之前增加12個字的偽首部。所謂偽首部是因為這種偽首部並不是真正的首部,只是在計算檢驗和時,臨時添加在UDP用户數據報前面,得到一個臨時的UDP用户數據報 [2]  。檢驗和就是按照這個臨時的UDP用户數據報來計算的。偽首部既不向下傳送也不向上遞交,而僅僅是為了計算檢驗和。
偽首部格式 偽首部格式
偽首部包含如下部分 [1] 
<1> 源地址(source address)
<2> 目的地址(destination address)
<3> 置零域(zero)
<4> 協議字段(protocol)
<5> UDP長度(UDP length)

UDP主要特點

(1)無連接。UDP在發送數據前不進行連接,發送結束時也沒有連接可以釋放,減少了開銷和發送數據之前的時延。
(2)盡最大努力交付。UDP不保證可靠交付,因此主機不維持複雜的連接狀態。
(3)面向報文。發送方的UDP對應用程序交下來的報文,再添加首部後就向下交付IP層。UDP對應用層交下來的報文,既不合並,也不拆分,而是保留這些報文的邊界。接收方的UDP對IP層交上來的UDP用户數據報,在去除首部後就原封不動地交付上層的應用進程 [2]  。UDP一次交付完整的報文,因此應用程序必須選擇合適大小的報文。
(4)無擁塞控制。很多實時應用(如IP電話、實時視頻會議等)要求源主機以恆定的速率發送數據,並且允許網絡發生擁塞時丟失一些數據,卻不允許數據有太大的時延,UDP正好適合這種要求 [2] 
(5)支持一對一、一對多、多對一和多對多的交互通信。
(6)首部開銷小。UDP只有8個字節的首部。

UDP協議對比

UDP是無連接的協議,也不保證可靠交付,只在IP數據報服務至上增加了很少的功能,主要是複用和分用以及差錯檢測的功能。這適用於要求源主機以恆定速率發送數據,允許網絡擁塞時丟失數據,卻不允許數據有太大時延的實時應用。
TCP則是面向連接的傳輸層協議,提供可靠的交付服務。TCP把連接作為最基本的抽象,連接的端點叫做套接字(socket)。每一條TCP連接唯一地被通信兩端的兩個端點(即套接字對 socket pair)所確定,即每一條TCP連接只能是點對點的 [2]  。應用程序在使用TCP協議之前必須先建立TCP連接,在傳送數據完畢後必須釋放已經建立的TCP連接。TCP提供全雙工通訊,允許通信雙方的應用進程在任何時候都能發送數據,TCP連接的兩端都設有發送緩存和接收緩存,用來臨時存放雙向通信的數據。與面向報文的UDP不同,TCP是面向字節流的。這裏的“流”(stream)指的是流入到進程或者從進程流出的字節序列 [2]  。雖然應用程序和TCP的交互是一次一個大小不等的數據塊,但TCP把應用程序交下來的數據僅僅看成是一連串的無結構的字節流,並不知道所傳送的字節流的含義。TCP適用於需要有序、可靠地傳輸數據流的應用程序。

UDP接口與應用

用户界面應允許創建新的接收端口,在接收端口上執行操作,以返回數據以及源端口和源地址的指示。同時允許發送數據報,指定要發送的數據、源端口和目標端口以及地址。
UDP模塊必須能夠從首部確定源地址和目標地址以及協議字段。一個可能的UDP/IP接口將返回整個數據報,包括所有首部,以響應接收操作。這樣的接口還允許UDP將帶有首部的完整互聯網數據報傳遞給要發送的IP。IP將驗證特定字段的一致性並計算首部校驗和 [1] 
UDP主要應用於協議的主要用途是 Internet Name Server和簡單文件傳輸,其協議號為17。
參考資料