一、netperf是什么

netperf是一个基于client-server模式的网络测试工具,可以测量TCP和UDP传输的吞吐量、时延、CPU占用率等性能参数。它可以测试以下几种模式的TCP核UDP网络性能:

  • TCP_STREAM:client端向server端发送批量TCP数据
  • UDP_STREAM:client端向server端发送批量UDP数据
  • TCP_RR和TCP_CRR:前者是在同一个连接中进行多次request和response请求,后者是每次请求新建一个连接(HTTP)
  • UDP_RR:使用UDP进行request和response请求

二、安装

1 编译安装

github选择对应的版本下载源码,按照下面步骤编译安装:

tar -zxf netperf-netperf-2.7.0.tar.gz
cd netperf-2.7.0/
./configure
make 
make install

上述步骤安装完成之后,使用netperf -V查看版本:

netbios发送UDP137端口 netperf udp_TCP

三、使用

1 服务端

服务端只需要监听一个端口即可。netserver启动监听在默认的端口12865上,若端口被占用的情况下,netserver -p 端口号更换一个端口再启动即可。

netbios发送UDP137端口 netperf udp_netbios发送UDP137端口_02


或者netserver -D -4 -L 0.0.0.0 -p 9991netserver的参数如下:

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

2 客户端

客户端使用netperf连接服务端的端口进行测试,可以指定测试的协议类型ip地址端口测试持续的时间等,参数类型:
-t: 指定进行的测试类型,包括TCP_STREAM,UDP_STREAM,TCP_RR,TCP_CRR,UDP_RR。可以省略,省略即为TCP_STEAM
-H:指定远程主机,即netserver服务器地址
-l: 指定时间
-p:指定netserver监听端口,可以省略,省略即为默认端口12865

1) 测试tcp吞吐

netperf -t TCP_STREAM -H 172.20.35.40 -l 10 -P 12856 表示:测试的协议为(TCP_STREAM)、服务器的IP地址为(172.20.35.40 )、持续的时间为(10秒)、指定连接服务端的12856端口

netbios发送UDP137端口 netperf udp_netperf_03


测试结果为:1104.90Mb/s

TCP_STREAM的一些别的参数

参数

说明

-s size

设置本地系统的socket发送与接收缓冲大小

-S size

设置远端系统的socket发送与接收缓冲大小

-m size

设置本地系统发送测试分组的大小

-M size

设置远端系统接收测试分组的大小

-D

对本地与远端系统的socket设置TCP_NODELAY选项

2)测试udp吞吐

netperf -t UDP_STREAM -H 172.20.35.40 -l 10 udp无需指定端口

表示:udp协议、ip为1720.20.35.40 持续时间10s

netbios发送UDP137端口 netperf udp_TCP_04


测试结果:

第一行表示本地吞吐:1344.11Mb/s

第二行便是接收端吞吐:1344.06Mb/s

3)测试tcp交互速率

a 类似于http的长连接

netperf -t TCP_RR -H 172.20.35.40 -l 10 -- -r 256,2048-r用于指定客户端和服务端每次的交互数据量,上面表示客户端每次发送256字节,服务器每次回复2048字节

netbios发送UDP137端口 netperf udp_TCP_05


测试结果:

第一行表示3533.89kb/s的响应

第二行是服务器的数据统计

b 类似tcp短连接

netperf -t TCP_CRR -H 172.20.35.40 -l 10 -- -r 128,1024 含义和短连接类似。

netbios发送UDP137端口 netperf udp_netperf_06


测试结果:

第一行表示2675.65kb/s的响应

TCP_RR模式下的一些参数

参数

说明

-r req,resp

设置request和reponse分组的大小

-s size

设置本地系统的socket发送与接收缓冲大小

-S size

设置远端系统的socket发送与接收缓冲大小

-D

对本地与远端系统的socket设置TCP_NODELAY选项

4)测试udp交互

netperf -t UDP_RR -H 172.20.35.40 -l 10 -- -r 256,2048 含义和tcp交互类似。

netbios发送UDP137端口 netperf udp_netperf_07


测试结果:

第一行表示8108.19kb/s的响应。

3 vpn网络

与普通网络不一样的是,vpn网络在测试udp吞吐时按照普通模式发送数据时会报错:

netbios发送UDP137端口 netperf udp_UDP_08


需要增加一个参数再发送数据,就不会报错了:

netbios发送UDP137端口 netperf udp_TCP_09


其他的情况不会报错:

netbios发送UDP137端口 netperf udp_TCP_10