🔧 工具:Wireshark 4.x(免费,全平台)


环境与安全须知

# 安装
# macOS:    brew install --cask wireshark
# Ubuntu:   sudo apt install wireshark
# Windows:  从 wireshark.org 下载

⚠️ 重要的伦理与法律提醒

⭐ 只抓取【你自己产生的】流量。
⭐ 不要在公共网络上抓取他人流量 —— 这在多数司法辖区是违法的,
   也违反学校的可接受使用政策(AUP)。
⭐ 抓包文件可能包含 Cookie、令牌等敏感信息。提交前请检查,
   必要时用 Wireshark 的 "Export Specified Packets" 只导出相关分组。

基础过滤器速查

目的 显示过滤器
只看 HTTP http
只看某主机 ip.addr == 93.184.216.34
只看 DNS dns
只看某条 TCP 连接 右键分组 → Follow → TCP Stream
TCP 重传 tcp.analysis.retransmission
只看握手 tcp.flags.syn == 1
排除本机 SSH not tcp.port == 22

Part A:HTTP(12 分)

捕获:开始抓包 → 访问 http://gaia.cs.umass.edu/wireshark-labs/HTTP-wireshark-file1.html(一个纯 HTTP 的教学页面)→ 停止抓包。

⭐ 用 http 过滤。

A1. 基本请求响应(4 分)

  1. 你的浏览器使用的 HTTP 版本是什么?服务器呢?
  2. 浏览器声明接受哪些语言(Accept-Language)?
  3. ⭐ 你的 IP 和服务器 IP 分别是什么?在哪一层的哪个字段里看到的?
  4. 服务器返回的状态码是什么?
  5. HTML 文件被修改的时间是什么(Last-Modified)?
  6. 服务器返回了多少字节的内容(Content-Length)?

A2. 条件 GET(4 分)⭐

刷新页面两次(第二次用普通刷新,不要强制刷新)。

  1. ⭐ 第二次请求中出现了什么新的首部?它的值从哪来?
  2. ⭐ 服务器这次返回的状态码是什么?
  3. 这次响应包含实体体吗?大小是多少?
  4. 计算:这次交互节省了多少字节?节省了几个 RTT?(第 5 讲)

A3. 含多个对象的页面(4 分)

访问一个包含多张图片的页面。

  1. 一共发出了多少个 HTTP 请求?
  2. ⭐ 它们使用了几条 TCP 连接?(提示:看源端口)
  3. ⭐ 这些请求是串行还是并行发出的?用时间戳证明你的判断
  4. 结合第 5、6 讲,解释你观察到的行为对应哪种连接策略

Part B:DNS(10 分)

捕获:清空 DNS 缓存后访问一个新网站。

# macOS:   sudo dscacheutil -flushcache
# Linux:   sudo systemd-resolve --flush-caches
# Windows: ipconfig /flushdns

⭐ 用 dns 过滤。

B1. 查询与响应(5 分)

  1. ⭐ DNS 查询使用的是 UDP 还是 TCP?端口号是多少?为什么是这个选择(第 10 讲)?
  2. 查询报文的目的 IP 是什么?它对应你系统配置中的哪一项?
  3. 查询的是什么类型的记录?
  4. ⭐ 响应中返回了几条记录?有 CNAME 吗?各自的 TTL 是多少?
  5. ⭐ 查询报文和响应报文的事务 ID 是否相同?这个字段的作用是什么(第 7 讲的缓存投毒)?

B2. 时序分析(5 分)⭐

  1. 测量从 DNS 查询发出到响应到达的时间
  2. ⭐ 找到该 DNS 响应之后的第一个 TCP SYN 分组,测量二者的时间差
  3. 计算:DNS 解析占了"从输入网址到 TCP 连接建立"总时间的百分之多少?
  4. 结合第 29 讲的时间线,说明这个比例是否符合预期

Part C:TCP(20 分)⭐ 本实验的核心

捕获:抓一次下载较大文件的过程(建议 1–10 MB)。

⭐ 用 tcp 过滤,并 Follow → TCP Stream 锁定一条连接。

C1. 三次握手(4 分)

  1. ⭐ 找到 SYN、SYN-ACK、ACK 三个分组,记录各自的 SeqAck
  2. ⭐ 客户端和服务器的**初始序号(ISN)**分别是多少?它们是 0 吗?为什么(第 13 讲)?
  3. ⭐ 握手中协商了哪些 TCP 选项?找出 MSS、窗口缩放因子、SACK 支持
  4. 测量握手耗时。它应当约等于什么?

C2. 序号与确认号(4 分)

选取传输中间的连续三个数据分组。

  1. 制表列出每个分组的 Seq、Ack、payload 长度
  2. ⭐ 验证:下一个分组的 Seq = 上一个分组的 Seq + payload 长度
  3. ⭐ 验证:ACK 值 = 已按序收到的最后一个字节 + 1
  4. 是否观察到捎带确认(携带数据的分组同时确认了对方的数据)?

