天天看點

使用者資料包協定(user datagram protocol)——UDP

使用者資料報協定(User Datagram Protocol,UDP)是無連接配接不可靠傳輸層協定。它不提供主機到主機通信,它除了提供程序到程序之間的通信之外,就沒有給 IP 服務增加任何東西。此外,它進行非常有限的差錯檢驗。如果 UDP 功能是如此之差,那麼為什麼程序還要使用它?它有缺點也有優點。UDP 是一個非常簡單的協定,開銷最小。如果一個程序想發送很短的封包,而且不在意可靠性,就可以使用 UDP。使用 UDP 發送一個很短的封包,在發送方和接收方之間的互動要比使用 TCP 時少得多。

使用者資料報

UDP 分組稱為使用者資料報(user datagram),有 8 位元組的固定頭部,這個頭部由 4 個字段組成,每個字段 2 位元組(16 位)。

頭兩個字段定義了源和目的端口号。第三個字段定義了使用者資料報的總長,即頭部加資料的長度。16 位可以定義的總長度範圍是 0 到 65 535。然而,總長度需要更小一些,這是因為 UDP資料報存儲在總長度為 65 535 的 IP資料報中。最後一個字段可以攜帶可選校驗和。

使用者資料包協定(user datagram protocol)——UDP
使用者資料包協定(user datagram protocol)——UDP

UDP服務

程序到程序的通信

UDP 使用套接字位址提供程序到程序通信,這是 IP 位址和端口号的組合。

無連接配接服務

UDP 提供無連接配接服務。這就是表示 UDP 發送出去的每一個使用者資料報都是一個獨立的資料報。不同的使用者資料報之間沒有關系,即使它們都是來自相同的源程序并發送到相同的目的程式。使用者資料報不進行編号。此外,也沒有像 TCP 協定那樣的連接配接建立和連接配接終止,這就表示每一個使用者資料報可以沿着不同的路徑傳遞。

 無連接配接的一個結果就是使用 UDP 的程序不能夠向 UDP 發送資料流,并期望它将這個資料流分割成許多不同的相關聯的使用者資料報。相反,每一個請求必須足夠小,使其能夠裝入使用者資料報中,隻有那些發送短封包的程序才應當使用 UDP。短封包小于 65 507 位元組(65 535 減去 UDP 頭部的 8位元組再減去 IP 頭部的 20 位元組)。

流量控制

UDP 是一個非常簡單的協定。它沒有流量控制(flow control),因而也沒有視窗機制。如果到來的封包太多時,接收方可能會溢出。缺乏流量控制意味着如果需要的話,使用 UDP 的程序應該提供這個服務。

差錯控制

除校驗和外,UDP 也沒有差錯控制(error control)機制,這就表示發送方不知道封包是丢失還是重傳。當接收方使用校驗和檢測出差錯時,它就悄悄地将此使用者資料報丢棄。缺乏差錯控制意味着如果需要的話,使用 UDP 的程序應該提供這個服務。

校驗和

UDP 校驗和包含三部分:僞頭部、UDP 頭部和從應用層來的資料。僞頭部(psedoheader)是 IP 分組的頭部的一部分,其中有些字段要填入 0,使用者資料報分裝在 IP 分組中(見圖 3-40)。

使用者資料包協定(user datagram protocol)——UDP

如果校驗和不包括僞頭部,使用者資料報也可能是安全完整地到達。但是,如果 IP 頭部受到損壞,那麼它可能被送出到錯誤的主機。

增加協定字段可確定這個分組是屬于 UDP,而不是屬于其他傳輸層協定。如果一個程序既可用 UDP 又可用 TCP,則端口号可以是相同的。UDP 的協定字段值是 17。

如果在傳輸過程中這個值改變了,在接收端計算校驗和時就可檢測出來,UDP 就可丢棄這個分組。這樣就不會傳遞給錯誤的協定。

可選校驗和

UDP 分組的發送方可以選擇不計算校驗和。這種情況下,在發送前,校驗和字段就全填入 0。在發送方決定計算校驗和的情況下,如果碰巧結果全是 0,那麼在發送前校驗和全改為 1。換言之,發送方填充兩次校驗和。注意,這不會産生混淆,因為校驗和的值在正常情況下不會全為 1(見例3.12)。

使用者資料包協定(user datagram protocol)——UDP

擁塞控制

由于 UDP 是無連接配接協定,它不提供擁塞控制。UDP 假設被發送的分組很小且零星,不會在網絡中造成擁塞。今天當 UDP 被用做音頻和視訊的互動實時傳輸時,這個假設可能對也可

能不對。

封裝和解封裝

要将封包從一個程序發送到另一個程序時,UDP 協定就要對封包進行封裝和解封裝。排隊我們已經讨論過端口,但是沒有讨論端口的實際實作。在 UDP 中,隊列是與端口聯系在一起的。在用戶端,當程序啟動時,它從作業系統請求一個端口号。有些實作是建立一個入隊列和一個出隊列與每一個程序相關聯。而有些實作隻建立與每一個程序相關的入隊列。

多路複用與多路分解

在運作 TCP/IP 協定簇的主機上隻有一個 UDP,但可能有多個想使用 UDP 服務的程序。處理這種情況,UDP 采用多路複用和多路分解。

UDP 和通用簡單協定比較

我們可以将 UDP 與之前讨論的無連接配接簡單協定進行比較。唯一的差別就是 UDP 提供可選校驗和來在接收端發現被破壞分組。如果校驗和被加入分組,接收 UDP 可以檢測分組,如果分組被破壞可以丢棄它。然而,沒有回報被發向發送方。

      UDP 是我們之前讨論的無連接配接簡單協定的一個例子,差別在于它為差錯檢測加入了可選校驗和。

繼續閱讀