如果我有一个已连接套接字的进程,并且我终止了该进程,那么 Windows 将导致发送 RST 数据包。
是否保证(是否在某处记录)当进程终止时始终会发送 RST 数据包,或者是否可以发送 FIN 数据包?
最佳答案
当连接关闭时,TCP 不应发送 RST 数据包。要关闭连接,TCP 在客户端会经历以下状态:
- 发送 FIN 数据包。此操作会将 TCP 状态更改为
FIN_WAIT_1
. - 在
FIN_WAIT_1
,TCP 等待服务器的确认 (ACK)。 - 收到确认后,TCP 会输入
FIN_WAIT_2
. - 在
FIN_WAIT_2
,TCP 等待FIN
来自服务器的数据包 - 一次
FIN
到达后,客户端发送ACK
并输入TIME_WAIT
-
TIME_WAIT
一段时间后(通常为 30 秒或 1 分钟)退出。该状态的目的是使重新发送最终的ACK
成为可能。到服务器以防丢失。
任何地方都没有 RST 数据包。 RST 用于响应意外流量,不用于关闭连接。
例如,如果您将 TCP 数据包发送到端口 80,并且服务器没有运行 HTTP 服务器(并且假设数据包一路到达服务器并且没有被阻止/忽略),则 RST 回复为发送回客户端。
关于c - 进程终止时是否保证发送 RST 数据包?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30766180/