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

用户數據報協議

鎖定
用户數據報協議 (User Datagram Protocol, UDP)是一個簡單的面向無連接的,不可靠的數據報的傳輸層(transport layer)協議,IETF RFC 768是UDP的正式規範。 在TCP/IP模型中,UDP為網絡層(network layer)以上和應用層(application layer)以下提供了一個簡單的接口。UDP只提供數據的不可靠交付,它一旦把應用程序發給網絡層的數據發送出去,就不保留數據備份(所以UDP有時候也被認為是不可靠的數據報協議)。UDP在IP數據報的頭部僅僅加入了複用和數據校驗(字段)。由於缺乏可靠性,UDP應用一般必須允許一定量的丟包、出錯和複製。 [1] 
中文名
用户數據報協議
外文名
User Datagram Protocol, UDP
含    義
UDP首部字段由4個部分
源端口是可選域,
特    點
缺乏可靠性

用户數據報協議簡介

用户數據報協議(UDP,User Datagram Protocol)是IP上層的另一重要協議,它是面向無連接的、不可靠的數據報傳輸協議。它僅僅將要發送的數據報傳送至網絡,並接收從網上傳來的數據報,而不與遠端的UDP模塊建立連接。UDP為用户的網絡應用程序提供服務,例如網絡文件系統(NFS,Network File System)和簡單網絡管理協議(SNMP,Simple Network Management Protocol)等。UDP保留應用程序所定義的消息邊界,它既不會將兩個應用程序的消息連接到一起,也不會把一個應用程序的消息分成多個部分。UDP同樣有自己的校驗和字段,但當兩個UDP模塊之間僅通過以太網連接時,也可以不需要校驗和。 [2] 

用户數據報協議含義

UDP首部字段由4個部分組成,其中兩個是可選的。各16-bit的源端口和目的端口用來標記發送和接受的應用進程。因為UDP不需要應答,所以源端口是可選的,如果源端口不用,那麼置為零。在目的端口後面是長度固定的以字節為單位的長度域,用來指定UDP數據報包括數據部分的長度,長度最小值為8 (octets)。首部剩下地16-bit是用來對首部和數據部分一起做校驗和的,這部分是可選的,但在實際應用中一般都使用這一功能。
由於缺乏可靠性,UDP應用一般必須允許一定量的丟包、出錯和複製。有些應用,比如TFTP,如果需要則必須在應用層增加根本的可靠機制。但是絕大多數UDP應用都不需要可靠機制,甚至可能因為引入可靠機制而降低性能。流媒體Streaming media、實時多媒體遊戲和voice over IP (VoIP)就是典型的UDP應用。如果某個應用需要很高的可靠性,那麼可以用傳輸控制協議Transmission Control Protocol來代替UDP。
由於缺乏擁塞避免和控制機制,需要基於網絡的機制來減小因失控和高速UDP流量負荷而導致的擁塞崩潰效應。換句話説,因為UDP發送者不能夠檢測擁塞,所以像使用包隊列和丟棄技術的路由器這樣的網絡基本設備往往就成為降低UDP過大通信量的有效工具。數據報擁塞控制協議Datagram Congestion Control Protocol (DCCP)設計成通過在諸如流媒體類型的高速率UDP流中增加主機擁塞控制來減小這個潛在的問題。
典型網絡上的眾多使用UDP協議的關鍵應用一定程度上是相似的。這些應用包括域名系統Domain Name System (DNS)、簡單網絡管理協議simple network management protocol (SNMP)、動態主機配置協議Dynamic host configuration protocol (DHCP)和路由信息協議Routing Information Protocol (RIP)等等。

用户數據報協議用户數據報頭格式

用户數據報協議

源端口是可選域,當其有意義時,它指的是發送進程的端口,這也就假定了在沒有其它信息的情況下,返回信息應該向什麼地方發送。如果不使用它,則在此域中填0。目的端口在有特定的目的網絡地址時有意義。長度指的是此用户數據報長度的八進制表示。(這表明最小的數據報長度是8。)校驗碼有16位,是對IP頭,UDP頭和數據中信息包頭的數位取反之和再取反得到的。 [2] 
包頭從概念上説是在UDP頭信息之前的,它包括有源地址,目的地地址,所使用的協議和UDP長度。這些信息使信息不能被錯誤地接收。這個校驗過程與TCP中使用的過程一致。
如果計算出的校驗碼為零,它將被全零發送。全零的校驗值意味着發送者未產生校驗碼。

用户數據報協議用户接口

用户接口應該允許創建新的接收端口,在接收端口的接收操作有:應該返回一個八進制數説明源端口和源地址,允許數據報傳送,指定數據,源和目標端口和目的地地址。

用户數據報協議IP層接口

UDP模塊必須能夠決定源和目標的網絡地址,而且必須能夠從包頭中得知所使用的協議。一個可能的接口方式是返回整個數據報,包括接收操作返回的包頭。這樣的接口還應該允許UDP向IP傳送完整的帶包頭的數據報用於傳送。由IP來確定一致性並計算校驗碼。

