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