排查服务连不上,很多人第一步就是 telnet。通了就放心了,然后继续在应用日志里翻半天。

问题是,telnet 通只证明了一件事:三次握手成功。

TCP 通不等于服务好

握手是内核完成的,只要端口在监听、防火墙放行,内核就回 SYN-ACK,跟后面的程序有没有卡死没关系。

所以会出现:telnet 秒通,HTTP 请求发过去石沉大海。这种情况服务进程可能卡在死循环、连接池耗尽、或者被 accept 队列堵住。

端口检测能分三种结果

连接成功。 端口开着,服务在监听。

连接被拒绝。 收到 RST,端口没开,或者被防火墙 REJECT。

连接超时。 没有任何回应,包被丢弃了,安全组或中间设备的问题。

三种结果对应三条排查路径,比「通/不通」两个状态有用得多。

常见误判

本地 telnet 通、外地不通:监听地址是 127.0.0.1,或者安全组只放行了本机网段。

telnet 通、浏览器打不开:那要看应用层,可能返回 502 或者卡住,跟端口无关。

IPv4 通、IPv6 不通:监听只绑了 IPv4。

排查顺序

先确认服务在听(ss -lntp),再看监听地址是不是 0.0.0.0,然后看安全组和本机防火墙。

这三步走完,再谈应用层。跳过任何一步,都容易在白忙。

一个细节

telnet 在某些系统上默认没装,用 nc -vz IP 端口 或者 curl -v telnet://IP:端口 也一样。看输出里是 refused 还是 timeout,比「通没通」信息量大。

多地区测同一个端口,用 TCP 测速,能直接看出是全局不通还是只有某些线路不通。