TCP拥塞控制——慢开始与拥塞避免AIMD
来源:互联网 发布:sql中union的用法 编辑:程序博客网 时间:2024/05/23 23:24
*之前总结了TCP拥塞控制的原理, 这次来看看具体的设计算法——慢开始与拥塞避免。。。→_→*
拥塞窗口cwnd(Congestion Window)
发送方维持一个叫做拥塞窗口的状态变量,拥塞窗口的大小取决于网络的拥塞程度且动态变化。发送方让自己的发送窗口等于拥塞窗口,如果还考虑接收方的接受能力,那么发送窗口还可能小于拥塞窗口
发送方控制拥塞窗口的原则:只要网络没有出现拥塞,就增大拥塞窗口,以便将更多的分组发送出去;只要网络出现拥塞(发送方没有按时收到应当到达的确认报文),就减少拥塞窗口,以减少注入到网络中的分组数
慢开始(Slow Start)算法
由小到大逐渐增加发送窗口,相当于由小到大逐渐增大拥塞窗口数值。通常在刚开始发送报文段时,先把拥塞窗口cwnd设置为一个最大报文段MSS的字节数,当每收到一个对新的报文的确认后,就将拥塞窗口增加至多一个MSS的字节数,以逐渐增大发送方的拥塞窗口cwnd
使用慢开始算法后,每经历一个传输轮次(Transmission Round),拥塞窗口cwnd就加倍
传输轮次:一个传输轮次所经历的时间是往返时间RTT。这里更加强调是将拥塞窗口cwnd所允许发送的报文段都连续发送出去,并收到对发送的最后一个字节的确认
拥塞避免(Congestion Avoidance )
- 让拥塞窗口cwnd缓慢的增大,每经过一个往返时间RTT就把发送方的拥塞窗口cwnd加1,而不是加倍,所以拥塞窗口按线性规律缓慢增长,比慢开始算法的拥塞窗口增长更加缓慢
慢开始门限ssthresh
防止拥塞窗口cwnd增长过大引起网络拥塞,还需要设置慢开始门限ssthresh状态变量
当cwnd < ssthresh时,使用慢开始算法
当cwnd == ssthresh时,可以使用慢开始算法,也可以使用拥塞避免算法
当cwnd > ssthresh时,使用拥塞避免算法
无论使用哪种算法,只要发送方判断网络出现拥塞,就把慢开始门限ssthresh设置为出现拥塞时的发送方窗口值的一半,把拥塞窗口cwnd设置为1,执行慢开始算法
总结
乘法减小(Multiplicative Decrease):不论在慢开始阶段或拥塞避免阶段,只要出现超时,就把慢开始门限值减半(当前拥塞窗口的一半)
加法增大(Additive Increase):执行拥塞避免算法后,使拥塞窗口缓慢增大,以防止网络过早出现拥塞
将这两种算法结合起来被称为AIMD算法
拥塞避免不能完全避免拥塞,只是在拥塞避免阶段将拥塞窗口控制为线性增长,使网络不容易出现拥塞
- TCP拥塞控制——慢开始与拥塞避免AIMD
- TCP拥塞控制——慢开始和拥塞避免
- TCP拥塞控制——慢开始与拥塞避免算法
- TCP拥塞控制:慢开始、拥塞避免、快重传、快恢复
- TCP控制拥塞的四种算法:慢开始,拥塞避免,快重传,快恢复
- TCP/IP拥塞控制:慢开始、拥塞避免,快重传、快恢复
- 拥塞控制之慢开始和拥塞避免
- TCP拥塞控制-慢启动、拥塞避免、快重传、快启动
- TCP拥塞控制-慢启动、拥塞避免、快重传、快启动
- TCP拥塞控制-慢启动、拥塞避免、快重传、快启动
- TCP慢启动与拥塞避免算法
- TCP慢启动与拥塞控制笔记
- TCP 慢启动 拥塞控制
- TCP 慢启动 拥塞控制
- TCP—拥塞控制简介
- TCP:浅析拥塞控制窗口、慢启动、拥塞避免在linux内核中的实现
- TCP/IP详解--拥塞控制 & 慢启动 快恢复 拥塞避免
- TCP/IP详解--拥塞控制 & 慢启动 快恢复 拥塞避免
- 使用神经网络对黄金期货交割价格进行预测-2 MATLAB
- [积累] 在Ubuntu16.04 64位系统上配置linux-0.11内核实验环境
- SQL查询语句练习题20道
- 6 模型的属性与功能
- Boost bind使用方法
- TCP拥塞控制——慢开始与拥塞避免AIMD
- 使用eclipse时弹出框要求输入用户名和密码
- 初学java时遇到的编译,运行问题
- 大连市血液中心+大连软件园——2017.06.27
- 最小生成树——kruskal
- 介绍一款敲好用的抓包工具Wireshark
- LeetCode
- PHP防止精度丢失
- 检测linux系统支持的soket选项