文章目录
一、四次挥手流程
TCP 四次挥手断开连接前,客户端和服务端都处于 ESTABLISHED 状态
1、第一次挥手
客户端主动关闭连接,此时会向服务端发送 FIN+ACK 报文(将 TCP 首部 FIN 和 ACK 标志位都设成 1),之后客户端处于 FIN_WAIT_1 状态
注意
FIN 会消耗一个序列号
2、第二次挥手
- 服务端收到客户端的 FIN+ACK 报文后,会回给客户端 ACK 报文(将 TCP 首部 ACK 标志位设成 1),之后服务端处于 CLOSE_WAIT 状态
- 客户端收到服务端的 ACK 报文后,进入 FIN_WAIT_2 状态
3、第三次挥手
服务端 完成数据的发送后(如果还需要发送数据到客户端的话),会向客户端发送 FIN+ACK 报文(将 TCP 首部 FIN 和 ACK 标志位都设成 1),之后服务端处于 LASK_ACK 状态
注意
FIN 会消耗一个序列号
4、第四次挥手
- 客户端收到服务端的 FIN+ACK 报文后,会回给服务端 ACK 报文(将 TCP 首部 ACK 标志位设成 1),之后客户端处于 TIME_WAIT 状态,一段时间(2MSL)后,客户端彻底关闭连接
- 服务端收到客户端的 ACK 报文后,彻底关闭连接
注意
主动关闭连接的一方才有 TIME_WAIT 状态</