TCP 可靠传输实现原理 - 3.拥塞控制

TCP 可靠传输实现原理 - 3.拥塞控制

💡 原文中文,约4200字,阅读约需10分钟。
📝

内容提要

TCP的拥塞控制通过动态调整拥塞窗口(cwnd)来应对网络状况,主要包括慢启动、拥塞避免、快速重传和快速恢复。慢启动阶段逐步增加cwnd,拥塞避免阶段线性增长以防止拥塞。发生拥塞时,TCP会减小cwnd并进入恢复阶段。不同算法(如Reno、Cubic)在处理拥塞时各有特点,旨在提高网络性能并减少丢包。

🔎

延伸解读

拥塞控制与流量控制的区别

文章指出,滑动窗口主要关注发送方到接收方的流量控制,而拥塞控制则关注整个网络链路的流量控制。拥塞控制会综合考量网络链路中的所有主机、路由器以及降低网络传输性能的因素,视角更为全面。两者相互制约,使发送方能够从网络链路的全局角度自动调整发送速率。

慢启动为何“不慢”

慢启动阶段,cwnd初始值较小,但每收到一个ACK,cwnd加1,导致每经过一个RTT,cwnd翻倍,呈指数级增长。因此,尽管名为“慢启动”,实际增长速度很快。Linux 3.0之后,根据Google的建议,cwnd初始值被设置为10个MSS,进一步加快了启动速度。

不同拥塞控制算法的核心差异

文章提到,不同拥塞控制算法的核心差异主要在拥塞避免阶段。基于丢包的算法如Reno、Cubic,在出现丢包时减小拥塞窗口;基于时延的算法如Vegas、FastTCP,通过延迟和带宽估算调整窗口;基于链路容量的算法如BBR,实时测量带宽和时延;基于学习的算法如Remy,使用机器学习生成规则。

快速恢复的局限性

快速恢复算法严重依赖引起快速重传的Dup Ack,至少需要3个Dup Ack才能触发。但3个Dup Ack并不意味着只丢了3个数据包,可能丢失多个数据包,而快速重传只会重传一个,其他丢失的数据包只能等待RTO超时重传,导致sshthresh锐减,甚至减少到1,且不会触发快速恢复,形成恶性循环。

❓

Q&A

TCP的拥塞控制是如何工作的?

TCP的拥塞控制通过动态调整拥塞窗口(cwnd)来应对网络状况,主要包括慢启动、拥塞避免、快速重传和快速恢复四个阶段。

什么是慢启动阶段?

慢启动阶段是TCP在连接建立后逐步增加cwnd的过程,直到达到预定义的慢启动阈值或检测到丢包。

拥塞避免阶段与慢启动阶段有什么不同?

拥塞避免阶段是当cwnd达到慢启动阈值后,cwnd以线性方式增长,以防止网络拥塞,而慢启动阶段是指数级增长。

TCP如何处理网络拥塞?

当发生拥塞时,TCP会减小cwnd并进入恢复阶段,使用不同算法(如Reno、Cubic)来调整发送速率。

快速恢复阶段的作用是什么?

快速恢复阶段允许在发生快速重传后,迅速恢复到丢包前的传输速率,而不是重新进入慢启动阶段。

不同的TCP拥塞控制算法有什么特点?

不同的TCP拥塞控制算法(如Reno、Cubic、Vegas等)在处理拥塞时各有特点,旨在提高网络性能并减少丢包。

🏷️

标签

➡️

继续阅读