JavaWbe~用戶數據報協議(User Datagram Protocol)UDP

UDP簡介

內容(瞭解)

  • UDP是OSI參考模型中一種無連接的傳輸層協議,它主要用於不要求分組順序到達的傳輸中,分組傳輸順序的檢查與排序由應用層完成 ,提供面向事務的簡單不可靠信息傳送服務。UDP 協議基本上是IP協議與上層協議的接口。UDP協議適用端口分別運行在同一臺設備上的多個應用程序。
  • UDP提供了無連接通信,且不對傳送數據包進行可靠性保證,適合於一次傳輸少量數據,UDP傳輸的可靠性由應用層負責。常用的UDP端口號有:53(DNS)、69(TFTP)、161(SNMP),使用UDP協議包括:TFTP、SNMP、NFS、DNS、BOOTP。
  • UDP報文沒有可靠性保證、順序保證和流量控制字段等,可靠性較差。但是正因爲UDP協議的控制選項較少,在數據傳輸過程中延遲小、數據傳輸效率高,適合對可靠性要求不高的應用程序,或者可以保障可靠性的應用程序,如DNS、TFTP、SNMP等。
  • 許多應用只支持UDP,如:多媒體數據流,不產生任何額外的數據,即使知道有破壞的包也不進行重發。當強調傳輸性能而不是傳輸的完整性時,如:音頻和多媒體應用,UDP是最好的選擇。在數據傳輸時間很短,以至於此前的連接過程成爲整個流量主體的情況下,UDP也是一個好的選擇。

實際應用場所(瞭解)

  • 在選擇UDP作爲傳輸協議時必須要謹慎。在網絡質量令人十分不滿意的環境下,UDP協議數據包丟失會比較嚴重。但是由於UDP的特性:它不屬於連接型協議,因而具有資源消耗小,處理速度快的優點,所以通常音頻、視頻和普通數據在傳送時使用UDP較多,因爲它們即使偶爾丟失一兩個數據包,也不會對接收結果產生太大影響。比如我們聊天用的ICQ和QQ就是使用的UDP協議。
  • 在現場測控領域,面向的是分佈化的控制器、監測器等,其應用場合環境比較惡劣,這樣就對待傳輸數據提出了不同的要求,如實時、抗干擾性、安全性等。基於此,現場通信中,若某一應用要將一組數據傳送給網絡中的另一個節點,可由UDP進程將數據加上報頭後傳送給IP進程,UDP協議省去了建立連接和拆除連接的過程!取消了重發檢驗機制,能夠達到較高的通信速率.

報文格式

在這裏插入圖片描述

  • UDP報頭由4個域組成,其中每個域各佔用2個字節,具體包括源端口號、目標端口號、數據報長度、校驗值。

端口號

  • 數據發送一方(可以是客戶端或服務器端)將UDP數據包通過源端口發送出去,而數據接收一方則通過目標端口接收數據。有的網絡應用只能使用預先爲其預留或註冊的靜態端口;而另外一些網絡應用則可以使用未被註冊的動態端口。因爲UDP報頭使用兩個字節存放端口號,所以端口號的有效範圍是從0到65535。
  • 端口號劃分

0 - 1023: 知名端口號, HTTP, FTP, SSH等這些廣爲使用的應用層協議, 他們的端口號都是固定的.
1024 - 65535: 操作系統動態分配的端口號. 客戶端程序的端口號, 就是由操作系統從這個範圍分配的

  • 認識知名端口號

ssh服務器, 使用22端口
ftp服務器, 使用21端口
telnet服務器, 使用23端口
http服務器, 使用80端口
https服務器, 使用443端口

  • 倆個常見問題
  1. 一個進程是否可以bind多個端口號?
    這是可以的 因爲端口號適合Socket對象關聯的 而一個進程中是可以有多個Socket對象的
  2. 一個端口號是否可以被多個進程bind?
    絕大多數來說這是不可以的

長度

  • 數據報的長度是指包括報頭和數據部分在內的總字節數。因爲報頭的長度是固定的,所以該域主要被用來計算可變長度的數據部分(又稱爲數據負載)。數據報的最大長度根據操作環境的不同而各異。從理論上說,包含報頭在內的數據報的最大長度爲65535字節。不過,一些實際應用往往會限制數據報的大小,有時會降低到8192字節。
  • 所以會有一個問題 UDP協議首部中有一個16位的最大長度. 也就是說一個UDP能傳輸的數據最大長度是(65535字節)大約64K(包含UDP首部).然而64K在當今的互聯網環境下, 是一個非常小的數字.如果我們需要傳輸的數據超過64K, 就需要在應用層手動的分包, 多次發送, 並在接收端手動拼裝 而手動拆分和拼裝會有很大的BUG風險 這下就不得不使用TCP傳輸(後序講TCP)

校驗值

  • UDP協議使用報頭中的校驗值來保證數據的安全。校驗值首先在數據發送方通過特殊的算法計算得出,在傳遞到接收方之後,還需要再重新計算。如果某個數據報在傳輸過程中被第三方篡改或者由於線路噪音等原因受到損壞,發送和接收方的校驗計算值將不會相符,由此UDP協議可以檢測是否出錯。
  • 介紹一個常用校驗值MD5

其特點就是

  1. 不管數據多長多段 得到的MD5是定長
  2. 由數據計算Md5值很簡單方便 但是由MD5反推數據時幾乎不可能做到的
  3. 數據哪怕只改動了一點點 Md5值的變化就非常大

主要特點

無連接

  • UDP是一個無連接協議,傳輸數據之前源端和終端不建立連接,當它想傳送時就簡單地去抓取來自應用程序的數據,並儘可能快地把它扔到網絡上。在發送端,UDP傳送數據的速度僅僅是受應用程序生成數據的速度、計算機的能力和傳輸帶寬的限制;在接收端,UDP把每個消息段放在隊列中,應用程序每次從隊列中讀一個消息段。
  • 由於傳輸數據不建立連接,因此也就不需要維護連接狀態,包括收發狀態等,因此一臺服務機可同時向多個客戶機傳輸相同的消息

不可靠的

  • 沒有確認機制, 沒有重傳機制; 如果因爲網絡故障就會造成該段無法發到對方, 當然UDP協議層也不會給應用層返回任何錯誤信息
  • 雖然UDP是一個不可靠的協議,但它是分發信息的一個理想協議。例如,在屏幕上報告股票市場、顯示航空信息等等。UDP也用在路由信息協議RIP(Routing Information Protocol)中修改路由表。在這些應用場合下,如果有一個消息丟失,在幾秒之後另一個新的消息就會替換它。UDP廣泛用在多媒體應用中。

面向數據報

  • UDP是面向報文的。發應用層交給UDP多長的報文,UDP在添加首部後就向下交付給下層。既不拆分,也不合並,而是保留這些報文的邊界,因此,應用程序需要選擇合適的報文大小。

如果發送端調用一次sendto, 發送100個字節, 那麼接收端也必須調用對應的一次recvfrom, 接收100個字節; 而不能循環調用10次recvfrom, 每次接收10個字節

  • UDP的緩衝區

UDP沒有真正意義上的 發送緩衝區. 調用sendto會直接交給內核, 由內核將數據傳給網絡層協議進行後續的傳輸動作;
UDP具有接收緩衝區. 但是這個接收緩衝區不能保證收到的UDP報的順序和發送UDP報的順序一致; 如果緩衝區滿了, 再到達的UDP數據就會被丟棄;
所以UDP的socket既能讀, 也能寫, 這個概念叫做 全雙工

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