TCP的三次握手和四次揮手

2021-07-14 06:17:47 字數 2085 閱讀 2146

三次握手

tcp連線是通過三次握手來連線的。

第一次握手

當客戶端向伺服器發起連線請求時,客戶端會傳送同步序列標號syn到伺服器,在這裡我們設syn為m,等待伺服器確認,這時客戶端的狀態為syn_sent。

第二次握手

當伺服器收到客戶端傳送的syn後,伺服器要做的是確認客戶端傳送過來的syn,在這裡伺服器傳送確認包ack,這裡的ack為m+1,意思是說「我收到了你傳送的syn了」,同時,伺服器也會向客戶端傳送乙個syn包,這裡我們設syn為n。這時伺服器的狀態為syn_recv。

一句話,伺服器端傳送syn和ack兩個包。

第三次握手

客戶端收到伺服器傳送的syn和ack包後,需向伺服器傳送確認包ack,「我也收到你傳送的syn了,我這就給你發個確認過去,然後我們即能合體了」,這裡的ack為n+1,傳送完畢後,客戶端和伺服器的狀態為establish,即tcp連線成功。

在三次握手中,客戶端和伺服器端都傳送兩個包syn和ack,只不過伺服器端的兩個包是一次性發過來的,客戶端的兩個包是分兩次傳送的。

三次握手示意圖如下(純手繪,見諒見諒):

四次揮手

當a端和b端要斷開連線時,需要四次握手,這裡稱為四次揮手。

斷開連線請求可以由客戶端發出,也可以由伺服器端發出,在這裡我們稱a端向b端請求斷開連線。

第一次揮手

a端向b端請求斷開連線時會向b端傳送乙個帶有fin標記的報文段,這裡的fin是finish的意思。

第二次揮手

b端收到a傳送的fin後,b段現在可能現在還有資料沒有傳完,所以b端並不會馬上向a端傳送fin,而是先傳送乙個確認序號ack,意思是說「你發的斷開連線請求我收到了,但是我現在還有資料沒有發完,請稍等一下唄」。

第三次揮手

當b端的事情忙完了,那麼此時b端就可以斷開連線了,此時b端向a端傳送fin序號,意思是這次可以斷開連線了。

第四次揮手

a端收到b端傳送的fin後,會向b端傳送確認ack,然後經過兩個msl時長後斷開連線。

msl是maximum segment lifetime,最大報文段生存時間,2個msl是報文段傳送和接收的最長時間。

四次揮手示意圖如下(純手繪,見諒見諒):

兩次握手可以麼?

tcp連線時是三次握手,那麼兩次握手可行嗎?

在《計算機網路》中是這樣解釋的:已失效的連線請求報文段」的產生在這樣一種情況下:client發出的第乙個連線請求報文段並沒有丟失,而是在某個網路結點長時間的滯留了,以致延誤到連線釋放以後的某個時間才到達server。本來這是乙個早已失效的報文段。但server收到此失效的連線請求報文段後,就誤認為是client再次發出的乙個新的連線請求。於是就向client發出確認報文段,同意建立連線。假設不採用「三次握手」,那麼只要server發出確認,新的連線就建立了。由於現在client並沒有發出建立連線的請求,因此不會理睬server的確認,也不會向server傳送ack包。這樣就會白白浪費資源。

而經過三次握手,客戶端和伺服器都有應有答,這樣可以確保tcp正確連線。

為什麼tcp連線是三次,揮手確是四次?

在tcp連線中,伺服器端的syn和ack向客戶端傳送是一次性傳送的,而在斷開連線的過程中,b端向a端傳送的ack和fin是是分兩次傳送的。因為在b端接收到a端的fin後,b端可能還有資料要傳輸,所以先傳送ack,等b端處理完自己的事情後就可以傳送fin斷開連線了。

為什麼在第四次揮手後會有2個msl的延時?

前文說到

msl是maximum segment lifetime,最大報文段生存時間,2個msl是報文段傳送和接收的最長時間。

假定網路不可靠,那麼第四次傳送的ack可能丟失,即b端無法收到這個ack,如果b端收不到這個確認ack,b端會定時向a端重**送fin,直到b端收到a的確認ack。所以這個2msl就是用來處理這個可能丟失的ack的。

tcp 四次揮手 TCP的三次握手和四次揮手

三次握手 第一次握手 客戶端傳送syn包 syn x 到伺服器,並進入syn send狀態,等待伺服器確認 第二次握手 伺服器收到syn包,必須確認客戶的syn ack x 1 同時自己也傳送乙個syn包 syn y 即syn ack包,此時伺服器進入syn recv狀態 第三次握手 客戶端收到伺服...

TCP三次握手和四次揮手

一 tcp三次握手 three way handshake 1 tcp三次握手的作用 三次握手的目的是連線伺服器指定埠,建立tcp連線,並同步連線雙方的序列號和確認號並交換 tcp 視窗大小資訊。在socket程式設計中,客戶端執行connect 時,將觸發三次握手。2 tcp三次握手過程 第一步 ...

TCP三次握手和四次揮手

三次握手 四次揮手 需四次揮手原因 由於tcp的半關閉特性,tcp連線時雙全工 即資料在兩個方向上能同時傳遞 因此,每個方向必須單獨的進行關閉。這個原則就是 當一方完成它的資料傳送任務後就能傳送乙個fin來終止這個方向上的連線。當一端收到乙個fin後,它必須通知應用層另一端已經終止了那個方向的資料傳...