⚠️ 本页是本课程的考试复习总纲。建议在期中前两周和期末前两周各完整过一遍。


一、⭐ 必背公式卡

建议直接抄到 cheat sheet 第一页。

时延与吞吐量(第 3 讲)

传输时延  d_trans = L / R                (L=分组长度 bit, R=带宽 bps)
传播时延  d_prop  = d / s                (d=距离 m, s≈2×10⁸ m/s)
节点总时延 d_node = d_proc + d_queue + d_trans + d_prop

流量强度  ρ = L·a / R                    (a=分组到达率)
排队时延  E[d_queue] ∝ ρ/(1−ρ)           ⭐ 非线性,逼近 1 时爆炸

端到端吞吐量 = min(R₁, R₂, ..., Rₙ)      (瓶颈链路)
⭐ 带宽时延积 BDP = R × RTT               (管道容量,单位 bit)

存储转发(第 2 讲)

1 个分组 N 跳:  d = N × (L/R)
P 个分组 N 跳:  ⭐ d = (N + P − 1) × (L/R)

HTTP(第 5 讲)

非持续连接每个对象:  2 × RTT + 传输时间
持续+流水线 n 个对象: 1 RTT(握手) + 1 RTT(首个) + 1 RTT(其余 n−1 批量)

可靠传输(第 11–12 讲)

停等利用率     U = (L/R) / (RTT + L/R)
流水线利用率   U = N × (L/R) / (RTT + L/R)      (N 为窗口)
跑满所需窗口   W ≥ BDP / L

⭐ 序号空间约束:
   GBN: ≥ N + 1
   SR:  ≥ 2N
   通用: ≥ 发送窗口 + 接收窗口

TCP(第 13–16 讲)

EstimatedRTT = 0.875 × EstimatedRTT + 0.125 × SampleRTT
DevRTT       = 0.75 × DevRTT + 0.25 × |SampleRTT − EstimatedRTT|
⭐ Timeout   = EstimatedRTT + 4 × DevRTT

rwnd = RcvBuffer − (LastByteRcvd − LastByteRead)
发送窗口 = min(cwnd, rwnd)
速率 ≈ cwnd / RTT

⭐ 平均吞吐量 ≈ 0.75 × W / RTT
⭐ 吞吐量 ≈ 1.22 × MSS / (RTT × √L)      (L 为丢包率)
丢包率关系   L ≈ 8 / (3W²)

网络层(第 17–18 讲)

/x 前缀:  地址数 = 2^(32−x)
          ⭐ 可用主机数 = 2^(32−x) − 2
掩码: /24=255.255.255.0  /25=.128  /26=.192  /27=.224  /28=.240  /29=.248  /30=.252

分片: 每片数据 ≤ (MTU − 20) 且必须是 8 的倍数
     ⭐ 片偏移 = 前面所有片的数据字节数 ÷ 8

⭐ 令牌桶 (r, b):  任意区间 t 内流量 ≤ r·t + b
   桶满时可瞬间放行 b;长期均值被限制在 r
⭐ 令牌桶 (r,b) + WFQ 保证速率 R:  最大排队时延 = b / R

实时多媒体(第 8 讲)

⭐ 播放时刻  p_i = t_i + q        (q = 固定播放时延)
   若到达时刻 r_i > p_i → 错过播放,等同丢包

⭐ 全部不丢的最小播放时延 q = max(r_i − t_i)   即最大网络时延
   抖动 = 最大网络时延 − 最小网络时延

链路层(第 23–24 讲)

⭐ 时隙 ALOHA 最大效率 = 1/e  ≈ 0.37
⭐ 纯 ALOHA 最大效率   = 1/2e ≈ 0.18
⭐ 以太网最小帧 = 2τ × R = 512 bit = 64 字节   (τ 为单向最大传播时延)
CRC: 找 R 使 <D,R> 能被 G 模 2 整除;⭐ 模 2 加减 = XOR
     r 位 CRC 保证检出所有长度 ≤ r 的突发错误
二进制指数退避: 第 m 次碰撞后从 {0,...,2^m −1} 选 K,等 K×512 比特时间

二、⭐ 高频考点清单

期中范围(第 1–14 讲)

