今天工作中,碰到了一個(gè)項(xiàng)目柜砾,需要模擬服務(wù)器弱網(wǎng)環(huán)境測(cè)試,所以查找一番,自己整理記錄如下绿鸣。
工具簡介
這次的linux的網(wǎng)絡(luò)模擬,使用Linux Traffic Control (tc)的擴(kuò)展 Network Emulation (netem)來完成躏吊。
一般來說宴凉,Linux 2.6 (或以上) 版本內(nèi)核,已經(jīng)內(nèi)置了這個(gè)工具恬口,供大家使用校读。
需要注意的是:
- 此方法只能控制發(fā)包動(dòng)作,不能控制收包動(dòng)作祖能。
- 命令直接對(duì)物理接口生效歉秫,如果控制了物理的eth0,那么邏輯網(wǎng)卡(比如eth0:1)也會(huì)受到影響养铸;反之雁芙,如果您在邏輯網(wǎng)卡上做控制,該控制可能是無效的钞螟。(注:虛擬機(jī)中的多個(gè)網(wǎng)卡可以在虛擬機(jī)中視為多個(gè)物理網(wǎng)卡)
工具使用
首先獲取機(jī)子的網(wǎng)卡信息兔甘,如eth0或者em0之類的。然后通過執(zhí)行命令來監(jiān)控和改變網(wǎng)卡狀態(tài)鳞滨,達(dá)到的模擬的效果洞焙。命令可能需要root權(quán)限或sudo來執(zhí)行。
模擬網(wǎng)絡(luò)延遲
tc qdisc add dev eth0 root netem delay 100ms 10ms 10%
- 100ms為固定延遲
- 10ms為隨機(jī)值(可以省略)
- 100ms為隨機(jī)概率(可以省略)
語句語義為:將eth0加入到監(jiān)控中,并將每個(gè)包都延遲100ms闽晦,有10%的幾率有±10ms的浮動(dòng)扳碍。(注:再次修改需要修改命令為tc qdisc change dev eth0 root netem delay 100ms 10ms 10%
)
模擬網(wǎng)絡(luò)丟包
tc qdisc change dev eth0 root netem loss 20% 50%
- 20%為丟包比率
- 50%為相關(guān)概率(可以省略)
語句語義為:將eth0的丟包率改為20%,后一個(gè)包有丟棄有50%的幾率和前一個(gè)包相關(guān)仙蛉。
模擬網(wǎng)絡(luò)包錯(cuò)誤
- 模擬包重復(fù):
tc qdisc add dev eth0 root netem duplicate 1%
語句語義為:將 eth0 網(wǎng)卡的傳輸設(shè)置為隨機(jī)產(chǎn)生 1% 的重復(fù)數(shù)據(jù)包 笋敞。 - 模擬數(shù)據(jù)包損壞:
tc qdisc add dev eth0 root netem corrupt 0.2%
語句語義為:將 eth0 網(wǎng)卡的傳輸設(shè)置為隨機(jī)產(chǎn)生 0.2% 的損壞的數(shù)據(jù)包 。 (內(nèi)核版本需在 2.6.16 以上) - 模擬數(shù)據(jù)包亂序:
tc qdisc change dev eth0 root netem delay 10ms reorder 25% 50%
語句語義為:將 eth0 網(wǎng)卡的傳輸設(shè)置為:有 25% 的數(shù)據(jù)包(50%相關(guān))會(huì)被立即發(fā)送,其他的延遲10 秒荠瘪。
取消網(wǎng)絡(luò)模擬
取消網(wǎng)絡(luò)模擬夯巷,相當(dāng)于取消監(jiān)控該網(wǎng)卡,使用命令:
sudo tc qdisc del dev eth0 root netem
點(diǎn)到即止