iperf3使用方法

iperf 是一款非常强大的开源网络性能测试工具,用于测量 TCP 和 UDP 带宽、延迟、抖动和丢包率。"打流"通常指的是进行持续、大流量的网络传输测试,以评估网络的吞吐量、稳定性和承载能力。

以下是 iperf 用于打流(主要是测量最大带宽)的常用命令详解,分为服务端客户端两部分:


一、服务端 (Server) - 接收数据

在需要接收流量的机器上运行。通常只需指定监听端口。

  1. 基本命令:

    bash 复制代码
    iperf3 -s
    • -s: 以服务器模式运行。

    • 默认端口: 5201。

  2. 指定监听端口:

    bash 复制代码
    iperf3 -s -p <端口号>
    • -p <端口号>: 指定服务器监听的端口(例如 -p 5001)。如果防火墙开启,需确保该端口开放。
  3. 输出更详细的信息:

    bash 复制代码
    iperf3 -s -V
    • -V: 输出更详细的调试/运行时信息。
  4. 以守护进程/后台模式运行 (Linux):

    bash 复制代码
    iperf3 -s -D
    -D: 作为守护进程在后台运行。

二、客户端 (Client) - 发送数据 (打流)

在需要发送流量的机器上运行。指定服务端的 IP 地址和端口。

通用参数
  • -c <服务器IP地址>: 指定 iperf 服务器的 IP 地址或主机名 (必需) 。例如 -c 192.168.1.100

  • -p <端口号>: 指定连接服务器的端口(默认为 5201)。例如 -p 5001

  • -t <秒数>: 设置测试的持续时间(单位:秒)。例如 -t 60 表示测试 60 秒。这是打流最关键的参数之一,确保测试持续足够长时间以反映稳定性能。

  • -i <秒数>: 设置定期带宽报告的间隔时间(单位:秒)。例如 -i 5 表示每 5 秒输出一次结果。

  • -V: 输出更详细的调试/运行时信息。

  • --logfile <文件名>: 将输出重定向到指定的日志文件。例如 --logfile iperf.log

  • -P <连接数>: 指定客户端到服务器使用的并行数据流数量 。例如 -P 4 表示同时建立 4 个连接进行测试。这是突破单 TCP 流限制、测出接近物理链路最大带宽的关键参数! (通常需要结合服务端的 -s 使用)

  • -R / --reverse: 反向模式 。默认是客户端发送数据到服务器。使用 -R 后,客户端将接收数据,服务器将发送数据。用于测试上行/下行的方向转换,无需重启服务端。

TCP 测试参数 (默认协议)
  • -w <大小>[K|M]: 设置 TCP 窗口大小 (Socket Buffer Size)。例如 -w 256K-w 2M调整窗口大小对长距离、高带宽链路(高 BDP 网络)的性能至关重要。 理想值应 >= 带宽(Bits/s) * 往返延迟(s) / 8。

  • -M <MTU大小>: 尝试设置 TCP MSS (Maximum Segment Size) 值。通常不需要手动设置,系统会自动协商。

  • -N: 设置 TCP no delay 选项 (禁用 Nagle 算法)。对于小数据包的低延迟测试可能有用,但对最大带宽测试影响不大。

UDP 测试参数
  • -u: 使用 UDP 协议进行测试 (默认是 TCP)。

  • -b <带宽>[K|M|G]: 设置目标带宽速率。这是 UDP 打流最核心的参数! 例如:

    • -b 100M: 目标 100 Mbps。

    • -b 1G: 目标 1 Gbps。

    • -b 0: (iperf2 常用) 表示"尽可能快"。iperf3 中 UDP 默认行为就是尽可能快。iperf3 更推荐显式指定 -b 值。

    • 重要: 不指定 -b 时,UDP 默认会尝试以线路速度发送,可能超过网络承载能力导致大量丢包。建议根据网络预期能力设置一个目标值。

  • -l <长度>[K|M]: 设置读写缓冲区的长度 (UDP 包的大小)。例如 -l 1400 (字节) 或 -l 1K (1024 字节)。调整包大小可以模拟不同应用场景 (如 VoIP 用小包,视频流用大包),并影响 CPU 负载和丢包率。

  • --get-server-output: 在客户端结束时,从服务器获取并显示额外的结果报告 (包含服务端视角的丢包统计等,对 UDP 尤其重要)。


三、常用打流命令示例

示例 1:基本 TCP 带宽测试 (30秒)
  • 服务端:

    bash 复制代码
    iperf3 -s -p 5001
  • 客户端:

    bash 复制代码
    iperf3 -c 192.168.1.100 -p 5001 -t 30 -i 5
示例 2:多线程 TCP 测试 (4个并行流,60秒) - 突破单流瓶颈
  • 服务端:

    bash 复制代码
    iperf3 -s -p 5001
  • 客户端:

    bash 复制代码
    iperf3 -c 192.168.1.100 -p 5001 -t 60 -P 4
示例 3:UDP 测试 (目标 500Mbps, 包长 1400字节,60秒)
  • 服务端:

    bash 复制代码
    iperf3 -s -p 5001
  • 客户端:

    bash 复制代码
    iperf3 -c 192.168.1.100 -p 5001 -u -b 500M -l 1400 -t 60 -i 5 --get-server-output
    --get-server-output 对于查看服务端报告的 UDP 丢包率和抖动至关重要。
