我们在环境中遇到随机RST数据包问题,导致一些意外行为,图片是wireshark生成的tcp数据的快照,显示问题:
经过一番分析后,我们认为在步骤3之后会出现一些网络问题,因此客户端无法获取服务器发送的所有结果数据和FIN信号,但我们对服务器发送的RST信号非常困惑。根据我们的理解,如果半封闭套接字接收到某些数据,或者当关闭套接字时接收队列中有数据,则发送RST信号。但这些似乎都不是我们案件的根本原因。
有人可以帮助详细说明为什么会这样吗?
答案 0 :(得分:0)
RST
通常发生在没有 close
的套接字上调用 shutdown
时,或者在 shutdown
之后,而另一方仍在尝试发送数据(仍然没有回复了 FIN
)。
某些编程语言对 example .NET 有一个 socket.close(timeout)
,它会在 shutdown
过去后调用 close
和 timeout
。
所以客户端最多有 timeout
完成发送和关闭与 FIN
的连接,如果没有完成,连接将被 RST
强行关闭。>
有关 close
和 shutdown
之间区别的更详尽说明,请参阅 https://stackoverflow.com/a/23483487/1438522。