tcp 三次握手和四次挥手示意图, 详细见 http://www.jianshu.com/p/9968b16b607e
对一些状态的说明,
1. Client端在结束的时候,发送FIN后,进入FIN-WAIT-1状态
2. Server端收到FIN,发送ACK后,进入 CLOSE-WAIT状态
3. Client端收到ACK后,进入FIN-WAIT-2状态,停止发送数据
4. Server端继续把数据发送完毕,向client端发送FIN,Server端进入 LAST-ACK
5. Client端发送ACK后进入TIME-WAIT,等待2MSL(30s或1分钟,2分钟),进入CLOSE状态,结束并释放端口
6. Server端收到ACK后,进入CLOSE状态,释放端口
为什么TIME_WAIT状态需要经过2MSL(最大报文段生存时间)才能返回到CLOSE状态?
- 为了保证发送的最后一个ACK报文段能够到达B
- 防止“已失效的连接请求报文段”出现在本连接中。在发送完最后一个ACK报文段后,再经过时间2MSL,就可以使本连接持续的时间内所产生的所有报文段,都从网络中消失。这样就可以使下一个新的连接中不会出现这种旧连接请求报文段。