TCP滑动窗口与拥塞控制是什么?从流量控制到网络稳定性的完整解析
前言TCP是互联网上使用最广泛的传输层协议。它提供可靠传输、按序交付、流量控制、拥塞控制等能力。其中滑动窗口和拥塞控制是两个容易被混淆的概念它们都涉及窗口都影响发送速率但解决的问题完全不同。这篇文章把这两个机制拆开来讲清楚滑动窗口解决的是接收方能不能收得下拥塞控制解决的是网络能不能承受得住。理解这个分工就理解了TCP为什么能在不可靠的网络上实现可靠传输。一、为什么需要滑动窗口1.1 停止等待协议的效率问题最基础的可靠传输方式是停止等待发送方发一个数据包等待接收方确认ACK收到确认后再发下一个。这种方式逻辑简单但效率极低。假设发送方和接收方之间的往返时间RTT是50毫秒每个数据包大小为1KB那么理论最大吞吐量只有text1KB / 0.05s 20KB/s链路带宽可能远高于这个数值但停止等待协议无法充分利用。原因在于发送方大部分时间都在等待确认链路处于空闲状态。1.2 滑动窗口的基本思路滑动窗口的核心思路是允许发送方在收到确认之前连续发送多个数据包。发送方维护一个窗口窗口内的数据可以连续发送而不需要等待确认。每收到一个确认窗口向前滑动新的数据可以进入窗口并被发送。这样发送方不必每发一个包就停下来等确认链路的利用率大幅提升。二、滑动窗口的工作机制2.1 发送窗口与接收窗口TCP连接的两端各维护一个窗口发送窗口发送方可以连续发送而不需要等待确认的数据量。窗口大小由接收方通告的接收窗口rwnd和拥塞窗口cwnd共同决定取两者中的较小值。接收窗口接收方当前能够接收的数据量。接收方通过TCP头部的窗口字段将自己的接收窗口大小告知发送方。2.2 窗口的滑动过程假设发送窗口大小为4个数据段发送方连续发送段1、2、3、4接收方收到段1返回ACK确认段1发送方收到ACK后窗口向前滑动一个位置段5进入窗口并被发送接收方收到段2返回ACK确认段2发送方窗口再次滑动段6进入窗口并被发送这个过程持续进行窗口不断向前滑动数据持续发送。2.3 接收窗口的动态调整接收窗口的大小不是固定的。接收方的缓冲区可能被应用程序读取数据的速度影响如果应用程序读取数据快接收缓冲区空闲多接收窗口可以保持较大如果应用程序读取数据慢接收缓冲区被占满接收窗口会减小如果接收缓冲区完全占满接收窗口变为0发送方必须停止发送当接收窗口变为0时发送方会启动零窗口探测定期发送探测报文询问接收方窗口是否已恢复。这防止了双方陷入永久等待。2.4 流量控制的作用滑动窗口实现的流量控制核心目标是防止发送方发送速度超过接收方的处理能力。接收方通过动态调整窗口大小控制发送方的发送速率避免接收缓冲区溢出导致数据丢失。三、为什么需要拥塞控制3.1 流量控制解决不了的问题滑动窗口解决了接收方的处理能力问题但没有解决网络本身的问题。如果网络中的路由器或链路出现拥塞数据包会在路由器队列中排队延迟增加。当队列满时路由器会丢弃数据包。发送方检测到丢包后重传但重传会进一步加重网络负担形成恶性循环——这就是拥塞崩溃。流量控制只关注接收方不关注网络中间状态。如果发送方和接收方之间的网络出现拥塞即使接收方窗口很大发送方也不应该继续高速发送。3.2 拥塞控制的核心思路拥塞控制的目标是在没有明确网络状态反馈的情况下通过探测和调整找到一个不会导致网络拥塞的发送速率。TCP拥塞控制通过维护一个拥塞窗口cwnd来实现。发送方实际可以发送的数据量取接收窗口和拥塞窗口中的较小值text实际发送窗口 min(接收窗口rwnd, 拥塞窗口cwnd)拥塞窗口由发送方独立维护根据网络状况动态调整。四、拥塞控制的四个核心算法TCP拥塞控制包含四个相互配合的算法慢启动、拥塞避免、快速重传、快速恢复。4.1 慢启动连接建立初期发送方不知道网络的承载能力因此从一个较小的拥塞窗口开始探测。慢启动的规则是每收到一个ACK拥塞窗口增加一个MSS最大报文段长度。这意味着拥塞窗口随RTT呈指数增长1、2、4、8、16……慢指的是起点低而不是增长速度慢。指数增长使发送方能够快速探测到网络的可用带宽。慢启动设置了一个慢启动阈值ssthresh。当拥塞窗口达到ssthresh时慢启动结束进入拥塞避免阶段。4.2 拥塞避免进入拥塞避免阶段后拥塞窗口的增长方式从指数变为线性每个RTT拥塞窗口增加一个MSS。线性增长使发送方缓慢逼近网络的承载极限避免过快增长导致拥塞。这个阶段持续到检测到丢包为止。4.3 快速重传当接收方收到乱序的数据段时会立即发送重复ACK告知发送方某个数据段未到达。如果发送方连续收到三个重复ACK就判断该数据段丢失立即重传而不需要等待超时计时器到期。这显著缩短了丢包恢复时间。4.4 快速恢复快速重传后发送方进入快速恢复阶段将ssthresh设为当前拥塞窗口的一半将拥塞窗口设为ssthresh 33表示已收到的三个重复ACK每收到一个重复ACK拥塞窗口增加1收到新数据的ACK后拥塞窗口设为ssthresh进入拥塞避免快速恢复避免了慢启动的重新开始使发送方能够更快恢复到丢包前的发送速率。五、拥塞控制的演进5.1 TCP Tahoe与TCP Reno早期的TCP Tahoe在检测到丢包时无论超时还是快速重传都会将拥塞窗口重置为1重新进入慢启动。TCP Reno引入了快速恢复机制在快速重传后不重置窗口而是从ssthresh继续。这是目前大多数操作系统默认支持的版本。5.2 TCP NewRenoTCP Reno在多个数据包丢失的场景下存在局限。NewReno改进了快速恢复的处理逻辑能够在一个窗口内多个丢包时更准确地恢复。5.3 TCP CUBICCUBIC是目前Linux系统的默认拥塞控制算法。它使用三次函数代替线性增长使窗口增长曲线更平滑在高带宽、长距离网络高BDP场景中表现更好。5.4 BBRBBRBottleneck Bandwidth and Round-trip propagation time是Google提出的拥塞控制算法。它不依赖丢包作为拥塞信号而是通过测量瓶颈带宽和最小RTT来构建发送模型。BBR在长距离、高丢包的网络环境中表现突出。六、滑动窗口与拥塞控制的对比对比维度滑动窗口拥塞控制解决的问题接收方处理能力网络承载能力控制依据接收方通告的接收窗口发送方维护的拥塞窗口反馈来源接收方的窗口字段ACK、丢包、RTT变化调整方向接收方主动调整发送方主动探测目标防止接收缓冲区溢出防止网络拥塞崩溃实际发送窗口min(rwnd, cwnd)min(rwnd, cwnd)两者协同工作滑动窗口确保发送方不超过接收方的处理能力拥塞控制确保发送方不超过网络的承载能力。实际发送窗口取两者中的较小值任何一方成为瓶颈时发送速率都会被限制。七、总结TCP的可靠传输依赖两个核心机制滑动窗口实现了流量控制。发送方可以在收到确认前连续发送多个数据段窗口大小由接收方动态调整防止接收缓冲区溢出。拥塞控制实现了网络稳定性。发送方通过慢启动、拥塞避免、快速重传、快速恢复等算法动态调整拥塞窗口探测网络的可用带宽避免因发送速率过快导致网络拥塞崩溃。两者的关系可以概括为滑动窗口管接收方能不能收拥塞控制管网络能不能扛。实际发送窗口取两者中的较小值任何一方出现瓶颈发送速率都会相应调整。理解这个分工就理解了TCP为什么能在不可靠的网络上实现可靠传输。

