# 1使用场景 检测网络应用程序的网络性能。Netperf测试结果所反映的是一个系统能够以多快的速度向另外一个系统发送数据,以及另外一个系统能够以多快的速度接收数据。测试网络性能的五项指标:可用性(availability,ping测试网络是否联通)、响应时间(response time,与未安装网络程序对比响应时间)、网络利用率(network utilization,网络被使用的时间占总时间(使用的时间+空闲的时间)的比例)、网络吞吐量(network throughput,应用程序需要的剩余带宽)、网络带宽容量(network bandwidth capacity,两节点间的最大带宽)。 # 2工作原理 Netperf工具以 client/server方式工作。server端是netserver,用来侦听来自client端的连接,client端是netperf,用来向server发起网络测试。在client与server之间,首先建立一个控制连接,传递有关测试配置的信息,以及测试的结果;在控制连接建立并传递了测试配置信息以后,client与server之间会再建立一个测试连接,进行来回传递特殊的流量模式,以测试网络的性能。 # 3举例使用 ## #环境描述 准备两个虚拟机都安装上netperf,虚拟机A作为服务器端开启某端口,虚拟机B作为客户端发包去连接A的服务,测试虚拟机A的网络性能。 ## #安装 yum -y install netperf ## #server端 若不指定端口默认开启12865端口 netserver -4 -L 0.0.0.0 -p 8848  ![](https://img2020.cnblogs.com/blog/2061564/202011/2061564-20201126152049171-1658472336.png) 参数: Usage: netserver [options] Options:     -h                Display this text     -D                Do not daemonize     -d                Increase debugging output     -f                Do not spawn chilren for each test, run serially     -L name,family    Use name to pick listen address and family for family     -N                No debugging output, even if netperf asks     -p portnum        Listen for connect requests on portnum.     -4                Do IPv4     -6                Do IPv6     -v verbosity      Specify the verbosity level     -V                Display version information and exit     -Z passphrase     Expect passphrase as the first thing received ## #client端 netperf -H 172.16.18.4 -p 8848 -l 30 netperf -H 172.16.18.4 -p 8848 -l 30 -t TCP_RR -- -r 1k,1k netperf -H 10.1.13.115 -p 9991 -l 30 -t TCP_CRR -- -r 4k,4k  ![](https://img2020.cnblogs.com/blog/2061564/202011/2061564-20201126152024015-1041403466.png) 参数: netperf的命令行参数可以分为两大类:全局命令行参数、测试相关的局部参数,两者之间使用--分隔。 netperf语法格式为: Netperf [global options] --[test-specific options] [global options] 可选参数,其中可选的参数有如下几个: |**参数**|**说明**| |---|---| |-H host|指定远端运行netserver的server IP地址| |-l testlen|指定测试的时间长度(秒)| |-t testname|指定进行的测试类型(TCP_STREAM,UDP_STREAM,TCP_RR,TCP_CRR,UDP_RR)| [test-specific options] 可选参数,其中可选的参数有如下几个: |**参数**|**说明**| |---|---| |-s size|设置本地系统的socket发送与接收缓冲大小| |-S size|设置远端系统的socket发送与接收缓冲大小| |-m size|设置本地系统发送测试分组的大小| |-M size|设置远端系统接收测试分组的大小| |-D|对本地与远端系统的socket设置TCP_NODELAY选项| |-r req,resp|设置request和reponse分组的大小| # 4FAQ ## 4.1客户端connect failed出现No route to host 两台服务器间能ping通,也开通了服务端端口,但客户端connect返回netperf:send_omni:connect_data_socket failed:No route to host。 ![](https://img2020.cnblogs.com/blog/2061564/202012/2061564-20201216141558987-1798345854.png) 方法一:是防火墙的问题,需停止防火墙service firewalld stop。 方法二:server端firewall除了开启9991,外还需要开启tcp/40000-65535。 netperf的client连接server端口后,server端会随机启动一个一万以上的端口用于数据传输(暂不明确server端随机启用的是几万以上端口,本地测试时显示的是40000以上端口),若server端开启firewall也需要开启tcp/40000-65535,也可将范围扩大一些tcp/10000-65535。  ![](https://img2020.cnblogs.com/blog/2061564/202012/2061564-20201216152416784-1001916926.png) **1. TCP STREAM** 1) 远端系统(即server)使用大小为87380字节的socket接收缓冲 2) 本地系统(即client)使用大小为16384字节的socket发送缓冲 3) 向远端系统发送的测试分组大小为16384字节 4) 测试经历的时间为60.03秒 5) 吞吐量的测试结果为941.47Mbits/秒 **2. UDP_STREAM** UDP_STREAM方式的结果中有两行测试数据,第一行显示的是本地系统的发送统计,这里的吞吐量表示netperf向本地socket发送分组的能力。第二行显示的就是远端系统接收的情况。 **3. TCP_RR** TCP_R[R方](https://so.csdn.net/so/search?q=R%E6%96%B9&spm=1001.2101.3001.7020)式的测试对象是多次TCP request和response的交易过程,但是它们发生在同一个TCP连接中,这种模式常常出现在数据库应用中。数据库的client程序与server程序建立一个TCP连接以后,就在这个连接中传送数据库的多次交易过程。 Netperf输出的结果也是由两行组成。第一行显示本地系统的情况,第二行显示的是远端系统的信息。平均的交易率(transaction rate)为3094.64次/秒。注意到这里每次交易中的request和response分组的大小都为1个字节,不具有很大的实际意义。用户可以通过测试相关的参数来改变request和response分组的大小,TCP_RR方式下的参数如下表所示: 参数说明: -r req,resp 设置request和reponse分组的大小 -s size 设置本地系统的socket发送与接收缓冲大小 -S size 设置远端系统的socket发送与接收缓冲大小 -D 对本地与远端系统的socket设置TCP_NODELAY选项 **4. UDP_RR** UDP_RR方式使用UDP分组进行request/response的交易过程。没有TCP连接所带来的负担。 可能会受到网络中路由器或其它的网络设备对UDP采用了与TCP不同的缓冲区空间和处理技术影响,正常情况下会高于TCP_RR的值。本次测试结果为3136.53次/秒。 **5. TCP_CRR** 与TCP_RR不同,TCP_CRR为每次交易建立一个新的TCP连接。最典型的应用就是HTTP,每次HTTP交易是在一条单独的TCP连接中进行的。因此,由于需要不停地建立新的TCP连接,并且在交易结束后拆除TCP连接,交易率一定会受到很大的影响。 这里交易率明显的降低了,只有1422.23次/秒。