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

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

我可以更改/添加KeepAliveTime和相关的注册表变量以使 Windows 机器在空闲连接上发送 TCP 保活数据包吗?

我想知道是否有人成功实现了这一点。具体来说,当 TCP 连接上处于空闲状态的应用程序没有执行任何特殊操作(setsockopt)来保持连接时。

此 Microsoft TechNet 详细信息配置系统范围的 Keep-Alives保持活动时间以及相关的注册表变量。

HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\参数\KeepAliveTime

似乎Linux 系统范围内使用 keep-alive 的配置
但是,这需要程序使用setsockopt()并请求保持活动(对吗?)。

请记住,即使在内核中配置了 keepalive 支持,它也不是 Linux 中的默认行为。程序必须使用 setsockopt 接口请求对其套接字的 keepalive 控制。实现 keepalive 的程序相对较少...

答案1

您对 Windows 中的 TCP keepalive 功能与 Linux 类似的评估是正确的。

您可以随意操作与 TCP keepalive 相关的注册表参数,但除非应用程序使用setsockopt()请求 keepalive,否则默认情况下不会发送任何参数。

如果你想在 Windows 上实际看到 keepalive 的运行,但又不想写代码,可以在“连接”属性中勾选“启用 TCP keepalive(SO_KEEPALIVE)”。油灰SSH/TELNET/etc 客户端,启动连接,允许其处于空闲状态,并嗅探流量。(这是我能想到的第一个可以有意识地配置为使用 SO_KEEPALIVE 的应用程序……)

相关内容