当前位置: 首页 > news >正文

408考研逐题详解:2009年第39题

2009年第39题

一个 TCP 连接总是以 1KB 的最大段长发送 TCP 段,发送方有足够多的数据要发送。当拥塞窗口为 16KB 时发生了超时,如果接下来的 4 个 RTT(往返时间)时间内的 TCP 段的传输都是成功的,那么当第 4 个 RTT 时间内发送的所有 TCP 段都得到肯定应答时,拥塞窗口大小是( )

A. 7KB \qquad B. 8KB \qquad C. 9KB \qquad D. 16KB

解析

本题考查 TCP 拥塞控制机制,特别是超时后拥塞窗口(cwnd)的变化过程,涉及慢启动(Slow Start)和拥塞避免(Congestion Avoidance)两个阶段的核心知识点。

  1. 拥塞窗口(Congestion Window, cwnd):是 TCP 协议中由发送方维护的一个状态变量,用于动态控制发送速率,防止网络过载。它表示在当前网络状态下允许发送但尚未收到确认(ACK)的最大数据量(单位通常是字节或 MSS)。其核心作用包括:

    • 拥塞控制:通过动态调整 cwnd 的大小,避免网络因流量过大而瘫痪。
    • 平衡效率:在最大化吞吐量和避免丢包之间寻找平衡点。
    • 自适应网络:根据网络状况(如丢包、延迟)自动调整发送速率。

    拥塞窗口与接收窗口的区别如下表所示:

    特性拥塞窗口(cwnd)接收窗口(rwnd)
    控制方发送方维护接收方通告
    目的防止网络拥塞防止接收方缓冲区溢出
    依据网络拥塞状况(如丢包、超时)接收方可用缓冲区大小
    动态性根据拥塞算法自动调整由接收方显式通知

    实际发送窗口大小 = min(cwnd, rwnd)

  2. TCP 拥塞控制基础:

    • TCP 使用拥塞窗口控制发送速率,避免网络拥塞。cwnd 表示发送方在未收到确认前可以发送的最大数据量(单位为字节或 MSS)。
    • MSS(Maximum Segment Size)是最大段长,本题中为 1KB。
    • 当发生超时(表明网络拥塞)时,TCP 会触发拥塞控制机制:慢启动阈值(ssthresh)设置为当前 cwnd 的一半,cwnd 重置为 1 个 MSS。
  3. 慢启动(Slow Start):

    • 触发条件:cwnd < ssthresh 时。
    • 窗口增长规则:每收到一个确认(ACK),cwnd 增加 1 个 MSS(即指数增长)。每个 RTT 内,cwnd 大约翻倍(因为所有段被确认后,cwnd 会倍增)。
    • 增长公式:若初始 cwnd = 1 MSS,则:
      • 第 1 个 RTT 后:cwnd = 2 × 1 MSS = 2 MSS
      • 第 2 个 RTT 后:cwnd = 2 × 2 MSS = 4 MSS
      • 以此类推。
  4. 拥塞避免(Congestion Avoidance):

    • 触发条件:cwnd ≥ ssthresh 时。
    • 窗口增长规则:每个 RTT 内,cwnd 线性增加 1 个 MSS(无论当前 cwnd 大小)。具体实现中,每收到一个 ACK,cwnd 增加 (MSS × MSS) / cwnd(字节单位),但整体效果是每个 RTT 结束(所有段被确认后),cwnd 增加 1 个 MSS。
    • 增长公式:若进入拥塞避免时 cwnd = w MSS,则:
      • 第 1 个 RTT 后:cwnd = w + 1 MSS
      • 第 2 个 RTT 后:cwnd = w + 2 MSS
      • 以此类推。
  5. 超时处理:

    • 发生超时时,ssthresh 更新为当前 cwnd 的一半(向下取整),cwnd 重置为 1 MSS。
    • 本题中,超时前 cwnd = 16KB,因此:
      • ssthresh = floor(16KB / 2) = 8KB
      • cwnd 重置为 1 MSS = 1KB。
  6. RTT 与传输过程:

    • RTT(往返时间)是发送数据到收到确认的时间。
    • 题目要求在“第 4 个 RTT 时间内发送的所有 TCP 段都得到肯定应答时”的 cwnd,即第 4 个 RTT 结束时(所有 ACK 到达后)的 cwnd 值。
    • “传输成功”表示所有段都被确认,无丢包,cwnd 按规则增长。

