本文是《抓包分析与网络调试全解析》的配套内容,整理了 10 道 面试自测 题与参考答案。
- 面试自测
- 参考答案
- Q1:tcpdump 基本用法
- Q2:Wireshark 过滤器
- Q3:HTTPS 抓包与解密
- Q4:接口超时排查流程
- Q5:netstat vs ss
- Q6:DNS 解析问题排查
- Q7:SSL/TLS 握手失败排查
- Q8:WireMock 使用
- Q9:TCP 重传分析
- Q10:网络诊断 SOP
- 参考资料
面试自测
| # |
题目 |
对应章节 |
| Q1 |
tcpdump 基本用法 |
核心内容二 |
| Q2 |
Wireshark 过滤器 |
核心内容一 |
| Q3 |
HTTPS 抓包与解密 |
核心内容三 |
| Q4 |
接口超时排查流程 |
分场景讨论 |
| Q5 |
netstat vs ss |
对比分析 |
| Q6 |
DNS 解析问题排查 |
分场景讨论 |
| Q7 |
SSL/TLS 握手失败排查 |
分场景讨论 |
| Q8 |
WireMock 使用 |
单元测试 |
| Q9 |
TCP 重传分析 |
核心内容一 |
| Q10 |
网络诊断 SOP |
最佳实践 |
参考答案
Q1:tcpdump 基本用法
参考答案:
# 抓指定端口的包
tcpdump -i eth0 port 8080 -n
# 抓 HTTP 请求
tcpdump -i eth0 port 80 -A -s 0 'tcp[((tcp[12:4]>>2):4] = 0x47455420'
# 保存为 pcap 文件(用 Wireshark 分析)
tcpdump -i eth0 -w capture.pcap
# 过滤特定 IP
tcpdump host 192.168.1.100
# 过滤特定网段和端口
tcpdump net 10.0.0.0/8 and port 3306
# 查看抓包数量统计
tcpdump -i eth0 -c 100 -q
参考:抓包分析与网络调试全解析 - 核心内容二
Q2:Wireshark 过滤器
参考答案:
在 Wireshark 中,过滤器分为“显示过滤器”和“捕获过滤器”两类,常用示例如下:
| 过滤器类型 |
示例 |
说明 |
| 显示过滤器 |
tcp.port == 8080 |
过滤后显示 |
| 显示过滤器 |
ip.src == 10.0.0.1 |
源 IP |
| 显示过滤器 |
http.request.method == "POST" |
HTTP POST |
| 显示过滤器 |
tcp.flags.syn == 1 |
SYN 包 |
| 捕获过滤器 |
port 8080 |
捕获时过滤 |
| 追踪流 |
右键 → Follow → TCP Stream |
查看完整对话 |
参考:抓包分析与网络调试全解析 - 核心内容一
Q3:HTTPS 抓包与解密
参考答案:
HTTPS 抓包(抓到的包是加密的):
┌─────────────────────────────┐
│ Client Hello (明文) │ 能看到
│ Encrypted Handshake (密文) │ 看不到
│ HTTP Body (密文) │ 看不到
└─────────────────────────────┘
HTTPS 解密(需要 SSL Key Log):
1. 设置环境变量 SSLKEYLOGFILE=/tmp/keys.log
2. 客户端(如 curl/浏览器)启动时自动写入密钥
3. Wireshark → Preferences → Protocols → TLS → (Pre)-Master-Secret log file
4. 重新抓包 → 可看到明文 HTTP
curl 方式:
SSLKEYLOGFILE=/tmp/keys.log curl -k https://example.com
参考:抓包分析与网络调试全解析 - 核心内容三
Q4:接口超时排查流程
参考答案:
接口超时排查 SOP:
1. 确认超时现象
→ 看接口响应时间(应用日志/APM)
→ 确认是客户端超时还是服务端超时
2. 客户端排查
→ curl -w "@curl-format.txt" URL 查看各阶段耗时
→ 确认 DNS 解析/连接/传输耗时
3. 服务端排查
→ 查应用日志:方法耗时、SQL 耗时
→ jstack 看线程状态:是否阻塞
→ 查看 GC日志:是否 Full GC 停顿
4. 网络层排查
→ tcpdump 抓包看网络传输耗时
→ 看是否有 TCP 重传/乱序
→ traceroute 查看网络跳数
5. 数据库排查
→ 慢查询日志
→ EXPLAIN 执行计划
→ 锁等待
参考:抓包分析与网络调试全解析 - 分场景讨论
Q5:netstat vs ss
参考答案:
| 维度 |
netstat |
ss |
| 数据来源 |
/proc/net 全量读取 |
内核 socket 直接查询 |
| 速度 |
慢(大量连接时明显) |
快 |
| 功能 |
基础连接信息 |
更丰富的过滤 |
| 推荐度 |
逐渐被 ss 替代 |
推荐使用 |
# 查看连接状态分布
ss -tan | awk '{print $1}' | sort | uniq -c | sort -rn
# 输出:LISTEN 15, ESTAB 200, TIME-WAIT 50
# 查看某端口连接数
ss -tnp | grep 8080
# 查看 TCP 统计信息
ss -s
参考:抓包分析与网络调试全解析 - 对比分析
Q6:DNS 解析问题排查
参考答案:
# 1. 查看 DNS 解析
nslookup www.example.com
dig www.example.com
# 2. 查看 hosts 文件
cat /etc/hosts
# 3. 查看 DNS 配置
cat /etc/resolv.conf
# nameserver 8.8.8.8
# 4. 查看 DNS 缓存
systemd-resolve --statistics
# 5. 抓包看 DNS 查询
tcpdump -i eth0 -n port 53
# 常见问题:
# - DNS 解析慢:配置多个 nameserver
# - DNS 污染:使用可靠的 DNS 服务(8.8.8.8 / 114.114.114.114)
# - hosts 配置错误:检查 /etc/hosts
参考:抓包分析与网络调试全解析 - 分场景讨论
Q7:SSL/TLS 握手失败排查
参考答案:
SSL/TLS 握手失败排查:
1. 使用 openssl 测试
openssl s_client -connect example.com:443 -tls1_2
openssl s_client -connect example.com:443 -tls1_3
2. 查看证书信息
openssl s_client -connect example.com:443 -showcerts
3. 检查证书链是否完整
curl -vI https://example.com
→ 查看 SSL certificate problem 错误
4. 查看服务端 TLS 配置
nmap --script ssl-enum-ciphers -p 443 example.com
5. 常见错误:
- 证书过期:检查 cert 有效期
- 域名不匹配:cert 的 CN/SAN 必须包含域名
- 证书链不完整:中间证书未安装
- TLS 版本不匹配:客户端不支持服务端版本
参考:抓包分析与网络调试全解析 - 分场景讨论
Q8:WireMock 使用
参考答案:
WireMock 常用来隔离外部依赖,配合 单元测试 使用。下面演示 mock 外部 API 的典型写法:
// WireMock 测试外部依赖
@Rule
public WireMockRule wireMockServer = new WireMockRule(8089);
@Test
public void testExternalApiCall() {
// Mock 外部 API
wireMockServer.stubFor(get(urlEqualTo("/api/users/1"))
.willReturn(aResponse()
.withStatus(200)
.withHeader("Content-Type", "application/json")
.withBody("{\"id\":1,\"name\":\"小A\"}")));
// 调用被测服务
User user = userService.getUser(1);
// 验证
assertThat(user.getName()).isEqualTo("小A");
wireMockServer.verify(getRequestedFor(urlEqualTo("/api/users/1")));
}
// 模拟异常场景
wireMockServer.stubFor(get(urlEqualTo("/api/slow"))
.willReturn(aResponse()
.withStatus(500)
.withFixedDelay(5000))); // 延迟 5 秒
参考:抓包分析与网络调试全解析 - 单元测试
Q9:TCP 重传分析
参考答案:
Wireshark 查看 TCP 重传:
- 过滤器输入:tcp.analysis.retransmission
- 统计 → 端点 → TCP 查看重传比例
重传原因分析:
1. 丢包(网络拥塞/路由器缓冲区满)
2. 超时(RTT 过长或路径异常)
3. 乱序(reordering 导致快速重传)
解决方法:
1. 网络问题:检查网络设备/带宽
2. 应用层:增大超时时间、优化数据包大小
3. 接收端:调大 TCP 接收窗口
查看 TCP 窗口大小:
tcpdump -i eth0 -n 'tcp[tcpflags] & (tcp-syn|tcp-fin) == 0' -A
参考:抓包分析与网络调试全解析 - 核心内容一
Q10:网络诊断 SOP
参考答案:
网络问题诊断标准流程:
1. 确认问题
ping 目标IP → 网络是否通
curl -v URL → HTTP 层是否正常
telnet IP 端口 → TCP 层是否正常
2. 分层排查
应用层:curl 查看 HTTP 状态码/响应头
传输层:tcpdump 查看 TCP 状态(重传/乱序/窗口)
网络层:traceroute 查看路由路径
链路层:ethtool 查看网卡状态/错误计数
3. 工具链
ping → 通断测试
traceroute → 路由追踪
netstat/ss → 连接状态
tcpdump → 抓包分析
Wireshark → 深度分析
4. 定位 + 修复
找到根因 → 修复 → 验证 → 监控
参考:抓包分析与网络调试全解析 - 最佳实践
参考资料
- 抓包分析与网络调试全解析
- Wireshark 官方文档
- tcpdump 手册