客户端和服务端都处于ESTABLISHED状态

  1. 客户端首先发起断开连接请求,标识位FIN1,客户端从ESTABLISHED状态变更为FIN-WAIT-1状态
  2. 服务端收到FIN请求之后,操作系统内核会发起ACK响应,服务器从ESTABLISHED状态变更为CLOSE-WAIT状态,并告知APP关闭
  3. 客户端收到服务端的ACK请求之后变更为FIN-WAIT-2状态,开始等待服务端的FIN请求
  4. 服务端APP在处理完之后,发起FIN请求,服务端从CLOSE-WAIT状态变更为LAST-ACK状态
  5. 客户端收到FIN请求之后,发起ACK响应,状态从FIN-WAIT-2变更为TIME-WAIT状态
  6. 服务端收到ACK请求,从LAST-ACK变更为CLOSED状态
  7. 客户端处于TIME-WAIT状态,等待2个MSL的时间(Maximum Segment Life最大TCP段时间)之后关闭

两端同时关闭

两端同时从状态ESTABLISHED变更为CLOSED
ESTABLISHED -> FIN-WAIT-1 -> CLOSING -> TIME-WAIT -> CLOSED
image.png

image.png