[20181031]模擬網路問題.txt

lfree發表於2018-10-31

[20181031]模擬網路問題.txt

--//別人問的問題,如何在正常的環境模擬網路問題,實際上linux環境使用tc+netem就ok了.(netem 表示 Network Emulation)
--//不過我以前我自己有過1次,設定太狠了,導致自己連線伺服器都異常慢,差點控制不住.
--//我仔細看了文件,連結:


--//主要問題在於netem模組不支援流量控制.
--//自己做一點點總結:

1.簡單測試:
--//設定延遲100ms
# tc qdisc add dev em1 root netem delay 100ms
--//顯示狀態
# tc qdisc show dev em1
--//取消設定
# tc qdisc delete dev em1 root netem delay 100ms
--//顯示狀態
# tc qdisc show dev em1

--//這樣設定最大的問題,全部連線都受影響,導致不可控.一般應該限制某個IP,而不是全部IP.
--//這種測試延遲不要設定太大!! 注意em1是網路裝置名.

2.我以前的指令碼:

#! /bin/bash
DEV=eth0
tc qdisc del dev $DEV root
tc qdisc add dev $DEV root handle 1: cbq avpkt 1000 bandwidth 1000mbit
tc class add dev $DEV parent 1: classid 1:9  cbq rate 256kbit  allot 1500 prio 8 bounded isolated
tc class add dev $DEV parent 1: classid 1:10 cbq rate 128kbit  allot 1500 prio 8 bounded isolated
tc class add dev $DEV parent 1: classid 1:11 cbq rate 64kbit  allot 1500 prio 8 bounded isolated
tc class add dev $DEV parent 1: classid 1:12 cbq rate 1kbit  allot 1500 prio 8 bounded isolated

tc filter add dev $DEV parent 1: protocol ip prio 16 u32 match ip dst 192.168.100.40/32   flowid 1:10

--//如果網路卡裝置名不對,修改DEV變數就可以了。後面一段可以根據自己的情況現在網路流量。
-- //取消
#! /bin/bash
DEV=eth0
tc qdisc del dev $DEV root

--//實際上的我的指令碼僅僅限制網路流量.真正模擬網路問題最佳還是使用tc+netem.

3.比較客觀的模擬還是建議使用netem模組.
--//但是方法1不是很好,影響全域性.連結有一個例子,
--//自己修改一下.

#! /bin/bash
DEV=eth0

tc qdisc del dev $DEV root
tc qdisc show dev $DEV

tc qdisc add dev $DEV root handle 1: prio
tc qdisc add dev $DEV parent 1:3 handle 30: tbf rate 256kbit buffer 1600 limit  3000

# tc qdisc add dev $DEV parent 30:1 handle 31: netem  delay 200ms 10ms distribution normal
# tc qdisc add dev $DEV parent 30:1 handle 31: netem  delay 200ms loss 0.3% corrupt 0.1%
# tc qdisc add dev $DEV parent 30:1 handle 31: netem  delay 200ms loss 40% 25% corrupt 0.1%

tc qdisc add dev $DEV parent 30:1 handle 31: netem  delay 200ms 10ms distribution normal
tc filter add dev $DEV protocol ip parent 1:0 prio 3 u32 match ip dst 192.168.100.40/32 flowid 1:3

tc qdisc show dev $DEV

--//注設定3種情況,都註解了,可以根據需要修改,我選擇第1種方案
--//loss 40% 25%
--//This will cause 40 of packets to be lost, and each successive probability depends by a quarter on the last one.
--//Probn = .25 * Probn-1 + .75 * Random

--//取消設定:
# DEV=eth0
# tc qdisc del dev $DEV root
# tc qdisc show dev $DEV


--//測試看看.執行以上指令碼後:

# ping 192.168.100.40
PING 192.168.100.40 (192.168.100.40) 56(84) bytes of data.
64 bytes from 192.168.100.40: icmp_seq=1 ttl=64 time=192 ms
64 bytes from 192.168.100.40: icmp_seq=2 ttl=64 time=196 ms
64 bytes from 192.168.100.40: icmp_seq=3 ttl=64 time=209 ms
64 bytes from 192.168.100.40: icmp_seq=4 ttl=64 time=204 ms
64 bytes from 192.168.100.40: icmp_seq=5 ttl=64 time=186 ms
^C
--- 192.168.100.40 ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 4006ms
rtt min/avg/max/mdev = 186.498/198.011/209.835/8.419 ms

# tc qdisc del dev eth0 root
# ping 192.168.100.40
PING 192.168.100.40 (192.168.100.40) 56(84) bytes of data.
64 bytes from 192.168.100.40: icmp_seq=1 ttl=64 time=0.113 ms
64 bytes from 192.168.100.40: icmp_seq=2 ttl=64 time=0.177 ms
64 bytes from 192.168.100.40: icmp_seq=3 ttl=64 time=0.132 ms
64 bytes from 192.168.100.40: icmp_seq=4 ttl=64 time=0.159 ms
64 bytes from 192.168.100.40: icmp_seq=5 ttl=64 time=0.130 ms
^C
--- 192.168.100.40 ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 4000ms
rtt min/avg/max/mdev = 0.113/0.142/0.177/0.024 ms

--//啟用後ping約2XXms,取消後0.1xxms.

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/267265/viewspace-2218147/,如需轉載,請註明出處,否則將追究法律責任。

相關文章