端口不通怎么排查:ping、nc、curl 分步走
“连不上”是一个很笼统的说法。网站打不开、数据库连接超时、远程桌面进不去,背后可能是网络不通、地址写错、服务没启动、端口没监听,也可能是防火墙或安全组拦截。排查的关键是分层:先确认网络层能到达,再确认端口能建立连接,最后确认应用能正常响应。每一步都有明确的命令和判读方法。
第 1 步:先确认地址和端口本身没写错
很多“故障”其实是配置写错:IP 少一位、域名拼错、端口填成了别的服务的。先把目标地址、端口、协议写下来核对一遍。如果是内网访问,确认双方是否在同一网段或路由可达,可以用 子网掩码计算器 算一下两个 IP 是否属于同一个网络。如果目标是域名,先用 nslookup 域名 看解析结果对不对,参考 《DNS 解析原理和排查》。
第 2 步:ping 测网络连通,但别只信它
ping -c 4 192.168.1.10
能 ping 通,说明网络层大体可达。但 ping 用的是 ICMP 协议,很多服务器和云主机默认禁止响应 ping,所以 ping 不通不等于网络不通,ping 通也不代表端口开着。它只是第一个参考。
第 3 步:nc 或 telnet 测端口
nc -vz 192.168.1.10 443
telnet 192.168.1.10 443
Windows 上可以用 PowerShell:
Test-NetConnection 192.168.1.10 -Port 443
结果大致分三种,含义完全不同:
| 现象 | 常见含义 |
|---|---|
| 连接成功(succeeded / TcpTestSucceeded : True) | 端口可达,问题多半在应用层 |
| Connection refused(立即被拒绝) | 主机可达,但该端口没有程序监听,或被主机明确拒绝 |
| 长时间无响应后超时 | 数据包被丢弃,常见于防火墙、安全组拦截或路由不通 |
“拒绝”和“超时”的区别非常有用:拒绝说明包到了对方机器,超时说明包可能半路就没了。
第 4 步:curl 测应用是否正常响应
curl -v http://192.168.1.10:8080/
curl -vI https://example.com/
-v 会打印连接、TLS 握手和响应头的全过程。如果连接成功但返回 502、503 这类状态码,说明网络和端口都没问题,是后端服务的事,状态码含义见 《HTTP 状态码速查》。网址里带中文参数时,先用 URL 编码工具 编码,避免请求本身写错。
第 5 步:到服务器上查监听和防火墙
如果能登录目标服务器,在本机上检查:
ss -lntp | grep 8080
curl -v http://127.0.0.1:8080/
ss -lntp 列出正在监听的 TCP 端口及对应进程。重点看监听地址:如果显示 127.0.0.1:8080,说明服务只接受本机访问,外部当然连不上,需要在服务配置里改成监听 0.0.0.0 或指定网卡地址。本机能访问、外部不能访问,下一步就查防火墙:
- 本机防火墙:根据系统查看
firewalld、ufw或iptables/nftables规则。 - 云服务器:检查云平台控制台里的安全组或网络 ACL,入方向是否放行了该端口和来源 IP。
- 中间设备:公司出口防火墙、运营商可能对部分端口有限制,以相关管理员或运营商说明为准。
一张速查思路
地址核对 → ping 看可达 → nc 看端口(拒绝还是超时)→ curl 看应用 → 服务器上看监听地址 → 防火墙和安全组。每一步记录时间和结果,日志里如果是时间戳,可以用 时间戳转换 对齐时间,方便和服务器日志对照。
命令参数可能因系统版本不同而有差异,以官方文档为准,例如 curl 官方手册。