如何杀死 windows 僵尸 tcp 连接?

P a*_*u l 11 networking

我在 xp 上运行 Beyondtv 链接,连接到一个 vista 主机的 Beyondtv。Link 程序在大约 20 分钟后挂起,我对此没有解决办法。发生这种情况时,使用 tcpview,我看到主机有大约 200 个僵尸 tcp 连接从链接连接中遗留下来。我无法清除它们,它们来自同一个不存在的过程。连接一直存在,直到我重新启动主机。重新启动是我发现重新连接 Beyondtv Link 的唯一方法。我认为 Beyondtv 中存在导致此问题的错误,但我无法在他们的论坛上获得任何答案。但无论如何,我想知道是否有办法杀死所有这些连接。

编辑:实际上大约 40 分钟后累积了大约 3000 个 WAIT_CLOSE 连接,然后客户端就死了。如果我关闭服务器应用程序,所有这些套接字现在都显示为由 tcpview 中的 -non-existent- 进程拥有。可以理解。但是没有办法在不重新启动的情况下关闭它们吗?

maj*_*tor 12

您可以使用 Nirsoft 的Currports来监视和终止连接。

您可以使用 AutoHotKey 自动终止连接模式。


har*_*ymc 7

CLOSE_WAIT 表示连接在另一端关闭。

显然,beyondtv 没有检测到这种情况,而是继续向另一端的应用程序发送数据。另一端无法通过此连接发回任何内容,因为它已关闭其连接端。

解决方法是在设置TcpTimedWaitDelay

HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\tcpip\Parameters

此条目确定 TCP 可以释放关闭的连接并重用其资源之前必须经过的时间。关闭和释放之间的间隔称为 TIME_WAIT 状态或 2MSL 状态。在此期间,客户端和服务器可以以比建立新连接少得多的成本重新打开连接。

默认情况下,在我的机器上,这包含值 -1,我认为这意味着永远不会释放关闭的连接,这正是您正在观察的行为。

我建议您将此条目的值设置在 30-300 秒的允许范围内。我想 300 秒 = 5 分钟对于您的情况来说是完全足够的,在这种情况下,您的计算机需要 40 分钟才能冻结。