Netperf是一种网络性能的测量工具,主要针对基于tcp或UDP的传输Netperf根据应用的不同,可以进行不同模式的网络性能测试,即批量数据传输(bulk data transfer)模式和请求/应答(request/reponse)模式Netperf测试结果所反映的是一个系统能够以多快的速度向另外一个系统发送数据,以及另外一个系统能够以多块的速度接收数据,下面我们就来聊聊关于网络测试应用?接下来我们就一起去了解一下吧!

网络测试应用(网络测试工具Netperf)

网络测试应用

Netperf是一种网络性能的测量工具,主要针对基于tcp或UDP的传输。Netperf根据应用的不同,可以进行不同模式的网络性能测试,即批量数据传输(bulk data transfer)模式和请求/应答(request/reponse)模式。Netperf测试结果所反映的是一个系统能够以多快的速度向另外一个系统发送数据,以及另外一个系统能够以多块的速度接收数据。

Netperf工具以client/server方式工作。server端是netserver,用来侦听来自client端的连接,client端是netperf,用来向server发起网络测试。在client与server之间,首先建立一个控制连接,传递有关测试配置的信息,以及测试的结果;在控制连接建立并传递了测试配置信息以后,client与server之间会再建立一个测试连接,用来来回传递着特殊的流量模式,以测试网络的性能。

Netperf 官网地址http://www.netperf.org/

安装需要下载源代码并进行编译,使用epel源通过yum安装也可以。

网络测试的时候,一般有两个关键指标

BPS 网络吞吐量,一分钟经过网卡的数据流量

PPS 发包率 一分钟经过网卡数据包的数量

Netperf可以模拟三种不同的TCP流量模式:

单TCP连接,传输大量数据

单TCP连接,大量的连接次数

多TCP连接,每个连接中一对请求/应答的交易方式

Netperf可以模拟两种UDP的流量模式:

单向批量传输

请求/应答的交易方式

netperf常用参数

-H 指定netserver的server IP地址。

-l指定测试的时间长度,单位为秒

-t指定进行的测试类型,包括TCP_STREAM,UDP_STREAM,TCP_RR,TCP_CRR,UDP_RR等。

TCP_STREAM

Netperf缺省情况下进行TCP批量传输,即-t TCP_STREAM。测试过程中,netperf向netserver发送批量的TCP数据分组,以确定数据传输过程中的吞吐量

UDP_STREAM

UDP_STREAM用来测试进行UDP批量传输时的网络性能。需要特别注意的是,此时测试分组的大小不得大于socket的发送与接收缓冲大小,否则netperf会报出错提示:

TCP_RR

TCP_RR方式的测试对象是多次TCP request和response的交易过程,但是它们发生在同一个TCP连接中,这种模式常常出现在数据库应用中。数据库的client程序与server程序建立一个TCP连接以后,就在这个连接中传送数据库的多次交易过程。

TCP_CRR

与TCP_RR不同,TCP_CRR为每次交易建立一个新的TCP连接。最典型的应用就是HTTP,每次HTTP交易是在一条单独的TCP连接中进行的。因此,由于需要不停地建立新的TCP连接,并且在交易结束后拆除TCP连接,交易率一定会受到很大的影响。

UDP_RR

UDP_RR方式使用UDP分组进行request/response的交易过程。由于没有TCP连接所带来的负担,所以我们推测交易率一定会有相应的提升。

测试方法

Netperf支持多机测试。测试时一台运行服务器端程序netserver,一台或者多台服务器运行客户端程序netclient/netperf.

TCP吞吐量测试

Server端运行netserver

Client端运行netclient -H server_ip -l 60 -tTCP_STREAM

TCP交易测试

Netperf 2.xx版本只支持每个实例一个线程。由于一个线程产生的tcp交易远远达不到系统瓶颈,需要开多个netperf实例,并将每个实例的结果相加。下面以20个实例为例:

Windows 服务端脚本

netserver.bat

@echo off

for /L %%i in (12865 1 12884) do start netserver.exe -p %%i

LINUX物理机客户端脚本

# cat netperf.sh

#!/bin/bash

for port in $(seq 12865 1 12884)

do

netperf -t TCP_RR -H server_ip-l 60 -p $port &

done

,