如何杀死 Windows 僵尸 TCP 连接?

如何杀死 Windows 僵尸 TCP 连接?

我在 xp 上运行 beyondtv link,连接到 beyondtv vista 主机。Link 程序在大约 20 分钟后挂起,我对此没有修复。发生这种情况时,使用 tcpview,我看到主机有大约 200 个来自 Link 连接的僵尸 tcp 连接。我无法清除它们,它们来自同一个不存在的进程。这些连接一直挂起,直到我重新启动主机。我发现重新启动是重新连接 beyondtv Link 的唯一方法。我认为 beyondtv 中有一个错误导致了这种情况,但我在他们的论坛上找不到任何答案。但无论如何,我想知道是否有办法终止所有这些连接。

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

答案1

您可以使用 Nirsoft 的最新动态监控并终止连接。

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

答案2

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

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

解决方案是设置TcpTimedWaitDelay进入

HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\tcpip\Parameters

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

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

我建议你将此项的值设置在允许的 30 至 300 秒范围内。我认为 300 秒 = 5 分钟对于你的计算机需要 40 分钟才能冻结的情况来说完全足够了。

答案3

您可以通过以下方式强制 Windows 关闭所有 TCP 连接:1)禁用,然后 2)重新启用您的网络接口。如果可行,您可以批处理脚本来执行需要执行的步骤。

我尝试过通过命令行、从netsh实用程序(或类似程序)来执行此操作,但到目前为止还没有成功。

当然,解决这个问题的最好方法是修复损坏的应用程序。确保您正在试用应用程序的最新版本;继续困扰开发人员;如果您已经使用最新版本,请尝试找到该程序的旧版本。

答案4

查看 beyondtv 是否正在生成另一个保持连接打开的进程。如果发生这种情况,Process Explorer 会向您显示。

相关内容