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