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

介绍TCP的拥塞控制

文章目录

      • 一、核心概念:拥塞窗口(cwnd)
      • 二、TCP拥塞控制的4个核心阶段
        • 1. 慢启动(Slow Start,SS):快速“试探”网络容量
        • 2. 拥塞避免(Congestion Avoidance,CA):平稳“接近”网络上限
        • 3. 拥塞检测与处理:发现拥塞后快速“退避”
        • 4. 快速恢复(Fast Recovery,FR):拥塞后“快速恢复”吞吐量
      • 三、主流TCP拥塞控制算法对比
      • 四、总结

TCP(传输控制协议)的拥塞控制,是指TCP通过动态调整发送端的发送窗口大小,避免网络链路因数据量过大而发生“拥塞”(即数据包丢失、延迟剧增),最终实现网络资源的合理利用与数据的稳定传输。其核心目标是:在不引发拥塞的前提下,尽可能最大化网络吞吐量。

一、核心概念:拥塞窗口(cwnd)

TCP拥塞控制的核心是拥塞窗口(Congestion Window,cwnd),它代表发送端在未收到确认(ACK)的情况下,最多能向网络发送的字节数(或数据包数)。
发送端实际的发送窗口大小,由“拥塞窗口(cwnd)”和“接收端通告窗口(rwnd,即接收端的缓存剩余空间)”中的较小值决定(实际窗口 = min(cwnd, rwnd)),确保既不拥塞网络,也不撑爆接收端缓存。

二、TCP拥塞控制的4个核心阶段

现代TCP(如TCP Reno、Cubic)的拥塞控制逻辑,主要分为以下4个阶段,本质是“先试探性增窗,遇拥塞则调窗,再逐步恢复”的循环:

1. 慢启动(Slow Start,SS):快速“试探”网络容量
  • 触发时机:TCP连接刚建立(如三次握手后),或拥塞后恢复时。
  • 核心逻辑:拥塞窗口(cwnd)从初始值(通常为2-4个MSS,MSS是最大分段大小)开始,每收到一个ACK,cwnd就翻倍(指数级增长),快速接近网络的承载上限。
  • 终止条件:当cwnd增长到“慢启动阈值(Slow Start Threshold,ssthresh)”时,进入下一阶段。
  • 初始ssthresh通常设为较大值(如65535字节),或由上一轮拥塞时的cwnd值决定。
2. 拥塞避免(Congestion Avoidance,CA):平稳“接近”网络上限
  • 触发时机cwnd达到ssthresh后。
  • 核心逻辑:为避免直接引发拥塞,cwnd从“指数增长”转为线性增长——每收到一个往返时间(RTT)的ACK,cwnd只增加1个MSS(而非翻倍),缓慢接近网络的实际容量。
  • 目标:在不触发拥塞的前提下,逐步提升吞吐量。
3. 拥塞检测与处理:发现拥塞后快速“退避”

当网络发生拥塞时(主要通过“超时重传”或“快速重传”两种信号判断),TCP会立即调整cwndssthresh,避免拥塞加剧:

拥塞信号判断依据处理逻辑(以主流的TCP Reno为例)
超时重传(Timeout)发送端未在重传超时时间(RTO)内收到ACK,认为数据包丢失(大概率是严重拥塞)1. 将ssthresh设为当前cwnd的1/2;
2. 将cwnd重置为初始值(如1个MSS);
3. 重新进入“慢启动”阶段,从头试探网络。
快速重传(Fast Retransmit)短时间内收到3个相同的“重复ACK”(Duplicate ACK),认为数据包丢失(轻微拥塞,网络仍有部分连通性)1. 立即重传丢失的数据包(无需等待RTO);
2. 将ssthresh设为当前cwnd的1/2;
3. 将cwnd设为新的ssthresh,直接进入“拥塞避免”阶段(跳过慢启动,快速恢复)。
4. 快速恢复(Fast Recovery,FR):拥塞后“快速恢复”吞吐量
  • 触发时机:仅在“快速重传”后(即收到3个重复ACK时)触发,是对“拥塞避免”的优化。
  • 核心逻辑
  1. 重传丢失的数据包后,cwndssthresh开始,每收到一个重复ACK,cwnd就增加1个MSS(快速补充因丢失而“空缺”的窗口);
  2. 当收到第一个“新的ACK”(确认丢失数据包及后续所有数据包)时,说明拥塞已缓解,将cwnd重置为ssthresh,回到“拥塞避免”阶段,继续线性增长。

