3

为了测试网络应用程序,我编写了一个 asio 端口“代理”:它在套接字上侦听应用程序客户端活动,并将所有传入的数据包发送到另一个套接字,由应用程序服务器侦听,然后返回。

现在,当应用程序或服务器由于各种原因断开连接时,“代理”通常会收到 EOF,但有时它会收到“连接重置”。

因此,问题是:套接字何时因“连接重置”错误而失败?

4

1 回答 1

6

当本地端尝试向远程端发送数据并且远程端以RST设置了标志(而不是ACK)的数据包应答时,TCP 连接被“重置”。这几乎总是会发生,因为远程端不知道任何与远程和本地地址以及远程和本地端口号匹配的 TCP 连接。可能的原因包括:

  • 远端已重启
  • 路径中某处的状态跟踪防火墙已重新启动/更改/添加/删除
  • 负载均衡器错误地将 TCP 连接定向到与它应该去的节点不同的节点。
  • 远程 IP 地址已易手(新所有者对属于旧所有者的 TCP 连接一无所知)。
  • 远端认为 TCP 连接已经关闭(但不知何故,本地端不同意)。

请注意,如果远程端以SYN数据包响应 TCP 连接中的初始 ( ) 数据RST包,则视为“连接被拒绝”而不是“对等连接重置”。

于 2013-04-04T16:51:35.497 回答