傳輸控制協議



傳輸控制協議 (TCP) 是網際網路協議套件中最重要的協議之一。它是網際網路等通訊網路中資料傳輸最廣泛使用的協議。

特性

  • TCP 是一個可靠的協議。也就是說,接收方總是向傳送方傳送肯定或否定的資料包確認,以便傳送方始終清楚地知道資料包是否到達目的地,或者是否需要重新發送。

  • TCP 確保資料按傳送順序到達預期目的地。

  • TCP 是面向連線的。TCP 要求在傳送實際資料之前建立兩個遠端點之間的連線。

  • TCP 提供錯誤檢查和恢復機制。

  • TCP 提供端到端通訊。

  • TCP 提供流量控制和服務質量。

  • TCP 在客戶端/伺服器點對點模式下執行。

  • TCP 提供全雙工服務,即它可以同時扮演接收方和傳送方的角色。

報頭

TCP 報頭的長度至少為 20 位元組,最多為 60 位元組。

TCP Header
  • 源埠 (16 位) - 它標識傳送裝置上應用程式程序的源埠。

  • 目標埠 (16 位) - 它標識接收裝置上應用程式程序的目標埠。

  • 序列號 (32 位) - 會話中段的資料位元組的序列號。

  • 確認號 (32 位) - 當 ACK 標誌設定為 1 時,此數字包含預期資料位元組的下一個序列號,並作為對先前接收到的資料的確認。

  • 資料偏移 (4 位) - 此欄位表示 TCP 報頭的大小(32 位字)以及當前資料包在整個 TCP 段中的資料偏移量。

  • 保留 (3 位) - 保留供將來使用,預設情況下全部設定為零。

  • 標誌 (每位 1 位)

    • NS - 隨機數和位用於顯式擁塞通知信令過程。

    • CWR - 當主機接收到帶有 ECE 位設定的資料包時,它會設定擁塞視窗減少以確認已收到 ECE。

    • ECE - 它有兩個含義

      • 如果 SYN 位清除為 0,則 ECE 表示 IP 資料包的 CE(擁塞體驗)位已設定。

      • 如果 SYN 位設定為 1,則 ECE 表示該裝置具有 ECT 功能。

    • URG - 它表示緊急指標欄位具有重要資料,應予處理。

    • ACK - 它表示確認欄位具有意義。如果 ACK 清除為 0,則表示資料包不包含任何確認。

    • PSH - 設定時,它請求接收站將資料(一旦到達)推送到接收應用程式,而無需對其進行緩衝。

    • RST - 重置標誌具有以下功能

      • 用於拒絕傳入連線。

      • 用於拒絕段。

      • 用於重新啟動連線。

    • SYN - 此標誌用於建立主機之間的連線。

    • FIN - 此標誌用於釋放連線,此後不再交換資料。因為帶有 SYN 和 FIN 標誌的資料包具有序列號,所以它們按正確的順序進行處理。

  • 視窗大小 - 此欄位用於兩個站之間的流量控制,並指示接收方為段分配的緩衝區大小(以位元組為單位),即接收方預期接收多少資料。

  • 校驗和 - 此欄位包含報頭、資料和偽報頭的校驗和。

  • 緊急指標 - 如果 URG 標誌設定為 1,它指向緊急資料位元組。

  • 選項 - 它提供了常規報頭未涵蓋的其他選項。選項欄位始終以 32 位字描述。如果此欄位包含少於 32 位的資料,則使用填充來覆蓋剩餘位以達到 32 位邊界。

定址

兩個遠端主機之間的 TCP 通訊是透過埠號 (TSAP) 完成的。埠號的範圍為 0-65535,分為:

  • 系統埠 (0-1023)
  • 使用者埠 (1024-49151)
  • 專用/動態埠 (49152-65535)

連線管理

TCP 通訊在伺服器/客戶端模型中工作。客戶端啟動連線,伺服器接受或拒絕它。三向握手用於連線管理。

TCP Handshake

建立

客戶端啟動連線併發送帶有序列號的段。伺服器用自己的序列號和客戶端段的 ACK(比客戶端序列號大 1)進行確認。客戶端在收到其段的 ACK 後,傳送對伺服器響應的確認。

