开发者社区> 问答> 正文

ECS Windows Time_Wait过多导致访问外网失败应该如何解决


注:注册表修改需要对Windows操作系统有一定了解,为了避免注册表误操作带来的操作系统问题或者可能的数据丢失,请您采用如下方式操作注册表前,务必对系统盘和数据盘创建快照以避免可能的数据丢失。

问题现象




ECS Windows可以ping通外网,但是无法访问外部的网站或者应用。

问题原因



一般而言, 该问题原因是Windows动态端口耗尽。可以在CMD中输入如下命令简单测试:
Netstat -ano | findstr 445
该命令会显示445端口在监听在所有网卡上,

注:TCP 445端口是Windows文件共享服务使用端口,默认是监听状态
telnet 127.0.0.1 445
如果无法访问,说明动态端口耗尽。
此时,如果使用netstat -ano命令,可以发现大量连接处于TIME_WAIT状态。

解决方案



默认Windows 2008 以后,动态端口的数量为16384个 (从49152起始,到65536结束),如果服务器对外有大量连接,而根据TCP默认的Time Wait Delay时间为4分钟,这会导致大量连接在断开后处于Time Wait状态,无法快速释放给其它连接使用,这可能导致端口耗尽。
<1> 增大动态端口数量
请以管理员身份打开CMD,运行如下命令:
netsh int ipv4 set dynamicport tcp start=1025 num=60000
注:该步骤无需重启机器, 立即生效
修改后运行命令检查配置
netsh int ipv4 show dynamicport tcp

关于动态端口说明,可以参考微软KB:
The default dynamic port range for TCP/IP has changed in Windows Vista and in Windows Server 2008
https://support.microsoft.com/en-us/kb/929851

<2> 降低Time Wait时间,最低为30秒
打开注册表,定位到HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters
新增键值 TcpTimedWaitDelay,类型REG_DWORD , 设置为十进制30
参考资料:
https://technet.microsoft.com/en-us/library/cc938217.aspx
注:修改后重启生效

如果问题还未能解决,请联系 售后技术支持

展开
收起
boxti 2017-10-24 15:37:49 2824 0
0 条回答
写回答
取消 提交回答
问答排行榜
最热
最新

相关电子书

更多
《云服务器运维之Windows篇》 立即下载
TAKING WINDOWS 10 KERNEL 立即下载
ECS运维指南之Windows系统诊断 立即下载