FIN_WAIT_2:
-
半关闭状态。
-
发送断开请求一方还有接收数据能力,但已经没有发送数据能力。
CLOSE_WAIT状态:
-
被动关闭连接一方接收到FIN包会立即回应ACK包表示已接收到断开请求。
-
被动关闭连接一方如果还有剩余数据要发送就会进入CLOSE_WAIT状态。
TIME_WAIT状态:
- 又叫2MSL等待状态。
- 如果客户端直接进入CLOSED状态,如果服务端没有接收到最后一次ACK包会在超时之后重新再发FIN包,此时因为客户端已经CLOSED,所以服务端就不会收到ACK而是收到RST。所以TIME_WAIT状态目的是防止最后一次握手数据没有到达对方而触发重传FIN准备的。
- 在2MSL时间内,同一个socket不能再被使用,否则有可能会和旧连接数据混淆(如果新连接和旧连接的socket相同的话)。
感谢网友指出笔误,已勘误-2021.11.16 https://github.com/forthespada/InterviewGuide/issues/23
THE END
暂无评论内容