APP弱网测试,弱网工具有很多现成的,但是对比其他工具来说,使用linux tc控制起来比较方便强大,自由度较大,可以推荐使用
所需硬件:
路由器(尽量使用5G网络,因为2.4G网络干扰比较大)
网线若干
linux电脑一台,带双网卡,如果单网卡,可以用USB转网口的设备来完成,尽量用USB3.0到网口的设备
所需软件:
系统:ubuntu
tc – traffic control
iptables
连接方式:
注:实际的网口设备编号根据自己的电脑而定
操作步骤:
设置路由器的出口地址为静态地址:192.168.100.2
设置无线网络,提供被测试APP的上网服务
路由器WAN连到电脑的对内网卡
在Linux下执行;
sudo iptables -I FORWARD -o eth1 -j ACCEPT
sudo iptables -t nat -I POSTROUTING -s 192.168.100.0/24 -j MASQUERADE
sudo iptables -I INPUT -i eth1 -j ACCEPT
sudo iptables -I FORWARD -i eth1 -j ACCEPT
控制网络
所有的命令必须在root权限下执行
控制时延(delay)
固定时延100ms
tc qdisc add dev eth1 root netem delay 200ms
延时100+-20ms
tc qdisc add dev eth1 root netem delay 200ms 30ms
延时100+-20ms 正态分布的方式
tc qdisc add dev eth1 root netem delay 200ms 30ms distribution normal
qdisc: modify the scheduler (aka queuing discipline)
add: add a new rule
dev eth1: rules will be applied on device eth1
root: modify the outbound traffic scheduler (aka known as the egress qdisc)
netem: use the network emulator to emulate a WAN property
delay: the network property that is modified
200ms: introduce delay of 200 ms
控制丢包
修改丢包率为5%:
tc qdisc add dev eth1 root netem loss 5%
设置抖动的丢包率: 10% +-2%
tc qdisc add dev eth1 root netem loss 10% 2%
设置破损包:(1%)
tc qdisc add dev eth1 root netem corrupt 1%
设置重复包
tc qdisc add dev eth1 root netem duplicate 1%
设置reorder数据
tc qdisc add dev eth1 root netem reoder 1%
设置带宽
tc qdisc add dev eth0 root tbf rate 1mbit burst 32kbit latency 400ms
tbf: use the token buffer filter to manipulate traffic rates
rate: sustained maximum rate
burst: maximum allowed burst
latency: packets with higher latency get dropped
限制流向个别IP
DEV=eth1
LOSS=10%
DELAY=200ms
IP=“65.172.181.4/32”
tc qdisc add dev $DEV root handle 1: htb r2q 1
tc class add dev $DEV parent 1: classid 1:9999 htb rate 100Mbit ceil 100Mbit
tc qdisc add dev $DEV parent 1:9999 handle 11: netem delay $DELAY 80ms distribution normal loss $LOSS 2% corrupt 1% duplicate 2% reorder 2%
tc filter add dev $DEV parent 1: protocol ip prio 16 u32 match ip dst $IP flowid 1:9999
For more info on traffic classification see LARTC -- filters
删除策略:
tc qdisc del dev eth1 root
注:
如需具体操作还需要参考网络模拟器
https://wiki.linuxfoundation.org/networking/netem