為什麼 TCP 建立連線需要三次握手

2021-09-19 15:50:04 字數 396 閱讀 5283

因為這是為了防止出現失效的連線請求報文段被服務端接收的情況,從而產生錯誤。

可以想象如下場景。客戶端傳送了乙個連線請求 a,但是因為網路原因造成了超時,這時 tcp 會啟動超時重傳的機制再次傳送乙個連線請求 b。此時請求順利到達服務端,服務端應答完就建立了請求,然後接收資料後釋放了連線。

假設這時候連線請求 a 在兩端關閉後終於抵達了服務端,那麼此時服務端會認為客戶端又需要建立 tcp 連線,從而應答了該請求並進入 established 狀態。但是客戶端其實是 closed 的狀態,那麼就會導致服務端一直等待,造成資源的浪費。

ps:在建立連線中,任意一端掉線,tcp 都會重發 syn 包,一般會重試五次,在建立連線中可能會遇到 syn flood 攻擊。遇到這種情況你可以選擇調低重試次數或者乾脆在不能處理的情況下拒絕請求。

為什麼 TCP 連線的建立需要三次握手

tcp 的通訊雙方需要傳送 3 個包 即 三次握手 才能建立連線,本文將通過 3 副圖來解釋為什麼需要 3 次握手才能建立連線。tcp 連線的建立過程本質是通訊雙方確認自己和對方都具有通訊能力的過程。tcp 通訊雙方都需要傳送資料和接收資料,通訊能力包括 客戶端傳送資料能力,客戶端接收資料能力,服務...

TCP為什麼需要三次握手

晚上看到的面試題,tcp三次握手的印象很深,但為什麼需要3次握手,還是想不起來了。簡單而言 如果不是三次握手的話,那麼到底需要幾次握手最佳呢?2次握手,或者4次以上的握手?先看2次握手的情況 客戶端給伺服器傳送建立連線的請求,伺服器同意連線請求發回應給客戶端,連線就此建立。有問題的就是網路中經常會出...

為什麼TCP連線要三次握手?

因為網路層是不可靠的。雙方在通訊的時候,就算是 tcp 連線,在網路層都有可能丟包,只不過是傳輸層有處理丟包的策略。若 tcp 連線是兩次握手,那麼突然來了乙個已失效的客戶端連線請求報文,伺服器會把這次失效的連線當成正常的連線對待。謝希仁版計算機網路中給出的例子如下 client 發出的第乙個連線請...