本文主要介绍Windows实例无法访问内网或外网服务器的端口,查看系统日志提示“TCP/IP无法建立传出连接”错误信息的解决方案。
问题描述
Windows实例多次出现无法访问到任何内网或外网服务器端口的问题,期间可以正常执行ping。经过一段时间后,可以正常访问目标端口。通过查看系统日志提示如下错误信息:
TCP/IP无法建立传出连接,因为选定的本地终结点最近用于连接到相同的远程终结点。当以高速率打开和关闭传出连接时,会导致所有可用的本地端口被使用,并迫使TCP/IP重新使用本地端口进行传出连接,此时通常会产生这种错误。为了最大限度地降低数据受到损坏的风险,在给定的本地终结点和给定的远程终结点之间的连续连接中,TCP/IP标准需要等待一段最短的时间段。
关于如何查看系统日志的具体操作,请参见查看实例的系统日志和屏幕截图。
问题原因
该问题通常是由于Windows实例的TCP连接数已达到上限,无法建立新的TCP连接导致。
解决方案
通过调整注册表项,例如将MaxUserPort
限制提高到65534,以及将TcpTimeWaitDelay
设置减少到30秒等修改操作,将有助于增加可用的TCP端口数量,从而在接近端口极限时,提高新建TCP连接的成功率。
请根据您的具体使用情况调整这些数值以达到最佳效果。
远程连接Windows实例。
具体操作,请参见通过密码或密钥认证登录Windows实例。
打开运行对话框,输入
regedit
命令,然后单击确定。在弹出的注册表编辑器窗口中,进入
计算机\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters
目录下。创建并修改MaxUserPort值。
右键单击
Parameters
目录,选择 ,并命名新值为MaxUserPort
。双击
MaxUserPort
文件,基数区域选择十进制,数据数值设为65534
。重启Windows实例使配置生效。具体操作,请参见重启实例。
说明为了使注册表的更改生效,需要重启服务器。如果您暂时不能重启服务器,您可以打开命令提示符(cmd)尝试通过执行
netsh int ipv4 set dyn tcp [$Start_Num] [$Num_Range]
命令来临时增加可用端口的数量。其中[$Num_Range]
为端口数,[$Start_Num]
为启动端口,请替换为实际所需数值。
(可选)创建并修改其他相关TCP参数,然后重启Windows实例。
方法
配置项名称
设定值(示例)
说明
调整
TcpTimedWaitDelay
以缩短关闭端口后的等待时间。TcpTimedWaitDelay
30
默认情况下,一个端口关闭后需要等待120秒才能再次使用。通过修改
TcpTimedWaitDelay
的值,您可以减少这个时间。例如,将其设置为30秒可以使端口更快地重新可用。减少TCP的
KeepAlive
时间以自动清理CLOSE_WAIT
的连接KeepAliveTime
300000毫秒(5分钟)
控制TCP保持连接存活的时间,减小该值可以使操作系统更快地关闭无效或半开放的连接。
KeepAliveInterval
1000
控制KeepAlive探测包之间的间隔时间。
TcpMaxDataRetransmissions
5
定义了最大数据重传次数,减小其值有助于在网络不稳定时更快地识别断线。