要解決這個疑問還得從伺服器和客戶端的接收和傳送過程來說,一般來說,我們的伺服器和客戶端有傳送和接收的功能,解決三次握手的疑問還得從解決如何用最少的次數確定雙方的接收能力是否正常的問題下手,而這個問題的回答是三次。
客戶端想要和伺服器建立連線,會經歷以下這三個過程
客戶端向伺服器傳送乙個請求訊號和乙個校驗數字x
伺服器收到客戶端的請求訊號和校驗數字x後將校驗數字x進行+1後發回給客戶端,同時還向客戶端傳送了乙個請求訊號和校驗數字y
客戶端收到伺服器發回的校驗數字x+1和伺服器傳送的乙個請求訊號和校驗數字y,然將自身的x進行+1操作後和伺服器返回的校驗數字x+1進行對比確認無誤後,把y進行+1操作然後發回給伺服器
伺服器接收到客戶端返回的y+1校驗資訊後和伺服器中的y進行+1比較確認無誤後,建立連線。
為什麼要這樣?
在tcp傳輸過程中,想要接收和傳送資料,就得保證自身的接收和傳送能力是沒有問題的,如何保證呢?首先客戶端向伺服器傳送乙個連線請求,伺服器返回請求應答,客戶端收到應答訊號並確認這個訊號和自己傳送給伺服器訊號是一致的,這時候,客戶端進行了一次傳送和接收的操作(客戶端收到伺服器返回的應答訊號和校驗碼的時候就證明了客戶端收發是正常的),這個時候客戶端知道了自己的傳送能力和接收能力是沒有問題的,而伺服器在這個過程中接收到了客戶端的請求並且也傳送了應答訊號,但是這個過程中存在乙個問題,伺服器怎麼確定自己傳送的訊號被客戶端接收了,萬一傳送之後資料卡在某個地方沒發出去,客戶端沒收到那就說明伺服器自身的傳送能力有問題,所以還需要客戶端的乙個確認資訊告訴伺服器你的傳送能力是ok的。
想象一下如果是兩次握手就建立連線會出現什麼問題?
如果兩次握手就建立連線,那麼客戶端向服務端傳送乙個資料,伺服器收到這個資料後返回客戶端請求的內容,開始建立連線,但是由於伺服器的傳送能力有問題,導致伺服器以為自己把請求的資料發給了客戶端了,卻不知道自己的傳送能力有問題,客戶端沒有收到伺服器返回的內容,於是客戶端一直在等待伺服器給自己返回內容,伺服器也一直在等待著客戶端的接下來的資料請求,雙方就這樣等啊等啊等,這個連線一直處於建立狀態造成大量的無用連線。
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 表示同步 分節,這個分節告訴伺服器,客戶端將在待建立的連線中傳送的資料...