Tcp為什麼需要三次握手而不是兩次四次?
阿新 • • 發佈:2019-01-23
找了一下資料發現還是有點門道的
只要還是來源於知戶上:傳送門
首先從Tcp通訊是全雙工通訊分析,全雙工也就是我可以給你發信息你也可以給我發信息(可以同時發)
三次握手也是確認這個全雙工通訊的過程
確認客戶端可以給服務端發訊息 第一次握手的客戶端傳送的syn包以及第二握手服務端傳送的ack
確認服務端可以給客戶端發訊息 第二次握手服務端傳送的syn包以及第三次握手客戶端傳送的ack
知戶上有個很有趣的答案描述了這個過程
我比較偏向於上述原因
還看到兩種比較有趣的回答
摘自知戶使用者:小宮呀
一種是為了防止已失效的連線請求報文段突然又傳送到了服務端,因而產生錯誤
“已失效的連線請求報文段”的產生在這樣一種情況下:client發出的第一個連線請求報文段並沒有丟失,而是在某個網路結點長時間的滯留了,以致延誤到連線釋放以後的某個時間才到達server。本來這是一個早已失效的報文段。但server收到此失效的連線請求報文段後,就誤認為是client再次發出的一個新的連線請求。於是就向client發出確認報文段,同意建立連線。假設不採用“三次握手”,那麼只要server發出確認,新的連線就建立了。由於現在client並沒有發出建立連線的請求,因此不會理睬server的確認,也不會向server傳送資料。但server卻以為新的運輸連線已經建立,並一直等待client發來資料。這樣,server的很多資源就白白浪費掉了。採用“三次握手”的辦法可以防止上述現象發生。例如剛才那種情況,client不會向server的確認發出確認。server由於收不到確認,就知道client並沒有要求建立連線。”另外一種是 如果想確定雙通道通暢,必須使用三個包的傳送接收,也就是三次握手
另外Tcp的可靠傳輸更多的是靠重傳機制來保證的