首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >意外TCP RST包

意外TCP RST包
EN

Stack Overflow用户
提问于 2012-09-25 16:02:55
回答 1查看 2.8K关注 0票数 4

在我们的环境中,我们面临着随机的RST数据包问题,这会导致一些意想不到的行为,下面的图像是wireshark生成的tcp数据的快照,它显示了这个问题:

  1. 客户端(117.136.2.181)成功地建立了与服务器的连接(192.168.40.16)
  2. 客户端向服务器发送一些数据,以及KEEP_ALIVE信号。
  3. 服务器接收数据,处理数据并将结果发送回客户端。
  4. 服务器关闭套接字。
  5. 服务器不接收来自客户端的ACK信号,因此它重新传输结果数据和FIN信号,这是由TCP协议自动完成的。但是,服务器仍然没有从客户端接收ACK信号。
  6. 服务器向客户端发送RST信号,从而关闭连接。

经过分析,我们认为在第3步之后会出现一些网络问题,所以从服务器发送的所有结果数据和FIN信号都不是客户端发送的,但是我们对服务器发送的RST信号非常困惑。根据我们的理解,如果半封闭套接字接收到某些数据,或者在关闭套接字时接收队列中有数据,则发送RST信号。但这两件事似乎都不是我们案子的根本原因。

有人能帮我解释一下为什么会发生这种情况吗?

EN

回答 1

Stack Overflow用户

发布于 2021-01-22 23:39:43

RST通常发生在没有shutdown的套接字上调用close,或者在另一方仍试图发送数据时调用shutdown (仍然没有用FIN答复)。

有些编程语言有socket.close(timeout) for 示例.NET,在timeout通过后调用shutdown,然后调用close

因此,客户端可以使用timeout完成使用FIN发送和关闭连接,如果没有完成,连接将被RST强制关闭。

有关closeshutdown之间区别的更详细说明,请参见close

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12586804

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档