在UDP協(xié)議層次模型中,UDP位于IP層之上。應用程序訪問UDP層然后使用IP層傳送數(shù)據(jù)包。IP數(shù)據(jù)包的數(shù)據(jù)部分即為UDP數(shù)據(jù)包。IP層的報頭指明了源主機和目的主機地址,而UDP層的報頭指明了主機上的源端口和目的端口。UDP傳輸?shù)亩?segment)有8個字節(jié)的報頭和有效載荷字段構成。UDP報頭由4個域組成,其中每個域各占用2個字節(jié),具體包括源端口號、目標端口號、數(shù)據(jù)包長度、校驗值。以下將對UDP數(shù)據(jù)報格式進行簡要介紹,具體內容請參照RFC 768。
UDP協(xié)議使用端口號為不同的應用保留其各自的數(shù)據(jù)傳輸通道。UDP和TCP協(xié)議正是采用這一機制實現(xiàn)對同一時刻內多項應用同時發(fā)送和接收數(shù)據(jù)的支持。數(shù)據(jù)發(fā)送一方(可以是客戶端或服務器端)將UDP數(shù)據(jù)包通過源端口發(fā)送出去,而數(shù)據(jù)接收一方則通過目標端口接收數(shù)據(jù)。有的網絡應用只能使用預先為其預留或注冊的靜態(tài)端口;而另外一些網絡應用則可以使用未被注冊的動態(tài)端口。因為UDP報頭使用兩個字節(jié)存放端口號,所以端口號的有效范圍是從0到65535。一般來說,大于49151的端口號都代表動態(tài)端口。UDP端口號指定有兩種方式:由管理機構指定端口和動態(tài)綁定的方式。
數(shù)據(jù)報的長度是指包括報頭和數(shù)據(jù)部分在內的總字節(jié)數(shù)。因為報頭的長度是固定的,所以該域主要被用來計算可變長度的數(shù)據(jù)部分(又稱為數(shù)據(jù)負載)。數(shù)據(jù)報的最大長度根據(jù)操作環(huán)境的不同而各異。從理論上說,包含報頭在內的數(shù)據(jù)報的最大長度為65535字節(jié)。不過,一些實際應用往往會限制數(shù)據(jù)報的大小,有時會降低到8192字節(jié)。
UDP協(xié)議使用報頭中的校驗值來保證數(shù)據(jù)的安全。校驗值首先在數(shù)據(jù)發(fā)送方通過特殊的算法計算得出,在傳遞到接收方之后,還需要再重新計算。如果某個數(shù)據(jù)報在傳輸過程中被第三方篡改或者由于線路噪音等原因受到損壞,發(fā)送和接收方的校驗計算值將不會相符,由此UDP協(xié)議可以檢測是否出錯。這與TCP協(xié)議是不同的,后者要求必須具有校驗值。
許多鏈路層協(xié)議都提供錯誤檢查,包括流行的以太網協(xié)議,也許你想知道為什么UDP也要提供檢查和校驗。其原因是鏈路層以下的協(xié)議在源端和終端之間的某些通道可能不提供錯誤檢測。雖然UDP提供有錯誤檢測,但檢測到錯誤時,UDP不做錯誤校正,只是簡單地把損壞的消息段扔掉,或者給應用程序提供警告信息。
UDP是一個無連接協(xié)議,傳輸數(shù)據(jù)之前源端和終端不建立連接,當它想傳送時就簡單地去抓取來自應用程序的數(shù)據(jù),并盡可能快地把它扔到網絡上。在發(fā)送端,UDP傳送數(shù)據(jù)的速度僅僅是受應用程序生成數(shù)據(jù)的速度、計算機的能力和傳輸帶寬的限制;在接收端,UDP把每個消息段放在隊列中,應用程序每次從隊列中讀一個消息段。由于傳輸數(shù)據(jù)不建立連接,因此也就不需要維護連接狀態(tài),包括收發(fā)狀態(tài)等,因此一臺服務機可同時向多個客戶機傳輸相同的消息。UDP信息包的標題很短,只有8個字節(jié),相對于TCP的20個字節(jié)信息包而言UDP的額外開銷很小。吞吐量不受擁擠控制算法的調節(jié),只受應用軟件生成數(shù)據(jù)的速率、傳輸帶寬、源端和終端主機性能的限制。UDP是面向報文的。發(fā)送方的UDP對應用程序交下來的報文,在添加首部后就向下交付給IP層。既不拆分,也不合并,而是保留這些報文的邊界,因此,應用程序需要選擇合適的報文大小。雖然UDP是一個不可靠的協(xié)議,但它是分發(fā)信息的一個理想協(xié)議。例如,在屏幕上報告股票市場、顯示航空信息等等。UDP也用在路由信息協(xié)議RIP(Routing Information Protocol)中修改路由表。在這些應用場合下,如果有一個消息丟失,在幾秒之后另一個新的消息就會替換它。UDP廣泛用在多媒體應用中。