欢迎大家订阅【计算机网络】学习专栏,开启你的计算机网络学习之旅!
文章目录
- [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算法仍在实验阶段,尚未形成统一的标准。