考点 出现概率 讲次
⭐ 传输时延 vs 传播时延 ★★★★★ 3
⭐ 转发 vs 路由 ★★★★★ 2
⭐ 统计复用的概率计算 ★★★★ 2
⭐ 带宽时延积与窗口大小 ★★★★★ 3, 11
⭐ 非持续 vs 持续连接的 RTT 计算 ★★★★★ 5
缓存命中率与流量强度 ★★★★ 6
⭐ 递归 vs 迭代 DNS 查询 ★★★★ 7
P2P 分发时间的三项约束 ★★★ 8
⭐ 播放缓冲与固定播放时延计算 ★★★★ 8
为什么实时应用来不及重传 ★★★★ 8
⭐ UDP 二元组 vs TCP 四元组 ★★★★★ 10
反码校验和手算 ★★★ 10
⭐ rdt 演进:缺陷 → 机制 ★★★★ 11
⭐ GBN vs SR 的报文追踪 ★★★★★ 12
⭐ 序号空间证明(N+1 与 2N) ★★★★ 12
⭐ TCP 序号/确认号计算 ★★★★★ 13
RTT 估计与超时计算 ★★★★ 13
⭐ 快速重传为什么是 3 个重复 ACK ★★★★ 13
⭐ 三次握手为什么不能两次 ★★★★★ 14
⭐ TIME_WAIT 的两个理由与 2MSL ★★★★★ 14
零窗口死锁与窗口探测 ★★★ 14

期末新增(第 15–29 讲)

考点 出现概率 讲次
⭐ AIMD 相图论证 ★★★★★ 15
⭐ cwnd 演化判读 ★★★★★ 16
TCP 吞吐量与丢包率公式的应用 ★★★★ 16
Bufferbloat 与 AQM ★★★ 16
⭐ 最长前缀匹配 ★★★★★ 17
队头阻塞的三次出现 ★★★ 17
⭐ 令牌桶 r·t + b 与突发计算 ★★★★ 17
监管 / 整形 / 调度的区别 ★★★★ 17
IntServ 为何失败、DiffServ 为何仍在用 ★★★ 17
⭐ VLSM 子网划分 ★★★★★ 18
⭐ IP 分片计算 ★★★★ 18
NAT 的争议与打洞 ★★★★ 18
IPv6 部署缓慢的原因 ★★★ 19
OpenFlow 匹配+动作 ★★★ 19
⭐ Dijkstra 完整迭代表 ★★★★★ 20
⭐ 无穷计数与毒性逆转的局限 ★★★★★ 20
⭐ BGP 选路顺序与 Gao-Rexford ★★★★★ 21
⭐ RPKI 验证什么、不验证什么 ★★★★ 21
⭐ traceroute 完整原理 ★★★★ 22
⭐ CRC 模 2 除法 ★★★★ 23
⭐ 为什么强校验在链路层 ★★★★ 23
⭐ ALOHA 效率推导 ★★★★ 24
⭐ 以太网最小帧长推导 ★★★★★ 24
⭐ ARP 跨子网的四个地址 ★★★★★ 24
交换机自学习追踪 ★★★★ 24
⭐ Fat-Tree 主机数与核心交换机数 ★★★ 24
⭐ TCP incast 崩溃链条 ★★★★ 24
DCTCP 按比例降窗 vs 标准 TCP 砍半 ★★★ 24
⭐ 为什么无线不能做碰撞检测 ★★★★ 25
802.11 四个地址字段 ★★★ 25
⭐ TCP 在无线上的误判 ★★★★ 25
QUIC 连接迁移 ★★★ 26
⭐ 加密不能防重放(ap3.1) ★★★★ 27
⭐ 哈希/MAC/签名对比表 ★★★★★ 27
⭐ 前向保密 ★★★★ 28
证书验证六步 ★★★★ 28
⭐ 一个网页请求的一生 ★★★★★ 29

三、期中模拟题(选摘)

模拟题 1(12 分)

主机 A 通过三条链路向主机 B 发送一个 40 Mbit 的文件:

A ──[100 Mbps, 200 km]──▶ R1 ──[20 Mbps, 1000 km]──▶ R2 ──[50 Mbps, 100 km]──▶ B
分组大小 10,000 bit,传播速度 2×10⁸ m/s,忽略排队与处理时延

(a) 端到端吞吐量瓶颈是多少?(b) 传完整个文件大约需要多久?(c) 若把第一条链路升级到 1 Gbps,总时间变化多少?为什么?

解答

(a) min(100, 20, 50) = 20 Mbps,瓶颈在第二条链路。

(b) 分组数 P = 40×10⁶ / 10⁴ = 4000 个。