根据知识点,逐步计算超时后 4 个 RTT 内的 cwnd 变化。初始状态:超时后,cwnd = 1KB, ssthresh = 8KB(因超时前 cwnd = 16KB,ssthresh = 16KB / 2 = 8KB)。

  1. 第 1 个 RTT:

    • 起始 cwnd = 1KB(cwnd < ssthresh,处于慢启动)。
    • 发送数据量 = cwnd = 1KB(即 1 个段,因 MSS = 1KB)。
    • 传输成功:所有段被确认。
    • 结束 cwnd:每收到一个 ACK,cwnd 增加 1 MSS(慢启动规则)。由于发送 1 个段,收到 1 个 ACK,cwnd = 1KB + 1KB = 2KB。
    • 此时,cwnd = 2KB < ssthresh = 8KB,仍处于慢启动。
  2. 第 2 个 RTT:

    • 起始 cwnd = 2KB(cwnd < ssthresh,慢启动)。
    • 发送数据量 = cwnd = 2KB(2 个段)。
    • 传输成功:所有段被确认。
    • 结束 cwnd:收到 2 个 ACK,每个 ACK 使 cwnd 增加 1 MSS,因此 cwnd = 2KB + 2 × 1KB = 4KB(或指数增长:2KB × 2 = 4KB)。
    • 此时,cwnd = 4KB < ssthresh = 8KB,仍处于慢启动。
  3. 第 3 个 RTT:

    • 起始 cwnd = 4KB(cwnd < ssthresh,慢启动)。
    • 发送数据量 = cwnd = 4KB(4 个段)。
    • 传输成功:所有段被确认。
    • 结束 cwnd:收到 4 个 ACK,每个 ACK 使 cwnd 增加 1 MSS,因此 cwnd = 4KB + 4 × 1KB = 8KB(或指数增长:4KB × 2 = 8KB)。
    • 此时,cwnd = 8KB ≥ ssthresh = 8KB,因此进入拥塞避免阶段(根据 TCP 标准,当 cwnd ≥ ssthresh 时切换)。
  4. 第 4 个 RTT:

    • 起始 cwnd = 8KB(cwnd ≥ ssthresh,处于拥塞避免)。
    • 发送数据量 = cwnd = 8KB(8 个段)。
    • 传输成功:所有段被确认(题目要求)。
    • 结束 cwnd:在拥塞避免阶段,当所有段被确认后(即所有 ACK 到达),cwnd 线性增加 1 个 MSS(每个 RTT 增加 1 MSS)。因此,cwnd = 8KB + 1KB = 9KB。
    • 详细增长:每收到一个 ACK,cwnd 增加 (MSS × MSS) / cwnd = (1KB × 1KB) / 8KB = 0.125KB。发送 8 个段,收到 8 个 ACK,总增加 8 × 0.125KB = 1KB,故 cwnd = 8KB + 1KB = 9KB。

当第 4 个 RTT 时间内发送的所有 TCP 段都得到肯定应答时(即第 4 个 RTT 结束时),拥塞窗口大小是 9KB。

本题答案:C

http://www.xdnf.cn/news/1001359.html

相关文章:

  • 深入探索IIC-OLED显示技术:嵌入式仿真平台如何重塑高校教学范式——深圳航天科技创新研究院技术赋能新一代工程教育
  • 观点 | 科技企业到了品牌建设的历史性窗口期
  • 界面开发框架DevExpress XAF实践:集成.NET Aspire后如何实现服务安排?
  • Kratos 与Golang Cms的关系
  • 深度学习环境搭建(pycharm+yolov5)
  • 【AWS入门】IAM多重身份验证(MFA)简介
  • 深度解析Git错误:`fatal: detected dubious ownership in repository` 的根源与解决方案
  • OpenAI API:LLM编程的事实标准(上)
  • R语言缓释制剂QBD解决方案之五
  • GitLab 拉取变慢的原因及排查方法
  • UE5 学习系列(九)光照系统介绍
  • linux中的locate命令
  • Vue3+TypeScript实现状态模式
  • cuda编程笔记(3)--常量内存与事件
  • 嘉立创EDA初识
  • 外资车全面反弹,被看衰的日系车尤其凶猛,国产电车再承压
  • 智慧园区可视化怎么做?
  • 快速排序优化技巧详解:提升性能的关键策略
  • Python爬虫实战:研究AutobahnPython相关技术
  • 股指期货为什么会出现贴水现象?
  • Redis : set集合
  • 使用 Visual Studio 2019 修改 WebRTC 源码
  • SpringCloud微服务:服务保护和分布式事务
  • Vosk API:开源离线语音识别的强大工具
  • 机器人坐标变换TF(ROS Transform)示例解释
  • VScode中如何创建项目分支
  • 代码随想录训练营第三十天 | 452. 用最少数量的箭引爆气球 435. 无重叠区间 763.划分字母区间
  • 【狂飙AGI】第3课:大模型时代前沿技术
  • BugKu Web渗透之MD5
  • 设计模式——责任链