我们在 Web 和 SQL 服务器(启用了 IPv6 的 Win 2008 SP1)上看到 TCP/IP 警告和相当多的连接失败,并且当工作进程/SQL 服务器进程运行几天时,这种情况会更频繁地发生连续地。我想知道是什么原因导致这些警告?允许的默认 TCP 连接数是多少?我们如何提高该连接数?
TCP/IP 无法建立传出 连接因为选择了本地 端点最近被用来连接 到同一个远程端点。这 错误通常发生在传出时 连接的打开和关闭时间为 高速率,导致所有可用的本地 要使用的端口并强制 TCP/IP 重用本地端口进行传出 联系。为了最大限度地降低风险 数据损坏,TCP/IP 标准 需要最短时间 连续连接之间的间隔 从给定的本地端点到给定的 远程端点。
听起来有点像您的连接开始失败,然后自动重试。 如果重试发生得足够快,TCP 可以循环遍历整个端口范围,并且所有端口都将处于 TIME-WAIT 状态(IIRC 这就是该状态的名称,自从我详细调试 TCP 以来已经有一段时间了)。
首先要了解一些事情:
然后您必须寻找连接失败原因的线索。 传出连接可能是到服务器,该服务器是否已启动并正在运行? 为什么服务器不接受连接 - 负责接受连接的进程/线程是否死锁、阻塞或已退出? 发起端与服务器之间的网络是否正常?
这是该错误的 TechNet 页面。
你在使用类似的东西吗
setsockopt(s, SOL_SOCKET, SO_REUSEADDR, &on, sizeof(on)
它允许您重复使用同一个套接字两次而不会发出警告
在我看来,这与错误消息所暗示的完全一样……您的端口已耗尽。 这意味着大量的传出连接。
默认是不限制tcp连接的数量(我想你只受端口数量的限制,可能是端口1024到65534)
我将开始调查为什么您在如此短的时间内看到如此多的传出连接。
您好,15 年后,Windows 2019 中仍然出现此问题。我想知道如何应用以下建议?有任何脚本特定命令来获取此信息吗?
谁发起连接以及它们的用途是什么? 验证连接失败率,我倾向于使用 Wireshark 来完成此类事情。
提前致谢。