瓶颈链路传输一个分组: 10⁴ / 20×10⁶ = 0.5 ms
总传播时延: (200000 + 1000000 + 100000) / 2×10⁸ = 6.5 ms

⭐ 流水线节奏由瓶颈决定:
最后一个分组离开瓶颈链路的时刻 ≈ 4000 × 0.5 ms = 2000 ms
加上管道填充与剩余传播 ≈ 2000 + 6.5 + 少量 ≈ 2007 ms

验证:40 Mbit ÷ 20 Mbps = 2000 ms ✓(与瓶颈估算一致)

(c)几乎没有变化(只减少了不到 1 ms 的管道填充时间)。因为 ⭐ 瓶颈仍然是第二条 20 Mbps 的链路——加粗不是瓶颈的那一段没有意义。这是本课程反复强调的水管类比。


模拟题 2(15 分)⭐

窗口 N = 3,序号空间 8。发送方发出 pkt0–pkt6。pkt1 丢失,其余到达,所有 ACK 正常。

(a) 用 GBN 写出接收方对每个到达分组的动作与 ACK 值,以及发送方总发包数。 (b) 用 SR 重做。 (c) 若序号空间改为 5,GBN 和 SR 分别是否安全?给出判据。

解答

(a) GBN(N=3,窗口 [0,1,2] → [1,2,3] → …)

pkt0 ✓ 交付, ACK0, expected=1
pkt1 ╳ 丢失
pkt2 → 乱序,丢弃,重发 ACK0
     (窗口 [1,2,3],send_base=1,还可发 pkt3)
pkt3 → 乱序,丢弃,重发 ACK0
[pkt1 超时] → 重传 pkt1, pkt2, pkt3
pkt1 ✓ ACK1, pkt2 ✓ ACK2, pkt3 ✓ ACK3
pkt4, pkt5, pkt6 ✓ 依次交付

⭐ 总发包数 = 7(原始)+ 3(重传 1,2,3)= 10 个

(b) SR

pkt0 ✓ 交付, ACK0
pkt1 ╳ 丢失
pkt2 → ⭐ 缓存, ACK2
pkt3 → ⭐ 缓存, ACK3
[仅 pkt1 超时] → 只重传 pkt1
pkt1 ✓ → ⭐ 一次性交付 1,2,3
pkt4, pkt5, pkt6 ✓

⭐ 总发包数 = 7 + 1 = 8 个

(c)

GBN 要求空间 ≥ N+1 = 4。  5 ≥ 4  ✅ 安全
SR  要求空间 ≥ 2N   = 6。  5 < 6  ❌ 不安全

SR 不安全的具体场景:发送方发 pkt0,1,2;接收方全收到、交付、接收窗口滑到 [3,4,0];三个 ACK 全丢;发送方超时重传 pkt0;⭐ 接收方看到序号 0 落在当前接收窗口内,误当作新分组接受 → 数据重复交付。


模拟题 3(10 分)

判断以下说法的正误并说明理由:

(a) 把一条链路的带宽翻倍,所有四种时延都会减半。 (b) TCP 超时后会重传窗口内所有未确认的报文段。 (c) 服务器的一个 socket 只能服务一个客户端。 (d) 三次握手的第三个报文不能携带数据。 (e) 收到 3 个重复 ACK 说明网络严重拥塞。

解答

(a) ❌ 传输时延减半;⭐ 传播时延完全不变(只与距离和介质有关);处理时延基本不变;排队时延减小(流量强度下降)。

(b) ❌TCP 超时只重传 SendBase 处最老的那一个报文段,这是 TCP 与 GBN 的重要区别。(GBN 才重传整个窗口。)

(c) ❌ ⭐ **对 TCP 成立,对 UDP 不成立。**UDP socket 由二元组标识,可以同时服务任意多个客户端;TCP socket 由四元组标识,一个连接套接字对应恰好一条连接。

(d) ❌ ⭐ **可以携带数据。**三次握手的第三个报文(ACK)允许携带应用数据,这也是 TCP Fast Open 的基础思想。

(e) ❌ ⭐ **恰恰相反,它说明拥塞是轻微的。**收到重复 ACK 意味着后续报文段仍在正常到达——网络是通的,只丢了一个。这正是 TCP Reno 对它只减半 cwnd、而对超时才退回 1 的原因。


四、期末模拟题(选摘)

模拟题 4(20 分)⭐ 综合题

