TIME_WAIT状态存在的意义
4 分钟阅读
•
566 字
+
417 词
参考答案
- 防止历史连接中的数据,被后面相同四元组的连接错误的接收 ;在TIME_WAIT状态中, 旧数据会自然消失 。
- 保证「被动关闭连接」的一方,能被正确的关闭 ;如果不设置TIME_WAIT状态,被动关闭方如果没有收到ACK,此时会重发FIN,如果这个时候主动关闭方已经是CLOSE的状态了,那么会返回一个 RST报文 过来,这个时候被动关闭方会出现 异常终止 。而TIME_WAIT是2MSL的时间,对端如果没有收到ACK会触发TCP重传机制,重新发送一个FIN,这样一来一去刚好两个MSL的时间。
1. 终止连接
- 应用程序意外终止,导致 socket 被关闭。
- 需要强制清理连接,例如在检测到网络故障时。
2. 拒绝连接请求
- 服务器没有监听该端口。
- 客户端连接了错误的IP地址或端口。
3. 错误处理
- 当一个数据包到达的连接已经关闭,接收方可以发送 RST 报文,以通知发送方该连接不存在。
- 在数据传输中出错时,接收方可以通过发送 RST 报文来指示问题,终止不可靠的连接。
4. 清理无效连接
RST 报文的特征
-
TCP 标志位
:RST 报文的 TCP 标志位设置为 RST(即
R),并且通常没有其他标志位被设置。 - 序列号 :RST 报文中可能包含序列号或确认号,以指明将要重置的连接的状态。