計算機網路之六:UDP協議

百聯達發表於2018-09-19

一.UDP協議簡介

UDP是User Datagram Protocol的簡稱,中文名是使用者資料包協議,是OSI參考模型中的傳輸層協議,它是一種無連線的傳輸層協議,提供面向事務的簡單不可靠資訊傳送服務。 

UDP傳輸與IP傳輸非常類似。你可以將UDP協議看作IP協議暴露在傳輸層的一個介面。UDP協議同樣以資料包的方式傳輸,它的傳輸方式也是"Best Effort"的,所以UDP協議也是不可靠的。

那麼,我們為什麼不直接使用IP協議而要額外增加一個UDP協議呢? 一個重要的原因是IP協議中並沒有埠(port)的概念。IP協議進行的是IP地址到IP地址的傳輸,這意味者兩臺計算機之間的對話。但每臺計算機中需要有多個通訊通道,並將多個通訊通道分配給不同的程式使用

一個埠就代表了這樣的一個通訊通道。

UDP只在IP的資料包服務之上增加了一點的功能,這就是複用和分用的功能以及差錯檢測的功能,UDP的主要特定是:

1.UDP是無連線的,即傳送資料之前不需要建立連線,因此減少了開銷和傳送資料之前的時延。

2.UDP使用盡最大努力交付,即不保證可靠交付,因此主機不需要維持複雜的連線狀態表

3.UDP是面向報文的。傳送方的UDP對應程式交下來的報文,在新增首部後就向下交付IP層。UDP對應用層交下來的報文既不合並也不拆分,而是保留這些報文的邊界。

4.UDP沒有擁塞控制

5.UDP支援一對一,一對多,多對一和多對多交換通訊。

6.UDP的首部開銷小,只有8個位元組,比TCP的20個位元組的首部要短。

二.UDP協議頭部

UDP報頭由4個部分組成:

1.各16bit的來源埠和目的埠用來標記傳送和接受的應用程式。因為UDP不需要應答,所以來源埠是可選的,如果來源埠不用,那麼置為零。

當運輸層從IP層收到UDP資料包時,就是根據首部中的目的埠,把UDP資料包透過相應的埠,上交最後的終點--應用程式。

如果接收方UDP發現收到的報文中的目的埠號不正確,就會丟棄改報文,並由網際控制協議ICMP傳送“埠不可達”差錯報文給傳送方。

ICMP應用Traceroute,就是讓傳送的UDP使用者資料包故意使用一個非法的UDP埠,結果ICMP返回“埠不可達”差錯報文,因而達到了測試的目的。

2.在目的埠後面是長度固定的以位元組為單位的報文長度域,用來指定UDP資料包包括資料部分的長度,長度最小值為8byte。

3.首部剩下地16bit是用來對首部和資料部分一起做校驗和(Checksum)的,這部分是可選的,但在實際應用中一般都使用這一功能。

4.UDP和TCP的校驗和都覆蓋到了他們的首部和資料,而之前介紹的IP首部的校驗和只覆蓋了IP首部。

三:埠與Socket

埠(port)是伴隨著傳輸層誕生的概念。它可以將網路層的IP通訊分送到各個通訊通道。UDP協議和TCP協議儘管在工作方式上有很大的不同,但它們都建立了從一個埠到另一個埠的通訊。

隨著我們進入傳輸層,我們也可以呼叫作業系統中的API,來構建socket。Socket是作業系統提供的一個程式設計介面,它用來代表某個網路通訊。應用程式透過socket來呼叫系統核心中處理網路協議的模組,而這些核心模組會負責具體的網路協議的實施。這樣,我們可以讓核心來接收網路協議的細節,而我們只需要提供所要傳輸的內容就可以了,核心會幫我們控制格式,並進一步向底層封裝。因此,在實際應用中,我們並不需要知道具體怎麼構成一個UDP包,而只需要提供相關資訊(比如IP地址,比如埠號,比如所要傳輸的資訊),作業系統核心會在傳輸之前會根據我們提供的相關資訊構成一個合格的UDP包(以及下層的包和幀)。

四.UDP協議使用場景

1.需要資源少,在網路情況比較好的內網,或者對於丟包不敏感的應用。如DHCP協議就是基於UDP的。一般的獲取IP地址都是內網請求,而且一次獲取不到IP又沒事。

2.不需要一對一溝通,建立連線,而是可以廣播的應用。DHCP就是一種廣播的形式。VXLAN也是需要用到組播,也是基於UDP協議的。

3.需要處理速度快,時延低,可以容忍少數丟包,但是要求即便網路擁塞,也毫不退縮,一往無前的時候。

4.QUIC是Google提出的一種基於UDP改進的通訊協議,其目的是降低網路通訊的延遲,提供更好的使用者互動體驗。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/28624388/viewspace-2214457/,如需轉載,請註明出處,否則將追究法律責任。

相關文章