TCP三次握手

2022-01-31 08:10:12 字數 1159 閱讀 5248

首先:客戶端和伺服器端都處於關閉狀態,客戶端主動開啟,伺服器被動開啟

(1)伺服器建立tcb(傳輸控制塊),等待接收客戶端的請求,處於listen狀態

(2)客戶端也建立tcb(傳輸控制塊)。想伺服器傳送請求報文段,這是首部的syn設定為1,同時選擇乙個初序號x,seq=x,tcp規定syn報文段(syn=1)不能攜帶資料,但是需要消耗乙個序號,同時tcp進入syn_send狀態

(3)客戶端接收到了請求報文段的時候,傳送確認報文,將ack=1,syn=1,確認序號ack=x+1(因為上一次消耗了乙個序號,所以伺服器希望客戶端下次從x+1的序號開始傳送資料),同時為自己設定乙個序號(seq=1),傳送後自己處於syn_recv狀態,因為這個時候也不能攜帶資料,但是還是需要消耗乙個序號

(4)客戶端接收後,在繼續向伺服器傳送乙個確認報文,ack=1,因為這個時候沒有syn,所以可以攜帶資料,也可以不攜帶資料,但是不攜帶資料的話也不會再向前兩次消耗乙個序號了。seq=x+1(因為上一次確認序號是x+1),ack=y+1(希望伺服器下一次從y+1開始傳送資料)這個結束後a進入established(已建立連線狀態)

(5)b接收到後也進入了已建立連線狀態

為什麼不是兩次握手而是三次握手

「已失效的連線請求報文段」的產生在這樣一種情況下:client發出的第乙個連線請求報文段並沒有丟失,而是在某個網路結點長時間的滯留了,以致延誤到連線釋放以後的某個時間才到達server。本來這是乙個早已失效的報文段。但server收到此失效的連線請求報文段後,就誤認為是client再次發出的乙個新的連線請求。於是就向client發出確認報文段,同意建立連線。假設不採用「三次握手」,那麼只要server發出確認,新的連線就建立了。由於現在client並沒有發出建立連線的請求,因此不會理睬server的確認,也不會向server傳送ack包。但server卻以為新的運輸連線已經建立,並一直等待client發來資料。這樣,server的很多資源就白白浪費掉了。採用「三次握手」的辦法可以防止上述現象發生。例如剛才那種情況,client不會向server的確認發出確認。server由於收不到確認,就知道client並沒有要求建立連線。

同時如果沒有向上面的情況有先後達到,如果兩個同時到達的話,可能會發生死鎖的情況

tcp三次握手 TCP 三次握手總結

tcp特點概述 tcp segment structure 段結構 step2 server host receives syn,replie with syn ack segment 答覆syn ack報文段 step3 client receives synack,replies with ac...

TCP 三次握手

tcp 三次握手 tcp 連線是通過三次握手進行初始化的。三次握手的目的是同步連線雙方的序列號和確認號並交換 tcp 視窗大小資訊。以下步驟概述了通常情況下客戶端計算機聯絡伺服器計算機的過程 1.客戶端向伺服器傳送乙個syn置位的tcp報文,其中包含連線的初始序列號x和乙個視窗大小 表示客戶端上用來...

TCP三次握手

1.伺服器準備好接受外來連線。passive open 被動開啟 需呼叫 socket bind listen 函式來完成。2.客戶端通過呼叫 connect 主動開啟 active open 這使得客戶 tcp傳送乙個 syn 表示同步 分節,這個分節告訴伺服器,客戶端將在待建立的連線中傳送的資料...