一 真题2009-39
2009-39题. 一个TCP连接总是以1KB的最大段长发送TCP段,发送有足够多的数据要发送。当拥塞窗口为16KB时发生了超时,如果接下来的4个RTT(往返时间)时间内的TCP段的传输都是成功的,那么当第4个RTT时间内发送的所有TCP段都得到肯定应答时,拥塞窗口大小是()。
A. 7KB
B. 8KB
C. 9KB
D. 16KB
二 题目要素解析
场景: TCP 拥塞控制(Congestion Control)过程。
已知条件:
- MSS(最大段长):1 KB。
- 初始状态:拥塞窗口 cwnd=16 KB。
- 事件 :发生超时(Timeout)。
- 后续过程:接下来 4 个 RTT 传输均成功。
- 求: 第 4 个 RTT 结束时,拥塞窗口 cwnd 的大小。
核心考点: TCP 拥塞控制中的 慢开始(Slow Start) 与 拥塞避免(Congestion Avoidance) 算法的切换逻辑。
三 哔哔详解
这道题考察的是 TCP 对 "超时" 事件的反应以及状态机的转换。
-
超时事件的处理(回到原点):
-
当发生超时时,TCP 认为网络拥塞严重。
-
阈值调整(ssthresh):
将慢开始阈值设置为当前拥塞窗口的一半。
ssthresh=16 KB/2=8 KB
-
拥塞窗口重置: 将拥塞窗口 cwnd 重置为 1 个 MSS(即 1 KB),并进入慢开始阶段。
-
-
第 1 个 RTT(慢开始阶段):
- 初始 cwnd=1 KB。
- 发送 1 KB 数据,收到确认。
- 慢开始阶段 cwnd 指数增长(翻倍)。
- 结束时:cwnd=1×2=2 KB。
-
第 2 个 RTT(慢开始阶段):
- 当前 cwnd=2 KB。
- 发送 2 KB 数据,收到确认。
- cwnd 翻倍。
- 结束时:cwnd=2×2=4 KB。
-
第 3 个 RTT(慢开始阶段):
- 当前 cwnd=4 KB。
- 发送 4 KB 数据,收到确认。
- cwnd 翻倍。
- 结束时:cwnd=4×2=8 KB。
- 关键节点: 此时 cwnd 达到了阈值 ssthresh (8 KB)。慢开始阶段结束,进入拥塞避免阶段。
-
第 4 个 RTT(拥塞避免阶段):
- 当前 cwnd=8 KB。
- 发送 8 KB 数据,收到确认。
- 拥塞避免阶段 cwnd 线性增长(每次 RTT 只增加 1 个 MSS)。
- 结束时:cwnd=8 KB+1 KB=9 KB。
结论: 第 4 个 RTT 结束时,拥塞窗口大小为 9 KB。
四 参考答案
参考答案 C
五 考点精析
5.1 TCP 拥塞控制四大核心机制
📌 目标 :在不引起网络拥塞的前提下,尽可能高效利用带宽。
关键变量:
cwnd:拥塞窗口(Congestion Window)ssthresh:慢启动阈值(Slow Start Threshold)MSS:最大段长(Maximum Segment Size)
1. 慢启动(Slow Start)
- 触发条件 :连接建立 or 超时重传
- 初始值 :
cwnd = 1 MSS - 增长方式 :每收到一个 ACK,cwnd += 1 MSS
→ 每 RTT 翻倍(指数增长):1 → 2 → 4 → 8 ... - 结束条件 :
cwnd ≥ ssthresh或 发生丢包
2. 拥塞避免(Congestion Avoidance)
- 触发条件 :
cwnd ≥ ssthresh - 增长方式:每 RTT 增加 1 MSS(线性增长)
- 实现:每 ACK 增加 MSS2cwndcwndMSS2 ,累计 ≈ +1 MSS/RTT
- 目的:谨慎探测可用带宽,避免激进导致拥塞
3. 快重传(Fast Retransmit)
- 触发条件 :收到 3 个重复 ACK(Duplicate ACKs)
- 行为:
- 立即重传丢失段(无需等待 RTO 超时)
- 进入 快恢复
4. 快恢复(Fast Recovery)
- 触发条件:快重传之后
- 操作:
ssthresh = cwnd / 2cwnd = ssthresh + 3 × MSS(补偿已离开网络的 3 个段)- 每收到一个重复 ACK,
cwnd += 1 MSS - 收到新 ACK(对重传段的确认)后,退出快恢复,进入拥塞避免
✅ 口诀 :
"超时回 1,快重传减半;慢启翻倍,拥避加一。"
5.2 两种丢包响应对比
| 事件 | 触发条件 | ssthresh 设置 | cwnd 重置 | 后续阶段 |
|---|---|---|---|---|
| 超时(Timeout) | RTO 到期未收到 ACK | cwnd / 2 |
1 MSS |
慢启动 |
| 快重传(3 Dup ACKs) | 收到 3 个重复 ACK | cwnd / 2 |
ssthresh + 3 MSS |
快恢复 → 拥塞避免 |
⚠️ 关键区别:
- 超时 → 回到最保守状态(cwnd=1)
- 快重传 → 不重启慢启动,直接进入拥塞避免(更高效)
5.3 易错点总结
| 错误认知 | 正确认知 |
|---|---|
| "超时后 cwnd = ssthresh" | ❌ 应为 cwnd = 1 MSS |
| "快重传后回到慢启动" | ❌ 进入 快恢复,不重启慢启 |
| "拥塞避免每 ACK +1" | ❌ 是 每 RTT +1(通过微增量实现) |
| "cwnd 可无限增长" | ❌ 受 接收窗口 rwnd 限制 |
六 考点跟踪
| 年份 | 题号 | 考查内容 | CSDN 参考链接 | VX参考链接 |
|---|---|---|---|---|
| 2009 | 第39题 | 超时后 cwnd 变化 | ||
| 2010 | 第39题 | TCP拥塞控制 | ||
| 2011 | 第39题 | TCP三次握手 | ||
| 2011 | 第40题 | TCP序号计算 | ||
| 2013 | 第39题 | TCP序号计算 | ||
| 2014 | 第38题 | TCP发送窗口计算 | ||
| 2015 | 第39题 | TCP发送窗口计算 | ||
| 2016 | 第41题 | TCP序号计算 | ||
| 2017 | 第39题 | TCP连接建立和发送数据成功时间计算 | ||
| 2019 | 第38题 | TCP快重传 | ||
| 2020 | 第38题 | TCP拥塞控制 | ||
| 2021 | 第40题 | TCP序号计算 | ||
| 2022 | 第38题 | TCP拥塞控制 | ||
| 2023 | 第47题 | TCP序号计算 | ||
| 2024 | 第38题 | TCP 释放连接最少时间 | ||
| 2025 | 第38题 | 反向计算可发送的段数 |
说明 :本文内容基于公开资料整理,参考了包括但不限于《数据结构》(严蔚敏)、《计算机操作系统》(汤小丹)、《计算机网络》(谢希仁)、《计算机组成原理》(唐朔飞)等国内高校经典教材,以及其他国际权威著作。同时,借鉴了王道、天勤、启航等机构出版的计算机专业考研辅导系列丛书 中的知识体系框架与典型题型分析思路。文中所有观点、例题解析及文字表述均为作者结合自身理解进行的归纳与重述,未直接复制任何出版物原文。内容仅用于学习交流,若有引用不当或疏漏之处,敬请指正。