本文介绍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。
单击确定。