Appearance
题目
若甲向乙发起一个 TCP 连接,最大段长 MSS = 1 KB,RTT = 5 ms,乙开辟的接收缓存为 64 KB,则甲从连接建立成功至发送窗口达到 32 KB,需经过的时间至少是( )。
错因
B
可能多算 1 RTT——把"达到 32 KB"理解成"超过 32 KB",多走 1 RTT 让 cwnd 变成 64 KB(但仍受 rwnd=64 KB 限制不再增长)。错的根源:题面"达到"含义解读偏严,但严格说"达到 32 KB"意味着 cwnd 等于 32 KB 时就满足,5 RTT 即可。
C
可能用线性增长(拥塞避免)算法:cwnd 每 RTT + 1 MSS,从 1 KB 增到 32 KB 需 31 RTT × 5 ms ≈ 155 ms。再加上 1 RTT 握手凑成 160 ms。错的根源:把慢启动算成了线性增长——慢启动是指数翻倍,不是线性。题面问"至少",应取最快的指数路径。
D
可能在 C 的基础上再多算 1 RTT 凑成 33 RTT × 5 ms = 165 ms。错的根源:双重错误(线性增长 + 多算 1 RTT)。
总解析
第一步:理清条件
- MSS = 1 KB
- RTT = 5 ms
- 乙的接收缓存 = 64 KB(即 rwnd 上限 = 64 KB)
- 甲连接建立后,cwnd 初始 = 1 MSS = 1 KB
- 目标:发送窗口 = 32 KB
发送窗口 = 。要发送窗口 = 32 KB,等价于 cwnd ≥ 32 KB(rwnd = 64 KB 此时不限制)。
第二步:题面"至少"的含义
"至少"意味着选最快增长方式 → 慢启动(指数翻倍)。慢启动每 RTT cwnd 翻倍:
| RTT 数 | cwnd(KB) |
|---|---|
| 0(连接建立时) | 1 |
| 1 | 2 |
| 2 | 4 |
| 3 | 8 |
| 4 | 16 |
| 5 | 32 ⭐ |
第三步:算时间
第四步:核对
| 选项 | 含义 | 错误 |
|---|---|---|
| A | 25 ms = 5 RTT 慢启动 | 正确 |
| B | 30 ms = 6 RTT | 多算 1 RTT |
| C | 160 ms = 32 RTT | 误用线性增长 |
| D | 165 ms = 33 RTT | 误用线性 + 多算 |
最终答案是 A(25 ms)。
编者注(命题陷阱):题面只说"接收缓存 64 KB"——隐含 rwnd 一直 = 64 KB 没变(实际 TCP rwnd 会根据应用读取速度浮动)。本题这个 64 KB 是为了确保发送窗口在到达 32 KB 之前不被 rwnd 限制,让计算专注在 cwnd 的指数增长上。如果 rwnd 比 32 KB 小,发送窗口就先卡在 rwnd 而不是 cwnd——题面给的 64 KB 是个安全的"够大"值。