Linux中網路界面速度的調整方式

最近剛好工作上有需要, 需要針對一些網路情況不佳的裝置去做一些實驗; 但問題來了, 要在實務上去真的找到這種裝置其實蠻難的, 這時候Linux 提供了一些很好模擬的方式來對特定的網路界面模擬上述情境…

限制網路界面的速率

再做了一些快速的瀏覽以後, 看起來在Linux中主要是透過 tc 這個指令來做 traffic control, 不過社群中有人提供了一個更簡便的方式 wondershaper, 如果OS是ubuntu 的話可以用 sudo apt-get install wondershaper 就可以安裝了.

一些常見的指令範例有:

設定eth1 的download=256kbps, upload=128kbps

sudo wondershaper eth1 256 128

清除 eth1的流量設定

sudo wondershaper clear eth1

設定網路界面的packet lost 機率

這個情境下, 我們可以模擬網路掉包在不同嚴重程度的情況下的情境; 主要是透過 iptables 來達成, 可以參考以下範例:

設定來源ip為 123.123.123.123 且封包到這台電腦的 local port為 3000時, 其packet drop的機率為 5%

sudo iptables -I INPUT -s 123.123.123.123 -p tcp --dport 3000 -m statistic --mode random --probability 0.05 -j ACCEPT

reference:

Build 自己的5G network

在自家建立一個私人的網路環境已經是一個很常見的需求了,但還有一些更專業的開發者/工程師可能還會在家裡建立一個小型的企業網路,架設自己需要的伺服器與建立相對應的路由…等等。

hacker daily news 上看到一個看更酷的東西,就是架設自己的5G/mobile network,從那篇文章中列出了各個不同layer的open source 套件與相關資訊,值得注意的是文章中有提到Respberry Pi, 感覺以後有機會可以來玩看看…

reference:

TCP BBR

最近聽到DK提到TCP BBR這個名詞時,才知道原來它是一種新的TCP 機制,主要可以提高在網路不穩定下的TCP傳輸品質。
當下聽了覺得蠻神奇的,後來去查了以後才發現,這技術已經發表有幾年了,現在才知道真的有點感到汗顏阿0rz…

TCP BBR

TCP BBR 全名為 TCP Bottleneck Bandwidth and Round-trip propagation time,是Google 在2017年所發現的TCP 擁塞控制演算法,適用於在網路不可靠的環境下,可以有效的提升傳輸效率。

而Google他們那時也宣稱,在他們導入Youtube以後,整個infra的網路傳輸效率平均提升了4%以上。

而相關的演算法原理可以參考這裡,基本上就是控制TCP資料的傳送端,透過演算法來控制更適合的傳輸速率,進而到讓傳輸的資料速率可以到達目前傳送與接收端之間的實際最大值,也因為這樣子,所以在真實不穩定的網路下,它可以更好的讓資料傳輸量不會過大而造成網路擁塞…

設定TCP BBR

目前只要Linux Kernel 的版本大於4.9以上,就可以直接透過更改sysctl的方式來啟用目前主機上的TCP BBR,詳細的設定如下:

透過以下的設定來確定目前的tcp 擁塞演算法:

sysctl net.ipv4.tcp_available_congestion_control

在還未設定使用bbr之前,通常應該會顯示cubic

接著加入以下的設定到/etc/sysctl.conf

net.core.default_qdisc=fq
net.ipv4.tcp_congestion_control=bbr

最後執行以下指令來套用bbr的設定

sudo sysctl -p

理論上,這時候再次用下面的指令時,目前的TCP 設定時,應該就會是bbr

sysctl net.ipv4.tcp_available_congestion_control

一些注意事項

由於TCP BBR的運作模式是主動地計算目前兩端點之前的傳輸頻寬,然後用最佳的方式去想辦法灌滿這段連線,所以從上面模式看來,要啟用的TCP BBR的機器最好是傳送資料端,這樣每次傳送時就會使用這套演算法來強化傳輸效率了。

當然,如果兩端的機器都可以啟用的話,那就沒這個問題了…

何時該套用TCP BBR呢

TCP BBR也不是萬能的,它為了提高在網路不穩定的情況下的傳輸效率,但同時也會在一些情況下,表現不如預期;這篇文章描述了一系列的情境來說明,何時套用TCP BBR會得到更好的傳輸效率。

Reference: