UDP用戶數據報


UDP

  1. 用戶數據報協議UDP只在IP的數據報服務之上增加了很少的一個功能,就是復用,分用,差錯檢測功能。UDP的主要特點是:

    1. UDP是無連接的,即在發送數據報之前不需要建立連接(當然發送數據結束的時候也不會有連接釋放),因此減少了開銷和發送數據之前的時延。

    2. UDP是盡自己最大努力交付,且並不提供可靠服務,因此主機並不需要維持復雜的鏈接狀態表。

    3. UDP是面向報文的,發送方的UDP對應用程序交下來的報文,在添加首部之后就可以交付給IP層。UDP對於應用層交付下來的報文,既不拆分,也不合並,只是只是保留這些報文的邊界。意思就是,不管上層傳給UDP多長的報文,UDP照樣發送,至於是否進行切片處理等等,那是IP層的事情。

      image

    4. UDP沒有擁塞控制,因此網絡上出現擁塞不會使得源主機的發送速率降低。這種就特別的適合實時場景的使用。例如視頻通話,語音通話等等。

    5. UDP支持一對一,一對多,多對一,多對多的交互通信。

    6. UDP的首部開銷小,相比TCP的20字節,只有8字節。

  2. UDP首部的格式:

    image

    1. 源端口(兩個字節):源端口號。不需要的時候用全0
    2. 目的端口(兩個字節):目的端口號。
    3. 長度(兩個字節):UDP用戶數據報的長度,其最小值為8(僅含首部)。
    4. 檢驗和(2字節):檢測UDP用戶數據包在傳輸中是否出錯。有錯就丟棄。
  3. 當運輸層從IP層接收到UDP數據報的時候,就根據首部中的目的端口,把UDP數據報通過響應的端口,最終交付給相應的用用進程處理。如圖

    image

  4. 如果接收方UDP接收到的目的端口號不明確(即不存在相應的目的端口號),就丟棄這個UDP報文,並由網際控制協議(ICMP)發送端口不可達差錯報文給發送方。

  5. 請注意,雖然在UDP之間的通信需要使用到端口號,但由於UDP通信是無連接的,因此並不需要使用socket(TCP之間就要必須使用socket建立連接)。

  6. UDP用戶數據報首部中校驗和的計算方法有些特殊。在計算校驗和的時候,要在UDP用戶數據報之前加上12字節的偽首部(偽首部的第三個字段全是0,第四個字段是IP首部中的協議字段,以前講過,對於UDP,就是17;第五個字段是UDP用戶數據包的長度。因此檢驗和,既檢查了UDP用戶數據報的源端口號和目的端口號以及檢查了UDP用戶數據包的數據部分,又檢查了IP數據報的源IP地址和目的IP地址)。所謂的偽長度是因為者追蹤偽長度並不是UDP用戶數據真正的首部。只是在校驗和的時候,臨時加到UDP數據報的前面,得到一個臨時的UDP用戶數據報,檢驗和就是根據這個UDP臨時數據報來計算的,偽長度既不向下傳送也不向上遞交,而僅僅是為了計算校驗和。,至於怎么校驗呢?其實UDP計算校驗和的方法和計算IP數據報的首部校驗和的方法類似。但不同的是:IP數據報的檢驗和只校驗IP數據報的首部,但是UDP檢驗和是把首部和數據部分一起校驗。在發送方,首先把全0放到校驗和字段中。再把偽首部UDP用戶數據報看成是由許多16位的字符拼接起來的。若UDP用戶數據報的數據部分不是偶數字節,則要填入一個全零字節(但此字節不發送),然后按照二進制反碼計算出這些16位字的和,將此和的二進制反碼寫入校驗和字段后,就發送這樣的UDP用戶數據報。在接收方,把收到的UDP用戶數據報連同偽首部一起,按二進制反碼求出16位字的和,當無差錯時,其結果為1,否則就是出現差錯,接收方就應該丟棄這個UDP報文,並把錯誤信息通過ICMP(網際控制協議)差錯報告給上層。

  7. 這種簡單的差錯檢測方法能力並不強,但它的好處是簡單,處理起來比較快。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM