協定簡介 協定內容 UDP是
OSI 參考模型中一種無連線的傳輸層協定,它主要用於不要求分組順序到達的傳輸中,分組傳輸順序的檢查與排序由套用層完成,提供面向事務的簡單不可靠信息傳送服務。UDP 協定基本上是
IP協定 與上層協定的接口。UDP協定適用
連線埠 分別運行在同一台設備上的多個
應用程式 。
UDP提供了無連線通信,且不對傳送數據包進行可靠性保證,適合於一次傳輸少量數據,UDP傳輸的可靠性由套用層負責。常用的UDP連線埠號有:53(DNS)、69(TFTP)、161(SNMP)。
UDP報文沒有可靠性保證、順序保證和流量控制欄位等,可靠性較差。但是正因為UDP協定的控制選項較少,在數據傳輸過程中延遲小、數據傳輸效率高,適合對可靠性要求不高的應用程式,或者可以保障可靠性的應用程式,如DNS、TFTP、SNMP等。
功能 為了在給定的主機上能識別多個目的地址,同時允許多個應用程式在同一台主機上工作並能獨立地進行數據包的傳送和接收,設計
用戶數據報協定 UDP。
使用UDP協定包括:
TFTP 、
SNMP 、NFS、DNS、BOOTP
UDP使用底層的網際網路協定來傳送報文,同IP一樣提供不可靠的無連線數據包傳輸服務。它不提供報文到達確認、排序、及流量控制等功能。
報文格式 在TCP/IP協定層次模型中,UDP位於IP層之上。應用程式訪問UDP層然後使用IP層傳送數據報。IP數據報的數據部分即為UDP數據報。IP層的報頭指明了源主機和目的主機地址,而UDP層的報頭指明了主機上的源連線埠和目的連線埠。UDP傳輸的段(segment)有8個位元組的報頭和有效載荷欄位構成。
UDP報頭由4個域組成,其中每個域各占用2個位元組,具體包括源連線埠號、目標連線埠號、數據報長度、校驗值。
源連線埠號與目標連線埠號 UDP協定使用連線埠號為不同的套用保留其各自的數據傳輸通道。UDP和
TCP協定 正是採用這一機制實現對同一時刻內多項套用同時傳送和接收數據的支持。數據傳送一方(可以是客戶端或伺服器端)將UDP數據包通過源連線埠傳送出去,而數據接收一方則通過目標連線埠接收數據。有的網路套用只能使用預先為其預留或註冊的靜態連線埠;而另外一些網路套用則可以使用未被註冊的動態連線埠。因為UDP報頭使用兩個位元組存放連線埠號,所以連線埠號的有效範圍是從0到65535。一般來說,大於49151的連線埠號都代表動態連線埠。UDP連線埠號指定有兩種方式:由管理機構指定連線埠和動態綁定的方式。
數據報長度 數據報的長度是指包括報頭和數據部分在內的總位元組數。因為報頭的長度是固定的,所以該域主要被用來計算可變長度的數據部分(又稱為數據負載)。數據報的最大長度根據操作環境的不同而各異。從理論上說,包含報頭在內的數據報的最大長度為65535位元組。不過,一些實際套用往往會限制數據報的大小,有時會降低到8192位元組。
校驗值 UDP協定使用報頭中的校驗值來保證數據的安全。校驗值首先在數據傳送方通過特殊的算法計算得出,在傳遞到接收方之後,還需要再重新計算。如果某個數據報在傳輸過程中被第三方篡改或者由於線路噪音等原因受到損壞,傳送和接收方的校驗計算值將不會相符,由此UDP協定可以檢測是否出錯。這與TCP協定是不同的,後者要求必須具有校驗值。
許多鏈路層協定都提供錯誤檢查,包括流行的
乙太網 協定,也許你想知道為什麼UDP也要提供檢查和校驗。其原因是鏈路層以下的協定在源端和
終端 之間的某些通道可能不提供錯誤檢測。雖然UDP提供有錯誤檢測,但檢測到錯誤時,UDP不做錯誤校正,只是簡單地把損壞的訊息段扔掉,或者給應用程式提供警告信息。
UDP Helper是實現對指定UDP連線埠廣播報文的中繼轉發,即將指定UDP連線埠的廣播報文轉換為單播報文傳送給指定的伺服器,起到中繼的作用。
特點 UDP是一個
無連線協定 ,傳輸數據之前源端和終端不建立連線,當它想傳送時就簡單地去抓取來自應用程式的數據,並儘可能快地把它扔到網路上。在傳送端,UDP傳送數據的速度僅僅是受應用程式生成數據的速度、計算機的能力和傳輸頻寬的限制;在接收端,UDP把每個訊息段放在佇列中,應用程式每次從佇列中讀一個訊息段。
由於傳輸數據不建立連線,因此也就不需要維護連線狀態,包括收髮狀態等,因此一台服務機可同時向多個客戶機傳輸相同的訊息。
UDP信息包的標題很短,只有8個位元組,相對於TCP的20個位元組信息包的額外開銷很小。
吞吐量不受擁擠控制算法的調節,只受
套用軟體 生成數據的速率、傳輸頻寬、源端和終端主機性能的限制。
UDP使用盡最大努力交付,即不保證可靠交付,因此主機不需要維持複雜的連結狀態表(這裡面有許多參數)。
UDP是面向報文的。傳送方的UDP對應用程式交下來的報文,在添加首部後就向下交付給IP層。既不拆分,也不合併,而是保留這些報文的邊界,因此,應用程式需要選擇合適的報文大小。
雖然UDP是一個不可靠的協定,但它是分發信息的一個理想協定。例如,在螢幕上報告股票市場、在螢幕上顯示航空信息等等。UDP也用在
路由信息協定 RIP(Routing Information Protocol)中修改路由表。在這些套用場合下,如果有一個訊息丟失,在幾秒之後另一個新的訊息就會替換它。UDP廣泛用在多媒體套用中。
UDP與TCP對比 UDP和TCP協定的主要區別是兩者在如何實現信息的可靠傳遞方面不同。TCP協定中包含了專門的傳遞保證機制,當數據接收方收到傳送方傳來的信息時,會自動向傳送方發出確認訊息;傳送方只有在接收到該確認訊息之後才繼續傳送其它信息,否則將一直等待直到收到確認信息為止。與TCP不同,UDP協定並不提供數據傳送的保證機制。如果在從傳送方到接收方的傳遞過程中出現數據報的丟失,協定本身並不能做出任何檢測或提示。因此,通常人們把UDP協定稱為
不可靠的 傳輸協定 。
相對於TCP協定,UDP協定的另外一個不同之處在於如何接收突發性的多個數據報。不同於TCP,UDP並不能確保數據的傳送和接收順序。
事實上,UDP協定的亂序性基本上很少出現,通常只會在網路非常擁擠的情況下才有可能發生。
套用 適用場合 在選擇使用協定的時候,選擇UDP必須要謹慎。在
網路 質量令人十分不滿意的環境下,UDP協定數據包丟失會比較嚴重。但是由於UDP的特性:它不屬於連線型協定,因而具有資源消耗小,處理速度快的優點,所以通常音頻、視頻和普通數據在傳送時使用UDP較多,因為它們即使偶爾丟失一兩個數據包,也不會對接收結果產生太大影響。比如我們聊天用的ICQ和
QQ 就是使用的UDP協定。
實際套用 既然UDP是一種不可靠的
網路協定 ,那么還有什麼使用價值或必要呢?其實不然,在有些情況下UDP協定可能會變得非常有用。因為UDP具有TCP所望塵莫及的速度優勢。雖然TCP協定中植入了各種安全保障功能,但是在實際執行的過程中會占用大量的
系統開銷 ,無疑使速度受到嚴重的影響。反觀UDP由於排除了信息可靠傳遞機制,將安全和排序等功能移交給上層套用來完成,極大降低了執行時間,使速度得到了保證。
關於UDP協定的最早規範是
RFC 768,1980年發布。儘管時間已經很長,但是UDP協定仍然繼續在主流套用中發揮著作用。包括視頻
電話會議系統 在內的許多套用都證明了UDP協定的存在價值。因為相對於可靠性來說,這些套用更加注重實際性能,所以為了獲得更好的使用效果(例如,更高的畫面幀刷新速率)往往可以犧牲一定的可靠性(例如,畫面質量)。這就是UDP和TCP兩種協定的權衡之處。根據不同的環境和特點,兩種傳輸協定都將在今後的網路世界中發揮更加重要的作用。