服务器Networking Bandwidth测试-iperf3从学习到实践
命令iperf3命令使用iperf3是一个网络速度测试工具,支持IPv4与IPv6,支持TCP、UDP、SCTP传输协议,可在Windows、Mac OS X、Linux、FreeBSD等各种平台使用,是一个简单又实用的小工具。yum install iperf3 或者brew install iperf3即可安装。Iperf3 是一个网络性能测试工具。Iperf可以测试最大TCP和UDP带宽性能
目录
什么是iperf3
iperf3是一个网络速度测试工具,支持IPv4与IPv6,支持TCP、UDP、SCTP传输协议,可在Windows、Mac OS X、Linux、FreeBSD等各种平台使用,是一个简单又实用的小工具。yum install iperf3 或者brew install iperf3即可安装。
Iperf3 是一个网络性能测试工具。Iperf可以测试最大TCP和UDP带宽性能,具有多种参数和UDP特性,可以根据需要调整,可以报告带宽、延迟抖动和数据包丢失.对于每个测试,它都会报告带宽,丢包和其他参数,可在Windows、Mac OS X、Linux、FreeBSD等各种平台使用,是一个简单又实用的小工具
[root@bogon ~]# rpm -ivh iperf3-3.1.3-1.fc24.x86_64.rpm
Preparing... ################################# [100%]
Updating / installing...
1:iperf3-3.1.3-1.fc24 ################################# [100%]
#查看
[root@bogon ~]# which iperf3
/usr/bin/iperf3
[root@bogon ~]#
启动:
/usr/bin/iperf3
[root@bogon ~]# iperf3 -s
-----------------------------------------------------------
Server listening on 5201
-----------------------------------------------------------
参考博客 https://blog.csdn.net/zcyygyl/article/details/88747907
实际应用
杀死本机Mac的进程
ps -ef|grep iperf3|awk '{print $2}'|grep -v grep|xargs sudo kill -9
server端输入 iperf3 -s 启动监听端口
客户端输入 iperf3 -c 127.0.0.1 -t 10
参考资料如下 https://blog.csdn.net/zcyygyl/article/details/88747907
例1 一台电脑本地回环测试,打开两个终端t1和t2
在t1中输入命令:
iperf3 -s
在t2中输入命令:
iperf3 -c 127.0.0.1(t1的ip,真正测试需要改为服务器t1的ip) -t 10
本例中t2向t1发送10秒中的数据包
例 2) 两台电脑之间发包测试,在电脑A中打开终端t1,在电脑B中打开终端t2,确保两台电脑在同一个局域网中假设t1的IP地址为11.11.11.11。t2的IP地址为22.22.22.22
在t1中输入命令:
iperf3 -s
在t2中输入命令:
iperf3 -c 11.11.11.11 -t 10 分析t2的宽带结果
如果出现错误iperf3: error - unable to connect to server: No route to host,请参考第四节修改电脑A的防火墙规则
实际操作
1. iperf3在pod 和node上的安装
被测试服务器上的操作
podX,有个ip。可以在 nodeM上cd /nodeMpath
scp iperf3-3.0.11-1.fc22.x86_64.rpm pod4ip:/path/
这样就把node上的iperfxxx.rpm拷贝到pod上了
pod本身不支持rz等命令
从其他服务器 scp到腾讯云环境的的nodeM 再从腾讯云的nodeM scp到nodeN 是可以的,但是直接从其他服务器scp到nodeN是不可以的。nodeX到nodeY之间是可以的
# scp -r username@hostname:/path/iperf3-3.0.11-1.fc22.x86_64.rpm ./
# iperf3 -s -p 25001
从A机器拷贝iperf3到B机器(腾讯云)的node4不行,connection timed out lose connection。
登录B机器的node1(ssh node1),从A机器远程拷贝到B机器的node1,再从B的node1拷贝到B的node4
原因:pod是自己的网络 pod是和所在机器的宿主机网络是通的。从其他机器直接要连这个pod是有限制的。两层网络,A和B是宿主机,他们是有个网络,A上和B上各有自己的K8s网络。
[username@hostnameA tmp]# scp iperf3 username@ipB:/tmp/
iperf3 100% 11KB 34.0MB/s 00:00
[username@hostnameB tmp]# scp iperf3 node4:/tmp/
iperf3 100% 11KB 23.7MB/s 00:00
但是拷贝完发现不能用,解决办法 去https://iperf.fr/iperf-download.php#fedora
下载 Fedora 64 bits / Red Hat 64 bits / CentOS 64 bits (AMD64) by ssahani. (sha256)
- iPerf 3.1.3 - RPM package (8 jun 2016 - 76.8 KiB)
rz上传到B服务器node1的/tmp下
再用rpm命令安装
[username@hostname tmp]# rpm -i iperf3-3.1.3-1.fc24.x86_64.rpm
需要多台服务器都安装iperf3(node&pod 、node之间、 pod之间 )
参考博客
https://blog.csdn.net/nathanniubee/article/details/86704055
2. 网络带宽比较-TCP
测试用例设计-node&pod组合
小白级入手,node和pod之间的关系可参考另一篇博客week2云计算
2.1 测试不同node之间的网络带宽
测试不同node之间的网络传输 如node4到node5,node5到node6
测试时长:30分钟==1800秒
测试次数:3次。
计算:取每次运行结果的Bandwidth,node之间的单位是Gb/s,pod之间的单位是Mb/s,node和pod之间是Gb/s和Mb/s。取传输服务器网速的3次平均值(sender receiver 原则二者一致)
在node4输入 # iperf3 -s
在node5输入 # iperf3 -c xx.xx.xx.xx(node4的ip) -t 1800 按照G展示网速
测试node5到node4的网络带宽,最终的报告关注-c-t服务器生成的日志
# iperf3 -c 10.1.0.15 -f M -t 10 按照M展示网速 但是奇怪的是,按照后者出来的数据不对(应该是2.5个G左右但是这样跑出来是286),需要后期研究下。
结果按照-f M命令行跑错了,需要重新跑,想了想,我写了个shell脚本cycletcp.sh,再结合nohup命令,第二天来分析结果。脚本写了2个,一个循环node一个循环pod
#!/bin/bash
#n=1;
#while(($n<=3));
for i in 1 2 3;
do
echo 'BEGIN TO RUN ~~~~~~~~~~~~~~~~~~~~~~~~~~~~'
echo $i
for j in 1 2 3 4;
do
echo '---------------------------------------------------------'
done
iperf3 -c ipn4xx.xx.xx.xx -t 1800
echo 'END AND RECARD ~~~~~~~~~~~~~~~~~~~~~~~~~~~~'
sleep 3s
done
nohup后台进程挂起,如果退出服务器或者去执行其他命令,不会影响此进程正常运行
任务结束,显示如下,期间退出(如Ctrl+C) 显示Exit状态
[2]+ Done nohup sh cycletcp.sh 2>&1 | tee pod5tonode4.log
执行命令行:
在node4上执行 nohup sh cycletcp.sh 2>&1 | tee node4to5.log & 查看此份数据
在node5上执行 nohup iperf3 -s 2>&1 | tee node4to5.log &
中间想停止,批量杀iperf3进程即可。 ps -ef|grep iperf3|awk '{print $2}'|xargs kill -9
第二天分析 node4to5.log 日志
2.2 测试不同pod之间的网络带宽
测试不同pod之间的网络传输 如pod4到pod5,pod5到pod4
方法同上,只是服务器ip不同
2.3 测试node和pod之间的网络带宽
pod4到node5 & node5到pod4 或者是 pod5到node4 & node4到pod5 这两种case一致,覆盖其中一项即可
3. 网络带宽比较-UDP
测试tcp
iperf3 -c ipB -t 1800 > c1tcp.txt
测试udp
iperf3 -u -c ipB -t 1800 -b 1000000M > c1udp.txt
需要注意的是因为udp不限速,测试环境有万兆网卡,于是这里指定了带宽-b 为万兆(我看有的博客进行千兆测试),传输内容大小为100G。
进行udp测试时候,仅是多参数-u -b
测试udp的shell脚本
#!/bin/bash
#n=1;
#while(($n<=3));
for i in 1 2 3;
do
echo 'BEGIN TO RUN ~~~~~~~~~~~~~~~~~~~~~~~~~~~~'
echo $i
for j in 1 2 3 4;
do
echo '---------------------------------------------------------'
done
iperf3 -u -c xx.xx.xx.xx -t 1800 -b 1000000M #就这里不同
echo 'END AND RECARD ~~~~~~~~~~~~~~~~~~~~~~~~~~~~'
sleep 3s
done
为了清晰记录日志
在pod4执行 nohup iperf3 -s 2>&1 |tee s-pod5topod4UDP.log & s为iperf-s的标识,为接收网速方
在pod5执行 nohup sh cycleudp.sh 2>&1 | tee pod5topod4UDP.log & 不带s的日志为发起传输方,最终要的结果在此产生
其中目录的【2.1 2.2 2.3】都是针对tcp的测试。
以下针对udp测试
iperf3 -s 接受网速的服务器显示日志如下
iperf3: OUT OF ORDER - incoming packet = 95968610 and received packet = 95968611 AND SP = 5
[ 5] 1577.00-1578.00 sec 97.7 MBytes 820 Mbits/sec 0.296 ms 47433/59935 (79%)
iperf3: OUT OF ORDER - incoming packet = 96029234 and received packet = 96029239 AND SP = 5
iperf3: OUT OF ORDER - incoming packet = 96029235 and received packet = 96029239 AND SP = 5
iperf3: OUT OF ORDER - incoming packet = 96029236 and received packet = 96029241 AND SP = 5
iperf3: OUT OF ORDER - incoming packet = 96029237 and received p
iperf3: OUT OF ORDER - incoming packet = 95968610 and received packet = 95968611 AND SP = 5
[ 5] 1577.00-1578.00 sec 97.7 MBytes 820 Mbits/sec 0.296 ms 47433/59935 (79%)
iperf3: OUT OF ORDER - incoming packet = 96029234 and received packet = 96029239 AND SP = 5
iperf3: OUT OF ORDER - incoming packet = 96029235 and received packet = 96029239 AND SP = 5
iperf3: OUT OF ORDER - incoming packet = 96029236 and received packet = 96029241 AND SP = 5
iperf3: OUT OF ORDER - incoming packet = 96029237 and received p
测试过程数据(node5 to node4)
测试结果
[ ID] Interval Transfer Bandwidth Jitter Lost/Total Datagrams
[ 4] 0.00-1800.00 sec 825 GBytes 3.94 Gbits/sec 0.037 ms 82094055/108094690 (76%)
[ 4] Sent 108094690 datagrams
4. 延伸:TCP UDP概念
TCP
-
测量网络带宽
-
报告MSS/MTU值的大小和观测值
-
支持TCP窗口值通过套接字缓冲
-
当P线程或Win32线程可用时,支持多线程。客户端与服务端支持同时多重连接
UDP
-
客户端可以创建指定带宽的UDP流
-
测量丢包
-
测量延迟
-
支持多播
-
当P线程可用时,支持多线程。客户端与服务端支持同时多重连接(不支持Windows)
其他
-
在适当的地方,选项中可以使用K(kilo-)和M(mega-)。例如131072字节可以用128K代替。
-
可以指定运行的总时间,甚至可以设置传输的数据总量。
-
在报告中,为数据选用最合适的单位。
-
服务器支持多重连接,而不是等待一个单线程测试。
-
在指定时间间隔重复显示网络带宽,波动和丢包情况。
-
服务器端可作为后台程序运行。
-
服务器端可作为Windows 服务运行。
-
使用典型数据流来测试链接层压缩对于可用带宽的影响。
-
支持传送指定文件,可以定性和定量测试
区别
TCP的优点: 可靠,稳定 TCP的可靠体现在TCP在传递数据之前,会有三次握手来建立连接,而且在数据传递时,有确认、窗口、重传、拥塞控制机制,在数据传完后,还会断开连接用来节约系统资源。 TCP的缺点: 慢,效率低,占用系统资源高,易被攻击
UDP的优点: 快,比TCP稍安全 UDP没有TCP的握手、确认、窗口、重传、拥塞控制等机制,UDP是一个无状态的传输协议,所以它在传递数据时非常快。没有TCP的这些机制,UDP较TCP被攻击者利用的漏洞就要少一些
TCP UDP
TCP与UDP基本区别
1.基于连接与无连接
2.TCP要求系统资源较多,UDP较少;
3.UDP程序结构较简单
4.流模式(TCP)与数据报模式(UDP);
5.TCP保证数据正确性,UDP可能丢包
6.TCP保证数据顺序,UDP不保证
tcp协议和udp协议的差别
TCP UDP
是否连接 面向连接 面向非连接
传输可靠性 可靠 不可靠
应用场合 少量数据 传输大量数据
速度 慢 快
更多推荐
所有评论(0)