基于丢失的拥塞控制算法
经典拥塞控制:tahoe和reno
慢启动(cwnd 倍增): 当cwnd < ssthresh时,使用慢启动算法。 当cwnd > ssthresh时,改用拥塞避免算法。 当cwnd = ssthresh时,慢启动与拥塞避免算法任意。
拥塞避免(拥塞窗口的一半,线性增加)
发生拥塞(重传定时器(RTO)超时): 把ssthresh降低为cwnd值的一半 把cwnd重新设置为1 重新进入慢启动过程。
快速重传:接收端收到后面的包,就快速发送冗余ack
快速恢复(收到3个相同的ack): 把ssthresh设置为cwnd的一半 把cwnd再设置为ssthresh的值ssthresh+冗余ack个数 重新进入拥塞避免阶段。
拥塞控制改进new reno,sack(选择性确认),cubic
NewReno: Reno在收到一个新的数据的ACK时就退出了快速恢复状态了,而NewReno需要收到该窗口内所有数据包的确认后才会退出快速恢复状态,从而更一步提高吞吐量。
sack: 可以选择确认ack,解决多个丢失问题,可替代new reno。
cubic: 拥塞控制窗口增长函数是一个三次函数,这样设计的目的是为了在当前的快速和长距离网络环境中有更好的扩展性。
网络辅助信息拥塞控制ecn
需要修改ip协议,开启ecn使能;还需要修改tcp协议,ecn设置状态
基于延迟的拥塞控制vages
精确测量rtt。延迟变化会引起窗口大小的变化。 存在的问题:与其他算法协同工作不公平,敏感且温和,只适合内网机房使用。
bbr(基于模型的拥塞控制)
基于丢失的拥塞控制算法问题: 吞吐振荡,延迟大,侵略性强
bbr主要思想: 模型,将通信分成应用受限,带宽受限阶段 经常测量RTprop和BtlBw,计算bdp,反映网络通信量和路由的变化 BtlBw控制发送速率,bdp控制inflight的数量
RTprop:往返传播时间 BtlBw:瓶颈带宽 BDP = BtlBw * RTProp inflight:飞行中的数据 1.当缓冲区未拥塞时,RTprop基本不会变化;相反拥塞并且队列满时,BtlBw就能确定下来不变化。 2.缓冲区大小会影响RTprop,缓冲区越大,拥塞时RTprop越高。 3.通过ack确定RTT和传输速率,用于更新RTprop,BtlBw。 4.发送数据时会先对每个数据包与BtlBw进行匹配。 5.bbr定期间隔RTprop时间
快速启动: 2/ln2=2.885mss为启动窗口,延迟不变化倍增窗口
drain: 将快速启动的分组排空,使得inflight=bdp
ProbeBw: 高速发送,周期性测量新的天花板,或者退缩到新的低速平衡,适应瓶颈带宽变化。
ProbeRTprop: 高速发送期间,百分2的时间测量RTprop,应用受限数据流小直接使用该数据。适应路由变化。
quic(bbr可用于quic)
http1.0:短连接 http1.1:长连接,节约带宽,HOST域,缓存处理,缓存处理 http2.0:多路复用,头部数据压缩,服务器推送
http3(quic):选择UDP作为底层传输层协议,流复用和流控,拥塞控制机制,更好的错误处理能力,更快的握手
|