《UDP原理》


一、UDP的概述(User Datagram Protocol,用戶數據報協議)
UDP是傳輸層的協議,功能即為在IP的數據報服務之上增加了最基本的服務:復用和分用以及差錯檢測。

UDP提供不可靠服務,具有TCP所沒有的優勢:

  1.UDP無連接,時間上不存在建立連接需要的時延。空間上,TCP需要在端系統中維護連接狀態,需要一定的開銷。此連接裝入包括接收和發送緩存,擁塞控制參數和序號與確認號的參數。UCP不維護連接狀態,也不跟蹤這些參數,開銷小。空間和時間上都具有優勢。
舉個例子:

  DNS如果運行在TCP之上而不是UDP,那么DNS的速度將會慢很多。
  HTTP使用TCP而不是UDP,是因為對於基於文本數據的Web網頁來說,可靠性很重要。
  同一種專用應用服務器在支持UDP時,一定能支持更多的活動客戶機。

  2.分組首部(報文頭)開銷小,TCP首部20字節,UDP首部8字節。

  3.UDP沒有擁塞控制,應用層能夠更好的控制要發送的數據和發送時間,網絡中的擁塞控制也不會影響主機的發送速率。某些實時應用要求以穩定的速度發送,能容 忍一些數據的丟失,但是不能允許有較大的時延(比如實時視頻,直播等)。

  4.UDP提供盡最大努力的交付,不保證可靠交付。所有維護傳輸可靠性的工作需要用戶在應用層來完成。沒有TCP的確認機制、重傳機制。如果因為網絡原因沒有傳送到對端,UDP也不會給應用層返回錯誤信息。

  5.UDP是面向報文的,對應用層交下來的報文,添加首部后直接鄉下交付為IP層,既不合並,也不拆分,保留這些報文的邊界。對IP層交上來UDP用戶數據報,在去除首部后就原封不動地交付給上層應用進程,報文不可分割,是UDP數據報處理的最小單位。
  正是因為這樣,UDP顯得不夠靈活,不能控制讀寫數據的次數和數量。比如我們要發送100個字節的報文,我們調用一次sendto函數就會發送100字節,對端也需要用recvfrom函數一次性接收100字節,不能使用循環每次獲取10個字節,獲取十次這樣的做法。

  6.UDP常用一次性傳輸比較少量數據的網絡應用,如DNS,SNMP等,因為對於這些應用,若是采用TCP,為連接的創建,維護和拆除帶來不小的開銷。UDP也常用於多媒體應用(如IP電話,實時視頻會議,流媒體等)數據的可靠傳輸對他們而言並不重要,TCP的擁塞控制會使他們有較大的延遲,也是不可容忍的

 

 二、UDP報文格式

  

   UDP首部有8個字節,由4個字段構成,每個字段都是兩個字節,
  1.源端口: 源端口號,需要對方回信時選用,不需要時全部置0.
  2.目的端口:目的端口號,在終點交付報文的時候需要用到。
  3.長度:UDP的數據報的長度(包括首部和數據)其最小值為8(只有首部)
  4.校驗和:檢測UDP數據報在傳輸中是否有錯,有錯則丟棄。
  該字段是可選的,當源主機不想計算校驗和,則直接令該字段全為0.
  當傳輸層從IP層收到UDP數據報時,就根據首部中的目的端口,把UDP數據報通過相應的端口,上交給應用進程,該過程也稱為解復用。
  如果接收方UDP發現收到的報文中的目的端口號不正確(不存在對應端口號的應用進程0,),就丟棄該報文,並由ICMP發送“端口不可達”差錯報文給對方。

UDP校驗

  在計算校驗和的時候,需要在UDP數據報之前增加12字節的偽首部,偽首部並不是UDP真正的首部。只是在計算校驗和,臨時添加在UDP數據報的前面,得到一個臨時的UDP數據報。校驗和就是按照這個臨時的UDP數據報計算的。偽首部既不向下傳送也不向上遞交,而僅僅是為了計算校驗和。這樣的校驗和,既檢查了UDP數據報,又對IP數據報的源IP地址和目的IP地址進行了檢驗。

  

 

  UDP校驗和的計算方法和IP數據報首部校驗和的計算方法相似,都使用二進制反碼運算求和再取反,但不同的是:IP數據報的校驗和之檢驗IP數據報和首部,但UDP的校驗和是把首部和數據部分一起校驗。

  發送方,首先是把全零放入校驗和字段並且添加偽首部,然后把UDP數據報看成是由許多16位的子串連接起來,若UDP數據報的數據部分不是偶數個字節,則要在數據部分末尾增加一個全零字節(此字節不發送),接下來就按照二進制反碼計算出這些16位字的和。將此和的二進制反碼寫入校驗和字段。在接收方,把收到得UDP數據報加上偽首部(如果不為偶數個字節,還需要補上全零字節)后,按二進制反碼計算出這些16位字的和。當無差錯時其結果全為1,。否則就表明有差錯出現,接收方應該丟棄這個UDP數據報。

  

 

 

 注意:
1.校驗時,若UDP數據報部分的長度不是偶數個字節,則需要填入一個全0字節,但是次字節和偽首部一樣,是不發送的。
2.如果UDP校驗和校驗出UDP數據報是錯誤的,可以丟棄,也可以交付上層,但是要附上錯誤報告,告訴上層這是錯誤的數據報。
3.通過偽首部,不僅可以檢查源端口號,目的端口號和UDP用戶數據報的數據部分,還可以檢查IP數據報的源IP地址和目的地址。
這種差錯檢驗的檢錯能力不強,但是簡單,速度快

 


免責聲明!

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



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