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

   2、https://www.cnblogs.com/xiaofei1/p/10676699.html

posted @ 2020-06-16 00:22  HuiT  阅读(377)  评论(0编辑  收藏  举报