》》欢迎关注 嵌入式软件客栈 公众号,获取更多实战技巧《《
Iperf
Iperf是一个广泛使用的网络性能测试工具,可以测量TCP和UDP带宽性能。它通过创建数据流并测量客户端和服务器之间传输的数据量来工作,能够提供网络吞吐量、延迟抖动和数据包丢失等关键指标的详细报告。
Iperf主要用于以下场景:
- 网络设备(如路由器、交换机、防火墙)性能测试
- 网络链路质量评估
- 带宽容量规划
- 网络故障排除
- 网络优化
Iperf工具特性
TCP测试能力
- 测量网络最大带宽
- 报告MSS/MTU大小
- 支持TCP窗口大小调整
- 支持多线程并发连接测试
UDP测试能力
- 客户端可创建指定带宽的UDP流
- 测量丢包率
- 测量网络延迟和抖动
- 支持多播测试
其他特性
- 支持IPv4和IPv6协议
- 可调整测试时间长度和数据总量
- 提供实时报告和统计数据
- 支持服务器后台运行模式
- 可用于测试链路层压缩对带宽的影响
安装方法
Windows平台安装
-
下载Windows版本的Iperf
- 官方版本:https://iperf.fr/iperf-download.php
- 或者使用包含在JPerf中的Iperf:https://sourceforge.net/projects/iperf/
-
解压下载的压缩包,将其中的
iperf.exe
和cygwin1.dll
文件复制到系统目录(如C:\Windows\System32
) -
打开命令提示符,输入
iperf -v
验证安装是否成功
Linux平台安装
在大多数Linux发行版中,可以通过包管理器直接安装:
Ubuntu/Debian:
sudo apt-get update
sudo apt-get install iperf
CentOS/RHEL:
sudo yum install iperf
或者从源码编译安装:
wget https://downloads.es.net/pub/iperf/iperf-3.1.3.tar.gz
tar -zxvf iperf-3.1.3.tar.gz
cd iperf-3.1.3
./configure
make
sudo make install
验证安装:
iperf -v
基本使用方法
Iperf基于客户端/服务器模式工作,需要在网络的两端分别运行服务器和客户端程序。
服务器模式
在一台计算机上启动Iperf服务器端:
iperf -s
这将在默认端口5001上启动TCP服务器。要启动UDP服务器,可以添加-u
选项:
iperf -s -u
客户端模式
在另一台计算机上运行Iperf客户端,连接到服务器:
iperf -c 服务器IP地址
例如:
iperf -c 192.168.1.100
运行UDP客户端:
iperf -c 192.168.1.100 -u
常用参数详解
以下是Iperf常用的命令行参数:
通用参数:
-f, --format [kmKM]
:指定带宽显示格式(k=kbits, K=KBytes, m=Mbits, M=MBytes)-i, --interval n
:以秒为单位设置报告间隔-p, --port n
:设置服务器监听端口(默认5001)-V, --verbose
:更详细的输出-h, --help
:显示帮助信息-v, --version
:显示版本信息
服务器特定参数:
-s, --server
:以服务器模式运行-D, --daemon
:以守护进程方式在后台运行服务器-R, --remove
:在测试完成后移除服务端
客户端特定参数:
-c, --client <host>
:以客户端模式运行,连接到指定主机-b, --bandwidth n[KM]
:指定UDP模式的带宽,默认是1Mbit/sec-t, --time n
:传输的时间(默认为10秒)-n, --num n[KM]
:传输的字节数-P, --parallel n
:并行客户端线程数-T, --ttl n
:设置多播TTL值(跳数)-Z, --zerocopy
:使用零拷贝方式发送数据
TCP特定参数:
-w, --window n[KM]
:TCP窗口大小(socket缓冲区大小)-M, --mss n
:设置TCP最大分段大小(MTU-40字节)-N, --nodelay
:禁用Nagle算法
UDP特定参数:
-u, --udp
:使用UDP而不是TCP-b, --bandwidth n[KM]
:设置带宽,默认为1Mbit/sec-l, --len n[KM]
:设置读写缓冲区长度
测试场景示例
带宽测试
TCP带宽测试(基本测试):
# 服务器端
iperf -s
# 客户端
iperf -c 192.168.1.100 -t 30
这将运行一个持续30秒的TCP带宽测试。
并发连接带宽测试:
# 客户端使用4个并行线程
iperf -c 192.168.1.100 -P 4
丢包率测试
使用UDP协议测试丢包率:
# 服务器端
iperf -s -u
# 客户端(指定带宽为100Mbps)
iperf -c 192.168.1.100 -u -b 100M
输出结果中将显示丢包率信息。
抖动测试
UDP模式下,可以测量网络抖动:
# 服务器端
iperf -s -u
# 客户端
iperf -c 192.168.1.100 -u -t 30
结果中将显示抖动信息。
批量测试脚本
为了简化测试过程,我们提供了批量测试脚本,可以自动执行一系列测试场景。
Windows批处理脚本
我们提供了一个Windows批处理脚本 iperf_batch_test.bat
,可以帮助您快速执行多种测试:
@echo off
REM Iperf批量测试脚本 - Windows版本
REM 使用此批处理文件可以自动执行多种网络性能测试
echo Iperf网络性能测试批处理脚本
echo ==========================
echo.
REM 设置服务器IP地址
set SERVER_IP=192.168.1.100
set TEST_DURATION=10
使用方法:
- 使用文本编辑器修改脚本中的服务器IP地址(如果需要)
- 双击运行批处理文件
- 根据菜单选择要执行的测试项目
脚本提供的测试项目:
- TCP带宽测试
- TCP并发带宽测试(4线程)
- UDP带宽测试(10Mbps和100Mbps)
- 双向测试
- 一键执行所有测试
Linux Shell脚本
对于Linux用户,我们提供了更加强大的Shell脚本 iperf_test.sh
:
#!/bin/bash
# Iperf批量测试脚本 - Linux版本
# 使用此脚本可以自动执行多种网络性能测试
# 使用方法: ./iperf_test.sh [服务器IP]
# 颜色设置
RED='\033[0;31m'
GREEN='\033[0;32m'
BLUE='\033[0;34m'
YELLOW='\033[1;33m'
NC='\033[0m' # No Color
使用方法:
- 添加执行权限:
chmod +x iperf_test.sh
- 运行脚本:
./iperf_test.sh
或./iperf_test.sh 192.168.1.100
(指定服务器IP)
Shell脚本的优势:
- 彩色输出,更易于阅读测试结果
- 可直接通过命令行参数指定服务器IP
- 提供长时间稳定性测试选项
- 支持动态修改服务器IP
图形界面工具JPerf
JPerf是Iperf的图形界面版本,使用Java编写,可以更直观地进行网络性能测试。
安装步骤:
- 下载JPerf:https://sourceforge.net/projects/iperf/files/jperf/
- 确保已安装Java运行环境
- 解压下载的压缩包
- 运行jperf.bat(Windows)或jperf.sh(Linux/Mac)
JPerf主要优势:
- 图形化界面,操作简单
- 实时图表显示测试结果
- 可保存测试配置和结果
- 支持所有Iperf命令行选项
常见问题与解决方案
1. 连接被拒绝
问题:客户端无法连接到服务器,显示"连接被拒绝"错误。
解决方案:
- 检查服务器是否已启动Iperf
- 验证服务器防火墙是否允许Iperf端口(默认5001)通过
- 确认IP地址是否正确
2. 带宽异常低
问题:测试结果显示的带宽明显低于预期。
解决方案:
- 尝试调整TCP窗口大小(
-w
选项) - 检查网络中是否存在限速设备
- 使用多线程测试(
-P
选项)验证是否为单线程限制
3. UDP测试显示0%丢包但带宽很低
问题:UDP测试没有丢包,但带宽远低于指定值。
解决方案:
- 增加客户端发送缓冲区大小
- 检查网络路径中是否存在流量整形或QoS策略
关注 嵌入式软件客栈 公众号,获取更多内容