TCP/IP 協定與 Internet 網路:第七章 傳輸層協定  上一頁           下一頁

 

翻轉工作室:粘添壽

 

7-5 UDP 通訊協定

        Internet 網路除了提供可靠性服務的 TCP 連接外,也提供非連接方式傳輸稱之為『使用者電報傳輸協定』(User Datagram Protocol, UDPUDP 傳輸協定比 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 Address4 BytesIP 標頭之來源 IP 位址。

IP Destination Address4 BytesIP 標頭之目的 IP 位址。

Protocol1 ByteIP 標頭之協定號碼欄位。

Length2 BytesUDP 標頭之長度欄位。

Padding1 Bytes)補滿虛擬標頭成為偶數位元組長度,以方便計算 Checksum

        虛擬標頭的檢查方法是傳送端欲發送資料之前,首先建構虛擬標頭,再計算出檢查集的檢查碼,將其填入 UDP 的檢查集欄位,並捨棄虛擬標頭而不將其傳送過去。接收端收到 UDP 封包後,也再建立虛擬標頭來計算檢查碼,如果所計算出來的檢查碼和檢查集欄位的值相同,便判斷該 UDP 封包沒有發生錯誤。使用虛擬標頭檢查可視為 UDP 封包的雙重保全機制,如果封包在傳遞中發生錯誤,而下層通訊沒有檢查出來,虛擬標頭可以做第二道防線的檢查。

 

 

<GOTOP>