TCP 協議詳解

TCP(Transmission Control Protocol) 傳輸控制協議。服務器

是面向鏈接的,可靠的,基於字節流的傳輸層協議。網絡

一.鏈接創建 spa

TCP是傳輸層協議,使用三次握手協議創建鏈接操作系統

TCP三次握手的過程以下:
  1. 客戶端發送SYN(SEQ=x)報文給服務器端,進入SYN_SEND狀態。
  2. 服務器端收到SYN報文,迴應一個SYN (SEQ=y)ACK(ACK=x+1)報文,進入SYN_RECV狀態。
  3. 客戶端收到服務器端的SYN報文,迴應一個ACK(ACK=y+1)報文,進入Established狀態。
三次握手完成,TCP客戶端和服務器端成功地創建鏈接,能夠開始傳輸數據了

二.確認機制blog

TCP將每一個字節的數據都進行了編號, 即爲序列號。io

每個ACK都帶有對應的確認序列號, 意思是告訴發送者, 我已經收到了哪些數據; 下一次你要從哪裏開始發. class

三.重傳機制服務器端

Linux中(BSD Unix和Windows也是如此), 超時以500ms爲一個單位進行控制, 每次斷定超時重發的超時時間都是500ms的整數倍. im

若是重發一次以後, 仍然得不到應答, 等待 2*500ms 後再進行重傳. 若是仍然得不到應答, 等待 4*500ms 進行重傳.
依次類推, 以指數形式遞增. 累計到必定的重傳次數, TCP認爲網絡異常或者對端主機出現異常, 強制關閉鏈接.數據

四.滑動窗口

窗口大小指的是無需等待確認應答就能夠繼續發送數據的最大值.
操做系統內核爲了維護這個滑動窗口, 須要開闢發送緩衝區來記錄當前還有哪些數據沒有應答 。只有ACK確認應答過的數據, 才能從緩衝區刪掉. 

五.擁塞控制機制

發送開始的時候, 定義擁塞窗口大小爲1;

每次收到一個ACK應答, 擁塞窗口加1;

每次發送數據包的時候, 將擁塞窗口和接收端主機反饋的窗口大小作比較, 取較小的值做爲實際發送的窗口

當TCP開始啓動的時候, 慢啓動閾值等於窗口最大值

在每次超時重發的時候, 慢啓動閾值會變成原來的一半, 同時擁塞窗口置回1

擁塞控制, 歸根結底是TCP協議想盡量快的把數據傳輸給對方, 可是又要避免給網絡形成太大壓力的折中方案.

相關文章
相關標籤/搜索