示例 4:反向测试 (测试服务器到客户端的带宽)
  • 服务端 (启动监听):

    bash 复制代码
    iperf3 -s -p 5001
  • 客户端 (告诉服务器向自己发送数据):

    bash 复制代码
    iperf3 -c 192.168.1.100 -p 5001 -t 30 -i 5 -R  # 测试下行带宽
    # 或者测试多线程下行
    iperf3 -c 192.168.1.100 -p 5001 -t 30 -P 4 -R
示例 5:设置 TCP 窗口大小 (256KB)
  • 客户端:

    bash 复制代码
    iperf3 -c 192.168.1.100 -p 5001 -t 30 -w 256K

四、结果解读关键点

  1. [ ID] Interval: 测试的时间段。

  2. Transfer: 在该时间段内传输的数据总量。

  3. Bitrate: 该时间段内的平均带宽 。这是衡量网络吞吐量的核心指标。单位通常是 bits/sec (如 Gbits/sec, Mbits/sec)。

  4. Retr: (TCP) 重传次数。过多重传可能指示网络拥塞或不稳定。

  5. Cwnd: (TCP) 拥塞窗口大小 (Congestion Window)。动态变化反映 TCP 的拥塞控制行为。

  6. Jitter: (UDP) 抖动的平均值。表示数据包到达时间间隔的变化量。单位是毫秒 (ms)。值越小,网络越稳定(对实时音视频很重要)。

  7. Lost/Total Datagrams: (UDP) 丢失的数据包数量 / 总发送数据包数量。

  8. Lost %: (UDP) 数据包丢失的百分比。是衡量网络可靠性和拥塞的关键指标。理想情况下应为 0% 或非常低。

  9. Sender/Receiver: 在反向模式 (-R) 或使用 --get-server-output 时,注意区分结果是从发送端还是接收端统计的。接收端报告的带宽更准确(不受发送端本地性能瓶颈影响),发送端报告的丢包率更准确(知道发了多少包)。


五、重要注意事项

  1. 防火墙: 确保服务端监听端口在服务端机器的防火墙和沿途网络设备(如果有)上是放行的。

  2. CPU 性能: 在极高带宽(如 10G+)或小包测试时,iperf 本身可能成为瓶颈。监控客户端和服务端的 CPU 使用率。如果 CPU 接近 100%,测试结果可能不准确。使用多线程 (-P) 可以分散 CPU 负载。

  3. 物理链路限制: 测试结果不可能超过物理链路(网线、光纤、交换机端口、Wi-Fi 标准)的理论最大带宽。

  4. 网络拥塞: 测试应在相对空闲的网络进行,避免其他流量干扰结果。在共享网络(如公共 Wi-Fi、办公网)测试结果波动可能很大。

  5. TCP vs UDP:

    • TCP: 测试的是网络的可靠传输能力 。结果受 TCP 拥塞控制算法、窗口大小、往返时延 (RTT) 影响显著。追求最大带宽时务必使用多线程 (-P)。

    • UDP: 测试的是网络的原始承载能力服务质量 (QoS) 。可以模拟恒定码率应用(如视频流)。通过 -b 控制发送速率,通过结果看实际达到的速率、丢包率和抖动。

  6. 测试方向: 网络的上行(客户端->服务器)和下行(服务器->客户端)带宽可能不对称(如 ADSL、Cable Modem)。使用 -R 或单独测试来区分。

  7. 持续时间: -t 参数设置足够长的时间(至少 10-60 秒),让 TCP 流达到稳定状态,并平滑短时波动。对于稳定性测试,可能需要持续数小时甚至更久。

  8. 版本一致性: 尽量保证客户端和服务端使用相同版本的 iperf (iperf2 或 iperf3),避免兼容性问题。iperf2 和 iperf3 协议不兼容。

通过灵活组合这些参数,你可以使用 iperf 进行各种复杂的网络"打流"测试,精确评估网络的性能极限和稳定性。如果需要针对特定场景的测试命令,可以提供更多细节。

相关推荐
向宇it10 分钟前
【unity游戏开发——网络】网络游戏通信方案——强联网游戏(Socket长连接)、 弱联网游戏(HTTP短连接)
网络·http·游戏·unity·c#·编辑器·游戏引擎
怦然星动_16 分钟前
业务二层隔离-vlan技术
网络
Mr_Xuhhh18 分钟前
网络基础(1)
c语言·开发语言·网络·c++·qt·算法
WooaiJava18 分钟前
多个参数用websocket 向io 服务器发送变量,一次发一个,并接收响应
网络·websocket·网络协议
旺旺大力包22 分钟前
【JS笔记】JS 和 noodjs 的常见操作(十)
开发语言·javascript·node.js·ecmascript
醇醛酸醚酮酯1 小时前
std::promise和std::future的使用示例——单线程多链接、多线程单链接
网络·c++·算法
背影疾风1 小时前
C++之路:类基础、构造析构、拷贝构造函数
linux·开发语言·c++
Ting-yu1 小时前
Java中Stream流的使用
java·开发语言·windows
Net_Walke1 小时前
【网络协议】WebSocket简介
网络·websocket·网络协议
【ql君】qlexcel2 小时前
Notepad++ 复制宏、编辑宏的方法
开发语言·javascript·notepad++··宏编辑·宏复制