今天工作中,碰到了一個項目,需要模擬服務器弱網環境測試,所以查找一番,自己整理記錄如下。
工具簡介
這次的linux的網絡模擬,使用Linux Traffic Control (tc)的擴展 Network Emulation (netem)來完成。
一般來說,Linux 2.6 (或以上) 版本內核,已經內置了這個工具,供大家使用。
需要注意的是:
- 此方法只能控制發包動作,不能控制收包動作。
- 命令直接對物理接口生效,如果控制了物理的eth0,那么邏輯網卡(比如eth0:1)也會受到影響;反之,如果您在邏輯網卡上做控制,該控制可能是無效的。(注:虛擬機中的多個網卡可以在虛擬機中視為多個物理網卡)
工具使用
首先獲取機子的網卡信息,如eth0或者em0之類的。然后通過執行命令來監控和改變網卡狀態,達到的模擬的效果。命令可能需要root權限或sudo來執行。
模擬網絡延遲
tc qdisc add dev eth0 root netem delay 100ms 10ms 10%
- 100ms為固定延遲
- 10ms為隨機值(可以省略)
- 100ms為隨機概率(可以省略)
語句語義為:將eth0加入到監控中,并將每個包都延遲100ms,有10%的幾率有±10ms的浮動。(注:再次修改需要修改命令為tc qdisc change dev eth0 root netem delay 100ms 10ms 10%
)
模擬網絡丟包
tc qdisc change dev eth0 root netem loss 20% 50%
- 20%為丟包比率
- 50%為相關概率(可以省略)
語句語義為:將eth0的丟包率改為20%,后一個包有丟棄有50%的幾率和前一個包相關。
模擬網絡包錯誤
- 模擬包重復:
tc qdisc add dev eth0 root netem duplicate 1%
語句語義為:將 eth0 網卡的傳輸設置為隨機產生 1% 的重復數據包 。 - 模擬數據包損壞:
tc qdisc add dev eth0 root netem corrupt 0.2%
語句語義為:將 eth0 網卡的傳輸設置為隨機產生 0.2% 的損壞的數據包 。 (內核版本需在 2.6.16 以上) - 模擬數據包亂序:
tc qdisc change dev eth0 root netem delay 10ms reorder 25% 50%
語句語義為:將 eth0 網卡的傳輸設置為:有 25% 的數據包(50%相關)會被立即發送,其他的延遲10 秒。
取消網絡模擬
取消網絡模擬,相當于取消監控該網卡,使用命令:
sudo tc qdisc del dev eth0 root netem
點到即止