VuePress 站点
首页
数学
计算机基础
Java后端
AI大模型
UI设计
首页
数学
计算机基础
Java后端
AI大模型
UI设计
  • 计算机基础
  • 计算机网络应用

    • 课程笔记:TCP三次握手建立连接
    • 课程笔记:TCP三次握手的必要性
    • 课程笔记:TCP协议缺陷与SYN Flood攻击
    • 课程笔记:TCP四次挥手释放连接
    • 课程笔记:TCP四次挥手释放连接的必要性
    • 课程笔记:TCP 报文段格式与 IP 分组
    • 课程笔记:HTTP/2 新特性——二进制分帧
    • 课程笔记:HTTP/2 新特性——多路复用
    • 课程笔记:HTTP/2 新特性——服务器推送(Server Push)
    • 课程笔记:HTTPS 简介与架构图
    • 课程笔记:HTTPS原理与传输层安全协议(TLS)
    • 课程笔记:HTTPS原理——对称加密算法
    • 课程笔记:HTTPS原理——非对称加密算法
    • 课程笔记:HTTPS 原理 —— 数字签名
    • 课程笔记:HTTPS 原理——证书与 CA
    • 课程笔记:完整的HTTPS协议通信流程
    • 课程笔记:HTTPS 协议的性能损耗
    • 课程笔记:TLS False Start 加速 HTTPS
    • 课程笔记:升级 HTTP 协议到 HTTP/2
    • 课程笔记:通过会话恢复加速 HTTPS
    • 课程笔记:OWASP 组织与十大 Web 安全漏洞
    • 课程笔记:XSS 跨站脚本攻击
    • 课程笔记:存储型XSS跨站脚本攻击
    • 课程笔记:XSS攻击窃取Cookie
    • 课程笔记:反射型XSS跨站脚本攻击
    • 课程笔记:DOM型XSS跨站脚本攻击
    • 课程笔记:植入 JS、HTML 代码攻击
    • 课程笔记:XSS攻击的防护策略
    • 课程笔记:XSS攻击的输入环节防护
    • 课程笔记:XSS 劫持 Cookie 的防护策略
    • 课程笔记:XSS 内容输出防护方案
    • 课程笔记:CSP 内容安全策略
    • 课程笔记:CSP 内容安全策略的应用方式
    • 课程笔记:CSRF 跨站请求伪造攻击原理
    • 课程笔记:CSRF 跨站点请求伪造攻击案例
    • 课程笔记:CSRF 跨站请求伪造防护方案
    • 课程笔记:OWASP CSRFTester 工具的原理与使用
    • 课程笔记:点击劫持攻击原理
    • 课程笔记:点击劫持防护方案
    • 课程笔记:URL 跳转漏洞原理与防护
    • 课程笔记:Session 认证与会话劫持
    • 课程笔记:Session固定与Session保持攻击
    • 课程笔记:注入攻击与 OWASP 靶机平台
    • 课程笔记:SQL盲注与ORM注入攻击及防护
    • 课程笔记:XML注入、代码注入、OS命令注入攻击
    • 课程笔记:文件上传漏洞与文件下载/目录浏览漏洞
    • 课程笔记:访问控制与权限访问漏洞
    • 课程笔记:DDoS 分布式拒绝服务攻击原理与防护
    • 课程笔记:CC(Challenge Collapsar)攻击与防护
    • 课程笔记:CDN 的工作原理
    • 课程笔记:CDN的网络架构和术语说明
    • 课程笔记:CDN应用场景与阿里云CDN
    • 课程笔记:如何使用阿里云CDN服务
    • 课程笔记:CDN 刷新与预热
    • 课程笔记:阿里云 CDN 回源配置
    • 课程笔记:CDN 缓存配置
    • 课程笔记:CDN 访问控制与性能优化
  • 计算机网网络

    • 📖 教材介绍与课程导言
    • 📖 1.1 信息时代的计算机网络
    • 📖 1.2 因特网概述
    • 📖 1.3 电路交换、分组交换和报文交换
    • 📖 1.4 计算机网络的定义和分类
    • 📖 1.5 计算机网络的性能指标(1)
    • 📖 1.5 计算机网络的性能指标(2)
    • 📖 1.6.1 常见的三种计算机网络体系结构
    • 📖 1.6.2 计算机网络体系结构分层的必要性
    • 📖 1.6.3 计算机网络体系结构分层思想举例
    • 📖 计算机网络体系结构中的专用术语
    • 📖 物理层概述
    • 📖 物理层下面的传输媒体
    • 📖 传输方式
    • 📖 编码与调制
    • 📖 2.5 信道的极限容量
    • 📖 2.6 信道复用技术
    • 📖 3.1 数据链路层概述
    • 📖 3.2 数据链路层的三个重要问题
    • 📖 3.2.1 封装成帧和透明传输
    • 📖 3.2.2 差错检测
    • 📖 3.2.3 (1) 可靠传输的相关基本概念
    • 📖 3.2.3 (2) 可靠传输的实现机制 - 停止-等待协议(SW)
    • 📖 3.2.3 (3) 可靠传输的实现机制 - 回退N帧协议(GBN)
    • 📖 3.2.3 (4) 可靠传输的实现机制 - 选择重传协议(SR)
    • 📖 3.3 点对点协议 PPP
    • 📖 3.4 共享式以太网
    • 📖 3.4.1 网络适配器和 MAC 地址
    • 📖 3.4.2 (1) CSMA/CD 协议的基本原理
    • 📖 3.4.2 (2) 共享式以太网的争用期、最小帧长和最大帧长
    • 📖 3.4.2 (3) 共享式以太网的退避算法和信道利用率
    • 📖 3.4.3 使用集线器的共享式以太网
    • 📖 3.4.4 在物理层扩展以太网
    • 📖 3.4.5 (1) 网桥的主要结构和基本工作原理
    • 📖 3.4.5 (2) 透明网桥的自学习和转发帧的过程以及生成树协议STP
    • 📖 3.5 交换式以太网
    • 📖 3.5.1 以太网交换机
    • 📖 3.5.2 共享式以太网和交换式以太网的对比
    • 📖 3.6 以太网的MAC帧格式
    • 📖 3.7.1 虚拟局域网 VLAN 概述
    • 📖 3.7.2 虚拟局域网 VLAN 的实现机制
    • 📖 3.8 以太网的发展
    • 📖 3.9.1 802.11 无线局域网的组成
    • 📖 3.9.2 802.11 无线局域网的物理层
    • 📖 3.9.3 (1) 802.11 无线局域网的数据链路层 —— 使用 CSMA/CA 协议(而不使用 CSMA/CD 协议)
    • 📖 CSMA/CA(载波监听多址接入/碰撞避免)协议的基本工作原理
    • 📖 802.11 无线局域网的 MAC 帧格式
    • 📖 网络层概述
    • 📖 网际协议 IP(网际协议)与异构网络互连
    • 📖 IPv4 地址及其编址方法——概述
    • 📖 IPv4 地址的分类编址方法
    • 📖 IPv4 地址的划分子网编址方法
    • 📖 IPv4 地址的无分类编址方法(CIDR)
    • 📖 IPv4 地址的应用规划
    • 📖 IPv4 地址与 MAC 地址
    • 📖 地址解析协议 ARP
    • 📖 IP 数据报的发送和转发流程
    • 📖 IPv4 数据报的首部格式
    • 📖 静态路由配置
    • 📖 因特网的路由选择协议概述
    • 📖 路由信息协议 RIP(路由信息协议)
    • 📖 开放最短路径优先 OSPF(开放最短路径优先)
    • 📖 边界网关协议 BGP(边界网关协议)
    • 📖 路由器的基本工作原理
    • 📖 网际控制报文协议 ICMP(网际控制报文协议)
    • 📖 虚拟专用网 VPN 和网络地址转换 NAT
    • 📖 IP 多播技术的相关基本概念
    • 📖 在局域网上进行硬件多播
    • 📖 在因特网上进行 IP 多播需要的两种协议
    • 📖 网际组管理协议 IGMP
    • 📖 多播路由选择协议
    • 📖 移动 IP 技术概述
    • 📖 IPv6 引进的主要变化
    • 📖 IPv6 数据报的基本首部和扩展首部
    • 📖 IPv6 地址
    • 📖 从 IPv4 向 IPv6 过渡
    • 📖 网际控制报文协议 ICMPv6
    • 📖 软件定义网络 SDN
    • 📖 运输层概述 — 进程间基于网络的通信
    • 📖 TCP/IP 体系结构运输层中的两个重要协议
    • 📖 运输层端口号、复用与分用的概念
    • 📖 UDP 和 TCP 的对比
    • 📖 TCP 报文段的首部格式
    • 📖 "三报文握手"建立 TCP 连接
    • 📖 "四报文挥手"释放 TCP 连接
    • 📖 TCP 的流量控制 (Flow Control)
    • 📖 TCP 的拥塞控制 (Congestion Control) 及与网际层拥塞控制的关系
    • 📖 TCP 可靠传输的实现
    • 📖 TCP 超时重传时间 (RTO) 的选择
    • 📖 TCP 的选择确认 (SACK)
    • 📖 6.1 应用层概述
    • 📖 6.2 客户—服务器方式和对等方式
    • 📖 6.3 动态主机配置协议 DHCP
    • 📖 6.4 域名系统 DNS
    • 📖 6.5 文件传送协议 FTP
    • 📖 电子邮件
    • 📖 万维网 WWW
    • 📖 网络安全概述
    • 📖 密码学相关基本概念
    • 📖 对称密钥密码体制
    • 📖 公钥密码体制
    • 📖 报文摘要和报文鉴别码
    • 📖 数字签名(digital signature)
    • 📖 实体鉴别
    • 📖 密钥分发
    • 📖 访问控制
    • 📖 网络体系结构各层采取的安全措施—物理层和数据链路层
    • 📖 网络体系结构各层采取的安全措施—网络层
    • 📖 网络体系结构各层采取的安全措施—运输层
    • 📖 网络体系结构各层采取的安全措施—应用层
    • 📖 防火墙访问控制与入侵检测系统
    • 📖 常见的网络攻击及其防范
    • 📖 定长子网划分和变长子网划分的二叉树解法

