1. 程式人生 > >使用者資料包協議(user datagram protocol)——UDP

使用者資料包協議(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資料報中。最後一個欄位可以攜帶可選校驗和。

 

 

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)。

如果校驗和不包括偽頭部,使用者資料報也可能是安全完整地到達。但是,如果 IP 頭部受到損壞,那麼它可能被提交到錯誤的主機。
增加協議欄位可確保這個分組是屬於 UDP,而不是屬於其他傳輸層協議。如果一個程序既可用 UDP 又可用 TCP,則埠號可以是相同的。UDP 的協議欄位值是 17
如果在傳輸過程中這個值改變了,在接收端計算校驗和時就可檢測出來,UDP 就可丟棄這個分組。這樣就不會傳遞給錯誤的協議。


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

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


封裝和解封裝
要將報文從一個程序傳送到另一個程序時,UDP 協議就要對報文進行封裝和解封裝。排隊我們已經討論過埠,但是沒有討論埠的實際實現。在 UDP 中,佇列是與埠聯絡在一起的。在客戶端,當程序啟動時,它從作業系統請求一個埠號。有些實現是建立一個入佇列和一個出佇列與每一個程序相關聯。而有些實現只建立與每一個程序相關的入佇列。

多路複用與多路分解
在執行 TCP/IP 協議簇的主機上只有一個 UDP,但可能有多個想使用 UDP 服務的程序。處理這種情況,UDP 採用多路複用和多路分解。

UDP 和通用簡單協議比較
我們可以將 UDP 與之前討論的無連線簡單協議進行比較。唯一的區別就是 UDP 提供可選校驗和來在接收端發現被破壞分組。如果校驗和被加入分組,接收 UDP 可以檢測分組,如果分組被破壞可以丟棄它。然而,沒有反饋被髮向傳送方。

      UDP 是我們之前討論的無連線簡單協議的一個例子,區別在於它為差錯檢測加入了可選校驗和