相关新闻

11 FM调制与解调的仿真

11 FM调制与解调的仿真

调频简介 FM调制(即调频)是使载波的频率随调制信号(即原始信号,也叫基带信号)的大小变化而变化,而振幅保持不变的调制方式,其数学公式如下:调频的主要指标要实现频率调制(FM)&#x…

2026/9/30 6:59:08 阅读更多 →
以 Weather Reporter 为单一线索重构演讲:Claude Code 五段式 Agentic 教学路径的叙事设计与落地

以 Weather Reporter 为单一线索重构演讲:Claude Code 五段式 Agentic 教学路径的叙事设计与落地

文档教程AI 技能 【免费下载链接】claude-code-best-practice from vibe coding to agentic engineering - practice makes claude perfect 项目地址: https://gitcode.com/GitHub_Trending/cl/claude-code-best-practice 点击查看 免费下载 这份学习旅程文档&…

2026/9/30 6:58:07 阅读更多 →
JAVA V6 多商户商城 开发文档——手机端前端

JAVA V6 多商户商城 开发文档——手机端前端

准备工作​ 概述​ uni-app 是一个使用 Vue.js 开发所有前端应用的框架,支持同时生成 ios、Android、H5、以及各种小程序等多平台应用。本项目基于 Vue 3、Vite 和 TypeScript 构建,集成了 Pinia 状态管理、uview-plus UI 组件库和 WindiCSS 样式框架 …

