TCP拥塞控制算法是对网络传输的估计算法。相同的网络环境,不同的拥塞算法会给出不同的估计。就像一条高速公路,有的人觉得能跑120公里/小时,而有的人觉得只能跑100公里/小时。对相同一条公路,哪个能跑的快,哪个算法就是TCP加速的好算法。
TCP拥塞控制算法从80年代开始,无数的论文介绍了无数种算法,比较典型的有:
- RENO -- RENO算法可以算是第一代比较流行的经典算法,通过3次丢包来判断发生了拥塞
- TCP SACK -- 对方收到什么就确认什么,确认的TCP序号可以不连续
- Vegas -- 引入时间的变量,把时间和变量一起考虑。虽然Vegas没有形成标准的RFC,但是却启发了fasttcp算法。发明fasttcp算法的人创立了FastSoft公司,最后被Akamai收购。
- CUBIC -- 现在Linux的缺省算法,兼顾了高效与公平。
- BBR -- 由google发现,正在申请RFC,最新的linux内核已经集成了BBR算法,需要手工打开。
由于项目需要,让我有机会实现了TCP SACK和Vegas,深深感觉到了算法的精妙。同时亲身测试,觉得BBR是TCP加速算法的集大成者。同样的中国到美国的一条网络,CUBIC只能看480P,而BBR能看1080P或者1440P。