我们有一个linux系统,数据从TCP连接的服务器端流向客户端。 [编辑:双方正在使用套接字API]
在发生这种情况的时间点,我们的本地TCP pcaps显示从客户端发送到服务器的RST,客户端日志显示读取返回0字节。
是否可能是否从堆栈中主动发送RST,然后让后续客户端读取返回0字节?
代码是第三方专有的,因此我无法共享样本或窥探。我正在问这个问题,以便了解TCP堆栈发送未经请求的RST是否可能解释上述详细行为,如果是,那么必须采取什么措施才能触发此问题。
答案 0 :(得分:2)
这也可能是伪造的RST。伪造的RST可以由想要终止连接的第三方发送。这在过去已经以工业级尺寸完成。在这里阅读更多内容:
http://en.wikipedia.org/wiki/TCP_reset_attack#Forging_TCP_resets
要对此进行排除,您需要在客户端计算机上嗅探流量并查看它是否实际发送了RST,或者是否仅由服务器端接收RST。
答案 1 :(得分:0)
应用程序可以通过摆弄SO_LINGER
选项来终止与RST而不是FIN的连接。一个写得很好的应用程序不应该这样做。