面试知识库
进阶

网络问题排查三板斧#

一句话答案#

网络排查三板斧:ping 测连通性和延迟 → traceroute 定位哪一跳有问题 → tcpdump 抓包分析具体原因。从宏观到微观,逐步缩小问题范围。

核心要点

第一板斧:ping —— 连通性 + RTT#

作用: 测试目标是否可达,测量往返延迟(RTT)

ping -c 10 target.com
bash

能诊断的问题:

现象可能原因
100% 丢包网络不通 / 防火墙禁 ICMP / 目标宕机
部分丢包(10%~30%)链路拥塞 / 中间设备过载
RTT 突然升高(正常 5ms → 200ms)路由变更 / 链路拥塞 / 跨地域
RTT 波动大(方差大)无线网络不稳定 / QoS 限制

局限性:

  • 有些服务器禁 ping(ICMP),不代表服务不可用
  • ping 通不代表 TCP 端口可达——用 telnet host portnc -zv host port 补充

第二板斧:traceroute —— 路由路径 + 逐跳延迟#

作用: 探测数据包从本机到目标经过的每一跳路由器,定位问题出在哪一段

traceroute target.com        # Linux/Mac,用 UDP
traceroute -T target.com     # 用 TCP SYN(穿防火墙更好)
tracert target.com            # Windows
bash

能诊断的问题:

现象可能原因
某一跳开始全是 * * *该跳防火墙阻止 / 路由黑洞
某一跳延迟突增(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' -nn
bash

能诊断的问题:

现象可能原因
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

面试中描述排查过程的示例#

“线上接口偶发超时,我的排查过程是:

  1. 先看监控,确认是特定下游服务的调用超时,不是全局问题
  2. ping 下游服务 IP,RTT 正常 2ms,无丢包——基本排除网络不通
  3. traceroute 看路径,发现路由经过了一个新的中间节点,延迟从 2ms 涨到 50ms——可能是路由变更
  4. tcpdump 抓包确认:TCP 建连正常,但部分请求有重传——说明该链路有丢包
  5. 结论:运营商路由变更导致部分流量走了拥塞链路,联系运维调整路由策略”
面试回答(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 端口可能有不同的防火墙规则
  • ❌ 抓包不设过滤条件——流量太大,无法分析