TCP 网络测试工具

最近做了一些网络性能测试的工作,对测试工作有所了解。本文简单记录下用到的工具及使用方法,工具的详细原理日后有机会再做剖析总结。

一、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    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 连接手机抓包由两种方式

  1. 手机连电脑热点后启动wireshark 抓包
  2. 通过数据线联电脑后,映射虚拟网卡进行抓包
    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 平台为例。

  1. 编写 lua 脚本
  2. 放到 init.lua 同级目录下,mac 平台路径如下
/Applications/Wireshark.app/Contents/Resources/share/wireshark/
  1. 打开 init.lua,在最后加载解析脚本
dofile(DATA_DIR.."dtd_gen.lua")
  1. 保存并重启 wireshark 即可

五、tcpdump

参考文档

TC 流量控制
流量控制工具TC详细说明
Linux流量控制工具TC
Wireshark使用入门
Wireshark抓包iOS入门教程

你可能感兴趣的:(TCP 网络测试工具)