通訊網路/TCP 和 UDP 協議/UDP
與 TCP 不同,UDP 在傳送資料之前不會建立連線,它只是傳送。正因為如此,UDP 被稱為“無連線”。UDP 資料包通常被稱為“資料報”。DNS 服務就是一個 UDP 在實際應用中的例子。DNS 伺服器使用 UDP 傳送和接收 DNS 請求。
在本節中,我們必須瞭解使用者資料報協議。它是一個傳輸層協議。本節將涵蓋 UDP 協議、其報頭結構以及它建立網路連線的方式。
如圖 1 所示,使用者資料報協議 (UDP) 是一種支援網路應用程式的傳輸層協議。它位於“會話”層下方,在開放式系統互聯模型 (OSI) 中位於 IP(網際網路協議)之上。這種協議類似於 TCP(傳輸控制協議),後者用於視訊會議系統等客戶端/伺服器程式,但 UDP 是無連線的。
圖 1:OSI 層模型中的 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 使用的埠列表
它包含四個部分:源埠、目標埠、長度和校驗和。
圖 6:UDP 報頭
源埠
源埠是一個可選欄位。如果使用,它表示傳送程序的埠,並且可以假設它是回覆應傳送到的埠,前提是在沒有其他資訊的情況下。如果未使用,則插入值為零。
目標埠
它是傳送資料的埠號。
長度
它包括 UDP 報頭和資料的長度。
此使用者資料報的長度(以八位位元組為單位),包括此報頭和資料。長度的最小值為八。
校驗和
校驗和的主要目的是錯誤檢測。它保證訊息到達了正確的目的地。為了驗證校驗和,接收方必須從 IP 報頭中提取該欄位。使用 12 位元組的偽報頭來計算校驗和。
資料
它是應用程式資料或實際訊息。
Ethereal 抓包
可以使用 Ethereal 抓包檢視 UDP 資料包。下面捕獲並顯示了一個這樣的 UDP 資料包。
圖 7:Ethereal 抓包
在 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







