这个问题相当简单,对于大多数阅读此内容的人来说可能有点补救,但我一直在网上搜索有关这一点的明确内容。
我知道 RST 标志旨在立即终止 TCP 连接,并且就发送主机而言,会话在发送 RST 或 RST/ACK 数据包的那一刻就结束了。但是,接收到该 RST 或 RST/ACK 数据包的主机是否通过不发送任何 RST 确认来“尊重”它?
换句话说,主机是否在收到 RST 或 RST/ACK 数据包后立即丢弃对话?有什么例外吗?
这个问题相当简单,对于大多数阅读此内容的人来说可能有点补救,但我一直在网上搜索有关这一点的明确内容。
我知道 RST 标志旨在立即终止 TCP 连接,并且就发送主机而言,会话在发送 RST 或 RST/ACK 数据包的那一刻就结束了。但是,接收到该 RST 或 RST/ACK 数据包的主机是否通过不发送任何 RST 确认来“尊重”它?
换句话说,主机是否在收到 RST 或 RST/ACK 数据包后立即丢弃对话?有什么例外吗?
RFC 793,传输控制协议详细解释了 TCP 的工作原理:
重置处理
在除 SYN-SENT 之外的所有状态中,所有重置 (RST) 段都通过检查它们的 SEQ 字段来验证。如果其序列号在窗口中,则重置有效。在 SYN-SENT 状态(接收到响应初始 SYN 的 RST),如果 ACK 字段确认 SYN,则 RST 是可接受的。
RST 的接收者首先验证它,然后改变状态。如果接收器处于 LISTEN 状态,则忽略它。如果接收器处于 SYN-RECEIVED 状态并且之前一直处于 LISTEN 状态,则接收器返回 LISTEN 状态,否则接收器中止连接并进入 CLOSED 状态。如果接收器处于任何其他状态,它会中止连接并通知用户并进入 CLOSED 状态。