• 进阶的码农 置顶
    2018-06-13
    AdvertisedWindow=MaxRcvBuffer-((NextByteExpected-1)-LastByteRead)。
    我根据图中例子计算 14-((5-1)-0) 算出来是10 ,括号里边的-1是减的什么,为啥和图例算出来的结果不一样,还是我计算的有问题,麻烦详细说一下 谢谢

    作者回复: 这里我写的的确有问题,nextbyteexpected其实是6,就是目前接收到五,下一个期望的是六,这样就对了

     1
     21
  • 小文同学
    2018-06-14
    1 设备缓存会导致延时?
        假如经过设备的包都不需要进入缓存,那么得到的速度是最快的。进入缓存且等待,等待的时间就是额外的延时。BBR就是为了避免这些问题:
        充分利用带宽;降低buffer占用率。

    2 降低发送packet的速度,为何反而提速了?
        标准TCP拥塞算法是遇到丢包的数据时快速下降发送速度,因为算法假设丢包都是因为过程设备缓存满了。快速下降后重新慢启动,整个过程对于带宽来说是浪费的。通过packet速度-时间的图来看,从积分上看,BBR充分利用带宽时发送效率才是最高的。可以说BBR比标准TCP拥塞算法更正确地处理了数据丢包。对于网络上有一定丢包率的公网,BBR会更加智慧一点。
        回顾网络发展过程,带宽的是极大地改进的,而最小延迟会受限与介质传播速度,不会明显减少。BBR可以说是应运而生。

    3 BBR如何解决延时?
        S1:慢启动开始时,以前期的延迟时间为延迟最小值Tmin。然后监控延迟值是否达到Tmin的n倍,达到这个阀值后,判断带宽已经消耗尽且使用了一定的缓存,进入排空阶段。
        S2:指数降低发送速率,直至延迟不再降低。这个过程的原理同S1
        S3:协议进入稳定运行状态。交替探测带宽和延迟,且大多数时间下都处于带宽探测阶段。

    深夜读了BBR的论文和网上大牛的讲解得出的小结,分享给大家,过程比较匆忙,不足之处也望老师能指出指正。
    展开
    
     105
  • 大唐江山
    2018-06-13
    作者辛苦啊,这一章读起来开始有点累了😂
    
     36
  • 华林
    2018-06-13
    这么说起来,我们经常发现下载速度是慢慢的增加到顶峰,然后就在那个值的附近徘徊,原因就是tcp的流量控制喽?
     4
     22
  • 食用淡水鱼
    2019-01-21
    快速重传那一段有问题。接收端接收6,7,8,9,10时漏掉了7,不是连续发送3个6ack,而是收到6,发送6的确认ack,收到8,9,10各发送一个6的重复ack,发送端检测到3个重复ack时(加上确认ack,总共有4个ack),进入重传机制。包括下面的拥塞控制,也是类似的逻辑
    
     11
  • MoFanDon
    2018-07-24
    5的ACK丢包了,出发发送端重发。重发过去后,接收端发现接收过了,丢弃。……如果接收端丢弃5后,没有继续发送ACK,那这样不是发送端永远也也没法接受到5的ACK?
     3
     9
  • 谛听
    2018-09-22
    不太清楚累积应答,比如接收端收到了包1、2、3、4,它的应答应该是5吗?也就是说中间的包就不用应答了吗?

    作者回复: 是的

    
     8
  • 卜
    2018-06-24
    好奇什么级别的程序开发需要了解怎么细,开发了好多网络程序都没用到,重传这些都是应用层在做
     2
     8
  • 扬~
    2018-11-01
    2个问题:
    1. TCP可靠的连接会不会影响到业务层,比如超时重传导致了服务端函数调用2次,那岂不是业务都要考虑幂等性了,我很懵逼,果然是懂得越多越白痴。
    2. 拥塞控制的窗口跟流量控制的窗口一回事吗,还是流量控制的窗口的出来后就会进入拥塞控制窗口?

    作者回复: 不会,重传的包不会交给应用层。是一个窗口

     3
     5
  • 咖啡猫口里的咖啡猫�...
    2018-06-13
    老师,TCP协议栈,保证包一定到吗,,哪几种情况下会丢失,,,能不能总结下

    作者回复: 不能保证,只是尽力重试,再重试

    
     5
  • 行者
    2018-06-13
    问题1,想到BBR可以根据ACK时间来判断,比如同一时刻发送了A、B、C三个包,A、B两个包10ms收到ACK,而C包20ms后收到ACK,那么就认为网络拥堵或被中间设备缓存,降低发送速度。
    问题2,TCP优点在于准确到达,可靠性高,但是速度慢;UDP优点在于简单,但是不确认可达;像后端接口一般使用TCP协议,因为客户端和服务器之间会有多次交互,且请求数据要确认可达;但是如果是直播的话使用UDP会更好,管你网络咋样,反正我赶紧发,让用户等急了就不好了。
    刘老师,有一个问题,接口有时候会受到2次相同时间相同内容的请求,但是客户端仅仅调用了接口一次,会是什么原因导致这个问题呢?TCP重复发送包导致的嘛?
     1
     5
  • 刘培培
    2019-08-27
    BBR 论文原文:https://queue.acm.org/detail.cfm?id=3022184

    作者回复: 就应该这样,一言不合就读论文,是最好的方式

    
     4
  • Null
    2019-03-27
    BBR 不填满缓存还是不填缓存?不填缓存那么缓存干啥用,如果填了了,即使不满,但是不是还有延迟。。。

    作者回复: 填的少,延迟就少了,当然做不到完全避免,毕竟缓存是路径上每一个设备自己的事情。缓存是每个设备自己的设计选择,BBR算法是两端的算法。

    就像买火车票,我建议网上购买,身份证刷进去,这样速度快,但是对于火车站还是要设置人工窗口,因为不是每个人都会选择速度快的方式的。

    
     4
  • 茫农
    2018-10-23
    有一个值 ssthresh 为 65535 个字节,,这个是什么意思?

    作者回复: slow start threshold

    
     3
  • lyz
    2018-07-24
    jira太真实了
    
     3
  • 秋去冬来
    2018-06-22
    快速重传那块6.8.9 7丢了为什么会发送3个冗余的6的3个ack

    作者回复: 六的ack里面强调下一个是七

    
     3
  • 旭风
    2018-06-19
    在传统算法和快速算法的对比描述中,对于快速算法中提到 cwnd减半为cwnd/2,sshthresh=cwnd ,后面cwnd=sshthresh+3,转折点是20变为13,这里的cwnd为10吗?

    2018-06-15

     作者回复

    cwnd先是为10,后面变为13

    继上一个问题,传统算法,cwnd 从1,2,4,8,16指数增长,这时cwnd为16,收发是不是各占8个?然后由16变成17,满8个确认时cwnd+1,就是17,那么增加到20这里,cwnd为20,这时产生拥塞,如果是传统的话,立马降下来,如果是快速,那么减半,也就是10,等待3个确认包+3,,后续每一个确认cwnd就+1吗?还是?这样子理解吗?
    展开

    作者回复: 是的

    
     3
  • Magic
    2019-09-10
    祝刘超老师教师节快乐,专栏很棒,受益良多

    作者回复: 谢谢

    
     2
  • 刘培培
    2019-08-27
    https://medium.com/google-cloud/tcp-bbr-magic-dust-for-network-performance-57a5f1ccf437
    
     2
  • Abirdcfly
    2019-06-13
    问个问题。最刚开始ssthres 是65535字节.然后一个mss是1460字节。那么指数增长应该是到44才变慢啊。为啥是16呢?

    作者回复: 举个例子而已,重点是那个曲线,而非数值

    
     2
我们在线,来聊聊吧