BBR擁塞控制算法的幾個細(xì)節(jié)詳解
0. 說明
BBR熱了一段時間后終于回歸了理性,這顯然要比過熱地炒作要好很多。這顯然也是我所期望的。
本文的內(nèi)容主要解釋一些關(guān)于BBR的細(xì)節(jié)問題。這些問題一般人可能不會關(guān)注,但是針對這些問題仔細(xì)思考的話,會得到很多有用的東西。在解釋這些問題時,我依然傾向于使用圖解的方式,但這一次我不再使用Wireshark的tcptrace圖了,而是使用時序圖的方式,因為這種時序圖既然能夠令人一目了然地解釋TCP三次握手,四次分手,TIME-WAIT等,那它自然也能解釋更復(fù)雜的機(jī)制,比如說擁塞控制。
1. 延遲ACK以及ACK丟失并不會影響TCP的傳輸速率
在大的時間尺度上看,延遲ACK以及ACK丟失并不會對速率造成任何影響,比如一個文件4個TCP段正好發(fā)完,即便前面幾個ACK全部丟失,只有最后一個到達(dá),那它的傳輸總時間也是不變的。
但是在細(xì)微的時間段內(nèi),由于延遲ACK或者ACK丟失帶來的時間偏差卻是不可忽略的。
首先我們再次看一下BBR是如何測量即時速率的。測量即時速率需要做一個除法,分子是一段時間內(nèi)成功到達(dá)對端的數(shù)據(jù)包總量,分母就是這段時間。BBR會在每收到一次ACK的時候測量一次即時速率。計算需要的數(shù)據(jù)分別在數(shù)據(jù)傳輸和數(shù)據(jù)被ACK的時候采樣。很顯然,我們可以想當(dāng)然地拍腦袋得出一個算法:
設(shè)數(shù)據(jù)包x發(fā)出的時間為t1,數(shù)據(jù)包x被應(yīng)答的時間為t2,則在數(shù)據(jù)包x被應(yīng)答時采集的即時速率為:
Rate=(從x被發(fā)出到x被應(yīng)答之間一共ACK以及SACK了多少個數(shù)據(jù)包)/(t2-t1)
但是這會造成什么問題呢?這會造成誤差。
非常好我支持^.^
(3) 100%
不好我反對
(0) 0%