小李在宿舍访问 https://www.example.edu,抓包发现:

① 3 个 DHCP 报文
② 2 个 ARP 报文
③ 若干 DNS 查询与响应
④ TCP SYN → SYN-ACK → ACK
⑤ TLS ClientHello → ServerHello+Certificate → Finished
⑥ HTTP GET → 200 OK

(a) 步骤 ① 缺少了一个报文,是哪一个?为什么会缺? (b) 步骤 ② 的两个 ARP 分别在查询谁?为什么需要两次? (c) 若 RTT = 50 ms,从步骤 ④ 到步骤 ⑥ 收到首字节,最少需要多少时间?假设 TLS 1.3。 (d) 若把 TLS 1.3 换成 TLS 1.2,(c) 的答案变成多少? (e) 若改用 HTTP/3(QUIC)且是会话恢复,(c) 的答案变成多少?

解答

(a) 缺少 DHCP DISCOVERDHCP OFFER 之一。⭐ 最可能的解释是:主机之前已经获得过租约,正在做续租——续租只需 REQUEST 和 ACK 两步,无需重新 DISCOVER。(若抓到的是 DISCOVER/OFFER/REQUEST 而缺 ACK,则说明 DHCP 失败。)

(b)

第一个 ARP:查询【本地 DNS 服务器】的 MAC(若 DNS 在同一子网)
            或查询【默认网关】的 MAC(若 DNS 在其他网络)
第二个 ARP:查询【默认网关】的 MAC —— 因为 www.example.edu 在外网

⭐ 需要两次,是因为两个目标分别属于不同的可达性类别:一个在本子网内(可直接通信),一个在外网(必须经网关)。若 DNS 服务器也在外网,则两次 ARP 会合并为一次(都查网关),此时抓包中只应看到一个 ARP。

(c)

④ TCP 三次握手:  1 RTT = 50 ms
⑤ TLS 1.3 握手:  1 RTT = 50 ms
⑥ HTTP 请求+首字节: 1 RTT = 50 ms
⭐ 合计 = 150 ms

(d) TLS 1.2 需要 2 RTT

50 + 100 + 50 = ⭐ 200 ms

(e) QUIC 会话恢复可以做到 0-RTT

⭐ QUIC 把传输握手与加密握手合并,会话恢复时
   【第一个分组就携带 HTTP 请求】
   
0(握手)+ 1 RTT(请求到首字节)= ⭐ 50 ms

⚠️ 但必须注意:0-RTT 数据没有重放保护,因此只能用于幂等请求(第 5、28 讲)。


模拟题 5(15 分)⭐

给定转发表与网络:

前缀              接口
192.168.0.0/16     1
192.168.128.0/17   2
192.168.128.0/20   3
0.0.0.0/0          4

(a) 判断 192.168.130.5192.168.200.110.0.0.1 的输出接口。 (b) 若要让 192.168.128.0/24 走接口 5,应该加一条什么规则?会影响其他地址吗? (c) ⭐ 假设有人恶意通告 192.168.130.0/24,会发生什么?这在 BGP 中对应什么攻击?

解答

(a)

192.168.130.5:  第三字节 130 = 10000010
  /16 ✓  /17 ✓(高 1 位 = 1)  /20 ✓(高 4 位 = 1000)
  ⭐ 最长 = /20 → 接口 3

192.168.200.1:  第三字节 200 = 11001000
  /16 ✓  /17 ✓(高 1 位 = 1)  /20 ✗(高 4 位 1100 ≠ 1000)
  ⭐ 最长 = /17 → 接口 2

10.0.0.1:  只匹配默认路由 → 接口 4

(b) 加一条 192.168.128.0/24 → 接口 5

只影响 192.168.128.0192.168.128.255 这 256 个地址,其余地址仍按原有的更短前缀匹配。⭐ 这正是最长前缀匹配的价值:可以用更具体的规则覆盖特例,而不必改动通用规则。

(c) 192.168.130.0/24/20 更长,⭐ 由最长前缀匹配,去往 192.168.130.x 的流量会被吸引到该恶意通告者

⭐ 在 BGP 中这对应 前缀劫持(prefix hijacking)。防御:RPKI 起源验证(检查通告者是否有 ROA 授权,以及前缀长度是否超出 maxLength)。⚠️ 但 RPKI 只验证起源,不验证 AS_PATH——攻击者伪造路径使起源看起来合法时仍可绕过,需要 BGPsec(基本未部署)。