tcp 的通訊雙方需要傳送 3 個包(即:三次握手)才能建立連線,本文將通過 3 副圖來解釋為什麼需要 3 次握手才能建立連線。
tcp 連線的建立過程本質是通訊雙方確認自己和對方都具有通訊能力的過程。tcp 通訊雙方都需要傳送資料和接收資料,通訊能力包括:客戶端傳送資料能力,客戶端接收資料能力,服務端傳送資料能力,服務端接收資料能力。完成了這些能力的確認,連線才算成功建立。
第一次握手,客戶端傳送 syn 包給服務端之後。服務端收到了來自客戶端的包,服務端可以確定:服務端具有接收能力,客戶端具有傳送能力。而客戶端則什麼也不能確定,不知道傳送的包是否到達了服務端。
第二次握手,服務端傳送 syn/ack 包給客戶端之後。客戶端知道了服務端成功接收了自己傳送的 syn 包,並且自己成功接收了來自服務端的 ack/syn 包,所以客戶端可以確定:客戶端具有傳送能力,服務端具有接收能力,服務端具有傳送能力,客戶端具有接收能力,客戶端完成了能力確認。而服務端並不知道更多的資訊。
基於 tcp 通訊的雙方進行握手連線的過程是從雙方視角確認通訊能力的過程。而通訊能力的確立需要至少傳送 3 個資料報,所以說 tcp 連線的建立需要三次握手。當然,在 syn 包丟失的情況下重傳機制會重新傳送 syn 包,連線過程中實際傳送包的數量也有可能超過 3 個。
為什麼 TCP 建立連線需要三次握手
因為這是為了防止出現失效的連線請求報文段被服務端接收的情況,從而產生錯誤。可以想象如下場景。客戶端傳送了乙個連線請求 a,但是因為網路原因造成了超時,這時 tcp 會啟動超時重傳的機制再次傳送乙個連線請求 b。此時請求順利到達服務端,服務端應答完就建立了請求,然後接收資料後釋放了連線。假設這時候連線...
TCP為什麼需要三次握手
晚上看到的面試題,tcp三次握手的印象很深,但為什麼需要3次握手,還是想不起來了。簡單而言 如果不是三次握手的話,那麼到底需要幾次握手最佳呢?2次握手,或者4次以上的握手?先看2次握手的情況 客戶端給伺服器傳送建立連線的請求,伺服器同意連線請求發回應給客戶端,連線就此建立。有問題的就是網路中經常會出...
為什麼TCP連線要三次握手?
因為網路層是不可靠的。雙方在通訊的時候,就算是 tcp 連線,在網路層都有可能丟包,只不過是傳輸層有處理丟包的策略。若 tcp 連線是兩次握手,那麼突然來了乙個已失效的客戶端連線請求報文,伺服器會把這次失效的連線當成正常的連線對待。謝希仁版計算機網路中給出的例子如下 client 發出的第乙個連線請...