找回密码
立即注册
搜索
发回帖 发新帖

4924

积分

0

好友

636

主题
发表于 1 小时前 | 查看: 6| 回复: 0

本文是《抓包分析与网络调试全解析》的配套内容,整理了 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. 定位 + 修复
   找到根因 → 修复 → 验证 → 监控

参考:抓包分析与网络调试全解析 - 最佳实践


参考资料

  1. 抓包分析与网络调试全解析
  2. Wireshark 官方文档
  3. tcpdump 手册



上一篇:LoRA微调面试13问:大模型参数高效微调核心考点全解
下一篇:自研 Redis 分布式 Session 实战:多端登录与滑动过期
您需要登录后才可以回帖 登录 | 立即注册

手机版|小黑屋|网站地图|云栈社区 ( 苏ICP备2022046150号-2 )

GMT+8, 2026-10-4 05:21 , Processed in 0.076414 second(s), 38 queries , Gzip On.

Powered by Discuz! X3.5

© 2025-2026 云栈社区.

快速回复 返回顶部 返回列表