【计算机网络】TCP四次挥手过程详解

【TCP四次挥手过程】
1.第一次挥手:客户端发送一个FIN,用来关闭客户端到服务器的数据传送,客户端进入fin_wait_1状态
2.第二次挥手:服务端收到FIN后,发送一个ACK给客户端,确认序号为收到序号+1,服务端进入Close_wait状态。此时TCP连接处于半关闭状态,即客户端已经没有要发送的数据了,但服务端若发送数据,则客户端仍要接受
3.第三次挥手:服务端发送一个FIN,用来关闭服务端到客户端的数据传送,服务端进入Last_ack状态
4.第四次挥手:客户端收到FIN后,客户端进入Time_wait状态,接着发送一个ACK给服务端,确认后,服务端进入Closed状态,完成四次挥手

【为什么TCP挥手需要4次】
主要原因是当服务端收到客户端的FIN数据包后,服务端可能还有数据没发完,不会立即close

所以服务端先将ACK发过去告诉客户端我收到你的断开请求了,但请再给我一点时间,这段时间用来发送剩下的数据报文,发完之后再将FIN包发送给客户端表示现在可以断了。之后客户端需要收到FIN包后发送ACK确认断开信息给服务端

【为什么四次挥手释放连接时需要等待2MSL】
MSL即报文最大生存时间。设置2MSL可以保证上一次连接的报文已经在网络中消失,不会出现与新TCP连接报文冲突的情况。