TCP和UDP對比

我不想学编丿程發表於2024-09-10

TCP和UDP對比

TCP(Transmission Control Protocol,傳輸控制協議)和 UDP(User Datagram Protocol,使用者資料包協議)是兩種常用的網路傳輸層協議,它們在網路通訊中扮演著重要的角色。以下是它們的主要區別:

  1. 連線性

    • TCP:TCP是一種面向連線的協議,在資料傳輸之前需要建立一個連線(三次握手),資料傳輸完成後還需要釋放這個連線(四次揮手)。
    • UDP:是一種無連線的協議。它不建立連線,直接傳送資料,因此沒有建立連線的過程。
  2. 資料完整性

    • TCP:提供資料包的有序交付和錯誤檢測功能。如果資料包丟失或損壞,TCP 會重新傳送資料直到接收方正確接收到所有資料。
    • UDP:不保證資料包的有序交付,也不提供錯誤檢測和重傳機制。如果資料包丟失或損壞,UDP 通常不會採取任何措施。
  3. 速度

    • TCP:由於需要建立連線和保證資料完整性,TCP 通常比 UDP 慢。
    • UDP:因為省去了連線建立和資料完整性檢查的步驟,UDP 通常比 TCP 快。
  4. 流量控制和擁塞控制

    • TCP:TCP具有流量控制機制來防止傳送方傳送資料過快導致接收方無法處理。同時,它還有擁塞控制機制來避免網路擁塞。
    • UDP:沒有內建的流量控制和擁塞控制機制。
  5. 頭部開銷

    • TCP:頭部至少包含 20 位元組的資訊,加上額外的選項和填充,可以達到 60 位元組或更多。
    • UDP:頭部固定為 8 位元組,比 TCP 簡單且開銷小。
  6. 用途

    • TCP:適用於需要可靠傳輸的應用,如網頁瀏覽(HTTP)、檔案傳輸(FTP)、郵件傳輸(SMTP)等。
    • UDP:適用於對實時性要求高的應用,如視訊會議、線上遊戲、DNS 查詢等。
  7. 錯誤恢復

    • TCP:具有錯誤恢復機制,能夠處理資料包的丟失、重複和亂序。
    • UDP:不處理錯誤,如果需要錯誤恢復,必須由應用層來實現。
  8. 資料大小限制

    • TCP:沒有大小限制,但單個資料包大小通常受限於最大傳輸單元(MTU)和路徑 MTU 發現機制。
    • UDP:單個資料包的大小受限於網路的 MTU,通常為 1472 位元組(包括頭部),超過這個大小的資料需要分片。

總結來說,TCP 提供了可靠、有序、錯誤檢測和重傳機制,適合需要保證資料完整性的應用。而 UDP 則提供了快速、簡單的資料傳輸服務,適合對實時性和速度要求高的應用。

TCP傳送資料

TCP是一個面向連線的協議,這意味著在傳送資料之前,需要先建立連線。一旦連線建立,TCP就可以開始傳送資料。不過,TCP的傳送並不是簡單的“直接傳送”,而是經過了一系列複雜的機制來確保資料的可靠傳輸。以下是TCP傳送資料時涉及的一些關鍵機制:

資料傳送前的準備

  1. 序列號和確認號:每個TCP段都有一個序列號(Sequence Number),表示該段資料的第一個位元組的序列號。接收方會透過確認號(Acknowledgment Number)告訴傳送方哪些資料已經被正確接收。
  2. 滑動視窗:TCP使用滑動視窗機制來控制資料的傳送速率,確保接收方能夠處理傳送的資料。傳送方在每次傳送資料時都會附帶一個視窗大小(Window Size),告知接收方還有多少空間可用於接收資料。

傳送資料的過程

  1. 分段:TCP將應用程式提交的資料分割成合適大小的資料段,每個段包含一個TCP頭部和部分資料。
  2. 封裝:每個TCP段會被封裝成一個IP資料包(Datagram),以便在網路層傳輸。
  3. 校驗和:TCP計算並新增一個校驗和欄位,用於檢測資料傳輸過程中的錯誤。
  4. 傳送:封裝後的IP資料包透過網路層傳送到目標地址。

可靠性機制

  1. 確認(ACK):接收方在接收到資料後會傳送一個ACK段給傳送方,確認已經收到了特定序列號的資料。如果傳送方沒有收到確認,它會重傳資料。
  2. 重傳機制:如果傳送方在一定時間內沒有收到ACK確認,它會重傳資料。這個時間被稱為重傳計時器(Retransmission Timeout, RTO),它是基於往返時間(Round-Trip Time, RTT)動態調整的。
  3. 流量控制:TCP使用滑動視窗機制來控制傳送速率,防止傳送方傳送過多資料導致接收方緩衝區溢位。
  4. 擁塞控制:為了避免網路擁塞,TCP實現了擁塞控制演算法,如慢啟動(Slow Start)、擁塞避免(Congestion Avoidance)、快速重傳(Fast Retransmit)和快速恢復(Fast Recovery)。

例子

假設客戶端與伺服器之間有一個TCP連線,並且客戶端要傳送一個請求給伺服器:

  1. 客戶端準備資料:客戶端將HTTP請求資料封裝成一個TCP段,併為該段分配一個序列號。
  2. 傳送資料段:客戶端將TCP段封裝成IP資料包,並透過網路傳送給伺服器。
  3. 接收確認:伺服器接收到資料段後,會檢查資料的完整性,併傳送一個ACK段回給客戶端,確認收到了特定序列號的資料。
  4. 客戶端確認接收:客戶端接收到ACK段後,知道資料已被成功接收。

總結

雖然TCP在建立連線後可以開始傳送資料,但實際上每一次傳送都會涉及到一系列複雜的機制來確保資料的可靠傳輸。這些機制包括序列號和確認號、滑動視窗、校驗和、重傳機制、流量控制和擁塞控制等。這些機制共同作用,使得TCP能夠提供一個高度可靠的傳輸服務。

相關文章