网络性能测试工具--iperf

本文介绍Iperf工具的安装、配置及使用方法。涵盖Linux、Android环境下的安装流程,以及如何进行TCP/UDP网络性能测试。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

网络性能测试工具--iperf

Iperf 是一个 TCP/IP 和 UDP/IP 的性能测量 工具,能够提供 网络吞吐率信息,以及抖动、丢包率、最大段和最大传输单元大小等统计信息,从而能够帮助我们测试网络性能,定位网络瓶颈。其 设计 从根本上克服了原来的一些工具,如 ttcp 和 nettest 等的固有的缺陷。Iperf可以在任何IP 网络上运行,包括本地以太网,因特网接入连接和Wi-Fi网络。Iperf在 linuxwindows平台均有二进制版本供自由使用。

Linux下安装Iperf

下载到源码包后,完整的编译 命令如下:
                                                             tar zxvf iperf-2.0.4.tar.gz
                                                             cd iperf-2.0.4
                                                             ./configure
                                                             make
编译成功后,使用以下命令安装Iperf:
                                                             make install
重新编译Iperf,最简单的方法是使用以下命令:
                                                             make distclean
                                                             ./configure
                                                             make

Iperf交叉编译

1.PATH中有arm-linux相关工具
2.打开源码包,进行相关的配置
                                                      tar zxvf iperf-2.0.4.tar.gz
                                                      cd iperf-2.0.4
                                                      ./configure --host=arm-linux
   
    打开config.h,修改以下内容:
    #define HAVE_MALLOC 0    改为    #define HAVE_MALLOC 1
    /* #undef HAVE_QUAD_SUPPORT */    改为    #define HAVE_QUAD_SUPPORT 1
    #define malloc rpl_malloc    改为    /* #undef malloc */
   
    以上的都做好了以后,可以直接make或make -jX
3.编译生成可执行文件iperf,位于iperf-2.0.4/src/中
注:若在执行./iperf时出错“./iperf:can't load library 'libstdc++.so.6" ,说明需要静态编译,打开iperf-2.0.4/src,修改Makefile,在CFLAGS和CXXFLAGS都加-static参数
                                                      CFLAGS =  -o2  -static
                                                      CXXFLAGS =  -o2  -static

移植Iperf到Android

1.下载iperf-2.0.4.tar.gz
2.解压到<Android root>/external/iperf
3.创建Android.mk,添加以下内容:
LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_SRC_FILES := \
compat/Thread.c \
compat/error.c \
compat/delay.cpp \
compat/gettimeofday.c \
compat/inet_ntop.c \
compat/inet_pton.c \
compat/signal.c \
compat/snprintf.c \
compat/string.c

LOCAL_SRC_FILES += \
src/Client.cpp \
src/Extractor.c \
src/Launch.cpp \
src/List.cpp \
src/Listener.cpp \
src/Locale.c \
src/PerfSocket.cpp \
src/ReportCSV.c \
src/ReportDefault.c \
src/Reporter.c \
src/Server.cpp \
src/Settings.cpp \
src/SocketAddr.c \
src/main.cpp \
src/sockets.c \
src/stdio.c \
src/tcp_window_size.c \
src/gnu_getopt.c \
src/gnu_getopt_long.c \
src/service.c

LOCAL_C_INCLUDES += \
$(LOCAL_PATH) \
$(LOCAL_PATH)/include

LOCAL_CFLAGS += -O2
LOCAL_CFLAGS += -DHAVE_CONFIG_H

LOCAL_LDLIBS += -lpthread

LOCAL_SHARED_LIBRARIES := libc libm libcutils libnetutils

LOCAL_MODULE := iperf

#LOCAL_FORCE_STATIC_EXECUTABLE := true
LOCAL_MODULE_PATH := $(TARGET_OUT_OPTIONAL_EXECUTABLES)
#LOCAL_UNSTRIPPED_PATH := $(TARGET_ROOT_OUT_UNSTRIPPED)
#LOCAL_MODULE_TAGS := eng user

include $(BUILD_EXECUTABLE)
4.先生成需要的头 文件
                                ./configure -host = arm
