Skip to content

2015年 408 计算机网络 第 39 题

计算机网络2015年选择题2分

题目

主机甲和主机乙新建一个 TCP 连接,甲的拥塞控制初始阈值为 32 KB,甲向乙始终以 MSS = 1 KB 大小的段发送数据,并一直有数据发送;乙为该连接分配 16 KB 接收缓存,并对每个数据段进行确认,忽略段传输延迟。若乙收到的数据全部存入缓存,不被取走,则甲从连接建立成功时刻起,未发生超时的情况下,经过 4 个 RTT 后,甲的发送窗口是( )。

错因

B

只算了 cwnd(慢启动 1→2→4→8),忽略了 rwnd 因接收缓存填满而缩小。乙缓存只有 16 KB 且不取走,每收到 1 KB 缓存就少 1 KB。算到 4 RTT 时已收 1+2+4+8=15 KB,rwnd 仅剩 1 KB → 发送窗口 = min(cwnd=16, rwnd=1) = 1。错的根源:忘了发送窗口是 cwnd 与 rwnd 的较小值。

C

可能直接给 rwnd 初值 16 KB 或 cwnd 16 KB 当成发送窗口。但 4 RTT 时 rwnd 已严重缩小(剩 1 KB),cwnd=16 也被 rwnd 限制。错的根源:忽略缓存填满的累积效应。

D

直接给慢启动阈值 32 KB 或第 5 RTT 的 cwnd——但 4 RTT 时 cwnd 还没到 32(慢启动 1→2→4→8→16,第 4 RTT 末 cwnd=16),且接收窗口已紧紧限制。错的根源:把"阈值"当成"当前窗口",且忽略 rwnd 限制。

总解析

第一步:理清 TCP 发送窗口公式

  • cwnd(拥塞窗口):发送方拥塞控制算出的本地限制
  • rwnd(接收窗口):接收方在 ACK 中通告的剩余缓存

第二步:列每个 RTT 的状态变化

设 rwnd 初始 = 16 KB(接收缓存)。慢启动从 cwnd = 1 MSS = 1 KB 开始,每 RTT 翻倍。

时刻本 RTT 内甲发送量累计已发送乙累计缓存rwnd(=16-累计)下个 RTT 的 cwnd
0 RTT(连接建立)00161
1 RTT 后发 1 KB11152
2 RTT 后发 2 KB33134
3 RTT 后发 4 KB7798
4 RTT 后发 8 KB1515116

第三步:算 4 RTT 后的发送窗口

4 RTT 后甲的状态:

  • cwnd(用于下一轮发送)= 16 KB(慢启动翻倍后)
  • rwnd(来自乙的 ACK)= 16 − 15 = 1 KB

发送窗口 = KB。

第四步:核对

选项错处
A1 KB正确(rwnd 限制)
B8 KB漏 rwnd 限制
C16 KB漏 rwnd 缩小
D32 KB把阈值当窗口

最终答案是 A(1 KB)

编者注(生僻术语):TCP 的发送窗口同时受拥塞控制 cwnd(防止网络拥塞)和流量控制 rwnd(防止接收方缓存溢出)双重制约。本题刻意设置"乙不取走数据"——让 rwnd 持续缩小到几乎为零,这种现象叫糊涂窗口综合征(Silly Window Syndrome)。实际 TCP 实现会用"Nagle 算法"+"Clark 解决方案"避免发送方反复发小包,但题面已"简化"忽略这些优化。

最后更新:

🎬 可视化演示
加载中...

提示:可在可视化区直接操作播放、步进、修改参数