兩次握手不行,原因如下:
如上圖所示,假設客戶端開始給服務端傳送了乙個序列號為99的syntcp請求連線報文,不巧的是這個syn報文由於網路擁塞而沒有及時到達服務端,然後客戶端又傳送了乙個序列號為399的syn請求報文給服務端,這時前面那個超時的報文恰好到達了服務端,而服務端確認了這個報文,從而服務端建立了tcp連線,然後客戶端收到了序列號為99的請求報文的確認報文,於是他就一臉懵逼,但是因為兩次握手已經達成,雙方建立的tcp錯誤連線已經沒有辦法更改了,從而造成了通訊雙方建立錯誤的tcp連線;如果是三次握手,那麼客戶端會對這個錯誤的確認報文回覆乙個reset報文,從而防止建立tcp錯誤連線;
通訊雙方是通過累積確認機制進行可靠的tcp通訊的,因此通訊雙方的初始序列號應該都得到確認,而兩次握手明顯只能確認客戶端的初始序列號,服務端的初始序列號無法得到確認,從而無法建立可靠tcp連線;
tcp連線是全雙工的,客戶端傳送syn報文,服務端給予確認,從而能夠建立客戶端到服務端的傳送通道(因為客戶端知道服務端能夠收到資料),而服務端傳送syn報文給客戶端,客戶端給予確認,同樣也會建立從服務端到客戶端的傳送通道,從而建立全雙工的tcp;
三次握手 為什麼不用兩次握手呢?
問題1 第一次握手 客戶端向伺服器端傳送乙個訊號syn 1,並且生成乙個隨機的序seq x,告訴伺服器端我要傳送資料了,進入syn sent 同步已傳送 狀態。第二次握手 伺服器收到syn包,必須確認客戶的syn ack x 1 同時自己也傳送乙個syn包 syn 1,ack 1 位子設定乙個初始序...
為什麼TCP鏈結要三次握手而不是兩次握手 雅虎
第三次握手 革命鬥爭中的通訊故事 在革命戰爭影片中,經常會看到英勇的解放軍戰士揹著步話機在喊 長江長江,我是黃河,聽到請回答。很明顯,這是呼號為黃河的一方想找呼號為長江的另一方說事,為了保證影片的節奏,導演往往把後面的聯絡過程省略了,其實後面還有兩步,長江聽到黃河的呼叫後要回答 黃河黃河,我是長江,...
TCP為什麼是三次握手,不是兩次握手?
自己開發了一 票智慧型分析軟體,功能很強大,需要的點選下面的鏈結獲取 1.三次握手的作用有兩個 1 讓client和server雙方都知道雙方可以傳送和接收到對方的訊息 2 避免網路堵塞時,client以為沒有連線上,傳送多次請求,而server會為前面多次無效請求建立連線,造成資源浪費 2.具體說...