TCP为什么要三次握手?
TCP三次握手过程,简单来讲如下:
1.客户端发起第一次握手(SYN=1, seq=x)
2.服务器端发起第二次握手(SYN=1, seq=y, ACKnum=x+1)
3.客户端发起第三次握手(ACKnum=y+1)
但为什么要三次握手,而不是两次或者四次?
根本原因就是双方要协商好初始的 seq。
TCP确认哪个包重传,解决包乱序,都是通过seq实现。因此握手目的是互相确认的是seq。
因此需要以下四步:
1.A---->B SYN
2.B---->A ACK
3.B---->A SYN
4.A---->B ACK
其中2和3均是服务器端到可以合并为一步。因此三次握手可以实现双方互相确认seq。
没有第三次握手,双方无法确认B的初始序列号(B不知道A是不是收到了自己的初始seq)。如果丢失,A就不知道B的初始seq,也就进行不下去了。
同时,可以确定双通道通畅。
综上,两次握手无法互相确认seq;三次足够,所以四次握手没必要了。
第三次握手丢失会如何?
如果A又向B发送数据,B收到A的ACK,就会自然接受,状态变为ESTABLISHED。不会影响后续通信。
-------------------------------------------------------------------------------------------------------------------------