由於tcp是面向連線的,一次很明顯時不可能的,因為客戶端發出連線訊息後,卻沒有接收到來自服務端的回應,客戶端就無法確定服務端接是否收到了連線請求,當然也就不能確定是否連線成功。
既然一次客戶端接收不到服務端的回應,那就連線兩次,接收到回應就說明服務端接收到了連線請求,可以連理連線了。結果並不是這樣。如果客戶端想建立連線,給服務端發了乙個連線請求(syn),但是由於網路中種種情況,導致沒有及時到達服務端,這就導致客戶端在很長一段時間中沒有收到回覆訊息(ack),這時客戶端又給服務端傳送乙個syn,這次的傳送和接收的很順利,很快就收到了ack,但是這時之前的syn終於到了服務端,服務端規規矩矩的為這個syn申請資源,然後返回ack。由於之前的syn已經失效了,所以客戶端也不會去理會這個ack,但是傻乎乎的服務端並不知道這個syn已經失效了,一直為他委會著資源,這就造成了資源的浪費。
一發一收的兩次握手既然不行,那麼三次握手就可以了嗎?接著往下看。
在兩次握手中服務端不知道當前這個syn是不是有效的,三次握手就很好的解決了這個問題,第三次握手就是客戶端給服務端回覆第二次握手,這也就是說服務端會等第三次握手的到來,如果第三次握手遲遲不來,服務端就可以識別這個syn是無效的,就會將他的資源釋放了。還有一種情況就是第三次握手由於網路中的種種原因失敗了,這時候客戶端認為自己已經連線好了,就會給服務端傳送資料,服務端由於沒有收到第三次握手,就會以rst包對客戶端響應,收到rst的的客戶端就知道第三次握手沒有成功,就會重新連線。在謝希仁著《計算機網路》第四版中講「三次握手」的目的是「為了防止已失效的連線請求報文段突然又傳送到了服務端,因而產生錯誤」。
四次握手和兩次握手的情況一樣,五次握手和三次握手的情況一樣,以此類推,奇數次握手的情況與三次握手相同,同理偶數次握手與兩次握手一樣,所以為了更快的連線,就使用三次握手最合適。
TCP為什麼是三次握手,不是兩次握手?
自己開發了一 票智慧型分析軟體,功能很強大,需要的點選下面的鏈結獲取 1.三次握手的作用有兩個 1 讓client和server雙方都知道雙方可以傳送和接收到對方的訊息 2 避免網路堵塞時,client以為沒有連線上,傳送多次請求,而server會為前面多次無效請求建立連線,造成資源浪費 2.具體說...
TCP建立連線為什麼是三次握手而不是兩次握手
計算機網路 謝希仁 譯 中講了原因 1.採用兩次握手,那麼若client向server發起的包a1如果在傳輸鏈路上遇到的故障,導致傳輸到server的時間相當滯後,在這個時間段由於client沒有收到server的對於包a1的確認,那麼就會重傳乙個包a2,假設伺服器正常收到了a2的包,然後返回確認b...
為什麼TCP鏈結要三次握手而不是兩次握手 雅虎
第三次握手 革命鬥爭中的通訊故事 在革命戰爭影片中,經常會看到英勇的解放軍戰士揹著步話機在喊 長江長江,我是黃河,聽到請回答。很明顯,這是呼號為黃河的一方想找呼號為長江的另一方說事,為了保證影片的節奏,導演往往把後面的聯絡過程省略了,其實後面還有兩步,長江聽到黃河的呼叫後要回答 黃河黃河,我是長江,...