TCP—为什么是AIMD?

原文转自:http://blog.chinaunix.net/uid-28387257-id-4543179.html

说到TCP原理,一般的人谈传输效率,也就是吞吐率,了解的人谈公平性,以及收敛性。本篇博文讲一下TCP为什么使用AIMD策略,为什么是收敛的?

1.公平性和收敛性

才接触网络协议的人可能会问:为什么要收敛和公平?TCP不是传输可靠、够快就行了吗?
远远不够,因为TCP是端到端的,窗口增减也是试探性的“自适应”方式,网络是黑盒,这就有很多问题。你自己一个人发包发得快,侵略性强,没有太大问题。但是如果其他人也跟你一样没有节制的发包呢?这就会造成网络负载过重,以至于崩溃。公平性和收敛性的出发点就在这里。让每一个TCP发送端尽可能地均分带宽,同时减少丢包,减轻网络设备的压力。这其实是很难的trade off。TCP窗口总是锯齿状地周期抖动,增长-减小,不断循环,这种探测带宽的行为一定会造成丢包,只是或多或少的差别而已。

举个例子:你现在看动漫《fate/stay night ubw》,已经开始了一段时间,视频缓冲速度很快。这时候你旁边的同学看你这么入神,发现很好看,于是加入队伍,也点开视频。这时候网络该怎么分呢?又通过什么样的机制分呢?最好的结果当然是均分带宽,你自己分一半,同学也分一半,这时候你的视频缓冲就慢下来了【注 1】。公平分配说起来容易,做起来难。怎么保证完全均分?这就要靠丢包和延时变动来反映网络状况。你的同学加入了,新建的TCP连接会尝试慢启动,慢启动其实不慢,窗口指数增长,缓冲速度快速增加,也就是说,他开始抢你的带宽了。抢到一定时刻,一定会引起丢包,或者延时的急剧增长。这时候,基于丢包或者延时变动的TCP减窗机制起作用了,你们两个都开始减窗。你减一点,我减一点。这时候你会想:不对啊,我先开始的,速度早就涨上去了,我们两个都减,他永远赶不上我。那么,开始谈第二个问题。

2.AIMD为什么收敛

上面说到减窗,现在普遍的减窗策略是“乘性减窗”,英文对应“MD”。比如你们固有的带宽是8M,一开始你自己全占了,然后同学开始抢,慢启动发包很快,于是,交换机缓存扛不住了,丢包了。这时候你的吞吐率是7M,同学的速率是1M。你们两个的TCP察觉到丢包后,把速率各减去一半,你有3.5M,他有0.5M。网络不拥塞了,没有丢包,那就继续增窗。该增多少呢?你的带宽明显占优势,同学有没有可能获得比你更高的速率呢?怎么样增才能达到均分带宽的目的?现在普遍的增窗策略是“加性增窗”,英文对应“AI”。也就是每条TCP连接在一个RTT内的增量是常数,假设这个加性因子为200K。那接下来的速率增长就是:你有3.5+0.2=3.7,同学有0.5+0.2=0.7.

看到这里,或许有的人就恍然大悟了:这样增窗,结果是大家的速率都收敛。也许还有人不明白,那就把速率随时间变化的情况列出出来:

    3.5     0.5
    3.7     0.7
    3.9     0.9
    4.1     1.1
    ……………………………
    5.5     2.5
    2.75    1.25    MD
    ……………………………
    4.75    3.25
    2.375   1.625   MD
    ……………………………
    4.375   3.625
    2.1875  1.8125  MD
    ……………………………
    4.1875  3.8125  MD
    …………………………… 

从以上速率变化,可以看出,两条TCP连接的速率在逐渐趋近,这就是AIMD策略的效果:收敛,到最后公平。也许有的人意犹未尽,那就从公式角度再算一次看看。假设flow1的初始窗口为c1,flow2的初始窗口为c2。MD减窗过程中,乘性因子为beta=0.5,也就是遇到丢包,窗口减一半。AI增窗过程中,加性因子为a。于是有:

     c1‘ = ((c1*0.5 + m*0.2)*0.5 + m*0.2)*0.5 + m*0.2 …………
    这里m是变化的,表示增窗的次数,直到遇到丢包。但是由于带宽有限,于是m可以视为常数。
    c1‘可以用等比数列求和公式给出,这里就不详细计算了。结论可以直接告诉大家:
    c1‘收敛到跟m和beta有关,跟c1无关的常数。
    c2‘也类似。
    收敛性的证明比较复杂,我也懒得在博文里讲这么学术化的事情。参见【注 2】。 

看到这里,你也就明白,TCP如何均分带宽,你同学又为什么能从你手里抢到带宽了。至于减窗是不是过于剧烈,beta能不能设置得更好,变成动态的,增窗因子能不能设置更好,变成动态的。以及能不能抛弃AIMD,使用MIMD,在什么网络中能这样做。这些问题就不是本文的讨论范围了,也许以后会讲。

注:
【1】视频传输中,实时性视频用UDP,非实时性视频用TCP,这里用人气动漫举例,是比较恰当的,动漫不像篮球比赛,没有太强的实时性。好奇的同学可以查阅“牛奶葡萄酒”原则。
【2】Jacobson在他著名的论文,SIGCOMM 88中已经证明了收敛性。

时间: 2024-08-29 23:03:50

TCP—为什么是AIMD?的相关文章

读书笔记:计算机网络第7章:阻塞控制

这是我在Coursera上的学习笔记.课程名称为<Computer Networks>,出自University of Washington. 由于计算机网络才诞生不久,目前正在以高速在发展,所以有些旧的教材可能都已经跟不上时代了.这门课程在2013年左右录制,知识相对还是比较新的.覆盖了计算机网络中的各个协议层,从物理层到应用层都讲得非常仔细.学完这门课程之后对计算机网络会有比较深刻的了解. 概述 课程位置 关于传输层和网络层的上半部分 话题 阻塞就类似于显示生活中的堵车 阻塞CONGEST

