跳轉到內容

通訊網路/TCP 和 UDP 協議/UDP

來自華夏公益教科書

與 TCP 不同,UDP 在傳送資料之前不會建立連線,它只是傳送。正因為如此,UDP 被稱為“無連線”。UDP 資料包通常被稱為“資料報”。DNS 服務就是一個 UDP 在實際應用中的例子。DNS 伺服器使用 UDP 傳送和接收 DNS 請求。

在本節中,我們必須瞭解使用者資料報協議。它是一個傳輸層協議。本節將涵蓋 UDP 協議、其報頭結構以及它建立網路連線的方式。

如圖 1 所示,使用者資料報協議 (UDP) 是一種支援網路應用程式的傳輸層協議。它位於“會話”層下方,在開放式系統互聯模型 (OSI) 中位於 IP(網際網路協議)之上。這種協議類似於 TCP(傳輸控制協議),後者用於視訊會議系統等客戶端/伺服器程式,但 UDP 是無連線的。

圖 1:OSI 層模型中的 UDP

什麼是 UDP?

[編輯 | 編輯原始碼]

'圖 2:UDP


UDP 是一種無連線且不可靠的傳輸協議。兩個埠用於識別源和目標機器中的端點。當不需要可靠交付時,使用者資料報協議用於代替 TCP。但是,UDP 永遠不會用於傳送諸如網頁、資料庫資訊等重要資料。影片、音訊等流媒體使用 UDP,因為它提供了速度。

為什麼 UDP 比 TCP 快?

UDP 比 TCP 快的原因是它沒有進行任何形式的流量控制。UDP 不執行錯誤檢查、錯誤更正或確認。UDP 只關注速度。因此,當透過網際網路傳送的資料受到衝突和錯誤影響時,就會出現錯誤。


UDP 資料包稱為使用者資料報,具有 8 位元組的報頭。使用者資料報的格式如圖 3 所示。在使用者資料報中,前 8 位元組包含報頭資訊,其餘位元組包含資料。

圖 3:UDP 資料報

源埠號:這是傳輸資料的源主機使用的埠號。它是一個 16 位長。因此埠號範圍從 0 到 65,535。

目標埠號:這是接收資料的目標主機使用的埠號。它也是 16 位長,並且與源主機具有相同的埠號範圍。

長度:長度欄位是一個 16 位欄位。它包含使用者資料報的總長度,包括報頭和資料。

校驗和:UDP 校驗和是可選的。它用於檢測資料錯誤。如果該欄位為零,則不計算校驗和。如果計算出真正的校驗和,則該欄位包含 1。

UDP 的特點

UDP 的特點如下所示。

• 端到端。UDP 可以識別計算機上執行的特定程序。

• 不可靠的無連線交付(例如,美國郵政服務):

UDP 使用無連線的通訊設定。在這種情況下,UDP 在傳送資料之前不需要建立連線。通訊僅由資料段本身組成。

• 與 IP 相同的盡力而為語義

• 沒有確認、沒有序號、沒有流量控制

• 易受丟失、重複、延遲、亂序或連線丟失的影響

• 快速、開銷低

1. 適合可靠的本地網路

2. RTP(即時傳輸協議)

埠在通訊中的使用

[編輯 | 編輯原始碼]

收到資料後,計算機必須有一些機制來決定如何處理這些資料。假設使用者打開了三個應用程式,例如一個 Web 瀏覽器、一個 telnet 會話和一個 FTP 會話。所有三個應用程式都在透過網路移動資料。因此,應該有一些機制可以讓作業系統確定哪些流量對應於哪些應用程式。為了處理這種情況,使用了網路埠。可用埠範圍為 0 到 65535。其中,0 到 1023 是眾所周知的埠,1023 到 49151 是註冊埠,49152 到 65535 是動態埠。


圖 4:埠

UDP 使用的眾所周知的埠列表

圖 5:UDP 使用的埠列表

UDP 報頭結構

[編輯 | 編輯原始碼]

它包含四個部分:源埠、目標埠、長度和校驗和。

圖 6:UDP 報頭

源埠

源埠是一個可選欄位。如果使用,它表示傳送程序的埠,並且可以假設它是回覆應傳送到的埠,前提是在沒有其他資訊的情況下。如果未使用,則插入值為零。

目標埠

它是傳送資料的埠號。

長度

它包括 UDP 報頭和資料的長度。

此使用者資料報的長度(以八位位元組為單位),包括此報頭和資料。長度的最小值為八。

校驗和

校驗和的主要目的是錯誤檢測。它保證訊息到達了正確的目的地。為了驗證校驗和,接收方必須從 IP 報頭中提取該欄位。使用 12 位元組的偽報頭來計算校驗和。

資料

它是應用程式資料或實際訊息。


Ethereal 抓包

可以使用 Ethereal 抓包檢視 UDP 資料包。下面捕獲並顯示了一個這樣的 UDP 資料包。

圖 7:Ethereal 抓包

UDP 中的通訊

[編輯 | 編輯原始碼]

