聊聊拥塞控制算法
我们知道TCP/IP协议栈是一个简化的分层模型 , 是互联网世界连接一切的基石 , 一起来看一张七层模型vs四层模型的简图:
文章插图
看到一篇文章说到TCP拥塞控制算法并不是简单的计算机网络的概念 , 也属于控制论范畴 , 感觉这个观点很道理 。
TCP拥塞控制算法的目的可以简单概括为:公平竞争、充分利用网络带宽、降低网络延时、优化用户体验 , 然而就目前而言要实现这些目标就难免有权衡和取舍 。
但是现在的网络通信基础设施水平一直在飞速提高 , 相信在未来的某个时间点这些目标都可以达到 , 小孩子才选择 , 我们大人全都要!
算法演进在理解拥塞控制算法之前我们需要明确一个核心的思想:闻道有先后 术业有专攻 , 笔者觉得这是一个非常重要的共识问题 , 把A踩在泥土里 , 把B吹捧到天上去 , 都不是很好的做法 。
实际的网络环境十分复杂并且变化很快 , 并没有哪个拥塞控制算法可以全部搞定 , 每一种算法都有自己的特定和适用领域 , 每种算法都是对几个关键点的权衡 , 在无法兼得的条件下有的算法选择带宽利用率 , 有的算法选择通信延时等等 。
在明确这个共识问题之后 , 我们对待各个拥塞控制算法的态度要平和一些 , 不要偏激地认为谁就是最好 , 几十年前的网络状况和现在是截然不同的 , 我们永远都是站在巨人的肩膀之上的 , 这也是科学和文明进步的推动力 。
算法分类传统拥塞控制算法并不是一蹴而就的 , 复杂的网络环境和用户的高要求推动着拥塞控制算法的优化和迭代 , 我们看下基于丢包策略的传统拥塞控制算法的几个迭代版本 , 如图所示:
文章插图
与此同时还有一类算法是基于RTT延时策略来进行控制的 , 但是这类算法在发包速率上可能不够激进 , 竞争性能不如其他算法 , 因此在共享网络带宽时有失公平性 , 但是算法速率曲线却是很平滑 。
文章插图
4.1 流量控制和拥塞控制大约在1988年之前TCP/IP是没有拥塞控制的 , 但是随着网络接入规模的发展之前仅有的端到端窗口控制已经无法满足要求 , 在1986年引发大规模网络瘫痪 , 此时就要提到一个重量级人物:Van Jacobson范·雅各布森 。
这位力挽狂澜的人物入选了计算机名人堂Internet Hall of Fame , Van Jacobson大神提出并设计实施了TCP/IP拥塞控制 , 解决了当时最大的问题 , 来简单看下Van Jacobson的维基百科简介(笔者做了部分删减):
范·雅各布森Van Jacobson是目前作为互联网技术基础的TCP/IP协议栈的主要起草者 , 他以其在网络性能的提升和优化的开创性成就而闻名 。
2006年8月 , 他加入了帕洛阿尔托研究中心担任研究员 , 并在位于相邻的施乐建筑群的Packet Design公司担任首席科学家 。在此之前 , 他曾是思科系统公司首席科学家 , 并在位于劳伦斯伯克利国家实验室的网络研究小组任领导者 。
范·雅各布森因为在提高IP网络性能提升和优化所作的工作而为人们所知 , 1988到1989年间 , 他重新设计了TCP/IP的流控制算法(Jacobson算法) , 他因设计了RFC 1144中的TCP/IP头压缩协议即范·雅各布森TCP/IP头压缩协议而广为人知 。此外他也曾与他人合作设计了一些被广泛使用的网络诊断工具 , 如traceroute , pathchar以及tcpdump。如图为Van Jacobson计算机名人堂的简介:
文章插图
我们常用的traceroute和tcpdump也是van-jacobson大神的杰作 , 作为互联网时代的受益者不由得对这些互联网发展早期做出巨大贡献的开拓者、创新者、变革者心生赞叹和敬意 。
海尔兄弟一样的算法:流量控制和拥塞控制 , 这也是我们今天的主角 。
推荐阅读
- 轻松学习http知识让枯燥的内容变得生动有趣:TCP/IP四层模型
- Java中的BigDecimal,你真的会用吗?最强指南
- 为何视频流/网游大都使用UDP协议,而不用TCP协议?
- TCP粘包、拆包与解决方案
- 地球最强悍的生物 超级地球上有生命
- ICMP ARP协议 TCP&UDP协议相关介绍,两分钟快速掌握
- TCP粘包的解决方案
- TCP 拥塞避免算法
- 看一遍忘一遍的网络七层模型与TCP/UDP,重新总结出来
- 世界上最烈的啤酒排名是什么?