Windows 上的 netem 與 Network Link Conditioner
Linux 上有 tc netem,Mac 上有 Network Link Conditioner。Windows 沒有任何內建工具能增加延遲和掉包。本頁把你已經熟悉的東西對應到 Bean Network Tester,並指出哪些數字不能照搬。
netem 選項逐項對照
這裡的每條指令都要加上 --target 和 --duration,否則會影響整台電腦。
| netem | 視窗中的設定 | 參數 |
|---|---|---|
delay 100ms | Latency | --latency 100 |
delay 100ms 20ms | Latency, Jitter | --latency 100 --jitter 20 |
loss 5% | Loss | --loss 5 |
loss 5% 25% | Loss, Losses in a row (burst) | --loss 5 --loss-burst 4 |
duplicate 1% | Duplication | --dup 1 |
corrupt 0.1% | Corruption | --corrupt 0.1 |
reorder 25% | Spike chance, Spike size | --spike-prob 5 --spike-ms 200 |
rate 1mbit | Download, Upload | --down 122 --up 122 |
limit 1000 | Buffer | --buffer 1000 |
- 突發掉包。netem 的相關性數值不是突發長度。Losses in a row (burst) 是連續遺失封包的平均個數,這是最接近的對應項。
- 亂序。沒有亂序百分比。一次延遲尖峰會拖慢單一封包,讓之後送出的封包超過它,Statistics頁面上的亂序計數會顯示是否真的發生了。
- 佇列大小。netem 的 limit 以封包個數計。Buffer 則是以毫秒計的時間。
需要注意的三點差異
方向。netem 延遲的是離開網路卡的資料,回覆則原樣返回。本工具預設擷取雙向流量,所以 --latency 100 會讓 ping 增加約 200 毫秒:去程 100,回程 100。要得到 netem 的效果,只擷取出站流量:
BeanNetworkTester.exe --filter out --latency 100 --jitter 20 --target myapp.exe --duration 120
單位。netem 的速率以位元每秒計。速度限制欄位以 KB/s 計,其中 K = 1024。百萬位元的換算如下:
| netem 速率 | 速度限制欄位,單位 KB/s |
|---|---|
1mbit | 122 |
5mbit | 610 |
10mbit | 1221 |
50mbit | 6104 |
100mbit | 12207 |
範圍。tc 作用於整個網路介面,並且需要 root 權限。本工具用 --target 只針對一個程式,需要系統管理員權限。
如果你熟悉 Network Link Conditioner
蘋果的工具以命名的設定檔為基礎。這裡最接近的對應項:
| Network Link Conditioner | 這裡最接近的 |
|---|---|
| 100% Loss | 把Loss設為 100 |
| 3G | 3G network |
| DSL | Home DSL (VDSL) |
| LTE | LTE / 4G |
| WiFi | Good WiFi |
| Very Bad Network | Terrible network |
| Edge | 沒有對應的設定檔。請自行填寫速度限制與延遲,然後用「Save...」按鈕儲存為自己的設定檔。 |
這些數值不是蘋果的,所以請把設定檔當作起點。每個設定檔所設定的數值都列在參考頁上。
在 Windows 上你還能得到什麼
- 針對一個程式,而不是整台電腦。把網路損傷對準單一應用程式,機器上的其他部分保持正常。
- 用時間軸代替 shell 指令碼。定時情境在設定的秒數改變設定,相當於 Linux 上由
tc和sleep組成的指令碼。 - 管線可以執行它。同一個執行檔可以在 CI 中執行,並透過結束代碼回報結果。
在 Linux 或 macOS 上,請使用原版工具。本工具只能在 Windows 上執行。