Skip to content
>_devvkit
$devvkit learn --librarie iperf3-guide

iperf3 Guide

[networking][bandwidth][throughput][benchmark]
Network Diagnostics
Install
sudo apt install iperf3
brew install iperf3
# Windows: download from iperf.fr
# Cross-platform: works between any OS combos

iperf3 measures real-world network throughput between a client and server. You run `iperf3 -s` on one host (server mode) and `iperf3 -c <server>` on another. It reports bandwidth, retransmissions, and CPU utilization for each test stream.

Key flags: `-P` for parallel streams (saturate multi-core), `-R` for reverse test (download instead of upload), `-t` for duration, `-u` for UDP test (shows jitter and packet loss), `-b` to set target bandwidth for UDP. Use `--bidir` for simultaneous upstream/downstream.

For baseline tests: run on the same VLAN to measure max throughput, then test across VPN or internet to see overhead. Combine with `-J` (JSON output) for automated benchmarking pipelines. GUI: JPerf (Java GUI wrapper), or iPerf3 for macOS.

Server Mode

Start serverListen mode.
iperf3 -s                           # Default port 5201
iperf3 -s -p 8888                    # Custom port
iperf3 -s -D                         # Daemon mode (background)
# iperf3 -s -1                       # Single client, then exit

Client Tests

Basic throughputDefault TCP test.
iperf3 -c 192.168.1.10                          # Default 10s test
iperf3 -c 192.168.1.10 -t 30                     # 30-second test
iperf3 -c 192.168.1.10 -t 10 -i 1                # Report every 1 second
iperf3 -c 192.168.1.10 -P 4                      # 4 parallel streams
iperf3 -c 192.168.1.10 -R                        # Reverse (download test)
BidirectionalUp + down simultaneously.
iperf3 -c 192.168.1.10 --bidir
# Shows both directions interleaved
# Great for testing VPN or proxy overhead
Wi-Fi testMeasure wireless quality.
iperf3 -c 192.168.1.10 -t 60 -i 5 -P 2 -R
# 60s test, 5s intervals, 2 streams, reverse direction
# Watch for: bandwidth fluctuations, retransmits = interference

UDP Tests

UDP bandwidthJitter and packet loss.
iperf3 -c 192.168.1.10 -u -b 100m              # UDP at 100 Mbps
iperf3 -c 192.168.1.10 -u -b 500m -l 1400        # 1400-byte packets
iperf3 -c 192.168.1.10 -u -b 0                   # Saturated UDP (flood)
# Output: bandwidth, jitter (ms), lost/total packets, loss %

Advanced

JSON outputMachine-readable results.
iperf3 -c 192.168.1.10 -J > results.json
# Parse with jq:
jq '.end.sum_received.bits_per_second' results.json
jq '.end.sum_sent.retransmits' results.json

# Compare multiple runs:
for i in 1 2 3; do
  iperf3 -c 10.0.0.1 -J -t 5 | jq '.end.sum_received.bits_per_second'
done
Bandwidth over timeCheck stability.
iperf3 -c 192.168.1.10 -t 60 -i 1 -J | \
  jq -r '.intervals[].sum.bits_per_second' | \
  awk '{print NR, $1/1000000 " Mbps"}'  # Plot later

# Also: check CPU usage on server:
# iperf3 server-side output shows CPU utilization per test

Troubleshooting

Throughput to specific portTest firewall rules.
# The -p on client matches server's -p:
iperf3 -s -p 5201                        # Server
iperf3 -c 192.168.1.10 -p 5201          # Client

# Test through NAT/firewall:
iperf3 -c external-server.com -p 5201 -P 1 -t 5
# If 0 bits/sec → firewall blocking port 5201
Trick: find MTUDetermine optimal MTU.
# Use --dont-fragment and vary --len to find MTU:
iperf3 -c 192.168.1.10 -M 1472 -l 1472 --dont-fragment   # Should work
iperf3 -c 192.168.1.10 -M 1473 -l 1473 --dont-fragment   # Should fail

# Also check with ping:
ping -M do -s 1472 192.168.1.10  # Max standard Ethernet MTU = 1500