1、為什么需要三次握手
目的:為了防止已失效的連接請求報文段突然又傳送到了服務端,因而產生錯誤。主要防止資源的浪費。
具體過程:
當客戶端發出第一個連接請求報文段時並沒有丟失,而是在某個網絡節點出現了長時間的滯留,以至於延誤了連接請求在某個時間之后才到達服務器。這應該是一個早已失效的報文段。但是服務器在收到此失效的連接請求報文段后,以為是客戶端的一個新請求,於是就想客戶端發出了確認報文段,同意建立連接。假設不采用三次握手,那么只要服務器發出確認后,新的連接就可以建立了。但是由於客戶端沒有發出建立連接的請求,因此不會管服務器的確認,也不會向服務器發送數據,但服務器卻以為新的運輸連接已經建立,一直在等待,所以,服務器的資源就白白浪費掉了。
1.1、如果在TCP第三次握手中的報文段丟失了會出現什么情況?
客戶端會認為此連接已建立,如果客戶端向服務器發送數據,服務器將以RST包響應,這樣就能感知到服務器的錯誤了。
2、為什么要四次揮手
為了保證在最后斷開的時候,客戶端能夠發送最后一個ACK報文段能夠被服務器接收到。如果客戶端在收到服務器給它的斷開連接的請求之后,回應完服務器就直接斷開連接的話,若服務器沒有收到回應就無法進入CLOSE狀態,所以客戶端要等待兩個最長報文段壽命的時間,以便於服務器沒有收到請求之后重新發送請求。
防止“已失效的連接請求報文”出現在連接中,在釋放連接的過程中會有一些無效的滯留報文,這些報文在經過2MSL的時間內就可以發送到目的地,不會滯留在網絡中。這樣就可以避免在下一個連接中出現上一個連接的滯留報文了。