TCP 三次握手为什么是三次而不是两次四次五次...
客户端与服务端建立连接需要的三步:
1、建立连接时,客户端发送SYN包到服务器,随机选择一个初始序号x,并进入SYN_SENT状态,等待服务器确认;
2、服务器收到SYN包,必须确认客户的SYN(ack=x+1),同时自己也发送一个SYN包(seq=y),即SYN+ACK包,此时服务器进入SYN_RECV状态;
3、客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=y+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手
建立连接为什么必须是三次不能是两次或者四五次
三次握手完成两个重要的功能,既要双方做好发送数据的准备工作(双方都准备彼此也准备好),也要允许双方就初始序列号进行协商,这个序列号在握手过程中被发送和确认。现在把三次握手改成仅需要两次握手,死锁是可能发生的。
第一次握手,发送SYN报文,传达信息:你好,我想建立连接
第二次握手,回传SYN+ACK报文,传达信息:好的,可以建立连接
第三次握手,回传ACK报文,传达信息:好的,我知道了,那我们连接。然后就建立连接了
在发送报文之前各方都要确认可以进行连接。之所以采取三次握手机制,不过是为了信息传输的可靠性,如果其中某个握手失败,这个过程将会重复,来确保其可靠性。
如果采取两次握手,相当于第二次握手结束便建立连接,如果这时发送SYN的一方不想连接了,也不会有反馈,另一方却一直在等待,浪费了时间。当然可以采取4次甚至N次握手,建立连接的时间太长,效果也会大打折扣,所以三次只是折中方案,保证了可靠性,又节俭了建立连接的时间。
参考:1、https://blog.csdn.net/qq_38328091/article/details/96479914