📖 TCP 的拥塞控制 (Congestion Control) 及与网际层拥塞控制的关系

🎯 课程摘要:TCP 拥塞控制 (congestion control) 是防止过多数据注入网络的全局性机制,核心由四种算法构成:慢开始 (slow start)、拥塞避免 (congestion avoidance)、快重传 (fast retransmit)、快恢复 (fast recovery)。通过维护拥塞窗口 CWND 和慢开始门限 ssthresh,根据超时重传或三个重复确认来调整发送速率。网际层则通过主动队列管理 AQM(如 RED)配合避免全局同步。

📝 详细笔记

1. 拥塞的基本概念

  • 概念定义:在某段时间,若对网络中某一资源的需求超过了该资源所能提供的可用部分,网络性能就要变坏,这种情况称为拥塞 (congestion)。
  • 网络资源:链路容量(带宽)、交换节点中的缓存和处理机等。
  • ⚠️ 重点/考点:若出现拥塞而不进行控制,整个网络的吞吐量将随输入负载的增大而下降;当输入负载增大到某一数值时,吞吐量减小为零,网络无法工作,即死锁。

输入负载与吞吐量的关系

区域输入负载变化吞吐量变化状态
理想控制增大(未饱和)等于输入负载(45°斜线)正常
理想控制超过限度保持水平(饱和)正常
轻度拥塞增大增长率逐渐减小轻度拥塞
拥塞状态到达某一数值反而随输入负载增大而减小拥塞
无控制继续增大减小为零死锁

