Appearance
题目
主机甲和主机乙已建立了 TCP 连接,甲始终以 MSS = 1 KB 大小的段发送数据,并一直有数据发送;乙每收到一个数据段都会发出一个接收窗口为 10 KB 的确认段。若甲在 t 时刻发生超时时拥塞窗口为 8 KB,则从 t 时刻起,不再发生超时的情况下,经过 10 个 RTT 后,甲的发送窗口是( )。
错因
B
可能按"全程线性增长 cwnd 1→2→...→12(10 RTT 后)"算,漏掉慢启动段的指数翻倍 + 漏 rwnd 限制。本题 cwnd 在第 8 RTT 末就达到 10,之后被 rwnd=10 限制不再增长。错的根源:忽略 rwnd 的硬上限。
C
可能按 cwnd = 14 KB 算(误用某种翻倍 + 加法的混合算法)。错的根源:cwnd 计算流程混乱;同时漏 rwnd 限制。
D
可能按 cwnd = 8 + 7 = 15 KB(10 RTT - 慢启动 2 RTT - 8 = 走拥塞避免 7 次)。但 cwnd 在第 8 RTT 末就达 10、被 rwnd 限制不能再增。错的根源:漏 rwnd=10 限制。
总解析
第一步:明确超时事件后的状态变化
t 时刻 cwnd = 8 KB 发生超时:
| 变量 | 超时前 | 超时后 |
|---|---|---|
| cwnd | 8 KB | 重置为 1 KB(即 1 MSS) |
| ssthresh | 不知道 | KB |
| 算法阶段 | 拥塞避免 | 重新进入慢启动 |
第二步:列出 10 RTT 内的 cwnd 变化
慢启动阶段(cwnd < ssthresh = 4)每 RTT cwnd 翻倍; 拥塞避免阶段(cwnd ≥ 4)每 RTT cwnd + 1 MSS。 发送窗口 = (cwnd, rwnd = 10)。
| RTT 数 | cwnd | 阶段 | 发送窗口 = min(cwnd, 10) |
|---|---|---|---|
| 0(t 时刻) | 1 | 慢启动起步 | 1 |
| 1 | 2 | 慢启动 | 2 |
| 2 | 4(达 ssthresh) | 切到拥塞避免 | 4 |
| 3 | 5 | 拥塞避免 | 5 |
| 4 | 6 | 6 | |
| 5 | 7 | 7 | |
| 6 | 8 | 8 | |
| 7 | 9 | 9 | |
| 8 | 10(达 rwnd) | 10 | |
| 9 | 11 | cwnd 继续 +1 | min(11, 10) = 10 |
| 10 | 12 | min(12, 10) = 10 |
第三步:核对
10 RTT 后甲的发送窗口 = = 10 KB。
最终答案是 A(10 KB)。
编者注(生僻术语):TCP 的 cwnd(拥塞窗口)和 rwnd(接收窗口)共同决定发送窗口的上限:
- cwnd 由发送方动态调节(慢启动 / 拥塞避免)
- rwnd 由接收方在每个 ACK 中通告
本题虽然 cwnd 持续增长到 12+ KB,但发送方的"实际能发的数据量"被 rwnd = 10 KB 锁死。这反映了 TCP 流量控制的本质:接收方决定能收多少,发送方再快也没用。