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

  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入门教程

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,904评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,581评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,527评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,463评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,546评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,572评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,582评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,330评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,776评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,087评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,257评论 1 344
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,923评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,571评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,192评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,436评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,145评论 2 366
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,127评论 2 352

推荐阅读更多精彩内容

  • 标签(空格分隔): Wireshark Lua 参考:http://yoursunny.com/t/2008/Wi...
    natsumi阅读 24,478评论 1 15
  • 个人认为,Goodboy1881先生的TCP /IP 协议详解学习博客系列博客是一部非常精彩的学习笔记,这虽然只是...
    贰零壹柒_fc10阅读 5,052评论 0 8
  • 初中散记 青春里有一群人。她们陪伴我走过几年的校园时光,在疯癫和无奈中厮打。当所有的爱恨在时间的隧道里消失殆尽,只...
    断臂_哪吒阅读 271评论 0 1
  • 风景美的凄凉 表皮的伤已结咖 可深处还在流血 乡音依旧萦绕在梦里 故乡越来越美好 但却已回不去的故乡 那里有父老乡...
    日月之明angel阅读 207评论 0 2
  • 第三章 浪子北归终回头 教育本身就意味着:一棵树摇动另一颗树,一朵云推动另一朵云,一个灵魂唤醒另一个灵魂。要实现真...
    听说此子乃墨君阅读 235评论 0 0