4.9 TCP 拥塞控制算法

欢迎大家订阅【计算机网络】学习专栏,开启你的计算机网络学习之旅!

文章目录

  • [1 TCP 拥塞控制算法](#1 TCP 拥塞控制算法)
    • [1.1 慢开始(Slow Start)](#1.1 慢开始(Slow Start))
    • [1.2 拥塞避免(Congestion Avoidance)](#1.2 拥塞避免(Congestion Avoidance))
    • [1.3 快重传(Fast Retransmit)](#1.3 快重传(Fast Retransmit))
    • [1.4 快恢复(Fast Recovery)](#1.4 快恢复(Fast Recovery))
  • [2 主动队列管理(AQM)](#2 主动队列管理(AQM))
    • [2.1 FIFO 与尾部丢弃策略](#2.1 FIFO 与尾部丢弃策略)
    • [2.2 随机早期检测(RED)](#2.2 随机早期检测(RED))
    • [2.3 主动队列管理的挑战与发展](#2.3 主动队列管理的挑战与发展)

1 TCP 拥塞控制算法

根据 RFC 5681,TCP 拥塞控制包括四个关键算法:慢开始拥塞避免快重传快恢复 。这些算法通过动态调整拥塞窗口大小,确保数据流的高效传输,避免网络拥塞。

1.1 慢开始(Slow Start)

①目的

探测网络的负载能力,避免过早地过载网络。

②算法

从小到大逐渐增大拥塞窗口。

初始时,拥塞窗口通常为1个报文段,每收到一个确认报文,拥塞窗口增加1个最大报文段大小(SMSS)。这种增长方式是指数级的,迅速提升传输速率。

③慢开始门限(ssthresh)

当拥塞窗口达到一定大小时,TCP会切换到拥塞避免 阶段。ssthresh定义了慢开始和拥塞避免之间的分界点

④传输轮次

传输轮次强调把拥塞窗口 cwnd 所允许发送的报文段都连续发送出去,并收到了对已发送的最后一个字节的确认。

例如:拥塞窗口 cwnd = 4,这时的往返时间 RTT 就是发送方连续发送 4 个报文段,并收到这 4 个报文段的确认,总共经历的时间。

一个传输轮次所经历的时间 = 往返时间 RTT

1.2 拥塞避免(Congestion Avoidance)

①目的

让拥塞窗口 cwnd 缓慢地增大,避免出现拥塞。

②算法

当拥塞窗口达到慢开始门限(ssthresh)后,TCP会转入拥塞避免阶段。在此阶段,拥塞窗口的增长采用加法增大(AIMD)策略,即每经过一个往返时间(RTT),拥塞窗口增加1个报文段(SMSS)。
增长速度较慢,避免过快增加窗口导致网络过载。

【示例】









【注意】

  • "慢开始"是指一开始向网络注入的报文段少,并不显指拥塞窗口cwd增长速度慢;
  • "拥塞避免"并非指完全能够避免拥塞,而是指在拥塞避免阶段将拥塞窗口控制为按线性规律增长,使网络比较不容易出现拥塞

1.3 快重传(Fast Retransmit)

①目的

减少因丢包引起的延迟,快速恢复数据传输。

②算法
当发送方连续收到三个重复的确认报文时,TCP立即重传丢失的报文段,而无需等待超时重传。这样可以减少丢包后的等待时间,提高数据传输效率。

【示例】

③作用

使整个网络的吞吐量提高约 20%

1.4 快恢复(Fast Recovery)

当发送端收到连续三个重复的确认时,不执行慢开始算法,而是执行快恢复算法 FR (Fast Recovery) 算法。

①目的

避免丢包后进入慢开始,快速恢复数据传输速率。

②算法

在快重传后,TCP不会回到慢开始阶段,而是执行快恢复算法。此时,慢开始门限 设置为当前拥塞窗口的一半,拥塞窗口减小并迅速进入拥塞避免阶段。这样可以减少网络的震荡,保证网络高效运行。

【示例】

【TCP拥塞控制流程图】

【练习】

2 主动队列管理(AQM)

TCP 拥塞控制与网络层的队列管理策略密切相关。路由器的队列管理方式会影响到TCP的性能,特别是重传和拥塞的发生。

2.1 FIFO 与尾部丢弃策略

最简单的队列管理策略是FIFO(First In First Out) ,即按到达顺序处理数据包。若队列已满,采用尾部丢弃策略 (tail-drop policy),丢弃新到达的分组。

该策略的问题在于:

  • 丢包会导致发送方进行重传,可能触发TCP进入慢开始阶段,降低网络吞吐量。
  • 在高负载情况下,尾部丢弃可能导致网络全局同步,即多个TCP连接同时进入慢开始状态,严重影响性能。

2.2 随机早期检测(RED)

为避免尾部丢弃导致的全局同步问题,提出了随机早期检测(RED) 机制。在RED中,路由器根据队列的平均长度决定是否丢弃包:

  • 队列长度小于最小阈值(THmin):正常排队;
  • 队列长度超过最大阈值(THmax):丢弃包;
  • 队列长度介于两个阈值之间:按一定概率丢弃包。


通过这种方式,RED能够更早地检测到网络拥塞,并减少全局同步的发生。

2.3 主动队列管理的挑战与发展

尽管RED等AQM算法能够在一定程度上优化队列管理,但它们仍存在一些问题,如过于复杂的参数设置和对网络实际负载的响应迟缓。

随着网络需求的不断变化,新的AQM算法不断涌现,以期解决这些问题。目前,新的AQM算法仍在实验阶段,尚未形成统一的标准。

相关推荐
游戏开发爱好者83 小时前
iOS重构期调试实战:架构升级中的性能与数据保障策略
websocket·网络协议·tcp/ip·http·网络安全·https·udp
面朝大海,春不暖,花不开9 小时前
Java网络编程:TCP/UDP套接字通信详解
java·网络·tcp/ip
byxdaz9 小时前
PJSIP 中的 TCP 传输配置指南
tcp/ip
ChicagoTypewriter9 小时前
计算机网络中的常用表项梳理
网络·计算机网络·智能路由器
DemonAvenger10 小时前
高性能 TCP 服务器的 Go 语言实现技巧:从原理到实践
网络协议·架构·go
liulilittle13 小时前
深度剖析:OPENPPP2 libtcpip 实现原理与架构设计
开发语言·网络·c++·tcp/ip·智能路由器·tcp·通信
cui_win13 小时前
【内存】Linux 内核优化实战 - net.ipv4.tcp_tw_reuse
linux·网络·tcp/ip
2501_9160137413 小时前
iOS 多线程导致接口乱序?抓包还原 + 请求调度优化实战
websocket·网络协议·tcp/ip·http·网络安全·https·udp
M1A113 小时前
TCP/IP协议精解:IP协议——互联网世界的邮政编码系统
后端·网络协议·tcp/ip
夏天想14 小时前
优化 WebSocket 实现单例连接用于打印【待测试 】
网络·websocket·网络协议