TCP四次挥手过程
- 客户端发送一个带FIN标志的报文给服务器
- 服务器接收到之后返回确认,
- 之后若有数据要传输给客户端,则继续传输,传输完之后再发送一个带ACK和FIN标志的报文给客户端
- 客户端接收之后返回确认
为什么建立连接是三次握手,断开是四次
建立连接的时候,服务器处于listen状态,收到客户端请求建立TCP连接的SYN报文之后,会在一个报文同时设置ACK和SYN然后返回给客户端
断开连接的时候,服务器收到来自客户端断开连接的请求,然后会先发送ACK报文,这表明客户端到服务器的通信连接断开,客户端不再发送数据给服务器,但是服务器可能会继续发送数据给客户端,等数据传输完之后,服务器再发送ACK+FIN报文给客户端
为什么客户端还要等待2MSL
MSL(maximum segment lifetime)
保证服务器发送的断开连接请求(ACK+FIN报文)到达:如果在2MSL时间服务器没有收到客户端发的最后一次ACK,服务器此时可能认为客户端没有收到自己发的ACK+FIN报文,就会重发,然后客户端在2MSL时间内收到了来自服务器重发的断开连接报文,就会再次发送ACK,并重置计时器