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算法仍在实验阶段,尚未形成统一的标准。

相关推荐
发光小北7 小时前
西门子 PLC 串口转网口模块现场应用有哪些问题?
网络协议
上海云盾-小余7 小时前
BGP 高防底层原理:TCP 异常流量识别与清洗机制
运维·网络·tcp/ip
captain3767 小时前
▲网络原理(2)-TCP
java·服务器·网络·tcp/ip·java-ee
疯狂打码的少年10 小时前
【计算机网络】IPv6基础(特点、表示法、与IPv4对比)
网络·笔记·计算机网络
楚Y6同学10 小时前
QT上位机开发-UDP通信-模拟下位机数据联调的方法
网络协议·udp·联调方法
网安老伯14 小时前
都2026年了,还在问网络安全怎么入门?看完这一篇你就懂了
运维·计算机网络·web安全·网络安全·wireshark·密码学·网络攻击模型
captain37616 小时前
网络原理(3)-TCP核心机制连接管理▲▲▲
java·服务器·网络·ide·网络协议·tcp/ip·java-ee
易岳群16 小时前
搞清 Socket、TCP、MQTT 的通信关系:从底层协议到物联网实战
网络协议·tcp/ip·socket·通信协议关系
宵时待雨17 小时前
linux笔记归纳19:网络层协议IP
linux·网络·笔记·网络协议·tcp/ip
只睡四小时17 小时前
内网穿透+WebSocket:Node 零依赖远程桌面实战
网络·websocket·网络协议