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

相关推荐
wanhengidc1 小时前
当云手机出现卡顿怎么办?
运维·服务器·安全·智能手机
七七&5566 小时前
2024年08月13日 Go生态洞察:Go 1.23 发布与全面深度解读
开发语言·网络·golang
元清加油6 小时前
【Golang】:函数和包
服务器·开发语言·网络·后端·网络协议·golang
向日葵.8 小时前
fastdds.ignore_local_endpoints 属性
服务器·网络·php
athink_cn10 小时前
HTTP/2新型漏洞“MadeYouReset“曝光:可发动大规模DoS攻击
网络·网络协议·安全·http·网络安全
昵称为空C10 小时前
SpringBoot接口限流的常用方案
服务器·spring boot
zzc92110 小时前
TLSv1.2协议与TCP/UDP协议传输数据内容差异
网络·测试工具·安全·wireshark·ssl·密钥·tlsv1.2
Peter_Deng.11 小时前
Linux 下基于 TCP 的 C 语言客户端/服务器通信详解(三个示例逐步进阶)
服务器·c语言·网络
wxy31911 小时前
嵌入式LINUX——————TCP并发服务器
java·linux·网络
蒋星熠12 小时前
C++零拷贝网络编程实战:从理论到生产环境的性能优化之路
网络·c++·人工智能·深度学习·性能优化·系统架构