原文转自: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.53.7     0.73.9     0.94.1     1.1……………………………5.5     2.52.75    1.25    MD……………………………4.75    3.252.375   1.625   MD……………………………4.375   3.6252.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中已经证明了收敛性。

TCP—为什么是AIMD?相关推荐

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

    这是我在Coursera上的学习笔记.课程名称为<Computer Networks>,出自University of Washington. 由于计算机网络才诞生不久,目前正在以高速在发 ...

  2. 传输层---TCP协议

    1.TCP协议段格式 源端口号/目的端口号:知道数据从哪进程中来,要到哪个进程中去 32位序号/32位确认序号:传输数据时按字节进行编号,序号保证数据按序到达,而双方都需要确认,所以有序号和确认序号 ...

  3. 万字长文 | 全(小区局域)网最强 TCP/IP 拥塞控制总结

    来源 | 后端技术指南针 头图 | CSDN付费下载自视觉中国 先唠唠嗑 在正式开始文章技术点之前,想先聊一下我对面试中的TCP/IP问题的一些拙见,希望对盆友们有所帮助. 在招聘岗位描述中,几乎必然 ...

  4. 计算机网络运输层知识点,计算机网络复习——Ch6传输层

    传输层 知识点 1. UDP协议:无连接.不可靠.提供复用和分用功能 2. 端口的概念:熟知端口的范围0-1023 端口的概念 端口 两类端口 3. TCP报文段格式 4. TCP可变窗口的实现:报文 ...

  5. Transport Layer

    文章目录 概述 运输层和网络层 因特网运输层 多路复用与多路分解 UDP 报文段结构(segment structure) 检验和(check sum) 可靠数据传输原理 可靠数据传输协议 完全可靠信 ...

  6. 【计算机网络】【运输层-5】

    小白笔记 TCP拥塞控制(TCP是典型的端到端的拥塞控制) TCP所采用的方法是让每一个发送方根据所感知到的网络拥塞程度来限制其能向连接发送流量的速率.如果一个TCP发送方感知从它到目的地之间的路径没 ...

  7. Linux系统下基于IO多路复用的大规模可靠UDP服务器的实现(三)

    七.可靠性UDP的优化细节 4.5章节中,我们提到了KCP本身的优化提高,由于可靠性UDP是这个方案是否优秀的关键,而各种可靠UDP协议中都有TCP算法的影子,所以下面我们再仔细的谈一下这个部分.按照 ...

  8. 计算机网络复习——Ch6传输层

    传输层 知识点 1. UDP协议:无连接.不可靠.提供复用和分用功能 2. 端口的概念:熟知端口的范围0-1023 端口的概念 端口 两类端口 3. TCP报文段格式 4. TCP可变窗口的实现:报文 ...

  9. AIMD 为什么收敛(tcp reno/cubic 为什么好)

    TCP 拥塞控制目标是缓解并解除网络拥塞,让所有流量公平共享带宽,合在一起就是公平收敛. AIMD(几乎所有与拥塞控制相关的协议或算法都有 AIMD 的影子,包括 RoCE,BBRv2) 为什么收敛? ...

  10. tcp retransmission 出现的原因_为什么 TCP 会被 UDP 取代?

    TCP 协议可以说是今天互联网的基石,作为可靠的传输协议,在今天几乎所有的数据都会通过 TCP 协议传输,然而 TCP 在设计之初没有考虑到现今复杂的网络环境,当你在地铁上或者火车上被断断续续的网络折 ...

最新文章

  1. CSS中表格的一些属性和使用
  2. MyBatis笔记——EhCache二级缓存
  3. css设置input框长度_干货极致分享浅谈CSS属性,有趣的盒模型。网友:哎呦不错哦!...
  4. 安装icephp 记
  5. 大连理工18秋计算机应用基础,大连理工大学网络教育本科计算机应用基础入学考试模拟题...
  6. 从源码角度分析Android系统的异常捕获机制是如何运行的
  7. 需求分析三层境界,你到哪层了?
  8. excel表头_Spring Boot实现导出Excel功能
  9. php mktime 时间不对_PHP 语言需要避免的 10 大误区
  10. mini2440驱动分析之PWM
  11. 速查 Git 常用命令
  12. 神经网络拟合高程异常
  13. kepware datalogger
  14. 【程序员玩基金】基金基础知识
  15. 永洪科技怎么样_永洪科技面试总结--多位分享经验
  16. 用php求勾股数,勾股数(示例代码)
  17. Python——解一元二次方程
  18. MVC模式 与 如何实现struts MVC模式
  19. linux系列之-磁盘空间不足怎么办,磁盘清理方法
  20. 计算机专业里的麦课尔雅,艺术导论超星尔雅网课答案2020年_高校邦_计算机文化基础_章节答案...

热门文章

  1. 【ENOVIA】MBOM经理概述 | 达索系统百世慧®
  2. 怎么在线把QLV格式转成MP4
  3. scratch基础讲解与小游戏制作(接水果)
  4. 苹果手机android解锁,解锁教程:Android和iOS手机锁屏密码忘了怎么办?
  5. 浅谈PM(项目管理)
  6. 计算机专业英语prototype,[听单词] 计算机专业英语词汇音频72,计算机英语单词MP3...
  7. Java 拾遗补阙 ----- 数据类型
  8. vscode连接远程服务器报错ln: failed to create hard link ... File exists
  9. 标准正态分布怎么算_标准正态分布值计算器
  10. php 的绝对引用,excel单元格引用分为哪三种