2. 流量控制 vs 拥塞控制

对比项流量控制 (flow control)拥塞控制 (congestion control)
任务防止发送方超过接收方接收能力防止过多数据注入网络
控制依据接收方的接收能力各方面因素(全局)
范围点对点通信全局性问题
涉及对象特定发送方与接收方所有主机、路由器、存储转发过程等
控制方接收方控制发送方源点按算法自行控制发送速率

3. 拥塞控制的基本方法

  • 开环控制:用良好设计从一开始保证问题不发生,系统运行后不再调整;适合流量特征可准确规定且性能要求可事先获得的场景。
  • 闭环控制:基于反馈的控制方法,包括三部分:①监测网络拥塞在何时何地发生;②把拥塞信息传送到可采取行动的地方;③调整网络运行以解决问题。适合流量特征不能准确描述或网络不提供资源预留的场景。
  • ⚠️ 重点/考点:Internet 不提供资源预留机制且流量特征不能准确描述,因此主要采用闭环控制。
  • 衡量拥塞的指标:缓存溢出丢弃分组百分比、路由器平均队列长度、超时重传分组数量、平均分组时延及其标准差等;这些指标上升标志着拥塞程度增大。
  • 反馈形式分类:
    • 显式反馈:拥塞节点(路由器)向源点提供显式反馈信息,如 ICMP 源站抑制报文,或在转发分组中保留字段表示拥塞状态。
    • 隐式反馈:源点通过观察网络行为(超时重传、RTT)推断是否拥塞,无需拥塞节点提供显式信息。
    • ⚠️ 重点/考点:TCP 采用隐式反馈算法,在运输层实现拥塞控制。

