[網絡]——UDP協議分析

寫完了TCP,運輸層的UDP協議最好也總結一下,本篇博客資料來自謝希仁《計算機網絡》,真的很推薦看一遍。

1.UDP協議

UDP協議是運輸層協議,有以下的特點。

  • UDP是無連接的
  • UDP盡最大努力交付,但不保證可靠性
  • UDP是面向報文
  • UDP沒有擁塞控制
  • UDP支持一對一,一對多和多對多的交互通信。
  • UDP的首部較短只有8個字節

UDP是無連接

發送數據前不需要建立連接,發送完後同樣不需要釋放連接。

UDP盡最大努力交付,但不保證可靠性

UDP對於下一層的IP協議報頭只添加了了源端口、目標端口、長度、校驗和4個字段,甚至源端口跟校驗和都可以不要,因此UDP是不可靠的。

UDP是面向報文

發送方的UDP對應用程序發出的報文,在添加首部後就交付給IP層,既不合並也不拆分,不像TCP協議一樣對字節進行編號,保留報文的邊界

UDP沒有擁塞控制

網絡上的擁塞不會影響發送方的發送速率,適合實時應用,例如直播,電話等要求發送方以恆定的速率發送數據,能接受一定的丟包率,但不允許數據有太大的時延。

2.UDP首部

在這裏插入圖片描述
用戶數據報UDP有兩部分構成:數據和首部
首部一共8個字節,每個字段兩個字節意義如下:

  1. 源端口
    源端口號,在需要對方回信時選用,不需要時用0.
  2. 目的端口
    目的端口號,在終點交付報文時必須使用到。
  3. 長度
    UDP用戶數據報的長度,包括首部和數據字段,最小值爲8
  4. 校驗和
    檢測UDP用戶的數據報在傳輸的過程中是不是有錯,如果有就丟棄。

3.發送情況

當接受方從ip層收到UDP報文後,就根據目的端口,把UDP數據報通過相應的端口,上交給應用程序。
在這裏插入圖片描述
如果UDP的目的端口號不正確,就丟棄該報文,並用ICMP發送“端口不可達”差錯報文給發送方。
UDP用戶數據報中校驗和的計算方式爲,在UDP報文前增加12個字節的僞首部,得到一個臨時的UDP報文,用於計算校驗和。
有同學會問IP也有一個校驗過程,和UDP的校驗過程有什麼區別?
區別在於,IP數據報的校驗和只校驗IP數據報的首部,UDP的校驗和把首部和數據部分都校驗。
具體發方法如下

對於發送方,首先把全零放入校驗和字段,在把僞首部和UDP數據報看成許多16位的字拼接而成,以二進制反碼求這些字的和,將此二進制反碼的和寫入校驗和字段後,發給接受方,在接受方,把收到的UDP用戶數據報和僞首部一起,按二進制反碼求這麼16位字的和,如果正確,其二進制數位應該全爲1.下圖爲計算過程。

在這裏插入圖片描述

UDP協議比起TCP協議來說,簡單的不止一點點,但是更因如此,我們纔要把UDP協議理解,畢竟盡信書不如無書。在下一篇博客中,嘗試實現UDP的簡單服務器。

面試題:用UDP實現可靠傳輸

由於UDP本身的特性在傳輸層屬於不可靠傳輸,所以要想讓UDP變可靠必須在應用層對其進行改造,實現方法可以參考TCP協議。
具體操作如下

  • 增加seq/ack 應答機制 ,確認端到端的數據輸入。
  • 添加發送和接收緩衝區
  • 加入超時重傳機制。

目前實現了UDP的可靠傳輸的開源程序有Rudp,RTP,UDT。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章