![客户端无法在 Windows 7 客户端和 Windows 7 服务器设置上接收服务器重传](https://linux22.com/image/1596788/%E5%AE%A2%E6%88%B7%E7%AB%AF%E6%97%A0%E6%B3%95%E5%9C%A8%20Windows%207%20%E5%AE%A2%E6%88%B7%E7%AB%AF%E5%92%8C%20Windows%207%20%E6%9C%8D%E5%8A%A1%E5%99%A8%E8%AE%BE%E7%BD%AE%E4%B8%8A%E6%8E%A5%E6%94%B6%E6%9C%8D%E5%8A%A1%E5%99%A8%E9%87%8D%E4%BC%A0.png)
我有一台 Windows 7 服务器和一台 Windows 7 客户端应用程序,其中客户端应用程序向服务器应用程序发送查询,服务器应用程序会做出响应。如果客户端使用同一套接字保持与服务器的连接并尝试发送多个查询,则可能会出现问题。
FWIW,我同意不是如果客户端不发送请求而只是监听(流式传输),就会出现此问题。
问题发生时的示例(查询成功后):
- 客户端发送查询(ACK 和 ACK,PSH)
- 服务器看到两者并发送响应(ACK,PSH)。
- 客户端没有看到响应并发送 TCP 重传。
- 服务器看到重传并发送(DUP ACK),并重传(2)中发现的响应。
- 客户端看到(DUP ACK),但看不到任何重新传输。
最终,服务器停止发送重传,客户端在监听时挂起。第一次发送时从未发生过这种情况。我对 TCPIP 协议不太熟悉,我不确定这个问题是由服务器超时引起的,还是客户端读取不正确(目前,我让客户端在发送请求后无限期地监听响应)。
*补充说明:这是使用 IPv4 协议。
答案1
我想提供更新。问题似乎与我们的防火墙设置有关,但我不明白为什么,希望有人能解释一下。我们使用“wipfw”作为防火墙。防火墙没有阻止初始连接,但它确实造成了如上所述的断开连接。
下面这一行是规则文件中对端口连接的唯一引用。%ipfw% add allow tcp from any to any %port_num% keep-state
希望这可以帮助某些人解决使用“wipfw”作为防火墙并遇到此问题的罕见情况。