4. TCP 四种拥塞控制算法(核心重点)

4.1 基本假设与状态变量

  • 假设条件:
    1. 数据单方向传送,另一方向只传送确认;
    2. 接收方总有足够大接收缓存,发送窗口仅由网络拥塞程度决定(不考虑流量控制);
    3. 以 TCP 最大报文段长度 MSS(数据载荷字节数)为单位。
  • 状态变量:
    变量含义维护方
    CWND拥塞窗口发送方
    RWND接收窗口接收方
    SWND发送窗口 = min(CWND, RWND)发送方
    ssthresh慢开始门限发送方
  • 判断拥塞的依据:没有按时收到确认报文段而产生超时重传(现代通信线路误码率低,超时重传很可能是路由器繁忙丢弃分组所致)。
  • 算法选择规则:
    • CWND < ssthresh → 使用慢开始算法
    • CWND = ssthresh → 二者皆可
    • CWND > ssthresh → 使用拥塞避免算法

4.2 慢开始 (Slow Start) 与拥塞避免 (Congestion Avoidance)

  • 慢开始:CWND 初始值设为 1,每个传输轮次结束后 CWND 按指数规律增长(+1、+2、+4、+8…)。
  • 拥塞避免:当 CWND 达到 ssthresh 时改用,每个传输轮次结束后 CWND 线性加 1。
  • 传输轮次:发送方把 CWND 允许发送的报文段连续发送出去,并收到对已发送最后一个报文段的确认;一个轮次经历的时间即 RTT。
  • ⚠️ 重点/考点:"慢开始"是指一开始向网络注入的报文段少,而不是指 CWND 增长速度慢;"拥塞避免"并非完全避免拥塞,而是使 CWND 线性增长,使网络不易出现拥塞。
  • 超时重传时的处理:
    • ssthresh = 当前 CWND / 2
    • CWND = 1
    • 重新开始执行慢开始算法

4.3 快重传 (Fast Retransmit) 与快恢复 (Fast Recovery)

  • 快重传:要求接收方不等待自己发送数据时才捎带确认,而是立即发送确认;即使收到失序报文段也立即发送对已收到报文段的重复确认。发送方一旦收到三个连续的重复确认,就立即重传相应报文段,而不等重传计时器超时。
  • 快恢复:发送方收到三个重复确认时,知道只是丢失个别报文段(并非拥塞),不启动慢开始,而是:
    • ssthresh = 当前 CWND / 2
    • CWND = ssthresh(也有的实现取 CWND = 新 ssthresh + 3)
    • 开始执行拥塞避免算法
  • 快恢复 CWND 增大的理由:收到三个重复确认表明已有三个报文段离开网络、停留在接收方缓存中,网络中报文段减少了三个,故可适当增大 CWND。
  • ⚠️ 重点/考点:慢开始和拥塞避免于 1988 年提出(TCP Tahoe 版本);快重传和快恢复于 1990 年增加(TCP Reno 版本);使用快重传可使整个网络吞吐量提高约 20%。

