最近做了一些網(wǎng)絡(luò)性能測(cè)試的工作,對(duì)測(cè)試工作有所了解鸠信。本文簡(jiǎn)單記錄下用到的工具及使用方法纵寝,工具的詳細(xì)原理日后有機(jī)會(huì)再做剖析總結(jié)。
一星立、iperf3
iperf 3 是一個(gè)網(wǎng)絡(luò)性能測(cè)試工具爽茴。可以測(cè)試udp 和 tcp 網(wǎng)絡(luò)性能绰垂。
安裝
略
帶寬測(cè)試
iperf3 是C/S 架構(gòu)模式室奏,測(cè)試時(shí),需同時(shí)在 server 端和 client 端分別啟動(dòng)劲装。
1. 啟動(dòng) server 端
iperf3 -s -p 5201
2. 啟動(dòng) client 端
iperf3 -c 192.168.1.1 -p 5201 -t 30 -i 0.1 -f K
3. 查看結(jié)果
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 查看系統(tǒng)可用的擁塞算法
[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 查看當(dāng)前使用的擁塞算法
[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 參數(shù)指定
-C, --congestion <algo> set TCP congestion control algorithm (Linux and FreeBSD only)
二胧沫、Traffic Control (TC)
tc 為流控工具,可以控制數(shù)據(jù)流的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
抓包工具
手機(jī)連接調(diào)試
使用wireshark 連接手機(jī)抓包由兩種方式
- 手機(jī)連電腦熱點(diǎn)后啟動(dòng)wireshark 抓包
- 通過數(shù)據(jù)線聯(lián)電腦后,映射虛擬網(wǎng)卡進(jìn)行抓包
mac 平臺(tái)映射命令如下念恍,'uuid' 為 iphone 手機(jī) uuid六剥,可在 iTunes 中查到。執(zhí)行命令后峰伙,可以看到 'rvi0' 即為我們需要抓包的虛擬網(wǎng)卡疗疟。
? ~ rvictl -s uuid
Starting device uuid [SUCCEEDED] with interface rvi0
如果遇到
rvictl: command not found
原因是新系統(tǒng)將rvictl
移到了/Library/Apple/usr/bin/rvictl
目錄。
解決方案
打開paths 文件词爬,`sudo vim /etc/paths`
在最后添加一行 `/Library/Apple/usr/bin/`
保存退出秃嗜,重啟命令行即可
自定義 lua 腳本解析私有協(xié)議
wireshark 支持自定義腳本解析私有協(xié)議。以 mac 平臺(tái)為例顿膨。
- 編寫 lua 腳本
- 放到 init.lua 同級(jí)目錄下锅锨,mac 平臺(tái)路徑如下
/Applications/Wireshark.app/Contents/Resources/share/wireshark/
- 打開 init.lua,在最后加載解析腳本
dofile(DATA_DIR.."dtd_gen.lua")
- 保存并重啟 wireshark 即可
五、tcpdump
略
參考文檔
TC 流量控制
流量控制工具TC詳細(xì)說明
Linux流量控制工具TC
Wireshark使用入門
Wireshark抓包iOS入門教程