比威而鋼還威的 TCP BBR

前一陣子從 iThome 看到了 Google 要把 TCP BBR 應用在 Google Cloud Platform 的新聞, 才發現原來這東西這麼神,2700 倍的傳輸率,佇列延遲減少 25 倍,隨手翻了下網路上的部落格,沒想到有那麼浮誇的說法證明:下載從 84K/s 變成 3.9M/s,這立刻引起我的好奇心,找到了 Google 自己的部落格說明,原來是長久以來使用的 TCP 壅塞控制演算法有點笨,遇到有 packet loss 的狀況時,就會以比較保守的方式來傳遞接下來的封包,而新的 TCP BBR 則用了比較聰明的方法來處理 packet loss 的問題,整個示意圖就如下所示:


* Source

文中也特別拿了幾個國家為例子,說明在應用了 TCP BBR 之後,YouTube 的表現情形,不看還好,一看之下,沒想到 Google 也這麼浮誇寫實,YouTube 到 ID 的 Max Round-Trip time 竟然可以改善到 50% 以上,這讓我突然想到以前公司在進行某個網路直播專案時,那個爛 4G 網路讓我們驗收時吃了很多苦頭,所以我也來做個浮誇的測試好了。不過因為一來我很懶,二來也沒那個預算搭建回當初專案的原始架構,所以以下浮誇的測試只在我的本機上實驗。

  • 實驗環境 (都在同一台機器裡):
NB: OBS Studio 19.0.3 --> NB: clumsy-0.2 --> VM: SRS 2.0.242 + CentOS 6.9 --> NB: flv.js in Chrome
  • 實驗方法:
  1. 先以 Kernel 2.6.32-696.6.3 直接測試,擷取螢幕看直播視訊延遲
  2. 以 clumsy 加上 inbound & outbound 各 50ms 的延遲,並隨機 drop 10% 的封包
  3. 等個幾秒,擷取螢幕看直播視訊延遲
  4. 停止 clumsy,等個幾秒,擷取螢幕看直播視訊延遲
  5. 升級 Kernel 為 4.13.0-0.rc1,重複步驟 1~4
    * 我拿了一個 Firefox 開時鐘來讓 OBS 擷取螢幕畫面,所以測試畫面中會看到 Firefox
  • 實驗結果:
  1. 沒 TCP BBR,不啟用 clumsy,延遲大概 3 秒
    Without BBR - normal network
  2. 沒 TCP BBR,啟用 clumsy,稍等一下,延遲變為 13 秒,實測時這個延遲會迅速擴大,最差的狀況是影像會停掉
    Without BBR - bad network
  3. 沒 TCP BBR,把 clumsy 關掉,稍等一下,延遲回到 5 秒左右
    Without BBR - normal network again
  4. 有 TCP BBR ,不啟用 clumsy,延遲大概 2-3 秒,其實和沒 BBR 時差不多,這畫面看起來延遲只有 2 秒應該只是個測試誤差
    With BBR - normal network
  5. 有 TCP BBR,啟用 clumsy,稍等一下,延遲變為 4 秒
    With BBR - bad network
  6. 不信邪,再等一等,有 TCP BBR,啟用 clumsy,延遲還是維持 4 秒左右
    With BBR - bad network-2
  7. 恢復原狀,有 TCP BBR,不啟用 clumsy,延遲還是維持 4 秒不動
    With BBR - normal network again

總結來看,這個 TCP BBR 還真的神,在高延遲且掉包的網路上,在我的測試環境 1 個 client 對 1 個 server 的情境下就能有這麼好的表現,安裝的方法我就不特別提了,網路上隨便 google 都一堆,不過還是要提醒大家一下,再好的東西還是得先測試才能上正式環境,免得哪個不小心你就踩了坑了都不知道。

BBR Summary

一個很糟糕的 gmail 問題終於被修正了

認識我的人都知道,我在 gmail 一開始 beta 時就有幸拿到了邀請函,並且申請了一個和我英文名字一模一樣的 gmail 帳號,而我老婆的 gmail 帳號稍微差一點,有帶她的中文姓氏,我記得是因為當時 gmail 註冊的規則是不允許 5 個字以下 (含 5 個字) 的帳號名稱,且不能是常見的美國名字 (或單字,我猜),而我的英文名字剛好是歐洲系的,所以一直以來我都對於能擁有這個帳號是爽在心理,偶而還拿出來炫耀一下。

