計算機網絡運輸層之UDP

一、UDP概述
UDP(用戶數據報協議,User Datagram Protocol),它只是做了運輸層協議能夠做的最少工作,除了多路複用和多路分解及一些差錯檢測外,它幾乎沒有做任何東西。如果應用程序使用的運輸層協議是UDP,則應用程序幾乎是直接與IP打交道的。

同時,UDP也是一種無連接的運輸層協議,因爲在使用UDP時,在發送報文段之前,發送方和接收方的運輸層實體之間沒有進行握手,所謂的握手,就是發送方和接收方通過發送一些特定的報文段來互相確認,從而爲發送做準備。

UDP爲網絡層以上和應用層以下提供了一個簡單的接口。UDP只提供數據的不可靠傳遞,它一旦把應用程序發給網絡層的數據發送出去,就不保留數據備份(所以UDP是不可靠的數據報協議),也不要求接收方回覆接收成功確認,也不會重發數據,不提供流量控制,更不提供擁塞控制。UDP在IP數據報的頭部僅僅加入了複用和數據校驗(字段)。

二、UDP報文段結構
根據上面所述,其報文段結構如下圖所示(圖片來源:http://www.cnblogs.com/zplutor/archive/2011/07/05/2098641.html)

從上圖可以看出,UDP首部只有4個字段,每個字段由兩個字節組成。

源端口號是本機(客戶端)的應用程序的套接字所對應的端口號,服務器端可利用此端口號向客戶端發送數據。

目的端口號是服務端上的應用進程的套接字所對應的端口號,例如HTTP服務器的80端口。

長度指明瞭首部和數據部分的UDP報文段的總長度,單位爲字節,即首部+數據。

檢驗和提供了差錯檢測功能,即檢驗和用於確定當UDP報文段從源到達目的時,其中的比特是否發生了改變。事實上,計算檢驗和時,除了UDP報文段以年還使用了IP首部的一些字段。注意,它只能檢測到一個報文段發生了錯誤,但並不能糾正這個錯誤。

三、UDP的優勢
從UDP的概述中,我們可以看到,UDP其實並不提供什麼服務,而TCP則爲我們提供了非常吸引的服務(如重發機制、流量控制、接收確認、擁塞控制等等),實現的是一個可靠的傳輸。爲什麼還在存在UDP這個東西呢?每一樣事物都有它的優點,而且很多時候,事物的缺點恰恰就是它的優點。我爲何這麼說,下面就來看看它的優勢吧!

1、應用層能更好發控制要發送的數據和發送時間。
爲什麼採用UDP的應用層能更好地控制發送的數據和時間呢?因爲UDP只提供最簡單、服務最少的服務,所以當網絡應用進程有數據傳遞給UDP時,UDP馬上就會將此數據打包成UDP報文段,並把它交付給網絡層,從而把數據發送出去。相反,由於TCP提供了各種的機制,特別是擁塞控制,以便讓源和目的主機間的一條或多條鏈路變得非常擁塞時,遏制運輸層TCP發送方,從而讓因特網電話、視頻會議之類的實時應用性能變得很差。再者,TCP還會繼續重發數據報文段直到目的主機收到此報文並加以確認,點面結合 不管可靠的交付需要多少時間。TCP的這些特性,對於一些實時應用來說通常是不適合的,因爲它們通常要求以最快的發送速率發送數據,而不想過分地延遲報文的傳送,而且它還能容忍一些數據丟失,所以沒用必要使用TCP,使用TCP還會增加額外的負擔。

2、無需連接建立
如上述的那樣,UDP是一個無連接的運輸層協議,而TCP在開始數據傳輸之前要經過三次握手。UDP由於它是一個無連接的協議,所以可以不需要任何準備即可進行數據傳輸,因此它不會引入建立連接的時延。所以DNS運行在UDP之上而不是TCP之上,因爲如果DNS運行在TCP之上,則會由於要建立過多的連接而產生過長連接延時,從而讓DNS運行得很慢。

3、無連接狀態
TCP由於在提供各種可靠傳輸的服務,需要在端系統中維護連接狀態。此連接狀態包括接收和發送緩存、擁塞控制參數、序號與確認序號等參數。而UDP不維護連接狀態,也不跟蹤這些參數。因此,使用UDP的服務器能支持更多的活動客戶機。

4、分組首部開銷小
由於UDP提供的服務少,只提供多路分解和多路複用和校驗功能,所以其首部字段少,只有8個字節,而TCP的首部有20個字節。

PS:關於UDP的編程應用,本人的這篇文章提供了一個簡單的例子:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章