1. 程式人生 > >使用者資料報協議UDP總結

使用者資料報協議UDP總結

使用者資料報協議UDP小結

閱讀目錄:

一、 UDP首部格式

二、 UDP主要特點

三、 UDP校驗和計算

四、 UDP程式設計實現

簡介:UDP是User Datagram Protocal的縮寫,即使用者資料報協議,其只在IP的資料報服務上增加了很少一點的功能,即埠(複用和分用)以及差錯檢驗功能。雖然UDP資料報提供不可靠的交付,但是UDP在減小開銷及時延等方面有其特殊優點

一、UDP首部格式:

使用者資料報UDP有兩個欄位:資料欄位首部欄位。首部欄位只有8個位元組,由四個欄位組成,每個欄位的長度都是兩個位元組。各欄位意義如下:

(1)源埠:源埠號,在需要對方回信時選用,不需要時可用全0
(2)目的埠:目的埠號,這在終點交付報文時必須要用到
(3)長度: UDP使用者資料報的長度,其最小值為8(此時僅有首部)
(4)檢驗和:檢測UDP使用者資料報在傳輸中是否有錯,有錯就丟棄

圖1、UDP的首部格式

圖1、UDP的首部格式

當運輸層從IP層收到UDP資料報時,就根據首部中的目的埠,把UDP資料報通過相應的埠,上交最後的終點——應用程序。圖2是UDP基於埠分用的示意圖。

這裡寫圖片描述

圖2、UDP基於埠分用

如果接收方UDP發現收到的報文中的目的埠號不正確(即不存在對應於該埠號的應用程序),就丟棄該報文,並由網際控制報文協議ICMP傳送“埠不可達”差錯報文給傳送方。

二、UDP的主要特點:

1、UDP 是無連線的,即傳送資料之前不需要建立連線,傳送資料之後也沒有連線可釋放,因此減小了開銷和傳送資料之前的時延。

2、UDP使用盡最大努力交付,即不保證可靠交付,因此主機不需要維持複雜的連線狀態表

3、UDP是面向報文的,傳送方UDP對應用程式交下來的報文,在新增首部後直接向下交付IP層。UDP對應用層交下來的報文(˅),既不合並,也不拆分,而是保留這些報文的邊界。也就是說,應用層交付給UDP的報文,UDP就照樣傳送,即一次傳送一個報文。在接收方的UDP(ʌ),對IP層交上來的UDP使用者資料報,在去除首部後就原封不動的交付上層的應用程序。也就是說,UDP一次交付一個完整的報文。

應用程式必須選擇合適大小的報文,若報文太長,UDP將其交給IP層後,IP層在傳送時可能要進行分片,這回降低IP層的效率,反之,若報文太短,UDP將其交給IP層後,會使IP資料報的首部相對長度太大,這也降低了IP層的效率。

這裡寫圖片描述

圖3、UDP是面向報文的

(4)、UDP沒有擁塞控制,因此網路出現的擁塞不會使源主機的傳送效率降低,這對某些實時應用是很重要的,很多實時應用(IP電話、視訊會議)要求源主機以恆定速率傳送資料,並且允許在網路發生擁塞時丟失一些資料,但不允許資料有太大的時延。

當很多源主機同時都向網路中傳送高速率的實時視訊流時,網路就可能發生擁塞,導致大家都無法正常接收,因此,不適用擁塞控制的UDP有可能引起網路嚴重擁塞。

(5)、UDP支援一對一、一對多、多對一和多對多的互動通訊

(6)、UDP首部開銷小,只有8個位元組,比TCP的20個位元組首部要短。

三、 UDP校驗和計算:

UDP使用者資料報首部中校驗和的計算方法有一些特殊,在計算校驗和時,臨時在UDP使用者資料報前增加12個位元組的偽首部。

所謂偽首部,是因為這種為首不併不是UDP使用者資料報真正的首部,只是在計算校驗和時,臨時新增在UDP使用者資料報前面,得到一個臨時的UDP使用者資料報,檢驗和就是按照這個臨時的UDP使用者資料報計算的,偽首部既不向上遞交也不向下傳送,僅僅為了計算校驗和。圖4給出了偽首部各欄位的內容。

這裡寫圖片描述

圖4、偽首部欄位內容

UDP的檢驗和是把首部和資料部分一起都檢驗

3.1、計算過程及示例:

傳送方:
1、 將全零放入檢驗和欄位
2、 將偽首部以及UDP使用者資料報看成由許多16位的字串接起來。
3、 若UDP使用者資料報資料部分不是偶數個位元組,則要填入一個全零位元組(此位元組不傳送)
4、 最後按照二進位制反碼計算出這些16位字的和,將此和的二進位制反碼寫入校驗和欄位,傳送這樣的UDP使用者資料報。

接收方:
1、 將收到的UDP使用者資料報連同偽首部(以及可能的填充全零位元組)一起,按照二進位制反碼求這些16位字的和,並將這個和與檢驗和相加。
2、 若其結果為全1,則無差錯,接收該UDP使用者資料報。
3、 若結果不全為1,則出現差錯,丟棄這個UDP使用者資料報。(或遞交給應用層,但附加差錯警告)

3.2、簡單理解計算過程:
傳送階段:除校驗和之外的其他欄位的16位2進位制反碼校驗和為m,由於校驗和欄位值為0,則 0 + m = m,而~m被存放在校驗和欄位中
接收階段:除校驗和之外的其他欄位的16位2進位制反碼校驗和,如果正確則仍然為m,而校驗和欄位,如果正確則為~m,那麼m + ~m = 0xffff,計算結果對
(m為圖5中紅色框部分,~m為綠色框部分)

這裡寫圖片描述

圖5、計算校驗和的示例

3.3、UDP校驗和說明:

(1)、UDP檢驗和覆蓋UDP首部和UDP資料。其檢驗和是可選的,基本計算方法是16 bit字的二進位制反碼和,
(2)、UDP資料報的長度可以為奇數字節,但檢驗和演算法是把若干個16
bit字相加。解決方法是必要時在最後增加填充位元組0,這只是為了檢驗和的計算,可能增加的填充位元組不被傳送。
(3)、計算校驗和時,在UDP資料報前加12位元組的偽首部,偽首部包含IP首部一些欄位,目的是讓UDP兩次檢查資料是否已經正確到達目的地。
(4)、UDP資料報的長度在檢驗和計算過程中出現兩次(偽首部及UDP首部均包含UDP資料報長度)
(5)、如果檢驗和的計算結果為0,則存入的值為全1(65535),這在二進位制反碼計算中是等效的。如果傳送的檢驗和為0,說明發送端沒有計算檢驗和。
(6)、UDP檢驗和是一個端到端的檢驗和。它由傳送端計算,然後由接收端驗證。其目的是為了發現UDP首部和資料在傳送端到接收端之間發生的任何改動。
(7)、UDP檢驗和(事實上,TCP/IP協議簇中所有的檢驗和)是簡單的16 bit和。它們檢測不出交換兩個16 bit的差錯。

四、 UDP程式設計實現:

待補充