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,然后进入拥塞避免算法。

相关推荐
Blurpath2 小时前
免费代理IP服务有哪些隐患?如何安全使用?
网络·安全·ip代理·住宅ip
1024小神3 小时前
tauri2项目使用sidcar嵌入可执行文件并使用命令行调用
linux·运维·服务器
Douglassssssss4 小时前
【深度学习】使用块的网络(VGG)
网络·人工智能·深度学习
AI风老师4 小时前
2、ubuntu系统配置OpenSSH | 使用vscode或pycharm远程连接
linux·运维·服务器·ssh
python算法(魔法师版)4 小时前
网络编程入门(一)
大数据·网络·网络协议·计算机网络
网络小白不怕黑4 小时前
Python Socket编程:实现简单的客户端-服务器通信
服务器·网络·python
PatrickYao04224 小时前
想要建站但没有服务器?雨云RCA,免服务器即可搭建完整网站!!!
运维·服务器·alist·云应用·无服务器部署
不是吧这都有重名5 小时前
利用systemd启动部署在服务器上的web应用
运维·服务器·前端
传知摩尔狮6 小时前
Linux 中断源码性能分析实战:从内核深处榨取每一丝性能
linux·运维·服务器
君鼎7 小时前
muduo库TcpServer模块详解
linux·网络·c++