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

【计算机网络】第3章:传输层—TCP 拥塞控制

目录

一、PPT

二、总结

TCP 拥塞控制详解

⭐ 核心机制与算法

1. 慢启动(Slow Start)

2. 拥塞避免(Congestion Avoidance)

3. 快速重传(Fast Retransmit)

4. 快速恢复(Fast Recovery)

🔧 关键参数与行为

🌟 现代优化算法

CUBIC(Linux 默认算法)

BBR(Bottleneck Bandwidth and RTT)

📊 拥塞控制流程总结

💡 核心设计原则


一、PPT

二、总结

TCP 拥塞控制详解

核心目标:防止网络因过载而崩溃,公平分配带宽资源,最大化网络吞吐量。
核心思想:通过动态调整发送速率(拥塞窗口 cwnd)探测网络容量上限。


⭐ 核心机制与算法

1. 慢启动(Slow Start)
  • 目的:初始阶段快速探测可用带宽。

  • 机制

    • cwnd 初始值 = 1 MSS(最大报文段大小)。

    • 每收到 1 个 ACKcwnd 指数增长cwnd *= 2)。

    • 增长上限:达到 慢启动阈值(ssthresh) 后进入拥塞避免。

  • 触发场景

    • 新连接建立时

    • 超时重传(RTO)后

2. 拥塞避免(Congestion Avoidance)
  • 目的:接近网络容量时转为线性增长,避免拥塞。

  • 机制

    • 每收到 1 个 ACKcwnd 线性增长cwnd += 1/cwnd → 约每 RTT 增加 1 MSS)。

  • 退出条件

    • 发生丢包(超时或收到 3 个重复 ACK)

3. 快速重传(Fast Retransmit)
  • 触发条件:收到 3 个重复 ACK(即发送方连续收到 4 个相同 ACK)。

  • 行为

    • 立即重传丢失报文,无需等待超时。

    • 进入 快速恢复 阶段(避免降为慢启动)。

4. 快速恢复(Fast Recovery)
  • 目的:在部分丢包时维持较高吞吐量。

  • 机制

    • 将 ssthresh 设为 max(cwnd/2, 2 MSS)(减半窗口)。

    • cwnd = ssthresh + 3 MSS(补偿已确认的 3 个重复 ACK)。

    • 每收到一个重复 ACK,cwnd += 1 MSS(维持窗口大小)。

    • 收到新数据的 ACK 后,将 cwnd 设为 ssthresh,退出快速恢复。

✅ 经典算法组合:以上 4 步统称为 Tahoe(含慢启动+拥塞避免)和 Reno(增加快重传+快恢复)。


🔧 关键参数与行为

参数作用调整时机
cwnd发送方可发送的最大数据量(动态调整)根据 ACK 或丢包事件更新
ssthresh慢启动与拥塞避免的切换阈值丢包时设为 max(cwnd/2, 2)
丢包判定超时重传 → 网络严重拥塞直接重置 cwnd=1,进入慢启动
3 个重复 ACK → 部分丢包触发快重传+快速恢复

🌟 现代优化算法

CUBIC(Linux 默认算法)
  • 用 三次函数 替代线性增长,更公平且适应高带宽延迟积(BDP)网络。

  • 核心特点:

    • 窗口增长与 时间 而非 ACK 数量相关。

    • 在拥塞避免阶段更平滑地逼近最大容量。

BBR(Bottleneck Bandwidth and RTT)
  • 主动测量网络路径的 最大带宽(BtlBw) 和 最小 RTT,动态调整发送速率。

  • 避免传统算法依赖丢包作为拥塞信号(在高丢包率网络中更高效)。


📊 拥塞控制流程总结

💡 核心设计原则

  1. 保守启动:初始 cwnd 较小,避免冲击网络。

  2. 加性增,乘性减(AIMD)

    • 增长阶段:线性/指数增加带宽利用率(公平性)。

    • 减少阶段:乘性降窗快速响应拥塞(稳定性)。

  3. 快速响应:通过重复 ACK 尽早检测丢包,减少超时等待。


总结一句话:TCP 拥塞控制通过 动态调整发送窗口(慢启动探测 → 拥塞避免维稳 → 快重传/快恢复止损),在公平性与效率之间取得平衡,确保网络高吞吐、低延迟、高可靠性。

http://www.lryc.cn/news/2399299.html

相关文章:

  • idea不识别lombok---实体类报没有getter方法
  • 【Hive入门】
  • 亚马逊站内信规则2025年重大更新:避坑指南与合规策略
  • 01 - AI 时代的操作系统课 [2025 南京大学操作系统原理]
  • 数组1 day7
  • SAP学习笔记 - 开发15 - 前端Fiori开发 Boostrap,Controls,MVC(Model,View,Controller),Modules
  • Redis中的过期策略与内存淘汰策略
  • 基于SDN环境下的DDoS异常攻击的检测与缓解
  • HarmonyOS 实战:给笔记应用加防截图水印
  • 如何轻松地将文件从 PC 传输到 iPhone?
  • 前端面试二之运算符与表达式
  • 【运维实战】使用Nvm配置多Node.js环境!
  • Bresenham算法
  • 【从GEO数据库批量下载数据】
  • day 44
  • 鸿蒙OSUniApp开发跨平台AR扫描识别应用:HarmonyOS实践指南#三方框架 #Uniapp
  • NER实践总结,记录一下自己实践遇到的各种问题。
  • 微信小程序实现运动能耗计算
  • iTunes 无法备份 iPhone:10 种解决方法
  • 施耐德特价型号伺服电机VIA0703D31A1022、常见故障
  • LangChain4J 使用实践
  • 慢SQL调优(二):大表查询
  • 【C++】—— 从零开始封装 Map 与 Set:实现与优化
  • 内网穿透之Linux版客户端安装(神卓互联)
  • 开疆智能Profinet转Profibus网关连接CMDF5-8ADe分布式IO配置案例
  • 华为云Flexus+DeepSeek征文|Flexus云服务器单机部署+CCE容器高可用部署快速搭建生产级的生成式AI应用
  • 扫地机产品--材质传感器算法开发与虚拟示波器
  • [蓝桥杯]上三角方阵
  • 60天python训练计划----day44
  • 【JAVA版】意象CRM客户关系管理系统+uniapp全开源