美文网首页
拥塞控制与QUIC

拥塞控制与QUIC

作者: 谭英智 | 来源:发表于2022-10-01 16:35 被阅读0次

拥塞控制

概念:

  • 拥塞的定义:太多太快的分组需要网络传输,超过了网络的处理能力
  • 拥塞的原因:网络中的某些路由器队列溢出,开始丢包
  • 拥塞的表现:
    • 分组丢失,源端超时
    • 在源端收到多个冗余ack
    • 延迟增大
  • 拥塞控制的目标:
    • 不拥塞,吞吐大
  • 拥塞控制的几个关键问题:
    • 拥塞检测:段超时、冗余ACK、ECN、延迟大
    • 拥塞时或非拥塞时:如何控速
    • 丢失的段什么时机重传

什么是冗余ACK:当某一个包丢包或者暂时迷失在网路中,后续的包先到达目的端,每到达一个seq更大的包,就会返回一次冗余ACK。

拥塞控制算法

Tahoe

拥塞事件:超时,3个冗余ACK

慢启动阶段:

  • 每个RTT,发送窗口加倍
  • 超时或者收到3个冗余ACK,重发,并把发送窗口设置成1,设置发送窗口i的一半为阈值
  • 进入慢启动阶段
  • 达到阈值则进入拥塞避免阶段

拥塞避免阶段:

  • 每RTT,发送窗口增加1
  • 超时或者3个ACk,则重发,并把发送窗口设置为1,进入慢启动阶段
network-tahoe

存在的问题:每次发生网络抖动,例如收到冗余ACK或者超时,则非常悲观的把发送窗口设置为1,导致发送的网络包像脉冲一样,网路有时高负荷,有时利用率低

Reno

慢启动阶段:

  • new ACK:每个RTT,发送窗口增倍
  • 超时:发送窗口设置为1,阈值为发送窗口一半
  • 3个冗余ACK,阈值设置为一半,发送窗口设置为阈值加3,进入快速恢复状态
  • 达到阈值,进入拥塞避免阶段

拥塞避免状态:

  • new ACK:每RTT加1
  • 超时:重传,阈值设置为窗口一半,窗口设置为1
  • 3个冗余ACK:阈值设置为一半,窗口设置一半加3,进入快速恢复阶段

快速恢复状态:

  • 冗余ACK:发送窗口每RTT加1,重传
  • new ACK:进入拥塞避免状态
  • 超时:发送窗口设置为1,进入慢启动

存在的问题:

进入快速恢复阶段,收到冗余ACK,只会重传一个包,如果这个包后续的包也发生了丢包,源端又不进行重传,会导致超时,进入慢启动状态

new reno

针对reno存在的问题,New Reno在快速恢复阶段进行了优化

快速恢复阶段:

  • 冗余ACK:发送窗口加1
  • 部分确认(PACK)
    • 发送确认后的段
    • 有新段可以发送,则发送新段
  • 恢复确认(RACK):收到所有段的确认
    • 进入拥塞避免阶段

存在的问题:

在一定程度上缓解了reno的问题,但是new reno在一个RTT只能恢复一个段的丢失,在网络上丢多个分段的时候,显得利用率不高

SACK

增加SACK包,在快速恢复阶段,在包中带多个分段的信息,

这样源端就可以高吞吐的重传多个分段丢失的包

CUBIC

思想是,考虑到在慢启动阶段通过2倍的速度来逼近阈值,和在拥塞避免阶段通过加1来慢速逼近阈值,CUBIC通过用立方函数,来快速逼近阈值

的出来的流量曲线如下

network-cubic

ECN

Reno系列的算法,都是依赖端对端的反馈,这样显得反馈太慢

通过修改TCP和IP协议,在网路的路由器发生拥塞时,及时反馈源端,显得更有效

缺点:需要修改路由设备

Vegas

基于Reno的算法,是基于超时、冗余ACk,但是网路此时已经出现严重的拥塞,拥塞的控制应该更加敏感

Vegas通过感知延迟的变化,在更早的时刻感知拥塞,更加温和的调节速度,让网路整体上,处于高利用率的状态

