TCP與UDP的差異:連線、可靠性、順序、壅塞控制、標頭、延遲與用途比較
TCP與UDP都是在IP之上運作的傳輸層協定,並以連接埠號碼區分應用程式。TCP在傳送資料前,先以三向交握建立連線,以確認應答(ACK)確認是否送達,重傳遺失的資料,並依送出的順序交給接收端的應用程式。它也會配合接收端緩衝區的剩餘空間(流量控制)與網路的壅塞(壅塞控制)調整傳送量。UDP不做這些事,只是把資料以資料包的形式直接送出,因此標頭小,傳送前也不需要等待。重視確實送達時用TCP;重視不延遲,且必要的處理由應用程式端負責時用UDP。
| 項目 | TCP | UDP |
|---|---|---|
| 建立連線 | 連線導向。在三向交握(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 |
數值為具代表性的大致參考值,會因世代或產品而異。