釋放

伺服器和客戶端都可以傳送帶有 FIN 標誌設定為 1 的 TCP 段。當接收端透過 ACKnowledging FIN 進行響應時,TCP 通訊的方向關閉,連線釋放。

頻寬管理

TCP 使用視窗大小的概念來適應頻寬管理的需求。視窗大小告訴遠端端的傳送方,此端的接收方可以接收多少個數據位元組段。TCP 透過使用視窗大小 1 來使用慢啟動階段,並在每次成功通訊後成倍增加視窗大小。

例如,客戶端使用視窗大小 2 併發送 2 個位元組的資料。當收到此段的確認時,視窗大小加倍到 4,接下來發送的段將包含 4 個數據位元組。當收到 4 位元組資料段的確認時,客戶端將視窗大小設定為 8,依此類推。

如果錯過確認,即資料在傳輸網路中丟失或收到 NACK,則視窗大小減半,慢啟動階段重新開始。

差錯控制和流量控制

TCP 使用埠號來知道需要將資料段交給哪個應用程式程序。除此之外,它還使用序列號與遠端主機同步。所有資料段都帶有序列號進行傳送和接收。傳送方在收到 ACK 時知道接收方收到了哪個最後一個數據段。接收方透過參考最近接收到的資料包的序列號來了解發送方傳送的最後一個段。

如果最近接收到的段的序列號與接收方預期的序列號不匹配,則將其丟棄併發送 NACK。如果兩個段到達時序列號相同,則比較 TCP 時間戳值以做出決定。

多路複用

將兩個或多個數據流組合到一個會話中的技術稱為多路複用。當 TCP 客戶端與伺服器初始化連線時,它始終引用一個定義明確的埠號,該埠號指示應用程式程序。客戶端本身使用從專用埠號池中隨機生成的埠號。

使用 TCP 多路複用,客戶端可以在單個會話中與許多不同的應用程式程序通訊。例如,客戶端請求一個網頁,該網頁反過來包含不同型別的資料(HTTP、SMTP、FTP 等),TCP 會話超時增加,會話保持開啟更長時間,從而避免三向握手開銷。

這使客戶端系統能夠透過單個虛擬連線接收多個連線。如果超時時間過長,這些虛擬連線對伺服器不利。

擁塞控制

當向無法處理的大量資料饋送到系統時,就會發生擁塞。TCP 透過視窗機制來控制擁塞。TCP 設定視窗大小,告訴另一端傳送多少個數據段。TCP 可能使用三種演算法進行擁塞控制

  • 加性增加,乘性減少

  • 慢啟動

  • 超時反應

定時器管理

TCP 使用不同型別的定時器來控制和管理各種任務

保活定時器

  • 此定時器用於檢查連線的完整性和有效性。

  • 當保活時間到期時,主機發送探測以檢查連線是否仍然存在。

重傳定時器

  • 此定時器維護已傳送資料的 stateful 會話。

  • 如果在重傳時間內未收到已傳送資料的確認,則再次傳送資料段。

持久定時器

  • TCP 會話可以由任一主機透過傳送視窗大小 0 來暫停。

  • 要恢復會話,主機需要傳送視窗大小,且值需要更大。

  • 如果此段從未到達另一端,則兩端都可能無限期地等待對方。

  • 當持久計時器超時時,主機重新發送其視窗大小以告知另一端。

  • 持久計時器有助於避免通訊死鎖。

計時等待

  • 釋放連線後,任一主機都會等待一段時間(計時等待時間)以完全終止連線。

  • 這是為了確保另一端已收到其連線終止請求的確認。

  • 計時等待時間最長可達 240 秒(4 分鐘)。

崩潰恢復

TCP 是一種非常可靠的協議。它為每個傳送的分段中的每個位元組提供序列號。它提供反饋機制,即當主機接收到資料包時,它必須確認該資料包(如果它不是最後一個分段),幷包含預期的下一個序列號。

當 TCP 伺服器在通訊過程中崩潰並重新啟動其程序時,它會向所有主機發送 TPDU 廣播。然後,主機可以傳送從未確認的最後一個數據段並繼續進行。

廣告