Windows 中已建立连接的 TCP 超时

Windows 中已建立连接的 TCP 超时

我有以下情况:

  • 客户端计算机上的应用程序(Firebird DB 客户端)在端口 3050 上打开与服务器的 TCP 连接
  • 客户端应用程序崩溃,应用程序终止
  • 服务器上的 netstat 仍然显示到客户端 IP 地址的端口 3050 上的 TCP 连接已建立。
  • 已关闭客户端
  • 服务器上的 netstat 仍然显示到客户端 IP 地址的端口 3050 上的 TCP 连接已建立。
  • 等了几分钟
  • 服务器上的 netstat 仍然显示到客户端 IP 地址的端口 3050 上的 TCP 连接已建立。

Windows(本例中为 Win8.1)下建立的连接是否有超时?我可以更改此超时吗?

我发现,但这似乎并不能回答我关于建立连接的问题。

答案1

默认情况下,建立的 TCP 连接不会超时(但可能由于硬件限制)。

应用程序可以使用 TCP 保持连接机制来检查断开的连接。在 Firebird (>1.5) 中启用了 TCP keepalive

必须在服务器上设置保持活动“超时”。Windows 中的默认 TCP 保持活动时间间隔是 2 小时(但建议 5 分钟)。可在HKLM\System\CurrentControlSet\Services\Tcpip\Parameters\KeepAliveTime注册表项。

更多详细信息请点击以上链接:

失败的客户端连接将在以下时间间隔后关闭: KEEPALIVE_TIME+ ( KEEPALIVE_PROBES+1)* KEEPALIVE_INTERVAL

在 Windows 中具有以下相应的注册表值:

KEEPALIVE_TIME = KeepAliveTime (default: 7200 seconds)
KEEPALIVE_INTERVAL = KeepAliveInterval (default: 1 second)
KEEPALIVE_PROBES = TCPMaxDataRetransmissions (default: 5)

但:

默认情况下,每两小时发送一次保持活动段 [...]。即使启用,其他上层协议(如 NetBIOS)也会发送自己的保持活动值。如果上层协议使用的保持活动间隔小于 TCP 保持活动间隔,则永远不会发送 TCP 保持活动值。例如,TCP/IP 上的 NetBIOS 会话每 60 分钟发送一次 NetBIOS 保持活动请求。因此,永远不会使用为 NetBIOS 会话启用的 TCP 保持活动值。

答案2

TCP 规范没有超时或保持连接机制。可以设置注册表项来配置 TCP 保持连接,但实际使用保持连接取决于应用程序。请参阅此问题的答案:

在 Windows 系统上启用系统范围的 TCP 保持连接

相关内容