CS 168 · DISCUSSION 08 · GUIDED REASONING WORKBOOK

DNS、HTTP、性能与以太网

沿一次网页加载的真实依赖链推:先解析名字,再建立连接,再取 HTML,看到资源 URL 后才能并发或复用。

现在轮到你推

无需离开 CourseStack:先预测,再在表格、时间线或状态空间里完成推导;卡住时逐层打开提示,最后才展开解释与变式。

已阅读 Spring 2026 worksheet 与 official solution;以下是原创等价练习。官方 IDs 用于 coverage,对精确原题请回到页末 PDF。

忘记机制?回到 L15 DNS 与 L16 HTTP →

对应官方 1.1、1.2、1.3、1.4、1.5、1.6

1 · 用 state/failure 诊断 DNS 与 HTTP 断言

Why the official problem exists:避免把 anycast、TCP state、root query 与 HTTP pipelining 当成孤立事实。

同一 root anycast IP 在不同地点由多台无共享 TCP state 的 server 提供;client 需要解析并加载页面。

先预测:为何通常不用长 TCP connection 查询任意 root replica?

Work It Out

逐条判断:host 是否自己迭代、zone 是否冗余 nameserver、BGP anycast 与 TCP state 是否兼容、pipelining 与 multiplexing 差异。

Hint 1 · Concept

每个断言都问 state 存在哪。

Hint 2 · State / Invariant

recursive resolver 承担迭代。

Hint 3 · First Step

HTTP/2 multiplexing 可避免应用层队头阻塞。

Reveal · 展开完整推导

host 通常把递归交给 local resolver;zone 需要冗余权威;root 用 anycast 接近用户;无连接查询更适合 replica path 变化。HTTP/1.1 pipelining 实践受 bugs/HOL 限制。

Why This Works

协议选择由状态放置和 failure behavior 解释,而非“常用/不常用”记忆。

Variation

若 anycast 服务用共享连接状态或 QUIC connection migration,哪些限制会变化?

对应官方 2.1、2.2、2.3

2 · 冷缓存、永久热缓存与有限 TTL

Why the official problem exists:把 cache hit 计算建立在绝对 expiry time,而不是“每 30 秒一定查询一次”。

client↔resolver one-way=a;resolver 依次访问 root/TLD/authority 的 RTT 为 2b、2c、2d、2e;website RTT=2t;总时间 T。

先预测:第一份 DNS answer 何时开始 TTL?

Work It Out

写 cold order cost;写 TTL≥T 后 first 与 subsequent cost;令所有 one-way=1s、TTL=30s,画 cache fill、expiry、orders 的绝对时间轴。

Hint 1 · Concept

第一单与后续单分开。

Hint 2 · State / Invariant

TTL 从 resolver 获得记录时算。

Hint 3 · First Step

有限 TTL 用 cycle timeline,不要只做 T/TTL。

Reveal · 展开完整推导

cold cost=2a+2b+2c+2d+2e+2t;热 cache 后每单=2a+2t。有限 TTL 下先标 fill time,再数 expiry 前能完成的 requests,过期后下一次触发完整解析。

Why This Works

cache 是带期限 state;request timing 决定 hit/miss event。

Variation

CNAME 与 A 有不同 TTL,哪个先过期会让第二次访问少走哪些 authority steps?

对应官方 3.1、3.2、3.3、3.4、3.5

3 · HTML 依赖、连接复用与并发 timeline

Why the official problem exists:检查 handshake、request propagation、transmission 和资源发现依赖是否被重复/并行计数。

HTML size=P,内含两个 M-sized images;small message one-way=z;单连接 throughput=T,并发两连接各 T/2。

先预测:两个 image 可以在 HTML 完成前请求吗?

Work It Out

为 sequential nonpersistent、concurrent nonpersistent、persistent sequential、pipelined 四种画 critical path,只把并行分支的 max 加入总时间。

Hint 1 · Concept

先画 DAG,再算长度。

Hint 2 · State / Invariant

persistent 只付一次 handshake。

Hint 3 · First Step

小 object propagation 主导,大 object transmission 主导。

Reveal · 展开完整推导

nonpersistent sequential 重复三次 handshake;concurrent 在 HTML 后并行两套 image handshake;persistent 复用连接;pipelining 同时发两个 requests 但 response 在单连接上仍序列化。所有模式都先等待 HTML。

Why This Works

性能来自 critical path,而非简单把所有 message delay 相加。

Variation

若两个 images 来自不同 origins,persistent connection 能复用到哪里?

对应官方 4.1、4.2

4 · 代理缓存的两条 TCP state 与 LRU

Why the official problem exists:区分 client-proxy 与 proxy-origin 连接,并追 cache capacity=2 的逐请求状态。

proxy 缓存最近两个 objects;序列 A,B,C,D,C,A。link latency=L,Internet latency=I;miss 时 proxy 与两端各有独立 TCP session。

先预测:访问 C 第二次时?

Work It Out

requestcache beforehit/misscache after
A[]________
B[A]________
C[A,B]________
D,C,A____________
Hint 1 · Concept

每次 miss 插入并 evict 最久未用。

Hint 2 · State / Invariant

hit 也刷新 recency。

Hint 3 · First Step

延迟只沿当前 request 的实际路径计。

Reveal · 展开完整推导

A miss→[A];B miss→[A,B];C miss 淘汰 A→[B,C];D miss→[C,D];C hit→[D,C];A miss→[C,A]。hit 不穿越 Internet,miss 由 proxy-origin session 提供。

Why This Works

缓存性能取决于 state evolution,不是 object 是否“曾经访问过”。

Variation

改为 FIFO,重跑 D,C,A;哪次结果与 LRU 不同?

Closed-book reconstruction

从空 DNS/cache 开始,为 HTML+3 resources 画一次完整 message DAG;指定 TTL 与 LRU=2,闭卷推第二次访问省掉的边。

一手资料