什么是三次握手
學過網絡編程的人,應該都知道TCP建立連接的三次握手,下面簡單描述一下這個過程。

如圖所示
第一次握手:客戶端發送TCP包,置SYN標志位為1,將初始序號X,保存在包頭的序列號(Seq)里。
第二次握手:服務端回應確認包,置SYN標志位為1,置ACK為X+1,將初始序列號Y,保存在包頭的序列號里。
第三次握手:客戶端對服務端的確認包進行確認,置SYN標志位為0,置ACK為Y+1,置序列號為Z。
為什么不是兩次
我們先來將三次握手這個過程捋一遍。(S-服務端,C-客戶端)
第一次握手后,S可以確認自己收報文與C發報文的功能都正常,而C呢,它什么都不能確認。
第二次握手后,C可以確認自己的收發報文與S的收發報文功能都正常,也就是認為連接已建立。
那么第三次呢,S也可以確認雙方能夠正常通信。
假想一下,如果我們去掉了第三次呢?
因為我們不進行第三次握手,所以在S對C的請求進行回應(第二次握手)后,就會理所當然的認為連接已建立,而如果C並沒有收到S的回應呢?此時,C仍認為連接未建立,S會對已建立的連接保存必要的資源,如果大量的這種情況,S會崩潰。
因此第三次握手是必要的。
為什么不是四次
首先,如果樂於思考的同學應該會對上面有這樣的疑問:
既然沒法確認第二次的握手,C是否可以收到,
那么怎么確定第三次握手S就可以收到呢?
不錯,這根本沒法確定,因為完全可靠的通信協議是根本不存在的,我們任何的通信協議都是在接受這樣的現實情況之上進行的。
而三次握手后,C和S至少可以確認之前的通信情況,但無法確認之后的情況。
在這個道理上說,無論是四次還是五次或是更多次都是徒勞的
本文轉載於:https://blog.csdn.net/to_be_better/article/details/54885684
