既然建立连接有三次握手, 那么相应的, 断开连接时也会经历四次握手, 而过程也是大致相同的.
过程
- 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
确认关闭请求.