最近做了一些网络性能测试的工作,对测试工作有所了解。本文简单记录下用到的工具及使用方法,工具的详细原理日后有机会再做剖析总结。
一、iperf3
iperf 3 是一个网络性能测试工具。可以测试udp 和 tcp 网络性能。
安装
略
带宽测试
iperf3 是C/S 架构模式,测试时,需同时在 server 端和 client 端分别启动。
1. 启动 server 端
iperf3 -s -p 5201
2. 启动 client 端
iperf3 -c 192.168.1.1 -p 5201 -t 30 -i 0.1 -f K
3. 查看结果
Connecting to host 9.134.117.252, port 5002
[ 4] local 9.134.14.225 port 60744 connected to 9.134.117.252 port 5002
[ ID] Interval Transfer Bandwidth Retr Cwnd
[ 4] 0.00-0.10 sec 301 KBytes 3004 KBytes/sec 3 29.0 KBytes
[ 4] 0.10-0.20 sec 185 KBytes 1847 KBytes/sec 1 19.3 KBytes
[ 4] 0.20-0.30 sec 99.3 KBytes 993 KBytes/sec 3 6.89 KBytes
[ 4] 0.30-0.40 sec 62.1 KBytes 620 KBytes/sec 3 2.76 KBytes
[ 4] 0.40-0.50 sec 49.6 KBytes 496 KBytes/sec 0 9.65 KBytes
[ 4] 0.50-0.60 sec 66.2 KBytes 662 KBytes/sec 1 9.65 KBytes
[ 4] 0.60-0.70 sec 71.7 KBytes 717 KBytes/sec 1 9.65 KBytes
[ 4] 0.70-0.80 sec 56.5 KBytes 565 KBytes/sec 4 4.14 KBytes
[ 4] 0.80-0.90 sec 57.9 KBytes 579 KBytes/sec 0 9.65 KBytes
[ 4] 0.90-1.00 sec 86.9 KBytes 869 KBytes/sec 1 6.89 KBytes
[ 4] 1.00-1.10 sec 75.8 KBytes 758 KBytes/sec 2 4.14 KBytes
[ 4] 1.10-1.20 sec 70.3 KBytes 703 KBytes/sec 0 11.0 KBytes
4. 修改拥塞算法(linux only)
4.1 查看系统可用的拥塞算法
[root@VM_14_225_centos ~]# cat /proc/sys/net/ipv4/tcp_allowed_congestion_control
reno cubic
或者
[root@VM_14_225_centos ~]# sysctl net.ipv4.tcp_available_congestion_control
net.ipv4.tcp_available_congestion_control = reno cubic
4.2 查看当前使用的拥塞算法
[root@VM_14_225_centos ~]# cat /proc/sys/net/ipv4/tcp_congestion_control
cubic
4.3 修改拥塞算法
[root@VM_14_225_centos ~]# sysctl net.ipv4.tcp_congestion_control=reno
net.ipv4.tcp_congestion_control = reno
或者使用 iperf3 -C 参数指定
-C, --congestion <algo> set TCP congestion control algorithm (Linux and FreeBSD only)
二、Traffic Control (TC)
tc 为流控工具,可以控制数据流的loss、BindWidth、rtt等。
流控脚本如下:
TC=tc
INTERFACE=eth1
FILTER_IP=192.168.0.3
TOTAL_BAND_WIDTH=400Mbit
BAND_WIDTH=40Mbit
DELAY=100ms
LOSS_RATE=0.01%
tc_start() {
# add htb queue
$TC qdisc add dev $INTERFACE root handle 1: htb default 30
# add root class
$TC class add dev $INTERFACE parent 1: classid 1:1 htb rate $TOTAL_BAND_WIDTH ceil $TOTAL_BAND_WIDTH
$TC class add dev $INTERFACE parent 1:1 classid 1:10 htb rate $BAND_WIDTH ceil $BAND_WIDTH
$TC class add dev $INTERFACE parent 1:1 classid 1:20 htb rate $TCP_BAND_WIDTH ceil $TCP_BAND_WIDTH
$TC class add dev $INTERFACE parent 1:1 classid 1:30 htb rate $TOTAL_BAND_WIDTH ceil $TOTAL_BAND_WIDTH
$TC filter add dev $INTERFACE parent 1: prio 4 protocol ip u32 match ip dst $FILTER_IP flowid 1:10
$TC filter add dev $INTERFACE parent 1: prio 4 protocol ip u32 match ip dst $TCP_FILTER_IP flowid 1:20
$TC qdisc add dev $INTERFACE parent 1:10 netem delay $DELAY loss $LOSS_RATE
$TC qdisc add dev $INTERFACE parent 1:20 netem delay $TCP_DELAY loss $TCP_LOSS_RATE
}
tc_stop() {
$TC qdisc del dev $INTERFACE root
}
tc_restart() {
tc_stop
sleep 1
tc_start
}
tc_show() {
echo ""
echo -n "Qdisc:"
#$TC qdisc show dev $INTERFACE
$TC -s qdisc show dev $INTERFACE
echo -n "Class:"
#$TC class show dev $INTERFACE
$TC -s class show dev $INTERFACE
echo -n "Filter:"
#$TC filter show dev $INTERFACE
$TC -s filter show dev $INTERFACE
echo ""
}
case "$1" in
start)
echo -n "Starting bandwidth shaping: "
tc_start
echo "done"
;;
stop)
echo -n "Stopping bandwidth shaping: "
tc_stop
echo "done"
;;
restart)
echo -n "Restarting bandwidth shaping: "
tc_restart
echo "done"
;;
show)
tc_show
;;
*)
echo "Usage: tc.sh {start|stop|restart|show}"
;;
esac
三、nat 表
TODO
四、wireshark
抓包工具
手机连接调试
使用wireshark 连接手机抓包由两种方式
- 手机连电脑热点后启动wireshark 抓包
- 通过数据线联电脑后,映射虚拟网卡进行抓包
mac 平台映射命令如下,'uuid' 为 iphone 手机 uuid,可在 iTunes 中查到。执行命令后,可以看到 'rvi0' 即为我们需要抓包的虚拟网卡。
➜ ~ rvictl -s uuid
Starting device uuid [SUCCEEDED] with interface rvi0
如果遇到
rvictl: command not found
原因是新系统将rvictl
移到了/Library/Apple/usr/bin/rvictl
目录。
解决方案
打开paths 文件,`sudo vim /etc/paths`
在最后添加一行 `/Library/Apple/usr/bin/`
保存退出,重启命令行即可
自定义 lua 脚本解析私有协议
wireshark 支持自定义脚本解析私有协议。以 mac 平台为例。
- 编写 lua 脚本
- 放到 init.lua 同级目录下,mac 平台路径如下
/Applications/Wireshark.app/Contents/Resources/share/wireshark/
- 打开 init.lua,在最后加载解析脚本
dofile(DATA_DIR.."dtd_gen.lua")
- 保存并重启 wireshark 即可
五、tcpdump
略
参考文档
TC 流量控制
流量控制工具TC详细说明
Linux流量控制工具TC
Wireshark使用入门
Wireshark抓包iOS入门教程