TCP協議要點梳理(一) 三次握手與四次揮手

2021-09-24 13:41:27 字數 1532 閱讀 9942

tcp 協議是傳輸層兩大協議之一,它提供的是面向連線的可靠的資料運輸服務。

為建立連線的雙方(client、server)提供全雙工通訊(雙向同時傳輸)。

而 tcp 涉及連線的機制就是著名的三次握手和四次揮手,三次握手用於建立連線,四次揮手用於釋放連線。

三次握手:建立連線

流程如下

假設客戶端 a 主動去與 伺服器 b 建立連線。

了解了這個流程,相信你也明白了為什麼建立連線的過程被稱為三次握手,實際上就是因為在這個過程當中客戶端與服務端傳送了三次 tcp 報文(不用考慮某些報文失效導致重發的情況,因為真正用於建立連線的就是上述過程中描述的這三個 tcp 報文)

應該注意到,客戶端在傳送確認報文之後就進入了 established (即連線建立)的狀態,而服務端則需要接收到客戶端發來的確認報文才會進入 established 狀態。

q1 :為什麼要有第三次握手?

第三次握手是為了防止失效的連線請求到達伺服器,讓伺服器錯誤開啟連線。

客戶端傳送的連線請求如果在網路中滯留,那麼就會隔很長一段時間才能收到伺服器端發回的連線確認。客戶端等待乙個超時重傳時間之後,就會重新請求連線。但是這個滯留的連線請求最後還是會到達伺服器,如果不進行三次握手,那麼伺服器就會開啟兩個連線。如果有第三次握手,客戶端會忽略伺服器之後傳送的對滯留連線請求的連線確認,不進行第三次握手,因此就不會再次開啟連線。

四次握手:釋放連線

流程如下

假設此時客戶端 a 主動關閉連線。

同三次握手一樣,了解了四次揮手的流程就明白了所謂的四次揮手,實際上就是在釋放連線的過程中,由四個 tcp 報文(不考慮服務端 b 在 close-wait狀態下傳送的其他資料)來控制。

應該注意到,客戶端在傳送確認報文之後進入了 time-wait 的狀態,而服務端在接收到這個確認報文後,直接關閉連線(closed)。

q2 :為什麼要有第四次揮手?

客戶端傳送了 fin 連線釋放報文之後,伺服器收到了這個報文,就進入了 close-wait 狀態。這個狀態是為了讓伺服器端傳送還未傳送完畢的資料,傳送完畢之後,伺服器會傳送 fin 連線釋放報文。

q3 :為什麼客戶端在傳送了確認報文(即第四次揮手)後,不直接關閉連線,而是進入 time - wait 狀態?

客戶端接收到伺服器端的 fin 報文後進入此狀態,此時並不是直接進入 closed 狀態,還需要等待乙個時間計時器設定的時間 2msl。這麼做有兩個理由:

TCP 三次握手梳理

tcp ip協議 三次握手過程 client端發發起連線請求,設定報文頭標誌位syn 1,並傳送乙個資料報seq,seq值為乙個隨機數值j 傳送之後client狀態變成syn send 等待server端確認收到請求及資料 server端收到來自client端的連線請求後設定標誌位ack 1,並傳送...

TCP協議三次握手協議

connecttimeout 指http建立通道的時間,我們知道http底層是基於tcp ip協議的,而tcp協議有個三次握手協議,所謂三次握手簡單的理解為 客戶端問服務端 我要準備給你發資料了,你準備好了麼 服務端向客戶端回答 我準備好了,你可以發資料了 客戶端回答服務端 我收到你的訊息了,我要發...

TCP三次握手協議

摘自 syn攻擊原理以及防範技術 tcp握手協議 在tcp ip協議中,tcp協議提供可靠的連線服務,採用三次握手建立乙個連線。第一次握手 建立連線時,客戶端傳送syn包 syn j 到伺服器,並進入syn send狀態,等待伺服器確認 第二次握手 伺服器收到syn包,必須確認客戶的syn ack ...