网络排错应先验证基础连通性:先 ping 域名和 IP,再查 DNS、路由、防火墙;区分 Connection refused、timeout、no route to host 的根因;必要时抓包并确认命名空间与资源限制。
确认目标地址是否可达
连接失败的第一反应不应该是查服务端,而是验证基础网络连通性。很多问题其实卡在 DNS 解析或路由层面。
- 用
ping -c 4 example.com看是否能解析并通 ICMP —— 如果失败,先跑nslookup example.com或dig example.com检查 DNS;如果解析成功但 ping 不通,说明可能禁 ICMP 或中间路由有问题 - 别只信域名,立刻试 IP:
ping -c 4 192.0.2.1。若 IP 可通而域名不通,基本锁定 DNS 配置(/etc/resolv.conf)或本地 hosts 冲突 - 注意:某些云环境或容器网络中,
ping被策略屏蔽,此时改用curl -v telnet://192.0.2.1:22或nc -zv 192.0.2.1 22更可靠
检查本地 TCP 连接是否被阻断
即使路由和 DNS 都正常,connect() 仍可能返回 Connection refused、Timeout 或 No route to host —— 每种错误指向完全不同环节。
-
Connection refused:目标端口上没进程监听,或防火墙明确拒绝(如 iptables DROP 后会静默丢包,REJECT 才返回该错误);用ss -tlnp | grep :80确认本机服务状态 -
Connection timed out:数据包发出去了但没回 SYN-ACK,常见于目标主机防火墙丢包、目的端口未开放、或中间设备(如安全组、NAT 网关)拦截 -
No route to host:本地路由表无匹配项,或 ARP 失败(局域网内);运行ip route get 192.0.2.1和arp -n | grep 192.0.2.1快速定位
抓包确认数据包实际走向
当 ping、nc、curl 行为不一致时,必须看真实流量。不要猜,要抓包。