4.4 cwnd 随传输轮次变化示例(ssthresh 初始 = 16)

传输轮次算法本轮发送确认后 CWND
初始——1
1慢开始0号2
2慢开始1~2号4
3慢开始3~6号8
4慢开始7~14号16(达到 ssthresh)
5拥塞避免15~30号17
6拥塞避免31~47号18
…拥塞避免…线性 +1
n拥塞避免171~194号(丢失几个)24 → 超时重传
重置——ssthresh=12, CWND=1
之后慢开始—1→2→4→8→12(指数)
之后拥塞避免—12→13→14…(线性)

4.5 拥塞控制流程图

5. TCP 拥塞控制与网际层拥塞控制的关系

  • 尾部丢弃策略:路由器输入缓存队列按 FIFO 处理,队列已满后到达的 IP 数据报都被丢弃。当大量 TCP 报文段涌入造成尾部丢弃时,多个 TCP 发送方同时超时重传,同时进入慢开始阶段,称为全局同步,导致全网通信量骤降后又骤增。
  • 主动队列管理 AQM (Active Queue Management):1998 年提出,在路由器队列长度达到某阈值(但未满)时就主动丢弃 IP 数据报,以提前降低发送方速率。
  • 随机早期检测 RED (Random Early Detection):AQM 的一种实现,维护最小门限和最大门限:
    • 平均队列长度 < 最小门限:存入队列;
    • 平均队列长度 > 最大门限:丢弃;
    • 介于两者之间:按某丢弃概率 p 丢弃(体现随机性)。
  • ⚠️ 重点/考点:RFC 7567(2015 年)已将 RFC 2309 列为陈旧,不再推荐使用 RED;但路由器进行主动队列管理仍必要,替代算法尚在实验阶段,无 IETF 标准。

💡 核心总结

  • 拥塞控制是全局性问题,区别于点对点的流量控制;TCP 采用隐式反馈(超时重传)判断拥塞。
  • 四种算法:慢开始(指数)、拥塞避免(线性)、快重传(3 个重复确认立即重传)、快恢复(CWND 减半而非降为 1)。
  • 超时重传 → ssthresh=CWND/2、CWND=1、重启慢开始;三个重复确认 → ssthresh=CWND/2、CWND=ssthresh、执行拥塞避免。
  • 发送窗口 SWND = min(CWND, RWND),最终发送速率受两者共同约束。
  • 网际层通过 AQM/RED 缓解尾部丢弃引发的全局同步问题。

❓ 课后思考 / 经典考题

  1. (2009 真题)TCP 连接 cwnd=16 时超时,后续 cwnd 变化?答:ssthresh=8、cwnd=1,慢开始指数增长到 8 后拥塞避免线性增长,第 3 轮次后 cwnd=4,第 4 轮次后 cwnd=9。
  2. (2014 真题)接收窗口 RWND=10KB,则发送窗口 SWND 最大值?答:SWND=min(CWND, RWND)≤10KB,选 A。
  3. (2020 真题)cwnd 从 8KB 增长到 20KB 最长耗时?答:处于拥塞避免阶段,线性加 1 共 12 个轮次,RTT=2ms,耗时 24ms。
  4. 慢开始"慢"的含义是什么?快恢复为何不把 CWND 降为 1?
  5. 尾部丢弃策略为什么会引发全局同步?
最近更新: 2026/6/23 17:18
Contributors: yangwenguang
Prev
📖 TCP 的流量控制 (Flow Control)
Next
📖 TCP 可靠传输的实现