TCP四大拥塞控制算法总结

四大算法:1.慢启动,2.拥塞避免,3.拥塞发生,4.快速恢复。

慢启动:

首先连接建好的开始先初始化拥塞窗口cwnd大小为1,表明可以传一个MSS大小的数据。

每当收到一个ACK,cwnd大小加一,呈线性上升。

每当过了一个往返延迟时间RTT,cwnd大小直接翻倍,乘以2,呈指数上升

还有一个ssthresh,是一个上限,当cwnd >= ssthresh时,会进入"拥塞避免算法"。

拥塞避免算法:

当拥塞窗口大小cwnd大于等于慢启动阈值ssthresh后,就进入拥塞避免算法。算法如下:

收到一个ACK后,则cwnd = cwnd + 1 / cwnd;

每当过了一个往返延迟时间RTT,cwnd大小加一。

过了慢启动阈值后,拥塞避免算法可以避免窗口增长过快导致窗口拥塞,而是缓慢的增加调整到网络的最佳值。

拥塞发生状态时的算法

如果发送端接收到3个以上的重复ACK,TCP就意识到数据发生丢失,需要重传。这个机制就不需要等到重传定时器超时,所以叫快速重传,而快速重传后没有使用慢启动算法,而是拥塞避免算法,所以这又叫做快速恢复算法。

当收到三个重复确认ACK时,TCP开启快速重传Fast Retransmit算法,而不用等到RTO超时再进行重传:

cwnd带下缩小为当前的一半

ssthresh设置为缩小后的cwnd大小

然后进入快速恢复算法Fast Recovery

快速恢复算法:

逻辑如下:

cwnd = cwnd + 3MSS,加3 MSS的原因是因为收到了3个重传的ACK;

重传DACKS指定的数据包;

如果再收到DACKS,那么cwnd大小增加一;

如果收到了新的ACK,表明重传的包成功了,那么退出快速恢复算法。将cwnd设置为ssthresh,然后进入拥塞避免算法。

相关推荐
加油,旭杏16 分钟前
【Linux】Linux进程的概念
linux·运维·服务器·进程·冯诺依曼体系结构·管理·pcb
学技术的大胜嗷1 小时前
pycharm连接远程linux服务器上的docker进行深度学习训练
linux·服务器·pytorch·python·深度学习·神经网络·pycharm
.Net Core 爱好者1 小时前
ASP .NET CORE 6 项目实现WebSocket通信实践
网络·websocket·网络协议·c#·.net·.netcore·visual studio
两仪式quq1 小时前
Linux-环境变量
linux·运维·服务器
Android技术栈1 小时前
鸿蒙开发(NEXT/API 12)【跨设备互通特性简介】协同服务
网络·harmonyos·鸿蒙·鸿蒙系统·openharmony·协同·跨设备
秣宇2 小时前
Linux提升篇-服务器BIOS介绍
linux·运维·服务器
楚歌again2 小时前
【如何在 Windows 10 主机上通过 VMware 安装 Windows 11 虚拟机,并共享主机网络】
网络·windows
影子落人间2 小时前
Linux常用命令大全
linux·运维·服务器
keep__go2 小时前
GBase8a 开机自启动
linux·运维·服务器·南大通用·gbase8a