TCP與UDP的差異:連線、可靠性、順序、壅塞控制、標頭、延遲與用途比較

TCP與UDP都是在IP之上運作的傳輸層協定,並以連接埠號碼區分應用程式。TCP在傳送資料前,先以三向交握建立連線,以確認應答(ACK)確認是否送達,重傳遺失的資料,並依送出的順序交給接收端的應用程式。它也會配合接收端緩衝區的剩餘空間(流量控制)與網路的壅塞(壅塞控制)調整傳送量。UDP不做這些事,只是把資料以資料包的形式直接送出,因此標頭小,傳送前也不需要等待。重視確實送達時用TCP;重視不延遲,且必要的處理由應用程式端負責時用UDP。

項目TCPUDP
建立連線連線導向。在三向交握(SYN → SYN+ACK → ACK)之後才傳送資料,因此一開始有1個往返(RTT)的等待非連線式。不需任何程序,可立即傳送資料
確認送達與重傳以確認應答(ACK)確認。以重傳逾時或重複ACK判斷遺失並重傳不確認也不重傳。遺失的資料就此遺失
順序以序號重新排列,依送出的順序交付,也會去除重複依抵達的順序交付。可能發生順序對調或重複
資料的分界當作沒有分界的位元組序列(位元組串流)處理。訊息的分界由應用程式決定每次傳送成為一個資料包,保留訊息的分界
流量控制與壅塞控制有。以接收視窗避免接收端緩衝區溢出,以壅塞視窗配合壅塞改變傳送量無。必要時由應用程式端調整傳送速度
標頭大小無選項時20位元組(含選項最多60位元組)8位元組(來源與目的地連接埠號碼、長度、檢查碼)
延遲建立連線需要1個往返。發生遺失時,在重傳到達前,後面的資料也必須等待沒有建立連線的程序,也不必等待重傳,延遲小。但資料可能有缺漏
目的地的種類只有一對一(單播)除了一對一,也能用於廣播與群播
主要用途以HTTP/1.1、HTTP/2進行的Web、使用HTTP的影片傳送、電子郵件(SMTP)、SSH、檔案傳輸DNS查詢、DHCP、語音通話與直播影像等即時通訊、線上遊戲、HTTP/3使用的QUIC

數值為具代表性的大致參考值,會因世代或產品而異。

適用於什麼情況

TCP
資料缺漏或順序對調會造成問題時。是網頁、檔案、電子郵件、資料庫連線等大多數應用程式的標準。
UDP
寧可少量遺失也不要延遲的即時通訊,或只需一次查詢與回應的簡短交換。想以廣播或群播傳送時,或像QUIC那樣由應用程式端自行建立可靠性機制時,也會使用。

常見問題

UDP的可靠性低,是不是不該使用?

要看用途。UDP不做的是確認送達與重傳、順序管理以及傳送量的調整。在不需要這些功能,或想由應用程式端以適合自己的方式處理時,UDP就很合適。例如在語音通話中,延遲抵達的聲音已經沒有用處,與其等待重傳,不如繼續往下進行。不過,以UDP傳送大量資料的應用程式,必須自行調整傳送速度,以免造成網路壅塞。

QUIC為什麼建構在UDP之上?

QUIC(RFC 9000)是整合重傳、順序管理、壅塞控制與TLS 1.3加密的傳輸協定。若直接在IP之上建立新的協定,往往無法通過途中的NAT或防火牆,也必須等待作業系統支援。建構在UDP之上,就能直接通過現有的網路,並在應用程式端實作與更新。HTTP/3就在QUIC之上運作。

DNS只使用UDP嗎?

一般的名稱查詢使用UDP的53號連接埠,以一次查詢與回應完成。不過,回應太大而無法以UDP送完時,以及進行區域傳送時,會使用TCP。DNS的實作也被要求必須支援TCP(RFC 7766)。

TCP的流量控制與壅塞控制有什麼不同?

流量控制是避免接收端緩衝區溢出的機制,由接收端以接收視窗告知剩餘空間。壅塞控制是避免途中網路壅塞的機制,由傳送端從封包遺失等推測壅塞,增減壅塞視窗。實際可傳送的量,由這兩個視窗中較小者決定。

理解度檢測

在TCP/IP的四層模型中,TCP與UDP屬於哪一層?

  1. A應用層
  2. B網際網路層
  3. C傳輸層
