You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Windows 10系统TCP keepalive功能启用及配置有效性咨询

Windows 10系统TCP keepalive功能启用及配置有效性咨询

嘿,我来帮你捋清楚Windows 10上TCP keepalive的相关问题~

首先可以明确的是:Windows 10完全支持TCP keepalive功能,你没在Wireshark里抓到探测包,大概率是配置环节出了小问题,咱们一步步排查:

你当前配置的潜在问题

你提到设置了KeepAliveInterval=30000TCPMaxDataRetransmissions=5,但很可能忽略了一个关键参数——KeepAliveTime

  • 这个参数决定了TCP连接空闲多久后,系统才会发送第一个keepalive探测包,默认值是7200000毫秒(也就是2小时)。如果没修改这个值,那得等整整2小时才会看到第一个探测包,这时候用Wireshark当然抓不到啦!
  • 另外你写的KeepAliveInterval=KeepAliveInterval=30000应该是手滑打重复了,正确的参数名就是KeepAliveInterval

正确的系统级配置步骤(全局生效)

要让keepalive正常工作,需要配置三个注册表参数,步骤如下:

  1. 按下Win+R输入regedit打开注册表编辑器,定位到路径:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters
  2. 检查是否存在以下三个**DWORD(32位)**值,没有的话右键新建:
    • KeepAliveTime:建议设置为你期望的空闲触发时间,比如300000(代表5分钟,单位是毫秒)
    • KeepAliveInterval:你设置的30000(30秒)没问题,代表探测包的间隔时间
    • TCPMaxDataRetransmissions:5次重试次数也符合常规配置
  3. 修改完成后必须重启电脑,这些注册表配置只有重启后才会被TCP栈加载生效

除了注册表的其他系统级配置方式

你也可以用管理员权限的PowerShell来完成配置,命令更简洁:

# 设置空闲5分钟后触发keepalive
Set-ItemProperty -Path 'HKLM:\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters' -Name 'KeepAliveTime' -Value 300000 -Type DWord
# 设置探测包间隔30秒
Set-ItemProperty -Path 'HKLM:\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters' -Name 'KeepAliveInterval' -Value 30000 -Type DWord
# 设置最大重试5次
Set-ItemProperty -Path 'HKLM:\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters' -Name 'TCPMaxDataRetransmissions' -Value 5 -Type DWord

执行完同样需要重启电脑生效。

验证配置是否生效的小技巧

重启后,你可以用telnet工具建立一个TCP连接(比如telnet example.com 80),然后让这个连接保持空闲,超过你设置的KeepAliveTime时长后,再用Wireshark抓对应端口的包,就能看到keepalive探测包了(通常是序列号不变的ACK包)。

另外补充一点:如果只想让特定应用的TCP连接启用keepalive,那得看应用本身是否支持——很多网络开发库都允许在代码层面设置SO_KEEPALIVE选项,这种方式不会影响全局系统配置。

备注:内容来源于stack exchange,提问作者Pyotr Baykalov

火山引擎 最新活动