网络问题排查 5 步法
1. ping 网关 → 本地网络通吗
2. ping 公网 IP → 出站通吗
3. ping 域名 → DNS 解析通吗
4. traceroute → 在哪一跳断了
5. curl / dig → 应用层问题
ping:测连通性
ping example.com
ping -c 4 example.com # 4 次后停
ping -i 0.5 example.com # 间隔 0.5 秒
ping -W 2 example.com # 超时 2 秒
ping6 ipv6.google.com # IPv6
看:
- 是否有回包(time= 显示)
- 丢包率(packet loss)
- 延迟(time= 数字)
国内 ping 国外 → 高延迟 + 偶尔丢包是正常的。
traceroute:看路径
traceroute example.com
# 1 192.168.1.1 1.2 ms ← 你的网关
# 2 10.0.0.1 5.3 ms ← ISP 接入
# 3 * * * ← 这跳禁了 ICMP(正常)
# 4 203.0.113.1 12.5 ms ← 骨干网
# ...
mtr example.com # ★ traceroute + ping 合体(更好用)
mtr 实时显示每跳的丢包率和延迟——比 traceroute 强。装:sudo apt install mtr。
DNS 诊断
nslookup(简单)
nslookup example.com
# Server: 223.5.5.5
# Address: 223.5.5.5#53
# Non-authoritative answer:
# Name: example.com
# Address: 93.184.216.34
dig(详细,推荐)
dig example.com
dig example.com +short # 只看 IP
dig example.com A # A 记录
dig example.com MX # MX 记录(邮件)
dig example.com TXT # TXT 记录
dig example.com @8.8.8.8 # 指定 DNS
dig +trace example.com # 递归追踪(看哪个 DNS 解的)
排查 DNS 不解析:
# 1. 先看默认 DNS 能不能解
dig example.com
# 2. 换一家试
dig @8.8.8.8 example.com
# 3. 看本地配置
cat /etc/resolv.conf
resolvectl status
# 4. 清缓存(systemd-resolved)
sudo resolvectl flush-caches
端到端测试:curl
最实用的网络瑞士军刀。
curl https://example.com # 看响应体
curl -I https://example.com # 只要 headers(HEAD 请求)
curl -v https://example.com # 看完整握手过程
curl -o page.html https://example.com # 存文件
curl -L https://example.com # 跟随重定向
curl -w "@-" -o /dev/null -s https://example.com <<'EOF'
DNS lookup: %{time_namelookup}s
Connect: %{time_connect}s
TLS handshake: %{time_appconnect}s
Total time: %{time_total}s
HTTP code: %{http_code}
EOF
最后这个能精确看每一阶段花了多久——排查"为什么慢"必备。
TCP 端口测试
ping 用 ICMP,不一定准;想测TCP 端口能不能连:
# nc(netcat)
nc -zv example.com 443
# Connection to example.com 443 port [tcp/https] succeeded!
# nmap
nmap -p 443 example.com
# /dev/tcp(无需装包)
echo > /dev/tcp/example.com/443 && echo "Open"
# 简单 telnet
telnet example.com 443
实战:网站访问不了,怎么查
# 1. DNS 通吗
dig example.com +short
# 没出 IP → DNS 问题
# 出了 IP → 继续
# 2. TCP 连得通吗
nc -zv example.com 443
# 不通 → 网络 / 防火墙 / 服务器宕了
# 通 → 继续
# 3. HTTP 通吗
curl -I https://example.com
# 4xx / 5xx → 服务器或反代问题
# 不通但 TCP 通 → TLS 证书问题,加 -v 看握手
# 4. 看完整传输细节
curl -v https://example.com
实战:服务器突然卡
# 1. 网卡是否在跑
ip -s link
# 2. 连接数是否爆
ss -s
# 3. 有没有大量 TIME_WAIT
ss -tn | awk '{print $1}' | sort | uniq -c
# 4. 看是不是被 DDoS
sudo iftop -i eth0
下一篇:端口与连接监控。