TCP 四次揮手

2022-08-16 15:18:17 字數 989 閱讀 8572

所謂的四次揮手即 tcp 連線的釋放(解除)。資料傳輸完畢後,雙方都可釋放連線。最開始的時候,客戶端和伺服器都是處於 established 狀態,然後客戶端主動關閉,伺服器被動關閉。

為的是確認伺服器端是否收到客戶端發出的 ack 確認報文

當客戶端發出最後的 ack 確認報文時,並不能確定伺服器端能夠收到該段報文。所以客戶端在傳送完 ack 確認報文之後,會設定乙個時長為 2msl 的計時器。

msl 指的是 maximum segment lifetime:一段 tcp 報文在傳輸過程中的最大生命週期。2msl 即是伺服器端發出為 fin 報文和客戶端發出的 ack 確認報文所能保持有效的最大時長。

伺服器端在 1msl 內沒有收到客戶端發出的 ack 確認報文,就會再次向客戶端發出 fin 報文;

tcp 建立連線時之所以只需要"三次握手",是因為在第二次"握手"過程中,伺服器端傳送給客戶端的 tcp 報文是以 syn 與 ack 作為標誌位的。syn 是請求連線標誌,表示伺服器端同意建立連線;ack 是確認報文,表示告訴客戶端,伺服器端收到了它的請求報文。

即 syn 建立連線報文與 ack 確認接收報文是在同一次"握手"當中傳輸的,所以"三次握手"不多也不少,正好讓雙方明確彼此資訊互通。

tcp 釋放連線時之所以需要「四次揮手」,是因為 fin 釋放連線報文與 ack 確認接收報文是分別由第二次和第三次"揮手"傳輸的。為何建立連線時一起傳輸,釋放連線時卻要分開傳輸?

tcp 還設有乙個保活計時器,顯然,客戶端如果出現故障,伺服器不能一直等下去,白白浪費資源。

伺服器每收到一次客戶端的請求後都會重新復位這個計時器,時間通常是設定為 2 小時,若兩小時還沒有收到客戶端的任何資料,伺服器就會傳送乙個探測報文段,以後每隔75秒傳送一次。

若一連傳送 10 個探測報文仍然沒反應,伺服器就認為客戶端出了故障,接著就關閉連線。

參考:參考:

tcp 四次揮手 TCP四次揮手

tcp斷開連線的過程 客戶端傳送fin報文,表明客戶端將不在傳送資料。具體過程 把fin標誌位改為1,序號seq u,之前傳送的資料加1,這裡規定即使不攜帶資料序號也要 1。該過程中客戶端通過close系統呼叫從established狀態進入fin wait 1狀態。第二次揮手 服務端收到客戶端發來...

TCP四次揮手

純給自己看的 發起關閉的一方是客戶端,被動關閉的一方是伺服器。1 客戶端a傳送乙個fin 1,用來關閉客戶a到伺服器b的資料傳送。圖上畫的對,還有乙個seq n 2 伺服器b收到這個fin,它發回乙個ack 1,確認序號ack為收到的序號加1。3 伺服器b關閉與客戶端a的連線,傳送乙個fin 1給客...

TCP四次揮手

四次揮手 1.客戶端程序發出連線釋放報文,並且停止傳送資料。釋放資料報文首部,fin 1,其序列號為seq u 等於前面已經傳送過來的資料的最後乙個位元組的序號加1 此時,客戶端進入fin wait 1 終止等待1 狀態。tcp規定,fin報文段即使不攜帶資料,也要消耗乙個序號。2.伺服器收到連線釋...