排障与可观测
Wireshark、traceroute、SNMP。
排障与可观测:ping、traceroute、tcpdump、Wireshark
这一课你将能做到
- 用「四段定位法」在 15 分钟内把「网站打不开」缩小到具体环节
- 熟练组合 ping / mtr / curl / tcpdump 四件套取证
- 读懂一次抓包:三次握手、TLS 握手、重传、RST 各意味着什么
为什么要学
网络排障是网工的看家本领,也是后端进阶的分水岭。故障降临时,工具链就是你的眼睛。本课方法论来自真实场景:Nginx 入口、K8s 集群、云上部署——本站的每条命令都可以直接抄去用。
先建立图像
一次「用户说网站打不开」的完整链路与观测点:
用户终端 ──WiFi── 路由器 ──ISP── CDN/LB ── Nginx ── K8s Pod
│ │ │ │ │ │
DNS解析 信号 出口 回源/证书 转发/超时 服务监听
▼ ▼ ▼ ▼ ▼ ▼
dig iw link mtr curl -v nginx日志 kubectl/tcpdump
排障心法:先问范围(都慢还是个别人慢?),再按四段走:
DNS → TCP → TLS → HTTP,每段一条命令一个结论,不靠猜。
跟着做
步骤 1:四段定位法
DOMAIN=你的域名
dig +short $DOMAIN # ① DNS:有没有解析
curl -sv -o /dev/null --connect-timeout 3 "http://$DOMAIN" 2>&1 | grep -E 'Trying|Connected' # ② TCP
curl -sv -o /dev/null "https://$DOMAIN" 2>&1 | grep -E 'SSL connection|subject' # ③ TLS
curl -s -o /dev/null -w '%{http_code} %{time_total}s\n' "https://$DOMAIN" # ④ HTTP
四行输出对应四类故障:解析失败 / 连接超时 / 证书问题 / 应用慢或错。
步骤 2:路径质量(mtr 优于 traceroute)
mtr -n -rw -c 50 你的服务器IP
看三列:Loss%(丢包集中在哪跳)、Avg(延迟增量)、StDev(抖动)。中间跳丢包但末端干净 = 中间设备对 ICMP 限速,是假象;末端丢包才是真问题。
步骤 3:抓包取证(场景:Nginx 502)
# 在 K8s 节点抓回源端口
sudo tcpdump -i any -nn -w /tmp/502.pcap 'tcp and port 8443'
# 复现后 Wireshark 打开,过滤器:tcp.analysis.retransmission
# SYN 发出无响应 → Pod 崩了或 NetworkPolicy 拦截
# 收到 RST → 后端进程拒绝,转应用日志
步骤 4:Wireshark 常用过滤器(背下这六个)
http 只看 HTTP
tls.handshake.type == 1 Client Hello(TLS 握手起点)
tcp.flags.reset == 1 谁发了 RST
tcp.analysis.retransmission 重传(丢包 / 乱序)
tcp.analysis.zero_window 接收方处理不过来
dns.qry.name contains "你的域名" 定位 DNS 查询
步骤 5:可观测留底
# Nginx:慢请求日志(区分入口耗时与后端耗时)
log_format timing '$remote_addr $request_time $upstream_response_time $status $request';
# 云上:VPC 流日志 + LB 访问日志平时就开,事后取证靠它们
讲清楚要点
- :明确现象 → 圈定范围 → 分层定位 → 抓包取证 → 复盘沉淀;顺序错了全程低效。