為什麼要3次握手和4次揮手

2021-08-25 12:05:17 字數 1011 閱讀 4368

tcp的3次握手和4次揮手很好理解,但如果問一句,你思考過為什麼需要這麼複雜的步驟嗎?

還是來回顧下這兩個操作,首先明確下tcp是全雙工通訊(2個方向能同時通訊)

(1)3次握手

這裡我用男生和女生聊天的例子來解釋

男生:在幹嘛(第1次握手)

刷微博:女生(第2次握手)

男生:哦(第3次握手)

男生:***xx(開始傳輸局)

******xx

:女生客戶端傳送連線請求(第1次握手),服務端返**到了該請求的確認(第2次握手)

客戶端傳送收到了服務端確認的確認(第3次握手),3次握手之後連線建立完成

問題來了,為什麼要3次?2次握手為什麼不行?

其實2次握手可以完成連線的建立,但會帶來資源浪費的問題

客戶端              (第2次傳送請求)------------>(第1次傳送請求)-------------->          服務端

假設通訊道路堵塞,第1次的請求未能在限定時間內收到服務端的請求,可能堵塞也可能丟失,於是傳送第2次請求

堵塞結束後,2次的請求自然建立了2個tcp連線,但問題是,第1個連線已經被客戶端放棄了(因為之前的超時客戶端不會在

這個連線上傳輸資料),而服務端開啟了2個連線。此時只有第2個連線是有用的,第1個連線自然就造成了資源的浪費。

(2)4次揮手

男生:拜拜(第1次揮手)

哦:女生(第2次揮手)

******

:女生(第3次揮手)

男生:哦(第4次揮手)

這裡第3次揮手是因為服務端可能存在為傳輸完的資料

這裡服務端在第3次揮手完之後關閉服務端向客戶端的連線,第4次揮手後客戶端向服務端的連線關閉

所以,為什麼要4次揮手?

因為tcp的連線只能由客戶端開始放棄,服務端只能被動接受,客戶端放棄連線後

服務端的資料可能沒傳輸完,所以需要4次揮手才能確保全雙工通訊的關閉。

為什麼TCP3次握手,4次揮手?

我是否可以寫 我是否可以讀 從上圖來看 1 2 完成之後 client 可以確認自己是可以寫的,也可以確認自己是可以讀的,但是server 只能確認自己是可以讀的,server並不知道它是可以寫的,接下來第3步完成之後,server就知道他自己的是可以寫成功的 client 傳送 fin 到serv...

3次握手和4次揮手

客戶端通過向伺服器端傳送乙個syn來建立乙個主動開啟,作為三路握手的一部分。客戶端把這段連線的序號設定為隨機數 a。伺服器端應當為乙個合法的syn回送乙個syn ack。ack 的確認碼應為 a 1,syn ack 包本身又有乙個隨機序號 b。最後,客戶端再傳送乙個ack。當服務端受到這個ack的時...

TCP為什麼需要3次握手與4次揮手

為什麼需要 三次握手 在謝希仁著 計算機網路 第四版中講 三次握手 的目的是 為了防止已失效的連線請求報文段突然又傳送到了服務端,因而產生錯誤 在另一部經典的 計算機網路 一書中講 三次握手 的目的是為了解決 網路中存在延遲的重複分組 的問題。這兩種不用的表述其實闡明的是同乙個問題。謝希仁版 計算機...