既然建立连接有三次握手, 那么相应的, 断开连接时也会经历四次握手, 而过程也是大致相同的.
过程
- client发送释放连接请求, 发送
FIN、seq = x到server, 进入FIN-WAIT-1状态. - server发送
ACK = x + 1、seq = 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确认关闭请求.