h1 为什么TCP要三次握手?
如果两次握手,会出现如下情况:
Client发送的请求连接,因为网络问题,在某个网络节点堵塞了很长时间。长到Client该次的重传请求都断开连接了。之后的某一个时间节点,server收到了该次连接请求。然后回复ACK
如果只有两次,则直接建立连接。此时client端根本不care此次事件,将不往连接中喂数据。而server端一直在傻等数据,造成资源浪费。
h1 为什么TCP要四次挥手?
因为TCP是全双工的,建立连接的时候,Server端可以在ACK的时候同时将SYN置位1。而断开连接的时候,由于Client不再写数据的时候,Server端可能会继续写数据,所以ACK和FIN是要分开的,因此是四次而不是三次。
h1 为什么TCP四次挥手后,要Wait 2MSL再关闭连接
2MSL是网络中数据报文最大存活时间等待的原因有两点:
- 如果直接关闭,另一端未收到ACK,超时重传后,此时链接关闭了,因此找不到链接,会导致链接错乱。
- 等待该次连接的数据包都消失在网络中,避免下次链接使用相同的端口号时,错误的收到脏数据。