TCP堆栈是否会在现有连接上发送未经请求的RST?

3
我们有一个Linux系统,数据从TCP连接的服务器端流式传输到客户端。[编辑:两端均使用套接字API]
在此过程中的某个时间点,我们本地的TCP协议包显示客户端向服务器发送了RST,并且客户端日志显示读取返回了0字节。
是否可能从堆栈发送未经请求的RST,然后导致随后的客户端读取返回0字节?
代码是第三方专有的,因此我无法共享样本或监听。我问这个问题是为了了解TCP堆栈发送未经请求的RST是否是上述行为的可能解释,如果是,那么需要发生什么才能触发它。

这是在客户端和服务器之间的流媒体中间发生的吗?还是在服务器完成发送数据并处于空闲状态之后发生的? - Paulo Bu
@PauloBu:这是在流媒体过程中发生的。 - Chaim Geretz
这个平台是什么?它可能存在漏洞吗?连接可能会丢失吗? - Paulo Bu
1
很不可能是由TCP堆栈引起的,而在应用程序层面上客户端存在漏洞是完全有可能的。 - Daniel S.
1
专有代码在哪一侧?在此连接发生之前,双方是否有任何FIN(可能不会在时间上附近),因此请从开始查看整个连接。 - nos
显示剩余6条评论
2个回答

2
这也可能是伪造的RST。第三方可以发送伪造的RST来终止您的连接。过去在工业级别上已经这样做过。在此处阅读更多信息:http://en.wikipedia.org/wiki/TCP_reset_attack#Forging_TCP_resets
为了排除这种可能性,您需要在客户端计算机上嗅探流量,并查看它是否实际发送了RST,或者RST是否仅由服务器端接收。

1
我们两端都有本地的pcap文件,RST显示在两端都是从客户端发送到服务器。 - Chaim Geretz
请忽略我之前的回答。那不是伪造的 RST。 - Daniel S.

0

应用程序可以通过调整SO_LINGER选项,使用RST而不是FIN来终止连接。但是,一个良好编写的应用程序不应该这样做。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接