网络排查与工具
面试实战题:线上接口超时、连不上、慢,怎么查。主线:工具各看什么、分层排查思路。
工具清单
| 工具 | 看什么 | 典型命令 |
|---|---|---|
| ping | 连通性、RTT、丢包 | ping example.com |
| traceroute | 路径、哪一跳慢/丢 | traceroute example.com |
| dig / nslookup | DNS 解析 | dig example.com |
| curl | HTTP 全链路 | curl -v -w "%{time_total}" |
| netstat / ss | 连接状态、端口 | ss -tnp、netstat -ant |
| tcpdump | 抓包看细节 | tcpdump -i eth0 port 443 |
| telnet / nc | 端口连通性 | nc -vz host 443 |
分层排查思路
排查顺序: 连通 → 路径 → 端口 → HTTP → 应用
从底层往上:物理连通(ping)→ 路由(traceroute)→ 端口(nc)→ 协议(curl)→ 应用(日志)。每层排除一个可能。
常见场景
| 现象 | 方向 |
|---|---|
| ping 通但 curl 超时 | 端口被防火墙挡 / 服务没监听(nc 验证) |
| 偶发超时 | 丢包(traceroute 看哪跳)、LB 健康检查、连接池满 |
| 首包慢后续快 | DNS 慢 / 新连接握手开销(keep-alive 优化) |
| 跨机房慢 | RTT 物理限制(看延迟是否符合距离) |
| curl 卡在 TLS | 证书链、TLS 握手协商(-k 跳过验证测试) |
| 大量 TIME_WAIT/CLOSE_WAIT | 连接管理问题(见 TCP 篇) |
curl 高级用法
curl -v https://api.example.com # 详细:DNS/TCP/TLS/请求响应全流程
curl -w "dns:%{time_namelookup} tcp:%{time_connect} tls:%{time_appconnect} total:%{time_total}\n" URL
curl -o /dev/null -s -w "%{http_code} %{size_download}\n" URL # 状态码+大小-w 分段时间是性能定位利器:DNS 慢还是 TCP 慢还是 TLS 慢还是等待响应慢,一目了然。
面试追问
- 排查思路? 从底层往上分层排除:连通 → 路径 → 端口 → HTTP → 应用。每层一个工具
- ping 通但连不上? 端口层问题:服务没监听或防火墙挡。nc/telnet 验证端口
- curl -w 看什么? 分段时间:DNS/TCP 连接/TLS/总耗时。定位慢在哪一段
- 偶发超时怎么查? traceroute 看丢包、抓包看重传、看连接池和超时配置
- traceroute 的作用? 看路径和每一跳的延迟:定位哪一跳慢或断