查看答案與解析

正確答案:C. 傳輸層

TCP/IP模型由下而上分為連結層(網路介面層)、網際網路層、傳輸層、應用層4層。TCP與UDP是傳輸層的協定,使用連接埠號碼區分通訊是要送給終端上的哪一個應用程式。網際網路層的IP負責把封包從一台終端送到另一台終端。HTTP與DNS則是應用層的協定。若與OSI參考模型對應,傳輸層相當於第4層,網際網路層相當於第3層。

下列關於UDP特徵的敘述,何者正確?

  1. A不建立連線,也不控制重傳與順序,因此標頭小,傳送前也不需等待
  2. B會建立連線,重傳未送達的資料,並在接收端整理順序
  3. C不使用IP位址,只用MAC位址把資料送到目的地終端
查看答案與解析

正確答案:A. 不建立連線,也不控制重傳與順序,因此標頭小,傳送前也不需等待

UDP是在IP之上只加入連接埠號碼與簡單錯誤偵測(檢查碼)的輕量協定,標頭為8位元組(TCP在無選項時為20位元組)。它沒有建立連線的程序,也不確認是否送達、不重傳,因此用於寧可少量遺失也不要延遲的語音通話與直播影像,以及只需一次查詢與回應的DNS等。若需要可靠性,則由應用程式端補足。例如HTTP/3使用的QUIC,就是在UDP之上實作重傳與加密。建立連線、重傳、控制順序是TCP的工作。

在建立TCP連線的三向交握中,交換封包的順序下列何者正確?

  1. ASYN → ACK → FIN
  2. BACK → SYN → SYN+ACK
  3. CSYN → SYN+ACK → ACK
查看答案與解析

正確答案:C. SYN → SYN+ACK → ACK

三向交握中,首先由用戶端以SYN請求連線,並告知自己要傳送之資料的起始編號(初始序號)。伺服器以SYN+ACK確認(ACK)已收到,同時告知自己的初始序號。最後用戶端回傳ACK,雙向通訊便準備就緒。透過三次交換確認雙方向的序號,可防止延遲抵達的舊封包等造成錯誤的連線。因此,TCP在開始傳送資料之前至少需要一個往返時間(RTT)。FIN用於結束連線。

  1. 在TCP的流量控制中,接收端向傳送端通知視窗大小(接收視窗)的目的,下列何者正確?
  2. 下列關於TCP壅塞控制之基本概念的敘述,何者正確?
  3. TCP的傳送端判斷區段遺失而重傳的時機,下列何者正確?

前往電腦網路基礎的練習題

相關名詞的解說

三向交握
建立TCP連線的程序。以用戶端的SYN、伺服器的SYN+ACK、用戶端的ACK三次交換,彼此確認對方的初始序號。
連接埠號碼
TCP與UDP用來區分通訊要給終端上哪一個應用程式的0~65535編號。HTTP的80、HTTPS的443、DNS的53等0~1023的編號稱為知名連接埠。
OSI參考模型
把通訊功能分為實體層、資料連結層、網路層、傳輸層、會議層、表現層、應用層7層來整理的模型。用來作為分別思考各層角色的共通語言。
DNS(網域名稱系統)
把 www.example.com 這類網域名稱與通訊所用的IP位址對應起來、由全世界的伺服器分散管理的機制。
DHCP
Dynamic Host Configuration Protocol(動態主機設定協定)。為連上網路的終端,自動且有期限地分配IP位址、子網路遮罩、預設閘道、DNS伺服器等設定的協定。
TLS
Transport Layer Security(傳輸層安全性協定)。進行通訊加密、竄改偵測,以及以憑證驗證伺服器的協定。HTTPS是以TLS保護的HTTP。
HTTP(超文字傳輸協定)
在網頁瀏覽器與網頁伺服器等之間,交換HTML、影像與資料的應用層協定。用戶端送出由方法、URL、標頭、本文組成的請求,伺服器回傳由狀態碼、標頭、本文組成的回應。作為協定是無狀態的,登入等狀態要用Cookie等方式維持。HTTP/1.1使用文字格式與持續連線,HTTP/2在一條TCP連線上多工傳送多個串流,HTTP/3則使用UDP之上的QUIC。以TLS保護的HTTP稱為HTTPS。

相關的比較