在 UDP 連線中,客戶端根據他們啟動連線的程式設定唯一的源埠號。UDP 不限於一對一的互動。可以使用廣播或組播定址提供一對多的互動。多個客戶端與單個伺服器通訊可以提供多對一的互動。多對多互動只是這些技術的擴充套件。

UDP 校驗和和偽報頭

[編輯 | 編輯原始碼]

UDP 校驗和的主要目的是檢測傳輸段中的錯誤。

UDP 校驗和是可選的,但應始終開啟。

為了計算 UDP 校驗和,會將“偽報頭”新增到 UDP 報頭中。偽報頭中的欄位都取自 IP 報頭。它們在接收方系統中用於確保 IP 資料報被正確的計算機接收。通常,偽報頭包括

圖 8:UDP 偽報頭

IP 源地址 4 位元組

IP 目標地址 4 位元組

協議 2 位元組

UDP 長度 2 位元組

校驗和計算

[編輯 | 編輯原始碼]

傳送方

1. 將段內容視為一系列 16 位整數。

2. 將所有段相加。我們稱之為 sum。

3. 校驗和:sum 的 1 的補碼。(在 1 的補碼中,所有 0 都轉換為 1,所有 1 都轉換為 0)。

4. 傳送方將此校驗和值放入 UDP 校驗和欄位中。

接收方

1. 計算校驗和

2. 將所有段相加,然後將 sum 加到傳送方的校驗和中。

3. 檢查校驗和中是否包含任何 0 位。如果接收方的校驗和包含任何 0,則檢測到錯誤。因此,接收方將丟棄該資料包。


這裡我們解釋一個簡單的校驗和計算。例如,假設我們有位元流 0110011001100110 0110011001100110 0000111100001111

此位元流被分成 16 位整數段。

因此,它看起來像這樣

0110011001100110(16 位整數段)

0101010101010101

0000111100001111

上述第一個 16 位字的總和為

0110011001100110

0101010101010101


1011101110111011

將第三個字新增到上述總和中得到

1011101110111011

0000111100001111


1100101011001010(所有段的總和)

現在,要計算校驗和,取 sum 的 1 的補碼。正如我之前提到的,1 的補碼是透過將所有 1 轉換為 0,將所有 0 轉換為 1 來實現的。因此,傳送方側的校驗和為:0011010100110101。

現在,在接收方,再次將所有段相加。然後將 sum 加到傳送方的校驗和中。

如果沒有錯誤,則接收方的校驗和將為:1111111111111111。

如果報頭中存在任何 0 位,則校驗和存在錯誤。因此,該資料包將被丟棄。

你可能想知道為什麼 UDP 在第一位提供校驗和,因為許多鏈路層協議(包括流行的乙太網協議)也提供錯誤檢查?原因是,沒有保證源和目標之間所有鏈路都提供錯誤檢查——其中一個鏈路可能使用不提供錯誤檢查的協議。由於 IP 應該在幾乎所有 2 層協議上執行,因此對於傳輸層來說,將錯誤檢查作為安全措施非常有用。雖然 UDP 提供了錯誤檢查,但它不會做任何事情來從錯誤中恢復。一些 UDP 實現只是丟棄損壞的分段;另一些將損壞的分段與警告一起傳遞給應用程式。

摘要

[edit | edit source]

UDP 是一種傳輸層協議。UDP 是一種無連線且不可靠的協議。UDP 不會進行流量控制、錯誤控制或重傳壞分段。UDP 比 TCP 快。UDP 通常用於流式音訊和影片。UDP 從未使用於重要的文件,如網頁、資料庫資訊等。UDP 傳輸的分段包含一個 8 位元組的報頭。它包含源埠、目標埠、UDP 長度和校驗和。UDP 校驗和用於檢測傳輸分段中的“錯誤”。

練習題

[edit | edit source]

1. 計算以下序列的 UDP 校驗和:11100110011001101101010101010101。

答案:要計算校驗和,請遵循以下步驟

       1. First of all divide the bit stream on to two parts of 16-bit each.
          The two bit streams will be  1110011001100110  and  1101010101010101.
      
       2. Add these two bit streams, so the addition will be: 
  
              1 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0
              1 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1
             ----------------------------------
            1 1 0 1 1 1 0 1 1 1 0 1 1 1 0 1 1  
              1 0 1 1 1 0 1 1 1 0 1 1 1 1 0 0   
                         
       3. Now apply one's complement to this bit stream. One's complement is achieved by converting all 1s into 0s and all 0s into 1s.
          So, the checksum will be : 0100010001000011.


2. 將校驗和欄位關閉的優勢是什麼?何時適合將校驗和欄位關閉?

答案

           By keeping checksum field turned off, this might save computational load and speed up data transfer.
           When we are transmitting data over wide area network(WAN), it is not a good idea to keep checksum off.
           We can keep checksum turned off when we are transmitting data over a Local Area Network(LAN),because switching infrastructure   
           would catch transmission error in the Ethernet protocol's checksum
華夏公益教科書