Google's BBR TCP拥塞控制算法的四个变速引擎
1.Linux TCP迄今为止的拥塞控制机制 我并不了解其它平台的TCP拥塞控制算法实现,但是我了解Linux的,迄今为止,在bbr刚刚被引入之后,Linux的拥塞控制算法分为两类: 保守模式 bbr之前以Reno为基础,包括Reno,NewReno,...原理几乎都不变,这些算法有两个特点: 1).反馈性差 以Reno为例,TCP发送端在拥塞避免阶段收到ACK后,无条件地将cwnd增加1/cwnd,在慢启动阶段收到ACK后cwnd增加1,这是毫无根据的,然而Reno并没有什么更好的做法,只能瞎猜!后来的Westwood,Vegas,BIC等算法,相对Reno/NewReno更加智能了一步,但还是傻瓜!再往后,CUBIC搞了一个高大上的以三次方程凸凹曲线来抉择的增窗机制,看似十分地“博士”,并且十分地“经理”,然而还是无法高效利用互联网的空闲带宽,相反在碰到异常现象,比如丢包,拥塞的时候,反应太过保守,在保守的路线上趋于激烈,即激烈地保守降低拥塞窗口,更加可悲的是,这个窗口下降的过程并不受这些算法所控制。 2).拥塞算法被接管 在TCP拥塞控制机制发现丢包时(即RTO或者N次重复的ACK等),TCP会完全接管拥塞控制算法,自己控制拥塞窗口。然而问题是,这种所谓的丢包可能并不是真的丢包,这只是TCP认为丢包而已,这是30年前的丢包判断机制了...真的丢包了吗?不一定啊