⚠️ 本页是本课程的考试复习总纲。建议在期中前两周和期末前两周各完整过一遍。
一、⭐ 必背公式卡
建议直接抄到 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 DISCOVER 或 DHCP 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.5、192.168.200.1、10.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.0 – 192.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(基本未部署)。