簡介
用戶數據報協定(UDP,User Datagram Protocol)是
IP上層的另一重要協定,它是面向無連線的、不可靠的數據報傳輸協定。它僅僅將要傳送的數據報傳送至網路,並接收從網上傳來的數據報,而不與遠端的UDP模組建立連線。
UDP為用戶的網路應用程式提供服務,例如網路檔案系統(
NFS,Network File System)和簡單網路管理協定(SNMP,Simple Network Management Protocol)等。UDP保留應用程式所定義的訊息邊界,它既不會將兩個應用程式的訊息連線到一起,也不會把一個應用程式的訊息分成多個部分。UDP同樣有自己的校驗和欄位,但當兩個UDP模組之間僅通過乙太網連線時,也可以不需要校驗和。
含義
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頭和數據中信息包頭的數位取反之和再取反得到的。
包頭從概念上說是在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)源連線埠和目的連線埠,分別用於標識數據報的源端進程和目的端進程所使用的連線埠。欄位長度為16比特,最大支持64 k個連線埠號。源端進程不需要目的端返回數據報,源連線埠欄位可設為0
(2)數據報長度,16比特,紀錄以位元組計算的整個數據報的長度。
(3)數據報校驗和,16比特,用於數據報的校驗和保護,在UDP中,校驗的功能是可選的,若不使用校驗,該欄位的值為0。
分層與封裝
UDP是一種傳輸協定,位於IP層之上。應用程式需要傳送的數據將被UDP協定封裝到UDP數據報中;然後UDP數據報在IP層封裝到IP分組中傳送。
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。
一般,在作業系統中UDP的連線埠與普通的I/O連線埠類似,是一個可讀寫的結構。套用軟體通過對連線埠的讀寫來實現數據報的收發。在UDP連線埠內部通常包含了數據緩衝區,用於快取到達數據報以及暫時未能傳送的數據報。在大多數的UDP實現中,當應用程式與作業系統協商,試圖使用某個連線埠接收數據報時,作業系統將為該連線埠創建一個內部佇列來容納收到的報文。通常應用程式可以指定和修改連線埠佇列的長度。
特點
①UDP是無連線的,即傳送數據之前不需要建立連線(當然傳送數據結束時也沒有連線可釋放),因此減少了開銷和傳送數據之前的時延;
②UDP使用盡最大努力交付,即不保證可靠交付,因此主機不需要維持複雜的連線狀態表;
③UDP是面向報文的;
④UDP沒有擁塞控制;
⑤UDP支持一對一、一對多、多對一、和多對多的互動通信;
⑥UDP的首部開銷小。|