Windows实例的Time_Wait连接不释放导致访问外网失败,如何处理?

本文介绍Windows实例的Time_Wait连接不释放,导致访问外网失败问题的问题描述、问题原因和解决方案。

问题描述

当在Windows实例上可以ping通外网,但是无法使用浏览器访问外网、访问外网加载时间过长或者Windows实例上的应用联网异常时,在Windows实例的CMD命令提示符中,执行netstat -an |find "TIME_WAIT" /c 命令,发现存在大量TCP连接处于TIME_WAIT状态,示例如下:查看time_wait连接

问题原因

Windows操作系统从Windows Server 2008版本以后,默认动态端口的数量为16384个(从49152起始,到65536结束)。由于TCP默认的Time Wait Delay时间为4分钟,如系统内有大量的活动连接,在结束后会在较长时间处于Time_Wait状态并占用大量端口,从而导致新的连接或应用因无端口使用而出现异常。

解决方案

说明

以下操作步骤以Windows Server 2012 R2为例,实际操作以您实际的Windows实例操作系统为准。

  1. 使用VNC连接Windows实例。

    具体操作,请参见通过密码认证登录Windows实例

  2. 打开CMD命令提示符。

    1. 单击桌面左下角开始图标图标,然后单击搜索图标图标。

    2. 在搜索框输入cmd单击命令提示符

    3. 单击命令提示符

      进入命令提示符。进入命令提示符

  3. 执行如下命令,查看当前动态端口配置。

    netsh int ipv4 show dynamicport tcp

    回显示例如下,表示动态端口的数量为16384个(从49152起始,到65536结束)。

    20230209142221
  4. 执行如下命令,增大动态端口数量。

    netsh int ipv4 set dynamicport tcp start=1025 num=60000
    说明

    startnum参数表示起始端口和端口数量,您需要根据实际情况调整参数值。

    回显示例如下,表示动态端口的数量增大到60000个(从1025起始,到61025结束)。

    20230209142347
  5. 重新访问外网或连接应用。

    • 访问成功,该问题解决。

    • 访问失败,执行下一步,修改注册表来降低Time Wait时间。

  6. 如果增大动态端口数量仍然不能完全解决该问题,您可以通过修改注册表来降低Time Wait时间,最低支持设置为30秒,具体操作如下:

    重要

    为了避免注册表误操作带来的操作系统问题或者造成的数据丢失,请您操作注册表前,务必对系统盘和数据盘创建快照,并且操作完毕后需要重启Windows实例后才能使修改生效,具体操作如下:

    1. 打开注册表编辑器。

      1. 单击桌面左下角开始图标图标,然后单击搜索图标图标。

      2. 在搜索框输入regedit打开注册表编辑器

      3. 单击regedit

        进入注册表编辑器。2012注册表编辑器

    2. 在注册表编辑器的HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services>Tcpip>Parameters路径下,将注册表项TcpTimedWaitDelay的数值数据设置为十进制数值30

      如果TcpTimedWaitDelay项不存在,请新建对应注册表项,然后再修改数值数据。以TcpTimedWaitDelay不存在为例,操作如下:

      1. 在注册表编辑器的HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services>Tcpip>Parameters路径下,右键单击注册表项空白区域,然后选择新建(N) > DWORD (32 位)值新建注册表项

      2. 输入TcpTimedWaitDelay,按Enter键。

      3. 右键单击注册表项TcpTimedWaitDelay,然后单击修改单击修改注册表项

      4. 在对话框中,勾选十进制,然后将数值数据设置为30需改数值数据为30

      5. 单击确定

相关文档