1

我们目前在 Windows 上运行的自行编写的服务器应用程序遇到问题(发生在不同版本上)。服务器侦听 TCP 端口,接受连接,交换一些数据,然后再次关闭连接。大约有 100 个客户端不时连接。

有时服务器停止工作:日志文件显示连接仍然​​被接受,但在第一次读取尝试时发生套接字错误(10054 - 对等连接重置)。我认为这不是客户问题,因为它突然停止对所有客户工作。

现在我们发现,同样的问题出现在我们的旧服务器软件上,甚至是用另一种编程语言编写的。所以它似乎不是我们程序中的错误 - 我认为它必须是某种操作系统/防火墙问题?当然,防火墙已被停用,这还没有解决问题。

有什么想法可以研究吗?Wireshark 日志将很快跟进。

日志摘录(时间戳、线程 ID、消息)

11:37:56.137 T#3960 Connection from 10.21.13.3
11:37:56.138 T#3960 Client Exception: Socket Error # 10054
Connection reset by peer.
11:37:56.138 T#3960 ClientDisconnected
11:38:00.294 T#4144 Connection from 10.21.13.3

您可以看到异常几乎在连接被接受的同时发生,在这种情况下,客户端会在几秒钟后重新连接。

4

6 回答 6

5

“状态”防火墙或 NAT 会跟踪连接,并且应该为它不知道的连接发送 RST。如果防火墙由于某种原因失去了对连接的跟踪,那么您可能会看到随机连接被重置。

我们工作中的路由器就是这样做的——当 PPP 连接中断时,它会忘记连接,这在下雨并且 DSL 重启需要太长时间时非常无用。但是,它不会重置连接,而是丢弃数据包(更无用!)。

于 2011-06-18T15:46:11.360 回答
1

首先,感谢您提供的许多提示-恐怕问题是完全不同的问题,您无法通过阅读我的问题来解决。

服务器应用程序使用 log4net,配置了一个 ImmediateFlush = true 的日志文件。如果每个日志语句都直接写入文件并且发生多个套接字连接,这会减慢整个应用程序的速度。服务器需要大约一分钟才能真正接受连接。这远远超过客户端的超时。所以在日志中只显示“已接受”,然后是“断开连接” - 甚至日志也被延迟了!

带来不便敬请谅解...

于 2011-06-24T08:43:12.357 回答
1

听起来像是防火墙或路由问题——过时的连接可能会在超时后断开。您是否在协议中使用 ping/keepalive。
否则,您可能会要求 Wireshark 看看发生了什么。

于 2011-05-12T13:02:20.827 回答
0

您是否尝试过更改积压,然后查看在此问题发生之前服务了多少时间或多少客户

于 2011-06-17T12:22:52.890 回答
0

您没有说明服务器使用的 Windows 版本,但您应该知道 Windows TCP/IP 堆栈在服务器和客户端操作系统中的行为不同。客户端操作系统允许同时传入的连接数是有限制的,而且它们明显低于您的预期。

于 2011-06-19T15:43:28.577 回答
0

从客户端看日志是什么样的?

由于错误表明客户端正在断开连接;如果您在客户端看到相同的错误,那么它是正在断开连接的防火墙或代理(双方都看到对方断开连接表示代理/防火墙)。

如果客户端不存在错误;那么我会说您的客户端是您将看到实际错误的地方。

于 2011-06-20T03:13:40.537 回答