2026/9/30 6:58:07 阅读更多 →

最新新闻

银河麒麟V10SP1重装怎么保住数据盘?UUID与fstab挂载全流程

银河麒麟V10SP1重装怎么保住数据盘?UUID与fstab挂载全流程

简介:银河麒麟桌面操作系统V10SP1重装教程,重点解决保留“数据盘”不丢失的难题。内容面向具备一定Linux操作基础的技术人员与高级用户,适用于需在系统升级或重装时保护个人数据的场景。文档以PDF形式提供,共1个文件,压…

2026/9/30 7:40:24 阅读更多 →
OSPF与IS-IS双点双向路由引入:路由回馈成因与Route Tag根治方案

OSPF与IS-IS双点双向路由引入:路由回馈成因与Route Tag根治方案

前两天一位做网络集成的朋友给我发消息,说他在实验环境里做了一个OSPF与IS-IS双点双向路由引入的验证,结果发现OSPF域里所有路由器的外部LSA数量几乎翻了一倍。更诡异的是,明明只有两台ASBR,可路由表里同一个前缀却出现了两条外部…

2026/9/30 7:40:24 阅读更多 →
Cocos 彩色旋转 Shader 实战:UV 旋转、HSV 色相与性能优化

Cocos 彩色旋转 Shader 实战:UV 旋转、HSV 色相与性能优化

如果你玩过一些游戏加载页或者角色释放技能时的特效,一定见过那种彩色光带绕着一个中心点不断旋转的画面——红橙黄绿青蓝紫依次切换,像是把彩虹拧成了一根麻花。这种效果在 Cocos 里做其实有好几条路:硬编码贴图序列帧、引擎自带的 Tween 旋…

2026/9/30 7:40:24 阅读更多 →
我的花园世界客服咨询AI流量赋能,我的花园世界科技重塑智能体验新标杆

我的花园世界客服咨询AI流量赋能,我的花园世界科技重塑智能体验新标杆

近期,由湖南改变生物科技有限公司主办、本因内酵未徕品牌协办的“生物科技健康论坛暨AI赋能大健康产业启动会”在长沙市步步高福鹏喜来登酒店隆重举行。活动以“AI流量赋能实体破局——中小企业增长峰会”为主题,汇聚全国大健康行业专家、中小企业负责人、机构代表及…