5.以上各步骤整完后,就可以进行编译测试了。
:编译如果报错:
1."external/testtools/iperf/src/Listener.cpp:xxx: error: 'struct ipv6_mreq' has no member named 'ipv6mr_interface'"
    bionic/libc/kernel/common/linux/In6.h中的定义为
    struct ipv6_mreq {
    struct in6_addr ipv6mr_multiaddr;
    int ipv6mr_ifindex;
    };
    确实不存在ipv6mr_interface了,所以将xxx行“mreq.ipv6mr_ifindex = 0”直接注释掉。
2.“external/testtools/iperf/compat/signal.c:135: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'my_signal' “
    原因为:iperf/include/util.h与bionic/libc/include/util.h冲突导致
    解决办法:把 compact/signal.c 里面的 #include "util.h"
                      改成 #include   “../include/util.h”
                      把 src/sockets.c 里面的 #include "util.h"
                      改成 #include  “../include/util.h”
3.该方法还未使用此工具进行 性能测试,未知上述方法编译的程序是否存在问题,待验证。。。

=========
Iperf使用方法与参数说明

参数说明
-s    以server模式启动,eg:iperf -s 。 Server端为数据的接收端。 server端显示的是接收速率,最好加i参数,进行速率跟踪。
-c host    以client模式启动,host是server端地址,eg:iperf -c 222.35.11.23 。 Client端为数据的发出端。client 显示的是发送速率。

通用参数
-f [kmKM]     分别表示以Kbits, Mbits, KBytes, MBytes显示报告,默认以Mbits为单位,eg:iperf -c 222.35.11.23 -f K
-i sec    以秒为单位显示报告间隔,eg:iperf -c 222.35.11.23 -i 2
-l    缓冲区大小,默认是8KB,eg:iperf -c 222.35.11.23 -l 16
      可以使用不同的包长,进行测试
-m    显示tcp最大mtu值
-o    将报告和错误信息输出到文件eg:iperf -c 222.35.11.23 -o ciperflog.txt
-p    指定 服务器端使用的端口或客户端所连接的端口eg:iperf -s -p 9999;iperf -c 222.35.11.23 -p 9999
-u    使用udp协议
       测试htb的时候最好用udp,udp通信开销小,测试的带宽更准确
-w    指定TCP窗口大小,默认是8KB
       如果窗口太小,有可能丢包
-B    绑定一个主机地址或接口(当主机有多个地址或接口时使用该参数)
-C    兼容旧版本(当server端和client端版本不一样时使用)
-M    设定TCP数据包的最大mtu值
-N    设定TCP不延时
-V    传输ipv6数据包

server专用参数
-D    以服务方式运行ipserf,eg:iperf -s -D
-R    停止iperf服务,针对-D,eg:iperf -s -R

client端专用参数
-b    指定发送带宽,默认是1Mbit/s
         在测试qos的时候,这是最有用的参数
-d    同时进行双向传输测试
-n    指定传输的字节数,eg:iperf -c 222.35.11.23 -n 100000
-r    单独进行双向传输测试
-t    测试时间,默认10秒,eg:iperf -c 222.35.11.23 -t 5
-F    指定需要传输的文件
-T    指定ttl值

==============
应用实例

使用 iperf -s 命令将 Iperf 启动为 server 模式,在客户机上使用 iperf -c启动client模式。
iperf -s
------------------------------------------------------------
Server listening on TCP port 5001
TCP window size: 8.00 KByte (default)
------------------------------------------------------------

iperf -c 59.125.103.56
上面使用服务端和客户端的默认 设置进行测试

iperf -s -w 300K
------------------------------------------------------------
Server listening on TCP port 5001
TCP window size:  300 KByte
------------------------------------------------------------

iperf -c 59.125.103.56 -f K -i 2 -w 300K
设定报告间隔为2秒,服务器端和客户端的TCP窗口都开到300KB

iperf -c 59.125.103.56 -f K -i 2 -w 300K -n 1000000
测试传输约1MB数据

iperf -c 59.125.103.56 -f K -i 2 -w 300K -t 36
测试持续36秒

iperf -c 59.125.103.56 -f K -i 2 -w 300K -n 10400000 -d
测试双向的传输

iperf -c 59.125.103.56 -f K -i 2 -w 300K -u
UDP测试

其中 -i 参数的含义是周期性报告的时间间隔(interval),单位为秒;在上面的例子中,表示每隔2秒报告一次带宽等信息。