但是事情總是不會那麼幸福美滿的,不知道從哪一天開始,我的 gmail 就充斥著一堆的垃圾信,講到這裡大家可能會覺得很怪,gmail 檔垃圾信不是出名的嗎?就算是我的 gmail 有個好名字,也沒有什麼關連性吧?

是的,gmail 的確是檔垃圾信檔得很好,但是,不是垃圾信的垃圾信呢?

啥,你在共啥小?! 什麼叫不是垃圾信的垃圾信?

其實就是那種別人拿你的 gmail 帳號去註冊某個網路服務,之後那個服務就一直狂發信給你的一種狀況,根據我看了那麼多不是垃圾信的垃圾信的經驗得知,這種狀況一般可以歸類成兩種

  1. 真的是不小心寫錯 email 地址的:不管他是記姓不好的三寶、少根筋而打錯字還是管他阿媽什麼挖貴原因的,反正就是寫錯了,為啥我會知道是寫錯的呢?因為我有收到各種各國的 EC 網站送貨通知,而且錢都已經付了,在這裡還是要歌頌一下 Google,幸好他 gmail 內建有翻譯功能,不然我還真看不懂這些垃圾信
  2. 故意寫錯的:從這幾年收些垃圾信的經驗裡,還真的有很多網路服務是不驗證 email 信箱是不是你的 (請注意我現在已經是以全球性的世界觀來講這件事),也就是你申請註冊之後,他就當你註冊成功了,所以有可能是有人亂用我的 gmail 帳號註冊,也不排除這是一種另類的廣告信手法。其實我猜 email 要認證這件事情應該是這幾年才有的,因為我的 Apple ID 其實早就被人申請好了,幾年前的某一天當我要申請 Apple ID 時,我做的事情其實是去按 forget password,而不是新申請一個,這類事情我至少經歷了三四次有吧,都是別人在多年前不流行 email 驗證時先幫我申請好的帳號,然後我再去用 forget password 給拿回來。而目前呢?剛剛翻了一下,我的信箱收件夾裡還躺著 4 封 Instagram 的申請確認信,其中 3 封是英文的,1 封是印尼文,當然我是個還沒用 Instagram 的土包子,這四封驗證信都不是我自己申請的。

那上面這些講了落落長,都不是 gmail 的糟糕問題啊?你到底在講啥?!

其實是 gmail 有個功能叫「備用信箱」,每個帳號都可以設定一個備用信箱,一旦你忘記自己信箱的密碼時,又沒有設定手機門耗時,就可以記封忘記密碼的信到你設定的備用信箱來進行重置密碼的動作。但是… gmail 這功能以前可是不需要驗證的,所以你設定了就是設定了,他也不會管你是不是有打錯字還是記錯了,所以我長久以來,就是會收到各國語言的「密碼重置信」,這時候我就得記得去按「請把我的 gmail 信箱從那傢伙的備用信箱移除」,非常的惱人,一直到今天,gmail 終於做出了一個劃時代的更新(對我而言啦):

2017-07-28_010342

靠你終於改了啊,雖然我的帳號還是常收到不明來由的垃圾信,但連 google 都發垃圾信給我我就很不爽,雖然我的 gmail 因容量還沒到上限沒付過錢,但我可是 Android 的愛好者,GCE 也付了幾次小錢,平常也讓你抓我的 GPS 資訊讓你偵測車流量,終於,這次你解決了我的一個困擾。

其實我猜測有類似問題的人應該也不少,例如我公司的 email 並不好記,但偶而也是有類似的垃圾信出現,我會猜測是一種另類的廣告信手法,真是希望那些垃圾信名單機構可以增加一種黑名單,就是當你這個網站拿 email 註冊而不需驗證時,提出證明就可以列入這個黑名單內,然後不管是 gmail 或自己管理的 email server 就可以設定拒絕這類網站寄出的信件,才能杜絕這些惱人的垃圾信。