iperf3

network throughput testing tool that measures maximum TCP and UDP bandwidth

TLDR

Start a server
$ iperf3 -s
Connect to a server and run a test
$ iperf3 -c [server_ip]
Run for a specific duration
$ iperf3 -c [server_ip] -t [30]
Test upload speed (reverse mode)
$ iperf3 -c [server_ip] -R
Test UDP instead of TCP
$ iperf3 -c [server_ip] -u
Use multiple parallel streams
$ iperf3 -c [server_ip] -P [4]
Set target bandwidth (for UDP)
$ iperf3 -c [server_ip] -u -b [100M]
Output results in JSON
$ iperf3 -c [server_ip] -J

SYNOPSIS

iperf3 [-s|-c host] [-p port] [-t time] [-P parallel] [-u] [-b bandwidth] [-R] [options]

DESCRIPTION

iperf3 is a network throughput testing tool that measures maximum TCP and UDP bandwidth performance. It creates data streams between a server and client to measure achievable network speed, useful for troubleshooting, benchmarking, and capacity planning.A typical test requires running iperf3 in server mode on one machine and client mode on another. The client initiates the test, and both sides report the measured throughput. By default, tests run for 10 seconds with TCP.TCP mode measures bulk transfer speed, limited by congestion control, RTT, and link capacity. UDP mode with -b sets a target send rate, useful for testing whether a network can sustain specific bandwidth without packet loss.Parallel streams (-P) can reveal aggregation limits and help saturate high-bandwidth links where a single stream can't achieve full capacity. The reverse mode (-R) tests upload by having the server send to the client.JSON output enables automated testing and integration with monitoring systems. Server can run as a daemon for ongoing availability.

PARAMETERS

-s, --server

Run in server mode.
-c, --client host
Run as client, connect to server.
-p, --port port
Server port (default: 5201).
-t, --time n
Test duration in seconds (default: 10).
-P, --parallel n
Number of parallel streams.
-u, --udp
Use UDP instead of TCP.
-b, --bandwidth n[KMG]
Target bandwidth (UDP default: 1 Mbit/s).
-R, --reverse
Run in reverse mode (server sends, client receives).
--bidir
Bidirectional test simultaneously.
-i, --interval n
Seconds between periodic reports.
-n, --bytes n[KMG]
Number of bytes to transmit.
-J, --json
Output in JSON format.
-l, --length n[KMG]
Buffer/packet size.
-w, --window n[KMG]
Socket buffer size.
-B, --bind addr
Bind to specific address.
-4, -6
Use IPv4/IPv6 only.
-D, --daemon
Run server as daemon.
--logfile file
Write output to file.

INSTALL

sudo apt install iperf3
sudo dnf install iperf3
sudo pacman -S iperf3
sudo apk add iperf3
brew install iperf3
nix profile install nixpkgs#iperf3

CAVEATS

Not compatible with iperf2 protocol. Server port (5201) must be accessible through firewalls. Tests consume significant bandwidth - don't run on production networks unexpectedly. Single server handles one client at a time. Results affected by CPU, memory, and network interface capabilities.

HISTORY

iperf3 was developed by ESnet (Energy Sciences Network) at Lawrence Berkeley National Laboratory, released around 2014 as a rewrite of the original iperf. The rewrite improved the codebase, added features like JSON output and bidirectional testing, and fixed protocol limitations. It has become the standard network throughput testing tool.

SEE ALSO

iperf(1), netperf(1), nuttcp(8), speedtest-cli(1)