用户數據報協議協議應用

此協議的最主要的用途是網際名稱服務器和小文件傳輸協議
協議號
在IP中使用它時,它的協議號是17(八進制中是21)。

用户數據報協議功能

為了在給定的主機上能識別多個目的地址,同時允許多個應用程序在同一台主機上工作並能獨立地進行數據報的發送和接收,設計用户數據報協議UDP。
使用UDP協議包括:TFTP、SNMP、NFS、DNS
UDP使用底層的互聯網協議來傳送報文,同IP一樣提供不可靠的無連接數據報傳輸服務。它不提供報文到達確認、排序、及流量控制等功能。

用户數據報協議報文格式

每個UDP報文分UDP報頭和UDP數據區兩部分。報頭由四個16位長(8字節)字段組成,分別説明該報文的源端口、目的端口、報文長度以及校驗和。用户數據報其中包含了8字節固定長度的UDP數據報頭和可變長的數據區。其中,數據報頭中個字段定義如下: [1] 
(1)源端口和目的端口,分別用於標識數據報的源端進程和目的端進程所使用的端口。字段長度為16比特,最大支持64 k個端口號。源端進程不需要目的端返回數據報,源端口字段可設為0
(2)數據報長度,16比特,紀錄以字節計算的整個數據報的長度。
(3)數據報校驗和,16比特,用於數據報的校驗和保護,在UDP中,校驗的功能是可選的,若不使用校驗,該字段的值為0。

用户數據報協議分層與封裝

UDP是一種傳輸協議,位於IP層之上。應用程序需要發送的數據將被UDP協議封裝到UDP數據報中;然後UDP數據報在IP層封裝到IP分組中發送。 [1] 
UDP數據報包含了一個UDP數據報頭和數據區。UDP數據報頭中包含了UDP協議的控制信息,數據區用於承載高層的用户數據。在進行封裝時,一個UDP數據報必須被封裝到一個IP分組中傳遞啊,一次UDP數據報的最大長度不能超過IP分組數據區允許的最大長度(IP分組的最大長度不能超過64k字節)。在UDP層,用户數據首先被加上一個UDP報頭生成UDP數據報。在IP層,整個用户數據報被加上一個IP分組頭,生成一個IP分組,再封裝到數據鏈路的幀中傳輸(在數據鏈路幀的封裝中,有可能需要使用分段)。分組在Internet中利用IP的分組轉發功能到達接收端。在接收端接受一個數據報時,底層的封裝(數據鏈路層和IP層)被逐層剝去(這個過程可能需要進行IP的重組),將原有數據報提交給接收端的UDP系惡意軟件。UDP軟件將處理UDP數據報頭中的控制信息,並根據數據報中目的端口號將用户數據提交到相應的UDP端口,等待應用程序讀取。
因此,UDP的數據傳輸是有結構的,即UDP一次傳輸一個數據報,應用程序一次提交的用户數據被封裝到一個數據報中,整個數據報作為一個整體在Internet上傳遞。在傳輸成功時,整個數據報中的數據全部成功接收;若傳遞失敗,整個數據報中的數據將全部消失。

用户數據報協議複用、分解與端口

UDP協議中數據報收發的功能通常基於UDP端口實現的。UDP協議實現了基於端口的複用功能。每個應用程序在發送數據報之前,必須與操作系統進行協商以獲得某個可用的UDP端口(當然也可以自行分配端口,但需要保證系統中不能存在端口衝突)。應用程序利用該端口發送數據報時,需要將端口號放如UDP報文的源端口字段中。如果源端發送數據報無需對方回覆,則不需要在本地分配端口,可將源端口字段置為0。 [1] 
一般,在操作系統中UDP的端口與普通的I/O端口類似,是一個可讀寫的結構。應用軟件通過對端口的讀寫來實現數據報的收發。在UDP端口內部通常包含了數據緩衝區,用於緩存到達數據報以及暫時未能發送的數據報。在大多數的UDP實現中,當應用程序與操作系統協商,試圖使用某個端口接收數據報時,操作系統將為該端口創建一個內部隊列來容納收到的報文。通常應用程序可以指定和修改端口隊列的長度。

用户數據報協議特點

①UDP是無連接的,即發送數據之前不需要建立連接(當然發送數據結束時也沒有連接可釋放),因此減少了開銷和發送數據之前的時延;
②UDP使用盡最大努力交付,即不保證可靠交付,因此主機不需要維持複雜的連接狀態表;
③UDP是面向報文的;
④UDP沒有擁塞控制;
⑤UDP支持一對一、一對多、多對一、和多對多的交互通信;
⑥UDP的首部開銷小。| [2] 
參考資料
  • 1.    龔向陽等.寬帶通信網原理:北京郵電大學出版社,2006年
  • 2.    謝希仁.計算機網絡(第五版):電子工業出版社,2012年12月第20次印刷:184-185