慢启动状态:

  • 2个RTT增倍窗口
  • 计算期望和实际的速度差
  • 如果发现实际速度差大于1,设置阈值,并把窗口减少八分之一,进入拥塞避免状态

拥塞避免状态:

  • 测量延时
    • cwnd=cwnd+1,Diff<α时
    • cwnd不变 , α ≤Diff≤ β时
    • cwnd=cwnd-1 , Diff> β时

网络流量的情况如下:

network-vegas

存在的问题:

对RTT的变化过于敏感,在跟其他算法在竞争网络时,显得过于温和,导致抢不到网络资源

BBR

基于评估网路的流量,来动态调整发送的速率

评估端对端重负载时的最大带宽BtlBW

评估端对端在不拥塞时的最佳延迟:RTprop

BDP = BtlBw * RTprop

源端在注入等待被确认的inflight数据不超过BDP

慢启动阶段:

  • 指数型增加发送窗口
  • 测量RTprop和BtlBw
  • 发现BtlBw无法增加时,进入Drain阶段

Drain:

  • 让速率略低于BDP,排空因慢启动阶段注入的过多流量
  • 延迟变小后,进入稳定阶段,让速率等于BDP

ProbeBW:

  • 周期性探测新的天花板或者退缩为低速的平衡

ProbeRTprop:

  • 在稳定阶段抽取2%事件,降低速率,来测试RTprop
  • 2%时间,增加速率,测试BtlBw
  • 动态调整稳定器的BDP

QUIC

HTTP2存在的问题

  • TCP握手次数多,延迟大
  • 存在队首阻塞问题,单链接上的多路复用效果差
  • 网络迁移问题,在移动IP移动,旧链接和新链接数据无法无缝对接
  • 拥塞控制算法落后

HTTP3的思路

  • 基于UDP,而不是TCP
  • 自实现可靠传输、拥塞控制、流量控制
  • 实现连接迁移
  • 在用户态实现,不需要更新OS,便于部署推广

QUIC架构

network-quic

相关文章

  • 拥塞控制与QUIC

    拥塞控制 概念: 拥塞的定义:太多太快的分组需要网络传输,超过了网络的处理能力 拥塞的原因:网络中的某些路由器队列...

  • TCP/IP详解

    流量控制与拥塞控制 流量控制 拥塞控制

  • 2.2IP/ATM QoS控制技术

    协议栈分层、QoS保障技术(流量控制,拥塞控制的基本方法)QoS的基本概念(网络性能参数)流量控制与拥塞控制的基本...

  • 网络复习-笔记07-传输层(3)

    拥塞控制原理 在学习TCP拥塞控制之前,首先看看拥塞控制的基本原理拥塞控制非正式定义:“太多发送主机发送了太多数据...

  • 2018-07-11

    tcp的运输控制分为tcp流量控制和tcp拥塞控制,这里先讲tcp的拥塞控制。 为了讲清楚tcp的拥塞控制,还是利...

  • 拥塞控制算法对比

    RENO(经典的tcp拥塞控制): 基于丢包的拥塞控制. 分为 慢启动, 拥塞避免, 快速恢复, 快速重传...

  • 拥塞控制和流量控制

    滑动窗口的解释: 拥塞控制窗口+慢启动+拥塞控制算法=拥塞控制 TCP特性使得每个TCP连接可以得到均等的带宽。在...

  • 实时通讯中拥塞控制算法

    拥塞控制算法分类 基于丢包(loss rate)的拥塞控制算法例如TCP中早期的拥塞控制算法Reno, 会带来较高...

  • 浅谈TCP拥塞控制算法

    TCP通过维护一个拥塞窗口来进行拥塞控制,拥塞控制的原则是,只要网络中没有出现拥塞,拥塞窗口的值就可以再增大一些,...

  • 运输层

    1. UDP 与 TCPUDP:无连接、尽最大可能交付、无拥塞控制、面向报文。TCP:连接、提供可靠交付、有拥塞控...

网友评论

      本文标题:拥塞控制与QUIC

      本文链接:https://www.haomeiwen.com/subject/ffydartx.html