既然建立连接有三次握手, 那么相应的, 断开连接时也会经历四次握手, 而过程也是大致相同的.

过程


  • client发送释放连接请求, 发送FINseq = x到server, 进入FIN-WAIT-1状态.
  • server发送ACK = x + 1seq = y至client. 进入CLOSE-WAIT状态, 此时仍可以发送资源到client.
  • 等待资源发送完成之后, 再次发送FIN, seq = z到client, 进入LAST-ACK状态, client进入FIN-WAIT-2状态
  • client发出ACK请求应答, 进入TIME-WAIT状态

补充


延时确认机制?

通过延时确认, 可以将第二、三次握手合并, 延迟ACK包的发送

为何要进入TIME-WAIT状态, 等待4min?

确保server端能正常接受到ACK确认关闭请求.