TCP/IP 協定與 Internet 網路:第七章 傳輸層協定 上一頁 下一頁
7-5 UDP 通訊協定
Internet 網路除了提供可靠性服務的 TCP 連接外,也提供非連接方式傳輸稱之為『使用者電報傳輸協定』(User Datagram Protocol, UDP)。UDP 傳輸協定比 TCP簡單,沒有連線要求、連線終止、以及流量控制的管理程序。它的優點是傳輸速率較快,主要應用於較少量、即時性傳輸,而對資料正確性的要求較不高(如語音或視訊)的環境下使用。而其缺點則是無法提供正確性較高的資料傳輸。採用 UDP 傳輸可能會有資料重覆、資料未依序到達、資料遺失等等問題,必須由使用者自行解決。但從一方面來思考,Internet 網路上有許多應用系統,它們之間的傳輸量很低,而且需要即時反映訊息,如果採用 TCP 連線反而會浪費許多連結時間,而影響傳輸效率,在這種情況之下使用 UDP 的效率相對應較高,譬如 DNS 伺服系統或 SNMP 協定。因此,可以做一個簡單的結論,再傳輸量比較少或需要及時反映的環境下,使用 UDP 協定傳輸會優於 TCP 協定。但在許多情況下,使用者很難去決定到底應該使用何種協定來傳輸目前的資料,因此,在許多系統在同一傳輸埠口上,提供有 TCP 和 UDP 兩種協定讓使用使者連接,如果使用者的資料不需要分割,也就是說,一個 UDP 封包可以承載的話,那就使用 UDP 協定傳輸,如果需要多筆封包傳輸,則使用 TCP 協定傳輸。
至於一個傳輸層封包可以承載多少訊息,如果以圖 7-2 IP 封包格式計算,一個 IP 封包最大的長度為 65536 Bytes,扣除 IP 封包標頭長度(20 Bytes),再扣除 UDP 封包標頭長度(20 Bytes),則 UDP 所能承載的資料長度為 65496 Bytes,但這是很難達成的網路傳輸環境。一般我們為了 IP 封包在傳輸中避免有再被分段的情形,網路通訊之前都會協議出『最大傳輸單位』(Maximum Transmission Unit, MTU),如果以連結的子網路都是 Ethernet 網路為例 MTU = 1518 Bytes,而 IP 封包最大為 1500 Bytes,則 UDP 封包最大為 1480 Bytes,也表示所傳輸的資料少於 1460 Bytes,則可使用 UDP 協定傳輸,否則必需用 TCP 協定傳輸。也可說是,到底傳輸量少於多少位元組可以用 UDP 協定傳輸,這必需看使用者連結網路的環境,並沒有一個固定的標準。
UDP 封包與 IP 封包之包裝方式如圖 7-2 所示,圖 7-20 為 UDP 封包格式,因其為非連接方式,所以沒有順序號碼、確認號碼和其它控制欄位,而各欄位功能如下:
● 來源埠口(Source Port):發送端之傳輸埠口。
● 目的埠口(Destination Port):接收端之傳輸埠口。
● 長度(Length):該封包所承載資料(Data)的長度。
● 檢查集(Checksum):該封包之錯誤檢查的檢查集。
圖 7-20 UDP 之封包格式
至於『檢查集』欄位的產生就較為複雜,因此,有些應用環境為了提高效率,而將此欄位填入 0,而不使用錯誤檢查的功能。檢查集所檢查的範圍除了 UDP 標頭和所承載的資料外,還包含一些 IP 標頭的欄位,我們將所檢查的欄位組成一個稱之為『虛擬標頭』(Pseudo Header),其內容如下:
● IP Source Address:(4 Bytes)IP 標頭之來源 IP 位址。
● IP Destination Address:(4 Bytes)IP 標頭之目的 IP 位址。
● Protocol:(1 Byte)IP 標頭之協定號碼欄位。
● Length:(2 Bytes)UDP 標頭之長度欄位。
● Padding:(1 Bytes)補滿虛擬標頭成為偶數位元組長度,以方便計算 Checksum。
虛擬標頭的檢查方法是傳送端欲發送資料之前,首先建構虛擬標頭,再計算出檢查集的檢查碼,將其填入 UDP 的檢查集欄位,並捨棄虛擬標頭而不將其傳送過去。接收端收到 UDP 封包後,也再建立虛擬標頭來計算檢查碼,如果所計算出來的檢查碼和檢查集欄位的值相同,便判斷該 UDP 封包沒有發生錯誤。使用虛擬標頭檢查可視為 UDP 封包的雙重保全機制,如果封包在傳遞中發生錯誤,而下層通訊沒有檢查出來,虛擬標頭可以做第二道防線的檢查。