我们有一台安装了 MySQL 的 Windows Server 2003 计算机和一台 Windows XP 客户端计算机。在客户端计算机上我们有一个 C++ 应用程序。两台计算机上的 Windows 防火墙均处于活动状态。
我们在客户端和服务器机器上打开了端口 3306 以进行数据库连接。当我们想从 C++ 应用程序检查数据库连接时,服务器响应非常慢。我们在 Google 上搜索了这个问题,在 MySQL 论坛上有人说,当他在类似情况下在客户端机器上打开端口 3306 和 65000 时,服务器响应很快。
但没有人确认应该开放65000端口。我们测试了65000端口,我们的服务器已经开始快速响应。
在这种情况下我们该怎么办?任何帮助都将不胜感激。
答案1
不确定这是否是一个答案,但对于评论来说它有点长。
需要记住的是,客户端和服务器之间的通信可以在两端的不同端口上进行。例如,当 client.example.com 连接到 server.example.com 的端口 3306 时,它可以从任何端口号进行连接,例如 65000。
我使用过的大多数专用防火墙都遵循常识并按目标端口进行过滤,但客户端上运行的软件防火墙可能遵循不同的规则,并且可能会限制客户端可以发起的连接数量。
根据维基百科,3306 位于已注册端口范围内。“动态”端口范围从 49152 到最大值 65535。也许客户端使用 3306 出站端口很好,但启动了多个 tcp 会话(例如控制和数据),并且没有任何可用端口可用。
如果在动态范围内打开不同的端口,它会起作用吗?我的建议是配置客户端防火墙以允许任何端口到此特定 IP 地址的出站连接,并且仅限制服务器端。
netstat -an
我还建议检查服务器上的输出,打开和关闭客户端的端口,看看每种情况下会弹出哪些会话。