天天看點

計算機網絡(九):傳輸層之傳輸控制協定——TCP(上)

計算機網絡(九):傳輸層之傳輸控制協定——TCP(上)

一、TCP協定的主要特點

  1. 面向連接配接的傳輸服務

    相比于UDP面向無連接配接的協定,面向連接配接的TCP協定更加可靠,提高系統資料傳輸的可靠性。使用TCP傳送資料之前,需要在源程序端口與目的程序端口之間建立一條傳輸通道。

  2. 面向位元組流的傳輸協定,即支援位元組傳輸

    TCP協定同樣建立在不可靠的網絡層IP協定之上,IP協定不能提供任何可靠性機制,是以TCP的可靠性完全由自己決定。如圖為TCP協定支援位元組流傳輸的過程。

    計算機網絡(九):傳輸層之傳輸控制協定——TCP(上)

    應用程式和TCP每次互動的資料長度可能都不相同,但TCP将送出的資料都看成是一連串的、無結構的位元組流。發送方和接收方都需要使用緩存,發送方使用發送緩存存儲從應用發送來的資料。發送方将幾個寫操作組合成一個封包段,然後送出給IP協定,由IP協定封裝成IP分組後傳輸給接收方。

    接收方IP将接收到的IP分組進行拆分後,将資料字段送出給接收方TCP,TCP将接收的位元組存儲到接收緩存中,應用程式使用讀操作将緩存中的資料讀出。

  3. 支援全雙工服務

    TCP通信在發送資料時順便把确認資訊捎帶傳送。TCP提供全雙工服務,即資料可以在同一時間雙向流動,每一方向TCP都有發送和接收緩沖區,能在雙向發送和接收段。

  4. 支援建立多個并發的TCP連接配接

    TCP協定支援一個伺服器與多個用戶端同時建立多個TCP連接配接,也支援一個用戶端與多個伺服器同時建立多個TCP連接配接。

  5. 支援可靠傳輸服務

    TCP是一種可靠的傳輸服務協定,它使用确認機制檢查資料是否安全、完整地到達,并提供擁塞控制功能。TCP支援可靠資料通信的關鍵是對發送和接收的資料位元組進行跟蹤、确認與重傳。

    TCP協定建立在不可靠的網絡層IP協定之上,一旦IP協定及以下層出現傳輸錯誤,TCP協定隻能進行重傳。

    計算機網絡(九):傳輸層之傳輸控制協定——TCP(上)
    總而言之,TCP協定是面向連接配接、面向位元組流、支援全雙工、支援并發連接配接、提供确認重傳與擁塞控制的可靠傳輸層協定。

二、TCP封包格式

TCP的封包格式如下所示。

計算機網絡(九):傳輸層之傳輸控制協定——TCP(上)

發送序号:TCP是面向位元組流的,是以會為發送位元組流中的每個位元組都按順序編号,發送序号告訴接收端,在這個序列中哪個位元組是該段的第一個位元組。

确認序号:指出接收方希望下一次接收的位元組序号,表示一個程序已經正确接收了序号N之前(不包含N)的位元組,要求發送序号N的位元組的封包段。

報頭長度:TCP報頭長度以4位元組為一個機關進行計算,報頭長度的範圍在20位元組到60位元組之間,是以其值在5到15之間。

控制字段:6種不同的控制位或标記的意義如下圖所示。

計算機網絡(九):傳輸層之傳輸控制協定——TCP(上)
計算機網絡(九):傳輸層之傳輸控制協定——TCP(上)

視窗:定義了對方必須維持的視窗的大小(以位元組為機關)。這個值通常稱為接收視窗,由接收方确定,發送方必須服從接收端的支配。

校驗和:TCP校驗和計算過程和UDP計算過程一緻,都需要加上僞報頭。不同在于,TCP的校驗和的必須的,而UDP的校驗和是可選的。

緊急指針:包含了緊急資料。

選項:TCP頭部有多達40個位元組的可選資訊。

PS:TCP最大段長度(MSS):指的是封包資料部分的最大長度,不包含報頭。

三、TCP連接配接建立與釋放

TCP連接配接包括連接配接建立、封包傳輸與連接配接釋放3個階段。

  1. TCP建立連接配接——三次握手

    TCP建立連接配接的過程被稱為“三次握手”,其示意圖如下所示。

    用戶端發送第一個**“SYN”封包(控制位SYN=1)。“SYN”封包包括源端口号和目的端口号,以及一些連接配接參數。“SYN=1”表示Connection Request。

    伺服器接收到“SYN”封包後,如果同意建立連接配接,向用戶端發送第二個封包“SYN+ACK”封包(控制位SYN=1,ACK=1)**。該封包表示對第一個“SYN”封包請求的确認,同時給出視窗大小。“ACK=1”是為了差別“SYN=1”時表示Connection Request還是Connection Accepted。

    在接收到“SYN+ACK”封包之後,用戶端發送第三個“ACK“封包,表示對“SYN+ACK”封包的确認。

    計算機網絡(九):傳輸層之傳輸控制協定——TCP(上)
  2. TCP連接配接釋放——“四次握手/揮手”(此處講解的是半關閉)

    TCP連接配接的釋放被稱為“四次握手/揮手”,是用戶端主動提出請求的連接配接釋放過程。

    用戶端準備結束一次資料傳輸,主動提出釋放TCP連接配接時,向伺服器發送第一個“FIN”(控制位FIN=1)封包。

    伺服器接收到“FIN”封包後,立即向用戶端發回“ACK”封包,表示對接收第一個“FIN”封包的确認。TCP伺服器程式通知高層應用程式用戶端請求釋放TCP連接配接,這時用戶端已經不會再向伺服器端發送資料(但是可以發送确認),用戶端到伺服器端的TCP連接配接斷開。伺服器到用戶端的TCP連接配接沒有斷開,伺服器在需要的情況下,還可以發送資料給用戶端。

    計算機網絡(九):傳輸層之傳輸控制協定——TCP(上)

    當伺服器沒有要發送的資料時,向用戶端發送“FIN”封包。

    當用戶端接收到“FIN”封包之後,向伺服器發送“ACK”封包,表示對伺服器的“FIN”封包的确認。

  3. 保持定時器和時間等待定時器

    為了保證TCP協定正常運作,TCP設定了4個定時器**:重傳定時器、堅持定時器、保持定時器以及時間等待定時器**。其中保持定時器與時間等待定時器和TCP連結的運作狀态,以及連結釋放中可能存在的問題有關。

    a) 保持定時器

    用于防止TCP連接配接長時間處于空閑狀态。為了解決用戶端可能故障導緻連接配接處于永遠打開狀态,當伺服器接收到用戶端的資訊時,就将定時器複位。如果伺服器超過一定時間沒有接收到用戶端的資訊,就發送探測封包,在發送了10個探測封包還沒有響應的情況下,判斷用戶端故障,斷開連接配接。

    b) 時間等待定時器

    在連接配接終止期間使用的定時器。當TCP關閉一個連接配接時,其并不認為這個連接配接馬上關閉,在時間等待期間,連接配接還處于一種過渡狀态。

更多後續,檢視筆記:計算機網絡(十):傳輸層之TCP(中)

計算機網絡(十一):傳輸層之TCP(下)

參考資料:《計算機網絡教程:自動向下方法》

《計算機網絡與下一代網際網路》

繼續閱讀