===================
Jperf是有图形界面版本的iperf,可以到 http://code.google.com/p/xjperf/downloads/list下载,解压后执行jperf.sh即可!(必须先安装了iperf)
Iperf 是一个网络性能测试工具Iperf可以测试TCP和UDP带宽质量。Iperf可以测量最大TCP带宽,具有多种参数和UDP特性。Iperf可以报告带宽,延迟抖动和数据包丢失。 功能介绍 TCP 测量网络带宽 报告MSS/MTU值的大小和观测值 支持TCP窗口值通过套接字缓冲 当P线程或Win32线程可用时,支持多线程。客户端与服务端支持同时多重连接 UDP 客户端可以创建指定带宽的UDP流 测量丢包 测量延迟 支持多播 当P线程可用时,支持多线程。客户端与服务端支持同时多重连接(不支持Windows) 在适当的地方,选项中可以使用K(kilo-)和M(mega-)。例如131072字节可以用128K代替。 可以指定运行的总时间,甚至可以设置传输的数据总量。 在报告中,为数据选用最合适的单位。 服务器支持多重连接,而不是等待一个单线程测试。 在指定时间间隔重复显示网络带宽,波动和丢包情况。 服务器端可作为后台程序运行。 服务器端可作为Windows 服务运行。 使用典型数据流来测试链接层压缩对于可用带宽的影响。 参数与说明 命令行选项 环境变量选项 描述 客户端与服务器端选项 -f, --format [bkmaBKMA] $IPERF_FORMAT 格式化带宽数输出。支持的格式有: 'b' = bits/sec 'B' = Bytes/sec 'k' = Kbits/sec 'K' = KBytes/sec 'm' = Mbits/sec 'M' = MBytes/sec 'g' = Gbits/sec 'G' = GBytes/sec 'a' = adaptive bits/sec 'A' = adaptive Bytes/sec 自适应格式是kilo-和mega-二者之一。除了带宽之外的字段都输出为字节,除非指定输出的格式,默认的参数是a。 注意:在计算字节byte时,Kilo = 1024, Mega = 1024^2,Giga = 1024^3。通常,在网络中,Kilo = 1000, Mega = 1000^2, and Giga = 1000^3,所以,Iperf也按此来计算比特(位)。如果这些困扰了你,那么请使用-f b参数,然后亲自计算一下。 -i, --interval # $IPERF_INTERVAL 设置每次报告之间的时间间隔,单位为秒。如果设置为非零值,就会按照此时间间隔输出测试报告。默认值为零。 -l, --len #[KM] $IPERF_LEN 设置读写缓冲区的长度。TCP方式默认为8KB,UDP方式默认为1470字节。 -m, --print_mss $IPERF_PRINT_MSS 输出TCP MSS值(通过TCP_MAXSEG支持)。MSS值一般比MTU值小40字节。通常情况 -p, --port # $IPERF_PORT 设置端口,与服务器端的监听端口一致。默认是5001端口,与ttcp的一样。 -u, --udp $IPERF_UDP 使用UDP方式而不是TCP方式。参看-b选项。 -w, --window #[KM] $TCP_WINDOW_SIZE 设置套接字缓冲区为指定大小。对于TCP方式,此设置为TCP窗口大小。对于UDP方式,此设置为接受UDP数据包的缓冲区大小,限制可以接受数据包的最大值。 -B, --bind host $IPERF_BIND 绑定到主机的多个地址中的一个。对于客户端来说,这个参数设置了出栈接口。对于服务器端来说,这个参数设置入栈接口。这个参数只用于具有多网络接口的主机。在Iperf的UDP模式下,此参数用于绑定和加入一个多播组。使用范围在224.0.0.0239.255.255.255的多播地址。参考-T 参数。 -C, --compatibility $IPERF_COMPAT 与低版本的Iperf使用时,可以使用兼容模式。不需要两端同时使用兼容模式,但是强烈推荐两端同时使用兼容模式。某些情况下,使用某些数据流可以引起1.7版本的服务器端崩溃或引起非预期的连接尝试。 -M, --mss #[KM} $IPERF_MSS 通过TCP_MAXSEG选项尝试设置TCP最大信息段的值。MSS值的大小通常是TCP/IP头减去40字节。在以太网中,MSS值 为1460字节(MTU1500字节)。许多操作系统不支持此选项。 -N, --nodelay $IPERF_NODELAY 设置TCP无延迟选项,禁用Nagle's运算法则。通常情况此选项对于交互程序,例如telnet,是禁用的。 -V (fro
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值