可以将TCP BBR算法模块化到低版本内核取代锐速吗

上周的文章引发了比较火爆的争论并带来了争议,我比较满意或者遗憾,尽管如此,如果有人真的能明白在文章的背后我真正想表达的意思,我也就深感欣慰了.还像往常一样,我花周末的时间来总结结束,写点技术散文,同时我希望能在技术上引发同样的争论.        在跟温州皮鞋厂老板聊天时,老板让我从非技术角度重新思考了Google的BBR算法.        很多测试似乎表明BBR的表现非常不错,虽不能保证包打天下,至少相比锐速而言,它是免费的啊,那么疑问也就随之而来了,既然BBR是免费的,且效果不错,那么那些

Linux网络基础番外篇(IP、MAC、TCP)

linux网络管理 计算机网络 MACMAC(Media Access Control或者Medium Access Control)地址,意译为媒体访问控制.介质访问控制,或称为物理地址.硬件地址,用来定义网络设备的位置.在OSI模型中,第三层网络层负责IP地址,第二层数据链路层则负责MAC地址.因此一个主机会有一个MAC地址,而每个网络位置会有一个专属于它的IP地址.MAC地址(MAC Address)MAC(Medium/Media Access Control)地址,用来表示互联网上每一

TCP/IP详细说明--滑模、拥塞窗口、慢启动、Negle算法

TCP的数据流大致能够分为两类,交互数据流与成块的数据流. 交互数据流就是发送控制命令的数据流.比方relogin,telnet.ftp命令等等.成块数据流是用来发送数据的包,网络上大部分的TCP包都是这样的包. 非常明显.TCP在传输这两种类型的包时的效率是不一样的,因此为了提高TCP的传输效率,应该对这两种类型的包採用不同的算法. 总之.TCP的传输原则是尽量降低小分组传输的数量. TCP的交互式数据流 ? 经受时延的确认技术 TCP的交互式数据流通常使用"经过时延的确认"技术.通

TCP/IP可靠的原理 滑动窗口 拥塞窗口

TCP和UDP处在同一层---运输层,但是TCP和UDP最不同的地方是,TCP提供了一种可靠的数据传输服务,TCP是面向连接的,也就是说,利用TCP通信的两台主机首先要经历一个"拨打电话"的过程,等到通信准备结束才开始传输数据,最后结束通话.所以TCP要比UDP可靠的多,UDP是把数据直接发出去,而不管对方是不是在收信,就算是UDP无法送达,也不会产生ICMP差错报文,这一经时重申了很多遍了. 把TCP保证可靠性的简单工作原理摘抄如下 应用数据被分割成TCP认为最适合发送的数据块.这和

TCP拥塞控制算法纵横谈-BBR vs Reno/CUBIC

不管是在工作中,还是平时与技术上的朋友一起讨论关于BBR的问题,都不可避免的会面对"BBR和CUBIC之间的对比"的问题,毕竟CUBIC在Linux平台是默认的拥塞算法,已经好多年了.        现在突然有了个被宣传的神乎其神的BBR算法,如果真的有那么好,那肯定要比CUBIC好,如果真的这样,到底好在哪里呢?如果不是这样,那么问题又是什么呢?我想关于BBR好在哪里这个问题是不必回答的,因为如果在效率和公平性上秒杀了CUBIC,那基本上的结果就是换掉BBR,除了理论工作者没有人会问

QVegas-一个升级版的TCP Vegas拥塞算法

拥塞避免带来了很多疑惑,本文解开这个疑惑并给出一个实实在在但却很简陋的算法.        其实在基于丢包的拥塞算法中,拥塞避免的过程总是伴随着AI和MD的,不能光说AI而忽略MD.        如果考虑的是基于时延的拥塞算法,AI和MD事实上是不需要的,因为算法会根据时延的变化来调整窗口.        所以说,AIMD是基于丢包的算法中采取的窗口调整方法,其中AI保证了带宽利用率,而MD则保证了公平性.对于基于时延的算法而言,带宽的利用率和公平性保证均分散性体现在算法的执行过程中了,其中:

深入理解TCP(二)

上一篇http://www.cnblogs.com/whc-uestc/p/4715334.html中已经讲到TCP跟踪一个拥塞窗口来(cwnd)提供拥塞控制服务,通过调节cwnd值以控制发送速率.那么TCP如何基于丢包事件来设置cwnd值?通过TCP拥塞控制算法来实现.TCP拥塞控制算法主要有三部分:慢启动.拥塞避免.快速恢复. 1.慢启动 当一条TCP连接开始时,cwnd的值一般初始设置为MSS的较小值.因为只有当发送方接收到ACK,才会更新cwnd的值,所以在一个RTT时间内,发送方只能发

[网络编程] TCP、UDP区别以及TCP传输原理、拥塞避免、连接建立、连接释放总结

TCP.UDP都是属于运输层的协议,提供端到端的进程之间的逻辑通信,而IP协议(网络层)是提供主机间的逻辑通信,应用层规定应用进程在通信时所遵循的协议.一.UDP主要特点:传输的是用户数据报协议.1.UDP是无连接的,即发送数据之前不需要建立连接.2.UDP 使用尽最大努力交付,即不保证可靠交付,同时也不使用拥塞控制.3.UDP是面向报文的.UDP没有拥塞控制,很适合多媒体通信的要求.4.UDP支持一对一.一对多.多对一和多对多的交互通信.5.UDP的首部开销小,只有 8个字节.发送方 UDP对