是否可以保证在进程终止时发送RST数据包?

时间:2015-06-10 20:01:03

标签: c sockets winapi network-programming winsock

如果我有一个连接套接字的进程,并且我终止了这个过程,那么Windows将导致发送一个RST数据包。

是否保证(在某处记录)在进程终止时始终发送RST数据包,还是可以发送FIN数据包?

1 个答案:

答案 0 :(得分:1)

连接关闭时,TCP不应发送RST数据包。要关闭连接,TCP将在客户端进行以下状态:

  1. 发送FIN数据包。此操作会将TCP状态更改为FIN_WAIT_1
  2. FIN_WAIT_1中,TCP等待来自服务器的确认(ACK)。
  3. 收到确认后,TCP输入FIN_WAIT_2
  4. FIN_WAIT_2中,TCP等待来自服务器的FIN数据包
  5. 到达FIN后,客户端会发送ACK并输入TIME_WAIT
  6. TIME_WAIT在一段时间后退出(通常为30秒或1分钟)。此状态的目的是使最终ACK能够重新发送到服务器以防丢失。
  7. 任何地方都没有RST数据包。 RST用于响应意外流量,以关闭连接。

    例如,如果您将TCP数据包发送到端口80,并且服务器未运行HTTP服务器(并假设数据包一直到服务器并且未被阻止/忽略),那么RST回复是送回客户端。