為什麼 TCP IP 請求要 次握手與 次揮手?

2022-05-05 08:45:11 字數 1398 閱讀 6641

理想情況下:

client:"我要開始了"

server:"好的"

然後client開始傳送資訊.

第二種情況:

client:"我要開始了" 但是server沒有收到

client發現半天server都沒有反饋, 有發了一遍:"我要開始了"

server:"好的"

如果client傳送的請求沒有被server收到, 那麼長時間沒有收到server的回覆後, 重新傳送請求既可.

第三種情況:

client:"我要開始了" 這個請求堵在路上了, server沒有收到

client重新傳送:"我要開始了"

server:"好的"

client開始傳送資訊

在傳送資訊的過程中, server收到了之前堵在路上的請求. server只能重新建立連線. 這並不是我們希望的.

為了避免client本該失效的請求被server接收, 必須要多一次握手, 即三次握手.

client:"我要開始了"

server:"好的"

client:"那我真的開始了"

和建立連線一樣的考慮, 需要3次握手.如下:

client:"我要結束啦"

server:"好的"

client:"那我真的結束了"

但是結束和建立的乙個區別在於, client想建立的時候, server能夠隨時準備建立.

client想結束的時候, server得先確保手中的資料傳送完才能夠結束

所以中間的一次握手要拆分為兩步.如下:

client:"我要結束啦"

server:"好的, 等我把資料發完"

server:"我發完啦"

client:"那我真的結束啦"

然後client結束連線

server收到後也結束連線.

再考慮一種情況,假如server沒有收到client傳送的"那我真的結束啦"呢?超時重傳嗎?client都已經關閉連線了.

所以解決辦法是:

client在發完"那我真的結束啦"後, 等待一段時間, 如果這段時間內沒有收到server的重傳, 證明server已經確實收到了.所以client可以放心的結束了.

所以最終流程如下:

client:"我要結束啦"

server:"好的, 等我把資料發完"

server:"我發完啦"

client:"那我真結束啦"

client怕server沒有收到, 就等了一會兒, 如果這段時間內沒有收到server的重傳, 就放心的關閉連線啦.

而server這邊接到"那我真的結束啦"後, 就直接關閉連線了.

為什麼要三次握手

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

Tcp ip協議為什麼三次握手

為什麼要三次握手 為了防止已失效的連線請求報文段突然又傳送到了服務端,因而產生錯誤。具體例子 已失效的連線請求報文段 的產生在這樣一種情況下 client發出的第乙個連線請求報文段並沒有丟失,而是在某個網路結點長時間的滯留了,以致延誤到連線釋放以後的某個時間才到達server。本來這是乙個早已失效的...

TCP為什麼要三次握手?

在 計算機網路 一書中其中有提到,三次握手的目的是 為了防止已經失效的連線請求報文段突然又傳到服務端,因而產生錯誤 這種情況是 一端 client a發出去的第乙個連線請求報文並沒有丟失,而是因為某些未知的原因在某個網路節點上發生滯留,導致延遲到連線釋放以後的某個時間才到達另一端 server b。...