1. 建立连接
为什么不采用2次握手?
为了防止两次握手情况下已经失效的连接请求报文段突然又传到服务端,从而产生错误。
客户A向服务B发送请求连接,但是由于长时间滞留,A认为丢失,又重新发送请求连接,B收到后,建立连接,数据传输结束之后,断开连接。此时,之前滞留的请求报文daunting到达B,B认为A又发送连接请求,此时如果是三次握手,B向A发送确认报文段,由于这是已经失效的请求,A不予理睬,不能建立连接。如果是二次握手,B认为连接已经建立,一直等待A传输数据,A不予理睬,造成B的资源浪费
2. 关闭连接
为什么释放需要4次握手?
服务端收到fin的通知,只是说明客户端没有数据发送,但是服务器还可能有剩余的数据发送
为什么客户端的最后一次握手报文要等2MSL?
为了把保证客户端发送的最后一个确认报文段能够到达服务端。如果客户端不等待,并且发送的最后一个确认报文丢失,则服务端不能进入正常关闭状态,而客户端已经关闭,不可能再次重传