如何确定是什么占用了所有 TCP 临时端口?

如何确定是什么占用了所有 TCP 临时端口?

我的 Windows 机器最近开始出现异常。

运行大约 3-4 天后,我无法建立任何传出 TCP 连接。大多数没有特定错误处理的应用程序只会显示“连接失败”。一些调查显示错误是“没有可用的缓冲区空间”。

事件日志条目讲述了更多故事:

TCP/IP 无法建立传出连接,因为所选的本地端点最近用于连接到同一个远程端点。此错误通常发生在传出连接以高频率打开和关闭时,这会导致所有可用的本地端口都被使用,并迫使 TCP/IP 重新使用本地端口进行传出连接。为了最大限度地降低数据损坏的风险,TCP/IP 标准要求从给定的本地端点到给定的远程端点的连续连接之间必须间隔一段最短时间。

netstat -qno我在管理员命令提示符下运行并看到以下内容:

Active Connections

  Proto  Local Address          Foreign Address        State           PID
  TCP    0.0.0.0:135            0.0.0.0:0              LISTENING       972
  TCP    0.0.0.0:445            0.0.0.0:0              LISTENING       4
  TCP    0.0.0.0:3389           0.0.0.0:0              LISTENING       592
  TCP    0.0.0.0:5357           0.0.0.0:0              LISTENING       4
  TCP    0.0.0.0:6160           0.0.0.0:0              LISTENING       2808
  ... some more random TCP connections ...
  TCP    0.0.0.0:49152          0.0.0.0:0              BOUND           4
  TCP    0.0.0.0:49153          0.0.0.0:0              BOUND           4
  TCP    0.0.0.0:49154          0.0.0.0:0              BOUND           4
  TCP    0.0.0.0:49155          0.0.0.0:0              BOUND           4
  TCP    0.0.0.0:49156          0.0.0.0:0              BOUND           4
  TCP    0.0.0.0:49157          0.0.0.0:0              BOUND           4
  TCP    0.0.0.0:49158          0.0.0.0:0              BOUND           4
  TCP    0.0.0.0:49159          0.0.0.0:0              BOUND           4
  TCP    0.0.0.0:49160          0.0.0.0:0              BOUND           4
  TCP    0.0.0.0:49161          0.0.0.0:0              BOUND           4
  ... 16,383 entries, all the way up to ...
  TCP    0.0.0.0:65531          0.0.0.0:0              BOUND           4
  TCP    0.0.0.0:65532          0.0.0.0:0              BOUND           4
  TCP    0.0.0.0:65533          0.0.0.0:0              BOUND           4
  TCP    0.0.0.0:65534          0.0.0.0:0              BOUND           4
  TCP    0.0.0.0:65535          0.0.0.0:0              BOUND           4
  ... some UDP stuff, nothing out of the ordinary ...

如您所见,确实每个 TCP 出站端口都处于 状态BOUND,所属 PID 为4,代表System进程。(同一进程正在侦听端口 445 以进行 SMB 连接。)

TCPView 不显示任何这些BOUND连接,只显示问题开始之前打开的活动连接。

使用 Defender 进行完整的恶意软件扫描未发现任何问题。

我已经尝试停止所有不必要的服务并关闭所有未使用的应用程序。即使注销并重新登录也无法解决问题。唯一的解决办法是重新启动系统,即使这样,也只能解决问题几天。

我确实注意到,当典型的用户应用程序(例如 Chrome)使用出站 TCP 端口时,它们确实会显示在该BOUND状态中,但它们在 Netstat 中具有与之关联的正确 PID。这似乎表明存在某种严重的恶意软件或 Windows 中的某种重大错误。

Windows 10 1607。

解决此问题的下一步是什么?

答案1

我相信我已经找到罪魁祸首了。

不久前,我曾对 iSCSI 启动器进行过一些实验(将其连接到 NAS4Free 实例)。我注意到 iSCSI 启动器仍然每隔几分钟就尝试连接到我正在运行的 iSCSI 服务器。我删除了我的(已退役)服务器的 IP 地址,到目前为止,它似乎已经阻止了绑定端口的泛滥。

这很有道理,因为 iSCSI 启动器是系统级服务。也许该服务中存在错误?

答案2

Windows 更新导致 iSCSI 连接出现此问题。

2017 年 5 月 9 日 - KB4019215 https://support.microsoft.com/en-us/help/4019215/windows-8-update-kb4019215

您可以删除此更新或应用最新更新以避免出现此问题,即在所有临时端口耗尽之前,都会与已删除的 iSCSI 目标建立新连接。

相关内容