Windows实例无法访问内网或外网服务器的端口, 查看系统日志提示“TCP/IP无法建立传出连接”错误信息怎么办?

本文主要介绍Windows实例无法访问内网或外网服务器的端口,查看系统日志提示“TCP/IP无法建立传出连接”错误信息的解决方案。

问题描述

Windows实例多次出现无法访问到任何内网或外网服务器端口的问题,期间可以正常执行ping。经过一段时间后,可以正常访问目标端口。通过查看系统日志提示如下错误信息:

TCP/IP无法建立传出连接,因为选定的本地终结点最近用于连接到相同的远程终结点。当以高速率打开和关闭传出连接时,会导致所有可用的本地端口被使用,并迫使TCP/IP重新使用本地端口进行传出连接,此时通常会产生这种错误。为了最大限度地降低数据受到损坏的风险,在给定的本地终结点和给定的远程终结点之间的连续连接中,TCP/IP标准需要等待一段最短的时间段。

关于如何查看系统日志的具体操作,请参见查看实例的系统日志和屏幕截图

问题原因

该问题通常是由于Windows实例的TCP连接数已达到上限,无法建立新的TCP连接导致。

解决方案

通过调整注册表项,例如将MaxUserPort限制提高到65534,以及将TcpTimeWaitDelay设置减少到30秒等修改操作,将有助于增加可用的TCP端口数量,从而在接近端口极限时,提高新建TCP连接的成功率。

说明

请根据您的具体使用情况调整这些数值以达到最佳效果。

  1. 远程连接Windows实例。

    具体操作,请参见通过密码或密钥认证登录Windows实例

  2. 打开运行对话框,输入regedit命令,然后单击确定

  3. 在弹出的注册表编辑器窗口中,进入计算机\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters目录下。

  4. 创建并修改MaxUserPort值。

    1. 右键单击Parameters目录,选择新建 > DWORD (32位) 值,并命名新值为MaxUserPort

    2. 双击MaxUserPort文件,基数区域选择十进制数据数值设为65534

      image

    3. 重启Windows实例使配置生效。具体操作,请参见重启实例

      说明

      为了使注册表的更改生效,需要重启服务器。如果您暂时不能重启服务器,您可以打开命令提示符(cmd)尝试通过执行netsh int ipv4 set dyn tcp [$Start_Num] [$Num_Range]命令来临时增加可用端口的数量。其中[$Num_Range]为端口数,[$Start_Num]为启动端口,请替换为实际所需数值。

  5. (可选)创建并修改其他相关TCP参数,然后重启Windows实例。

    方法

    配置项名称

    设定值(示例)

    说明

    调整TcpTimedWaitDelay以缩短关闭端口后的等待时间。

    TcpTimedWaitDelay

    30

    默认情况下,一个端口关闭后需要等待120秒才能再次使用。通过修改TcpTimedWaitDelay的值,您可以减少这个时间。例如,将其设置为30秒可以使端口更快地重新可用。

    减少TCP的KeepAlive时间以自动清理CLOSE_WAIT的连接

    KeepAliveTime

    300000毫秒(5分钟)

    控制TCP保持连接存活的时间,减小该值可以使操作系统更快地关闭无效或半开放的连接。

    KeepAliveInterval

    1000

    控制KeepAlive探测包之间的间隔时间。

    TcpMaxDataRetransmissions

    5

    定义了最大数据重传次数,减小其值有助于在网络不稳定时更快地识别断线。