CS 168 · LECTURE 13 · 2026-10-08 · 传输

拥塞控制:反馈、慢启动与 AIMD

流量控制保护接收端,拥塞控制保护网络;两者都限制发送,却依据完全不同的信号和瓶颈。

版本快照:Fall 2026 官方课表与在线教材,核对日期 2026-09-02;官网仍标注 under construction,日期与政策可能变化。

  1. 互联网地基
  2. 路由
  3. 传输
  4. 应用与端到端
  5. 数据中心
  6. 群体通信
  7. 无线与移动

本章核心问题

发送方看不见路由器队列,怎样只凭 ACK、丢包或时延推断全路径还能承受多少流量?

1 · 拥塞崩溃的反馈环

若所有发送方在丢包后立即更快重传,路由器队列会被无用副本占满,真正交付吞吐反而下降。拥塞控制必须让发送速率对网络反馈形成负反馈:容量紧张时减速,空闲时试探增加。

端到端方案从丢包、ECN 或 RTT 增长推断拥塞;路由器辅助方案可显式标记甚至给出速率。反馈越丰富,部署要求通常越高。

2 · 慢启动不是“慢”

连接开始不知道路径容量,cwnd 从较小值起步,每收到一个新 ACK 增加,使每个 RTT 近似翻倍。它用指数增长快速搜索量级,而不是一开始就把任意大突发灌入网络。

达到 ssthresh 或发现拥塞后转入 congestion avoidance,增长变为每 RTT 约一个 MSS。初始窗口、ACK 聚合和 pacing 会影响真实突发形态。

3 · AIMD 与公平

Additive Increase 让并发流逐步增加,Multiplicative Decrease 在拥塞时按比例收缩。两条同 RTT、同算法流在理想模型下会趋向效率线与公平线交点。

“公平”依赖定义。RTT 更短的流每秒经历更多增长轮次,常获得更多带宽;多连接应用也能比单连接占更多份额。算法公平不自动等于用户公平。

4 · 丢包后的不同路径

超时意味着长时间没有可用反馈,发送方应强烈收缩并退避;三个重复 ACK 说明后续数据仍在到达,可快速重传缺口并保留部分在途估计。Fast recovery 避免完全回到初始状态。

所有窗口更新都要基于新确认数据,重复 ACK 本身不能无限增加发送权限,否则接收路径上的重复反馈会被放大成流量。

纠错:最容易带走的错误模型

闭卷推演

给定 cwnd=2 MSS、ssthresh=8 MSS,画出无丢包四轮后再发生一次超时的 cwnd/状态变化,并说明哪些数值依具体实现而变。

检查:TCP 实际允许的未确认数据通常受什么限制?

机制工作台:before → event → after

Before / local state

ACK/loss event 改变 cwnd:slow start 近似按 ACK 增长,loss 触发窗口收缩

Event / after / output

ACK/loss event 改变 cwnd:slow start 近似按 ACK 增长,loss 触发窗口收缩;rwnd 仍独立约束 receiver。

检查:判断一个实现分支是否必要,最有力的问题是什么?

Explain It Yourself

给出 cwnd=4 MSS 的一轮 ACK 与一次 loss 后状态。

自检方法

答案必须出现 packet/message、local state/table、触发 event、after state 与 output;只给定义不算完成。

Worked Timeline:两个 flow 如何在瓶颈相遇

瓶颈容量 12 packets/RTT,初始 cwnd_A=2cwnd_B=6。教学模型:无拥塞各加 1,出现拥塞各减半。

RTTAB总负载反馈
0268无拥塞→(3,7)
13710无拥塞→(4,8)
24812继续探测→(5,9)
35914loss/ECN→约(2.5,4.5)

加性增长保持差距并逼近效率边界;乘性减小同时缩小差距,因此多轮后趋向公平。sender 保存的是局部控制状态,而不是网络真实容量。

Counterfactual:只有可靠重传

瓶颈已满时,丢包触发重传;重传又占容量并排挤新数据,导致更多超时。可靠性只回答“丢了怎样补”,不知道丢失来自过载;没有速率负反馈可进入 congestion collapse。

Misconception Analysis:rwnd 可以替代 cwnd

为什么会误解
两者都限制在途数据。
反例
receiver 有 1MB 空间,中间瓶颈仅容纳 20 packets/RTT;只服从 rwnd 仍压爆队列。
正确模型
rwnd 是端点内存反馈,cwnd 是网络拥塞推断;可发送量受 min(rwnd,cwnd) 约束。

三种问题,三套证据

场景机制状态/信号不能替代的原因
packet lostReliabilityseq、ACK、retx、timer降速不能补字节
receiver slowFlow controladvertised window网络空闲也可淹没接收端
network overloadedCongestion controlcwnd、loss/ECN、RTTrwnd 不描述瓶颈

Causality Checks

检查:接收端快但瓶颈持续丢包,应优先?

检查:为何 decrease 是乘性?

检查:duplicate ACK 能证明 receiver 太慢吗?

Explain It Yourself

  1. 为 receiver 慢、network 满、packet 丢各画 event→state→output。
  2. 从 (2,6) 手推四轮 AIMD,解释效率与公平。

一手资料

正文是 CourseStack 的中文解释与重新绘制的教学例子;官方页面负责课程原始定义,历史仓库只提供你的实现证据。