服务器Networking Bandwidth测试-iperf3从学习到实践

目录

什么是iperf3

实际操作

1. iperf3在pod 和node上的安装

2. 网络带宽比较-TCP

2.1 测试不同node之间的网络带宽

2.2 测试不同pod之间的网络带宽

2.3 测试node和pod之间的网络带宽

3. 网络带宽比较-UDP

4. 延伸: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)

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
是否连接     面向连接     面向非连接
传输可靠性   可靠        不可靠
应用场合    少量数据    传输大量数据 

速度       慢         快

猜你喜欢

转载自blog.csdn.net/weixin_42498050/article/details/114370971
今日推荐