本文介绍Windows实例的Time_Wait连接不释放,导致访问外网失败问题的问题描述、问题原因和解决方案。
问题描述
当在Windows实例上可以ping通外网,但是无法使用浏览器访问外网、访问外网加载时间过长或者Windows实例上的应用联网异常时,在Windows实例的CMD命令提示符中,执行netstat -an |find "TIME_WAIT" /c 命令,发现存在大量TCP连接处于TIME_WAIT状态,示例如下:
问题原因
Windows操作系统从Windows Server 2008版本以后,默认动态端口的数量为16384个(从49152起始,到65536结束)。由于TCP默认的Time Wait Delay时间为4分钟,如系统内有大量的活动连接,在结束后会在较长时间处于Time_Wait状态并占用大量端口,从而导致新的连接或应用因无端口使用而出现异常。
解决方案
以下操作步骤以Windows Server 2012 R2为例,实际操作以您实际的Windows实例操作系统为准。
- 使用VNC连接Windows实例。 - 具体操作,请参见通过密码认证登录Windows实例。 
- 打开CMD命令提示符。 - 单击桌面左下角  图标,然后单击 图标,然后单击 图标。 图标。
- 在搜索框输入 - cmd。 
- 单击命令提示符。 - 进入命令提示符。  
 
- 执行如下命令,查看当前动态端口配置。 - netsh int ipv4 show dynamicport tcp- 回显示例如下,表示动态端口的数量为16384个(从49152起始,到65536结束)。  
- 执行如下命令,增大动态端口数量。 - netsh int ipv4 set dynamicport tcp start=1025 num=60000说明- start和- num参数表示起始端口和端口数量,您需要根据实际情况调整参数值。- 回显示例如下,表示动态端口的数量增大到60000个(从1025起始,到61025结束)。  
- 重新访问外网或连接应用。 - 访问成功,该问题解决。 
- 访问失败,执行下一步,修改注册表来降低Time Wait时间。 
 
- 如果增大动态端口数量仍然不能完全解决该问题,您可以通过修改注册表来降低Time Wait时间,最低支持设置为30秒,具体操作如下: - 打开注册表编辑器。 - 单击桌面左下角  图标,然后单击 图标,然后单击 图标。 图标。
- 在搜索框输入 - regedit。 
- 单击regedit。 - 进入注册表编辑器。  
 
- 在注册表编辑器的 - HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services>Tcpip>Parameters路径下,将注册表项- TcpTimedWaitDelay的数值数据设置为十进制数值- 30。- 如果 - TcpTimedWaitDelay项不存在,请新建对应注册表项,然后再修改数值数据。以- TcpTimedWaitDelay不存在为例,操作如下:- 在注册表编辑器的 - HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services>Tcpip>Parameters路径下,右键单击注册表项空白区域,然后选择新建(N) > DWORD (32 位)值。 
- 输入 - TcpTimedWaitDelay,按- Enter键。
- 右键单击注册表项 - TcpTimedWaitDelay,然后单击修改。 
- 在对话框中,勾选十进制,然后将数值数据设置为 - 30。 
- 单击确定。 
 
 
 图标。
图标。