CS 168 · DISCUSSION 07 · GUIDED REASONING WORKBOOK
把 cwnd 当成 sender 的动态 state:每个 ACK/loss event 都要先判断类型,再应用 transition,最后检查还能发多少新数据。
无需离开 CourseStack:先预测,再在表格、时间线或状态空间里完成推导;卡住时逐层打开提示,最后才展开解释与变式。
已阅读 Spring 2026 worksheet 与 official solution;以下是原创等价练习。官方 IDs 用于 coverage,对精确原题请回到页末 PDF。
对应官方 1.1、1.2、1.3、1.4、1.5
Why the official problem exists:把 reliability、flow control、congestion control 和 Karn ambiguity 放进具体 failure。
receiver buffer 充足;路由器 queue 满;某 packet 被重传后收到 ACK。
先预测:重传 packet 的 ACK 可直接更新 RTT estimator 吗?
为 receiver slow、network overloaded、packet lost 各填 mechanism/state/signal;再比较 AIMD、AIAD、MIMD、MIAD 的 fairness 轨迹。
先问被保护的是 receiver 还是 network。
干净 RTT sample 必须对应唯一发送时刻。
AIMD 的加性阶段保持差距,乘性阶段缩小差距。
flow control 看 rwnd;congestion control 看 cwnd 与 loss/ECN/RTT;reliability 看 seq/ACK/timer。重传 ACK 不用于 RTT sample。理想模型中 AIMD 同时趋向效率与公平。
同样的“慢下来”输出若依据不同 state,就解决不同问题。
receiver rwnd=4、cwnd=10;网络发生 loss 后 cwnd=5。两次可发送上限分别是多少?
对应官方 2.1、2.2
Why the official problem exists:检查 triple duplicate ACK 的计数、重传时刻和退出 recovery 的新 ACK。
CA 状态,last ACK=101,cwnd=10 packets;seq102 首次丢失,103–111 到达并持续产生 ACK102,RTT=1s。
先预测:何时触发 fast retransmit?
| event | dup count | cwnd no recovery | cwnd with recovery | send |
|---|---|---|---|---|
| new ACK102 | 0 | 10.1 | 10.1 | 111 |
| 第三 dup ACK102 | 3 | ____ | ____ | reTX ____ |
| 额外 dup ACK | 4+ | ____ | ____ | 新数据? |
| new ACK112 | — | ____ | ____ | ____ |
先设 ssthresh=floor(cwnd/2)。
recovery 中每个额外 dup ACK 表示一包离开网络。
覆盖缺口的新 ACK 才退出 recovery。
第三 dup ACK 时两者都重传 102、ssthresh≈5;无 recovery 的 cwnd=5 且不因重复 ACK 增长。fast recovery 先设 cwnd=8,额外 dup ACK 逐一膨胀并可发送,ACK112 后退回 ssthresh=5。
dup ACK 在 recovery 中近似提供“一包已离开 pipe”的 clock,但不能推进累计 ACK 边界。
若 103/104 发生重排但 102 最终到达,阈值为何能减少伪重传却不能完全避免?
对应官方 3.1、3.2、3.3
Why the official problem exists:让 1/(RTT√p) 成为可复现推导,而非背诵。
general AIMD:每 RTT 加 A;到 W 发生一次 loss;乘 M<1,窗口回到 MW。
先预测:一个 cycle 的平均 window?
求 cycle rounds=(W-MW)/A;用梯形面积估计发送 packets,令每 cycle 一次 loss 得 p;最后代 M=.5,A=1。
throughput=average window/RTT。
loss probability≈1/(cycle packets)。
先由 p 解出 W,再代 throughput。
平均窗口=W(M+1)/2;throughput=W(M+1)/(2RTT)。cycle packets 与 W² 成正比,所以 W 与 1/√p 成正比;M=.5,A=1 时得到约 3/(RTT√(2p))。
平方根来自“线性增长的轮数×平均窗口”形成的三角/梯形面积。
A 加倍会怎样改变 cycle 长度、loss probability 与 fairness aggressiveness?
自选 cwnd=12、丢 seq205 的 timeline,分别画有/无 fast recovery;再从一般 A、M 重新推一次 average throughput。