您的位置:首页 > 其它

BBR与CoDel

2017-10-30 08:01 375 查看
    CoDel的出现[1]为了解决网络中越来越长的排队长度和不断增加的端到端的时延。BBR的出现,纠正了TCP拥塞控制的发展方向,而CoDel则是纠正网络队列管理机制的发展方向。CoDel应该与BBR配合使用。而这两篇文章均有TCP拥塞控制研究的开山祖师Van Jocobson的署名,体现了其对自己以往提出的TCP拥塞控制机制的修正,或者说TCP的拥塞控制机制的演进体现了Van Jocobson不断思考的结果。

    剩下的文字,基本来自于对于CoDel[1][队列管理机制的翻译。

    谷歌的quic协议中的仿真器抽象了几个网络模型。

Sender(Queue)<-----(Link 10Mbps)----->Switch(Port Queue)<--------(Link 10Mbps)------->Receiver(Queue)

    发送端向交换机发送数据包带宽能力为100M,交换机向接收端发送数据包的带宽能力为10M。发送端的TCP初始拥塞窗口假设为25个。一个数据包的长度为1500字节(12000bit)。发送端突发发送25个数据包,包与包在网络中的时间间隔T=(12000bit/100M)~0.12ms。这里假设0.12ms一个单位时间,用τ表示。

    接下来看看[1]中的图1。这个图在讲解BBR中文章中很多都用到了。队列中是发送端向网络中发送的25个数据包,小方块的长为包的时长τ,高度为网络带宽(100M)。

  


    在100M向10M链路上发包时,包的时延会被拉长(The bottleneck spaces out the packets, and they retain that spacing after leaving.)。100M对应的包的时长为1τ,则10M链路上包的时长可以计算出为10t。第一个包在交换机中的处理时长为10τ,则第二个包就要在交换机中等待9τ,第三个包要等待18τ。。。注意包本身的时间长度为1τ(图一中一个小方块的长度)。经过一个单向时延,接收端收到数据包,开始向发送端回馈ACK,ACK之间的时间间隔,反映的就是瓶颈链路的处理能力(The
receiver just turns a data packet into an ack (acknowledgment packet), so the ack stream retains the spacing on the return path.)。经过一个RTT(这里假设一个RTT为200τ)。发送端开始收到接收端返回的ACK,接收端就可以按照接收ACK的速率向网络中发包(The sender turns each ack into a data packet, so, after just one
RTT, the packet-arrival rate at the bottleneck exactly equals the departure rate, and the queue won’t grow )。具体情况可以论文[1]中的图2与图3。这两个图中的数据包的发送是接收的ack的驱动的,应该叫ack self clocking,不能叫做pacing(我也是是不断订正自己的理解的)。但是这条链路为一条数据流利用,如果按照这种接收ack的间隔向外发送数据包,数据包就不会在瓶颈链路排队。网络中的链路会存在很多数据流,所有的流都按照各自的接收ack的间隔向外发包,也不会自链路中造成排队。但是tcp的在拥塞避免阶段,要在一个rtt内增加一个数据包的发送,以及sack造成的突发发包。ack
self clocking没有改变tcp突发的本质。



    但是问题出现。初始的拥塞窗口为25个包。RTT为200τ,包之间的理想发送时间间隔为10τ,就是说发送端在一个RTT内可以向管道中注入20个包,初始拥塞窗口多了5个。这五个包在网络中动态滞留,网络队列中始终存在5个包。网络队列长度,不增,不减,它就在那里。理想情况下,网络中要是只有一个连接,这个不会造成任何问题。但是,每个连接都在网络中动态滞留5个包,大量的连接,就会造成队列长度的积累,就是bufferbloat。这个可以说明BBR在加速一个周期后,要减速一个周期,就是让路由器清空连接在加速阶段增长的队列长度。

   关于CoDel中的队列管理机制就不介绍了,有博文介绍[2][3]。我没有仔细看。其中的思想也是创举,它弥补了RED这种主动队列管理的不足。它逼迫网络中的连接按照瓶颈链路的处理能力进行发包。CoDel的队列管理机制,会以较大概率丢弃不守规矩流的数据包。

   要是这种队列管理机制在网络中得到大规模部署,搞网络加速的这些聪明人,可以休矣。聪明人在网络中制造了麻烦。

   大早上,为什么花了一个半小时写这么个东西。昨天读CoDel的文章,为其中作者做研究的态度打动。CoDel的想法验证,有一部分是基于ns2仿真的,代码地址[4]。

 

[1]Controlling Queue Delay-A modern AQM is just one piece of the solution to bufferbloat

[2]TSQ/CoDel队列管理以及TCP BBR如何解决Bufferbloat问题

[3]Linux网络堆栈的排队机制

[4]CoDel Wiki

[5]BBR, the new kid on the TCP block
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  BBR CoDel 队列管理