1. 程式人生 > >第8章 傳輸層(2)_UDP協議

第8章 傳輸層(2)_UDP協議

之前 用戶數 發送數據 1-1 效率 沒有 strong 而是 系統

2. 用戶數據報協議(UDP)

2.1 UDP的特點

(1)UDP是無連接的,即發送數據之前不需要建立連接,因此減少了開銷和發送數據之前的時延。

(2)UDP使用了盡最大努力交付,即不保證可靠交付,因此主機不需要維持復雜的連接狀態表,通信的兩端不用保持連接,因此節省系統資源。

(3)UDP是面向報文的。UDP對應用層下來的報文即既不合並,也不拆分,而是保留這些報文的邊界。也就是說應用層交給UDP多長的報文,UDP就原樣發送,即一次發送一個報文。(這要求應用程序必須選擇合適大小的報文,以免降低IP層的效率!)

技術分享

(4)UDP沒有擁塞控制:如果網絡出現擁塞不會使主機的發送速率降低。這對某些實時應用很重要

(如IP電話、實時視頻會議等),它允許在網絡發生擁塞時丟失一些數據但不允許數據有太大的時延,UDP正好適合這種要求。

(5)UDP支持一對一、一對多、多對一和多對多的交互通信。

(6)UDP的首部開銷小,只有8字節,比TCP的20字節的首部要短。

2.2 UDP的首部格式

(1)抓包分析(以域名解析數據包為例)

技術分享

  ①源端口:在需要對方回信時選用。不需要時可用全0。

  ②目的端口:在終點交付報文時必須要使用到

  ③長度:UDP用戶數據據的長度(數據字段和首部字段),最小值是8(僅有首部時)

  ④檢驗和:檢測UDP用戶數據報在傳輸中是否有錯。有錯就丟棄

(2)UDP首部和偽首部

技術分享

  ①UDP用戶數據報有兩個字段:數據字段和首部字段。其中的首部很簡單,只有8個字節(源端口、目標端口、長度和校驗和)

  ②“偽首部”:並不是UDP數據報真正的首部,只是在計算檢驗和時,臨時添加在UDP數據報前面,得到一個臨時的UDP用戶數據報,檢驗和就是按照這個臨時的UDP數據報來計算的。這個偽首部既不向下傳遞也不向上遞交,而僅僅是為了計算檢驗和之用

(3)UDP檢驗和的計算

技術分享

  ①UDP的檢驗和是把首部和數據部分一起都檢驗(有別於IP數據報檢驗和只檢驗IP數據報的首部)。

  ②發送方首先把全零放入檢驗和字段,再把偽首部以及UDP用戶數據報看成是由許多16位的字(如上圖)一起串接起來。如果數據部分不是偶數個字節,則填入一個全零字節(但不發送)。然後按二進制反碼計算出這些16位字的和將此和的二進制反碼寫入檢驗和字段

。然後發送這個UDP數據報。

  ③接收方把收到的UDP數據報連同偽首部(以及可能的填充全零字節)一起按二進制反碼求這些16位字的和。當無差錯時其結果應全為1;否則就表明有差錯出現,接收方應丟棄這個UDP數據報。

第8章 傳輸層(2)_UDP協議