网络问题排查 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

下一篇:端口与连接监控。