中 进阶
网络问题排查三板斧#
一句话答案#
网络排查三板斧:ping 测连通性和延迟 → traceroute 定位哪一跳有问题 → tcpdump 抓包分析具体原因。从宏观到微观,逐步缩小问题范围。
核心要点
第一板斧:ping —— 连通性 + RTT#
作用: 测试目标是否可达,测量往返延迟(RTT)
ping -c 10 target.combash能诊断的问题:
| 现象 | 可能原因 |
|---|---|
| 100% 丢包 | 网络不通 / 防火墙禁 ICMP / 目标宕机 |
| 部分丢包(10%~30%) | 链路拥塞 / 中间设备过载 |
| RTT 突然升高(正常 5ms → 200ms) | 路由变更 / 链路拥塞 / 跨地域 |
| RTT 波动大(方差大) | 无线网络不稳定 / QoS 限制 |
局限性:
- 有些服务器禁 ping(ICMP),不代表服务不可用
- ping 通不代表 TCP 端口可达——用
telnet host port或nc -zv host port补充
第二板斧:traceroute —— 路由路径 + 逐跳延迟#
作用: 探测数据包从本机到目标经过的每一跳路由器,定位问题出在哪一段
traceroute target.com # Linux/Mac,用 UDP
traceroute -T target.com # 用 TCP SYN(穿防火墙更好)
tracert target.com # Windowsbash能诊断的问题:
| 现象 | 可能原因 |
|---|---|
某一跳开始全是 * * * | 该跳防火墙阻止 / 路由黑洞 |
| 某一跳延迟突增(5ms → 100ms) | 该段链路拥塞或跨运营商/跨地域 |
| 路径中出现回环 | 路由配置错误 |
| 最后几跳不可达 | 目标网络防火墙 / 目标宕机 |
分析技巧:
- 关注延迟突变的那一跳,而不是绝对值
* * *不一定是故障——有些路由器就是不回 ICMP,只要后续跳正常就没问题- 对比正常时的 traceroute 路径,看路由是否变了
第三板斧:tcpdump —— 抓包分析#
作用: 在网络接口上抓取原始数据包,分析 TCP/HTTP 层面的具体问题
# 抓取指定主机的 80 端口流量
tcpdump -i eth0 host target.com and port 80 -nn -w capture.pcap
# 只看 SYN 包(TCP 建连)
tcpdump -i eth0 'tcp[tcpflags] & tcp-syn != 0' -nn
# 只看 RST 包(连接被重置)
tcpdump -i eth0 'tcp[tcpflags] & tcp-rst != 0' -nnbash能诊断的问题:
| 现象 | 可能原因 |
|---|---|
| SYN 发出无 SYN-ACK | 对端不可达 / 端口未监听 / 防火墙 DROP |
| SYN 后收到 RST | 端口未监听 / 防火墙 REJECT |
| 大量重传(Retransmission) | 网络丢包 |
| TCP Window Size 为 0 | 接收方处理不过来(背压) |
| 连接建立但长时间无数据 | 应用层阻塞(不是网络问题) |
常用参数:
-i eth0:指定网卡-nn:不解析域名和端口名(加快速度)-w file.pcap:保存到文件,用 Wireshark 打开分析-c 100:只抓 100 个包-A:以 ASCII 显示包内容(看 HTTP 明文)
三板斧组合使用流程#
1. 先 ping:通不通?延迟多少?
├── 不通 → 是 ICMP 被禁还是真不通?尝试 telnet/nc 测 TCP 端口
└── 通但延迟高 → 进入第 2 步
2. 再 traceroute:哪一跳开始慢/丢包?
├── 第 1-2 跳就慢 → 本地网络问题(交换机/路由器)
├── 中间某跳慢 → 运营商链路 / 跨地域
└── 最后几跳慢 → 目标服务器或其网络
3. 最后 tcpdump:具体什么层面的问题?
├── TCP 建连失败 → SYN 无回应或 RST
├── 连接正常但数据慢 → 看 Window Size / 重传
└── 连接正常数据也正常 → 应用层问题,不是网络plaintext面试中描述排查过程的示例#
“线上接口偶发超时,我的排查过程是:
- 先看监控,确认是特定下游服务的调用超时,不是全局问题
- ping 下游服务 IP,RTT 正常 2ms,无丢包——基本排除网络不通
- traceroute 看路径,发现路由经过了一个新的中间节点,延迟从 2ms 涨到 50ms——可能是路由变更
- tcpdump 抓包确认:TCP 建连正常,但部分请求有重传——说明该链路有丢包
- 结论:运营商路由变更导致部分流量走了拥塞链路,联系运维调整路由策略”
面试回答(2分钟版)
线上网络问题排查我习惯用三板斧从宏观到微观逐步定位。第一步用ping测连通性和RTT延迟,如果完全不通先确认是ICMP被禁还是真不通,可以用telnet或nc补充测TCP端口。第二步用traceroute查看路由路径,找到延迟突增或丢包的那一跳,判断是本地网络、运营商链路还是目标端的问题。第三步用tcpdump抓包做精细分析,比如看SYN有没有收到SYN-ACK来判断连接是否可达,看有没有大量重传来判断链路丢包,看Window Size是否为0来判断接收方是否有背压。举个实际例子,之前线上接口偶发超时,先看监控确认是特定下游的调用超时,ping延迟正常,traceroute发现经过了一个新的中间节点延迟明显升高,tcpdump确认TCP建连正常但有重传,最终定位是运营商路由变更导致部分流量走了拥塞链路。
追问与易错
追问方向:
- “ping 通但服务不可用怎么排查?”→ telnet 测 TCP 端口,可能端口没监听或防火墙只放 ICMP
- “tcpdump 和 Wireshark 什么关系?”→ tcpdump 负责抓包,Wireshark 负责可视化分析
- “怎么区分网络问题和服务端问题?”→ tcpdump 看 TCP 建连和传输是否正常,正常则是应用层问题
易错点:
- ❌ “ping 不通就是网络挂了”——很多服务器禁 ICMP
- ❌ 只用 ping 就下结论——ping 只测 ICMP 层,TCP 端口可能有不同的防火墙规则
- ❌ 抓包不设过滤条件——流量太大,无法分析