Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 服务器报告一个零窗口,但有';接收缓冲区中没有数据_Linux_Sockets_Networking_Tcp_Wireshark - Fatal编程技术网

Linux 服务器报告一个零窗口,但有';接收缓冲区中没有数据

Linux 服务器报告一个零窗口,但有';接收缓冲区中没有数据,linux,sockets,networking,tcp,wireshark,Linux,Sockets,Networking,Tcp,Wireshark,我有一个基于LINUX的服务器应用程序,它在套接字连接上报告一个TCP ZeroWindow,以指示它正在关闭接收窗口。Wireshark证实了这一点,还应注意,已禁用窗口缩放 奇怪的是,当使用netstat查看此连接时,该连接显示以下内容: Proto Recv-Q Send-Q Local Address Foreign Address State tcp 0 0 192.168.0.201:1344

我有一个基于LINUX的服务器应用程序,它在套接字连接上报告一个TCP ZeroWindow,以指示它正在关闭接收窗口。Wireshark证实了这一点,还应注意,已禁用窗口缩放

奇怪的是,当使用netstat查看此连接时,该连接显示以下内容:

Proto Recv-Q Send-Q Local Address           Foreign Address         State      
tcp        0      0 192.168.0.201:1344          192.168.0.101:35340         ESTABLISHED
我觉得这很奇怪的原因是Recv-Q报告的值为0,这意味着它可以接收更多数据,但连接仍然报告一个零窗口,指示客户端不发送任何内容

因此,连接会陷入这种状态,除了定期向服务器发送特殊探测段的客户端之外,不再有数据流。这些探测的目的是提示服务器发回包含当前窗口大小的段;但是,窗口永远不会重新打开

说到这里,我正在寻找一种解释,说明连接在这种状态下是如何被卡住的:带有Recv-Q的ZeroWindow也是零


谢谢

服务器可能已确定已完成数据读取,并已调用套接字。这不应该向客户端发送RST,因为仍然允许服务器发送数据。linux实现可能会在
shutdown()
之后将窗口大小设置为0,因为进程表明它无论如何都不会读取更多数据(这只是一个假设,如果linux真的这样做,我从不尝试)。如果可以重现此问题,请在连接进入此状态之前尝试清除服务器进程