C3. 拥塞窗口的增长 ⭐(6 分)

⭐ 使用 Statistics → TCP Stream Graphs → Time Sequence (Stevens)

  1. 截图并标注这张图
  2. ⭐ 找出慢启动阶段:斜率是如何变化的?
  3. ⭐ 通过统计"每个 RTT 内发出的未确认字节数",估算 cwnd 在前 5 个 RTT 的值
  4. ⭐ 是否观察到斜率从指数变为线性的转折点?如果有,它对应什么(第 16 讲)?
  5. 是否观察到丢包(重传)?如果有,重传后的斜率发生了什么变化?

C4. 重传分析(4 分)

⭐ 用过滤器 tcp.analysis.flags

  1. 是否有重传?如果有,是超时重传还是快速重传
  2. ⭐ 判断依据是什么?(提示:看重传前是否有连续 3 个重复 ACK)
  3. 是否观察到 SACK 选项?它告诉了发送方什么?
  4. 若完全没有重传,说明什么?换一个更差的网络环境(如手机热点)再抓一次

C5. 连接关闭(2 分)

  1. ⭐ 找到 FIN。一共有几个 FIN?为什么(第 14 讲)?
  2. 是谁先发起关闭的?
  3. ⭐ 是否观察到 RST?如果有,可能是什么原因?

Part D:IP 与以太网(12 分)

D1. IP 头部(4 分)

任选一个 TCP 分组,展开 IP 层。

  1. IP 头部长度是多少字节?有选项吗?
  2. ⭐ TTL 是多少?(Windows、Linux、macOS 的初始 TTL 各不相同——你能推断出对方是什么系统吗?)
  3. 上层协议字段的值是多少?对应什么协议?
  4. 是否发生了分片?如何判断(看哪三个字段)?

D2. TTL 逐跳递减(4 分)⭐

# 一边抓包,一边执行
traceroute -q 1 www.wikipedia.org

⭐ 用过滤器 icmp

  1. ⭐ 找到 TTL = 1、2、3 的三个出站探测分组
  2. ⭐ 找到对应的三个 ICMP 响应,记录它们的类型和代码
  3. ⭐ 最后一个响应的类型和代码与前面的不同吗?为什么(第 22 讲)?

D3. 以太网与 ARP(4 分)⭐

⭐ 用过滤器 arp(若没有,先执行 arp -d 清空 ARP 缓存再访问网络)。

  1. ⭐ ARP 请求的目的 MAC 是什么?为什么是这个值?
  2. ARP 响应的源 MAC 是谁的?
  3. ⭐ 随便找一个访问外网的 IP 分组,记录它的目的 MAC。它是目标服务器的 MAC 吗?为什么?
  4. ⭐ 结合第 24 讲,用你抓到的数据说明「IP 端到端不变,MAC 逐跳更换」

Part E:802.11 无线(6 分,选做加分)

⚠️ 需要支持监听模式(monitor mode)的无线网卡。若你的设备不支持,可使用课程提供的示例抓包文件 wifi_capture.pcapng

⭐ 用过滤器 wlan

  1. ⭐ 找到一个信标帧(Beacon)。它的发送间隔是多少?包含哪些信息(SSID、支持速率)?
  2. ⭐ 找到一个数据帧,指出它的四个地址字段分别是什么。为什么需要四个(第 25 讲)?
  3. ⭐ 找到一个数据帧及其对应的 ACK。测量二者的时间间隔,与 SIFS 的标准值比较
  4. 是否观察到重传(帧控制字段中的 Retry 位为 1)?重传率是多少?

提示与常见困难

Q:抓到的全是 TLS 加密流量,看不到 HTTP。 A:这正是本课程要教的东西起作用了。Part A 请使用指定的 http:// 教学页面。若要解密自己的 HTTPS 流量,可以设置 SSLKEYLOGFILE 环境变量并在 Wireshark 中配置——这是一个很好的加分探索,但注意它只对你自己的浏览器有效(第 28 讲)。

Q:分组太多,找不到我要的。 A:先用捕获过滤器(Capture Filter,如 host example.com)减少噪声,再用显示过滤器精确定位。两者语法不同,别混淆。

Q:C3 的 cwnd 怎么估算? A:cwnd ≈ 某一时刻的在途未确认字节数。在 Time-Sequence 图上,就是同一时刻「已发送曲线」与「已确认曲线」之间的垂直距离。Wireshark 的 Window Scaling 图也有帮助。


为什么这个实验重要

📌 期末考试会给你一段真实的抓包摘要,要求你解释发生了什么。能读懂抓包,是这门课与"背过这门课"之间最实在的区别。

📌 在工作中,抓包是网络问题排查的终局手段。当日志、监控、猜测都失效时,抓包告诉你线上到底传了什么。