宝塔双11:分享抽 iPad 等好礼,100% 中奖!查看活动
当前位置:论坛首页 > 宝塔拨测 > 宝塔拨测

TCP 拨测大面积失败就是端口没开吗?先看失败原因明细再...

发表在 宝塔拨测昨天 17:40 [复制链接] 0 27

一句话答案:用宝塔拨测对某个端口做 TCP 检测,结果大面积失败、统一报 TCP_CONNECT_FAILED,不能直接断定「端口没开」。TCP_CONNECT_FAILED 只是个笼统的失败 code,底下藏着多种不同的底层原因——网络不可达、节点无权限、连接超时、无法分配地址、无路由、连接被拒绝等,每一种指向的问题都不一样。

为什么拿 6379 做样本
下面用对 www.bt.cn:6379(Redis 数据库端口)的一次真实 TCP 拨测,把失败原因拆开看。选 6379 是因为这个端口默认不对公网开放,一次运行就能把几乎所有失败原因类型都暴露出来,最适合当教材。

实测:352 个失败节点,报出 8 种失败原因
本次对 www.bt.cn:6379 的 TCP 拨测(2026-10-03,北京时间),请求 500 个节点、选中 359 个、成功 7 个、失败 352 个(成功率 1.9%)。失败的 352 个节点,从失败 code 看只有两类:TCP_CONNECT_FAILED(351 个)和 TCP_TARGET_INVALID(1 个)。但把每个失败节点底层报的错误文案(message_v1)归类,能得到 8 种不同的失败原因:
失败原因(message_v1 归类)
节点数
network is unreachable(网络不可达)
148
i/o timeout(连接超时)
96
permission denied(节点无权限)
92
cannot assign requested address(无法分配地址)
11
no route to host(无路由)
2
connection refused(连接被拒绝)
1
address family not supported(地址族不支持)
1
lookup i/o timeout(域名解析超时,计为 TCP_TARGET_INVALID)
1
也就是说,同样是「失败」,绝大多数节点倒在三类上:网络不可达(148)、连接超时(96)、节点无权限(92);真正「端口没开、目标拒绝连接」的 connection refused 只有 1 个节点——反而占极少数。

三类主因,各自指向什么问题
network is unreachable:节点到目标没有可达路由。
148 个节点报这个错,是所有原因里最多的。含义是:检测节点所在的网络到目标 IP 之间根本没有可用路由,连接请求还没发出去就被本机或上游路由判了「到不了」。值得注意的是,本次失败节点几乎都是走 IPv6 发起连接的(dial tcp6 …),而 www.bt.cn 同时有 IPv6 地址——节点所在网络没有可用 IPv6 路由时就会报这个错。这类失败指向节点网络侧,不是目标端口本身。
i/o timeout:请求发出去了,但收不到回应。
96 个节点报这个错。和 network is unreachable 不同,i/o timeout 说明连接请求已经发出,只是等不到回应。常见两种情况:一是目标端口上确实没有服务监听,发出的包无人应答;二是防火墙把连接请求静默丢弃(DROP),既不回应也不拒绝。要区分这两种,得结合目标服务器上的监听和防火墙设置来看。
permission denied:节点没有权限发起连接。
92 个节点报这个错。这是检测节点所在的网络对该目标有访问限制——比如某些专线、云服务器节点被策略限制,不允许向该目标发起连接。它代表节点侧的权限问题,同样不是目标服务器主动拒绝。

少见的几种,各有各的含义
除了三类主因,还有几种出现次数很少的失败原因,一次拨测里可能只有个位数节点:
  • cannot assign requested address(11 个):检测节点本地无法分配请求地址,属于节点本机资源或配置问题。
  • no route to host(2 个):节点到目标主机无路由,和 network is unreachable 类似,但更具体地指向「主机」这一层。
  • connection refused(1 个):目标端口明确返回「拒绝」,这才是最接近「端口没监听」的信号——本次只有 1 个节点报。
  • address family not supported(1 个):节点不支持目标使用的地址族(比如节点网络不支持 IPv6)。

另一个失败 code:TCP_TARGET_INVALID 是解析问题
失败的 352 个节点里,有 1 个的失败 code 是 TCP_TARGET_INVALID,报错文案是 lookup www.bt.cn: i/o timeout——这是域名解析超时,不是连接失败。它说明该节点在发起连接之前,解析域名这一步就卡住了。这类失败和 TCP_CONNECT_FAILED 里的各种原因完全是两码事,别混为一谈。
结果解读:怎么读自己的失败原因
  • 先看失败原因分布:把失败节点的底层错误文案归类,看哪类最多——是网络不可达、超时还是无权限。
  • 再结合节点分布看:成功节点和失败节点分别落在哪些地区、运营商,判断是目标服务器的问题,还是某些节点网络本身的问题。
  • 最后回到目标服务器核实:端口到底有没有监听、防火墙怎么配的,以服务器上的实际情况为准,拨测只是从外部节点视角给线索。
关于 TCP 测速的目标格式(主机 + 端口)和四种拨测方式的区别,可参阅官方文档《进行一次拨测并查看结果》:https://docs.bt.cn/user-guide/baota-probe/monitoring-guide 。另外,如果端口确实没对公网开放、但本机或内网能连上,那「大面积失败」反而是正常的安全配置,可参阅《数据库端口 3306 为什么公网拨测大面积失败?这是安全配置,不是故障》。
2e9d5dfb-8f06-4069-85e6-b9e09f999643.png
常见问题TCP 拨测报 TCP_CONNECT_FAILED,是不是端口一定没开?
不一定。TCP_CONNECT_FAILED 只是个笼统的失败 code,底下还压着多种底层原因,比如 network is unreachable(网络不可达)、permission denied(节点无权限)、i/o timeout(连接超时)等。要先展开失败原因明细,再判断到底是端口没开、防火墙拦截,还是节点所在网络本身到不了目标。

network is unreachable 和 i/o timeout 有什么区别?
network is unreachable 指节点所在网络到目标 IP 之间没有可达路由,往往连数据包都发不出去;i/o timeout 是连接请求发出去了、却迟迟收不到回应,常见于端口没监听或防火墙把连接静默丢弃。两种错误指向的问题不同,排查方向也不同。

permission denied 是什么原因造成的?
permission denied 表示检测节点没有权限发起这次连接,通常是节点所在网络(比如某些专线、云服务器节点)对该目标有访问策略限制,并不是目标服务器主动拒绝了你。

同一个目标,为什么不同节点报的失败原因不一样?
因为各节点所在的网络环境不同:有的节点网络到目标没有 IPv6 路由、有的节点被策略限制、有的能把请求发出去但收不到回应,所以同一目标在不同节点会报出不同的失败原因。单个节点的失败原因代表不了全局。

怎么用失败原因定位真正的问题?
先归类失败原因、找占比最高的那一类;再对照成功节点和失败节点分别落在哪些地区、运营商,判断问题在目标服务器还是节点网络。最终端口监听和防火墙的对错,要以目标服务器上的实际配置为准。



有问题欢迎回帖。

使用道具 举报 只看该作者 回复
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

紧急运维服务

响应时间:3分钟

问题处理方式:宝塔专家1对1服务

工作时间:工作日:9:00 - 18:30

宝塔专业团队为您解决服务器疑难问题

点击联系技术分析

工作时间:09:00至18:30

快速回复 返回顶部 返回列表