三、主流TCP拥塞控制算法对比

不同场景下,TCP会采用不同的拥塞控制算法,核心差异在于“拥塞避免”和“恢复”阶段的策略:

算法核心特点适用场景
TCP Reno经典算法,包含“慢启动、拥塞避免、快速重传、快速恢复”四阶段,逻辑简单稳定早期互联网、通用场景
TCP Cubic基于“三次函数”调整cwnd,拥塞后恢复更快,吞吐量更高(非指数/线性增长)现代Linux默认算法、高带宽延迟网络(如云计算、长距离通信)
TCP BBR基于“带宽和延迟乘积(BDP)”估算网络容量,而非依赖丢包信号,适合高带宽低延迟场景谷歌云、视频流、大文件传输
TCP Vegas基于“RTT变化”预判拥塞(而非等待丢包),更早调窗,减少延迟对延迟敏感的场景(如实时通信)

四、总结

TCP拥塞控制的本质是“试探-反馈-调整”的闭环:

  1. 通过“慢启动”快速接近网络容量;
  2. 通过“拥塞避免”平稳提升吞吐量;
  3. 通过“超时/快速重传”检测拥塞,并快速退避;
  4. 通过“快速恢复”减少拥塞后的性能损失。

这一机制让TCP能自适应不同网络环境(如家庭宽带、数据中心、跨洋链路),在可靠性与吞吐量之间取得平衡,是互联网稳定运行的核心保障之一。

http://www.dtcms.com/a/332142.html

相关文章:

  • Linux操作系统从入门到实战(二十三)详细讲解进程虚拟地址空间
  • Java 大视界 -- Java 大数据在智能教育虚拟学习环境构建与学习体验增强中的应用(399)
  • 本地生活|MallBook 分账赋能浙江本地生活服务平台,助力实现资金流转效率与合规性的双提升!
  • Flink的状态管理
  • 手机分身空间:空间自由切换,一机体验双重生活!
  • 机械加工元件——工业精密制造的璀璨明珠
  • 【Golang】:流程控制语句
  • Python基础(Flask①)
  • 科技展厅通过多媒体技术能如何创新展示,超越展墙展板的固有限制?
  • 基于HTML5与Tailwind CSS的现代运势抽签系统技术解析
  • Rust+Python双核爬虫:高并发采集与智能解析实战
  • 基于单片机的超市储物柜设计
  • 超高车辆碰撞预警系统如何帮助提升城市立交隧道安全?
  • CERT/CC警告:新型HTTP/2漏洞“MadeYouReset“恐致全球服务器遭DDoS攻击瘫痪
  • UE UDP通信
  • 接口芯片断电高阻态特性研究与应用分析
  • UDP协议特点与网络通信
  • MIPI-csi调试
  • 物联网系统中传感器到网关到物联网平台的传输路径、协议、原理、用途与架构详解
  • 【机器学习深度学习】OpenCompass 评测指标全解析:让大模型评估更科学
  • tun/tap 转发性能优化
  • 当云手机出现卡顿怎么办?
  • 自适应UI设计解读 | Fathom 企业人工智能平台
  • 基于微信小程序的家教服务平台的设计与实现/基于asp.net/c#的家教服务平台/基于asp.net/c#的家教管理系统
  • Boost库中boost::function函数使用详解
  • OpenCV-循环读取视频帧,对每一帧进行处理
  • GoLand深度解析:智能开发利器与cpolar内网穿透方案的协同实践
  • 0814 TCP通信协议
  • 一款开源的远程桌面软件,旨在为用户提供流畅的游戏体验,支持 2K 分辨率、60 FPS,延迟仅为 40ms。
  • 数据库访问模式详解