2026/9/30 7:40:24 阅读更多 →
PHP 实战:网站突然出现大量恶意请求怎么办?从Nginx防护到PHP安全加固完整方案

PHP 实战:网站突然出现大量恶意请求怎么办?从Nginx防护到PHP安全加固完整方案

一、问题背景:网站访问正常,但服务器压力突然升高最近维护一个 PHP 内容管理系统,运维发现:网站没有明显业务增长,但是服务器请求量突然增加。监控:服务器:CPU:90%内存:正…

2026/9/30 7:40:24 阅读更多 →
FinOps落地实战:云成本管理与优化体系搭建指南

FinOps落地实战:云成本管理与优化体系搭建指南

FinOps 这个概念这几年在圈子里出现的频率越来越高,但你要是问十个人它到底是个什么东西,可能九个人的回答都不一样。有人说是云成本管理,有人说是一套财务流程,还有人干脆觉得就是个新造的 Buzzword。以我自己在甲方和乙方都摸爬…

2026/9/30 7:39:24 阅读更多 →

日新闻

Base64 图片头部特征识别:从文件头到格式判断的完整指南

Base64 图片头部特征识别:从文件头到格式判断的完整指南

1. 项目概述:为什么说看懂 base64 图片头部是基本功这几年跟 base64 打交道的机会越来越多,后端接口返回图片、前端渲染验证码、小程序里存小图、还有一些老系统导出报表,动不动就给你一段长到怀疑人生的 base64 字符串。很多人拿到字符串就直…

2026/9/30 0:00:35 阅读更多 →
Java公交站牌广告管理系统:JSP+Servlet+MySQL实战落地指南

Java公交站牌广告管理系统:JSP+Servlet+MySQL实战落地指南

简介:本资源是一份面向Java初学者与课程设计学生的公交站牌广告灯箱管理系统毕业设计文档,聚焦城市公共广告资源信息化管理痛点,提供从需求分析到技术实现的完整方案。文档采用标准学术论文结构,含摘要、英文摘要、目录及五章正文…

2026/9/30 0:00:35 阅读更多 →
用 Redis Lua 构建大模型 API 多租户原子配额治理体系

用 Redis Lua 构建大模型 API 多租户原子配额治理体系

我去年年底接了一个内部 AI 平台的治理需求,背景很直接:公司把 DeepSeek、MiniMax 这类大模型 API 统一封装成内部网关,开放给几个业务团队用。结果第一个月账单出来,额度直接超了 4 倍。仔细查日志,发现原因并不复杂—…

2026/9/30 0:00:35 阅读更多 →

周新闻

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解 【免费下载链接】spirula-studio Cross-vendor 3D Gaussian Splatting trainer - video to splat to mesh, Vulkan or CUDA. 项目地址: https://gitcode.com/GitHub_Trending/sp/spirula-studio Sp…

2026/9/29 8:16:59 阅读更多 →
SEO怎么推广速查手册新手避坑实战指南

SEO怎么推广速查手册新手避坑实战指南

SEO怎么推广速查手册新手避坑实战指南 模板网站太丑不够用?别急着加滤镜,那是治标不治本。很多老板盯着后台流量掉得眼红,却还在纠结首页Banner的圆角是不是3像素。这就像穿着西装去挖土,姿势不对,努力白费。我整理这份 速查手册…

2026/9/29 16:41:41 阅读更多 →
FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏

FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏

FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏 【免费下载链接】FireRed-OpenStoryline FireRed-OpenStoryline is an AI video editing agent that transforms manual editing into intention-driven directing through natural language …

2026/9/29 8:24:48 阅读更多 →

月新闻

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

2026/9/29 19:29:29 阅读更多 →
容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…

2026/9/29 5:58:00 阅读更多 →
容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步分类:[工程技术]细分主题:Docker 容器化技术与镜像安全管理:核心链路的逐步实现与关键代码取舍面对一个积累了五六年历史包袱的单体架构应用(包含 Web 接口、后台…

2026/9/29 3:55:56 阅读更多 →