【发布时间】:2012-03-24 05:18:09
【问题描述】:
您好 Socket 编程专家,
我正在 Linux 上为在 Windows 上运行的 SQL Server 2005/2008 编写代理服务器。 代理是使用 bsd 套接字和 C 编码的,它可以很好地解决下面描述的问题。
当我使用数据库客户端(用 JAVA 编写,在 Linux 机器上运行)直接向数据库服务器发起查询(并发 100 或更多)时,没有遇到连接重置。但是通过我的代理,我遇到了许多连接重置。
深入挖掘后,我了解到从“数据库客户端”到“代理”的连接总是成功的 但是当“代理”尝试连接到数据库服务器时,连接失败,因为 SYN 数据包得到 RST,ACK。
那是为了提供一些背景。问题是 : 为什么有时 SYN 会收到 RST,ACK?
DB client(linux) to Server(windows) ----> Works fine
DB client(linux) to Proxy(Linux) to Server(windows) -----> problematic
我知道这可能发生在“连接被拒绝”的情况下,但这绝对不是那种情况。 SYN 泛洪可能是另一种情况,但这并不能解释直接向服务器触发时的良好行为。
我怀疑可能需要一些套接字选项设置,客户端在连接之前进行,而我的代理不需要。请对此有所了解。非常感谢任何帮助(链接或指针)。
附加信息:
编写了一个执行并发连接的 C 客户端,它以并发作为参数。以下是我的观察: -> 在 5000 及以上并发时,一些连接失败并出现“连接被拒绝”。 -> 低于 2000,它工作正常。
但即使在 100 或更多并发时也能观察到实际问题。 注意:问题与时间有关,有时它根本不会出现,有时它非常频繁,并且 DB 客户端(直接到服务器)在任何时候都可以正常工作。
【问题讨论】:
-
我假设当您谈论“在 Windows 上运行的 SQL 数据库”时,您正在谈论 SQL Server。如有必要,请更改标签,但请注意:缺少重要信息。
-
感谢 JayC,我认为这与手头的问题无关。编辑它。
标签: sql-server linux sockets proxy network-programming