尝试从客户端 (Windows Server 2012) 到服务器(Windows Server 上托管的 MSSQL Server 2012 SP2)建立 JDBC 连接会导致以下错误:
连接超时已过期。尝试使用登录前握手确认时超时时间已过。这可能是因为登录前握手失败或服务器无法及时响应。尝试连接到此服务器所花费的持续时间是 - [登录前] 初始化 = 273;握手=29736;(Microsoft SQL Server,错误:-2)
包追踪分析:
在 TCP 握手之后,客户端向服务器发送一个TDS 预登录数据包 ,但表示版本的字节都设置为 0。服务器不响应(尽管协议表明服务器必须以某种方式响应),因此客户端重新传输并最终客户端向服务器发送 TCP 重置。
额外细节:
- 客户端和服务器上的端口 1433 都是打开的。
- 没有网络或软件过滤从客户端到服务器的流量。
- 使用相同连接字符串从不同域上的其他计算机成功连接到服务器。
- 在数据链路层从客户端到服务器的连接是成功的(使用数据链路编辑器测试)。
- 在客户端和服务器上都为 IPv4 和 IPv6 启用 TCP/IP。
- 两台服务器上都启用了 TLS。
- 我们使用 Squirrel SQL 和 MSSQL Server Management Studio 尝试了 3 种不同的 JDBC 驱动程序。都提供相同的错误。驱动程序引用正确的 DLL。
- 从客户端到服务器的 Tracert 成功完成。
- 我们尝试修改连接字符串以强制信任服务器证书、强制加密、将连接超时值增加到几分钟等。
- .NET 4.5 用于客户端,但.NET 4.5 也用于其他可以成功连接到服务器的机器上。
可能是什么问题?我没主意了。