iperf3: measure network throughput between two hosts
iperf3 sends test traffic from one machine to another and tells you how many bits per second actually got through. You run it as a server on one host and as a client on the other, and within ten seconds you have a number you can trust far more than a web speed test.
What iperf3 measures
iperf3 measures the maximum throughput you can achieve between two hosts over TCP, UDP or SCTP. Because you control both ends, you take the website, the disk and the application out of the picture and test only the network path and the two network stacks. That makes it the standard first tool when a link "feels slow".
Installing iperf3
- Debian and Ubuntu:
sudo apt install iperf3. Distribution packages are often a few versions behind; Debian 13 ships 3.18, while the current release is 3.22 (September 2026). - Fedora:
sudo dnf install iperf3. For recent builds on Debian and RHEL-based systems, ESnet points to the perfSONAR package repositories. - macOS: with Homebrew,
brew install iperf3. - Windows: iperf3 is not officially supported on Windows. Community builds exist, and the iperf3 FAQ suggests iperf 2 on Windows instead. See iperf 2 vs iperf3.
Ubuntu Linux, FreeBSD and macOS are the officially supported platforms. Source code is on GitHub and builds with the usual ./configure; make; make install.
The basic test
On the machine that will receive, start a server. It listens on TCP port 5201 by default:
iperf3 -s
On the other machine, run the client and point it at the server:
iperf3 -c 192.0.2.10
By default the client sends to the server for 10 seconds and prints one line per second. If a firewall sits in between, allow TCP 5201 to the server (and UDP 5201 for UDP tests), or pick another port with -p on both sides.
The four options you will use most
-R(reverse)- The server sends and the client receives. By default the test measures the client's upload;
-Rmeasures its download. Always test both directions, because many problems affect only one. -P 4(parallel streams)- Runs four TCP streams at once. If four streams together reach line rate but one stream does not, the limit is usually TCP window size or packet loss rather than raw capacity. Since version 3.16 each stream runs in its own thread.
-t 30(time)- Runs for 30 seconds instead of 10. Longer tests smooth out noise and show whether throughput sags over time.
-u -b 100M(UDP)- Sends UDP at 100 Mbit/s and reports jitter and packet loss. Without
-b, UDP tests run at only 1 Mbit/s. See UDP testing.
Reading the output
Each interval line shows the time slice, the data moved, the bitrate and, for TCP, the number of retransmissions (Retr) and the sender's congestion window (Cwnd). At the end you get two summary lines: one tagged sender and one tagged receiver. Quote the receiver figure; it is what actually arrived. Steady retransmissions and a small, jumpy Cwnd point to loss on the path. Reading results explains how to turn these numbers into a diagnosis.
Common mistakes
- Testing over Wi-Fi and blaming the WAN. Test from a wired host first.
- Testing in one direction only. Run the same test again with
-R. - Forgetting
-bon UDP tests and concluding the link does only 1 Mbit/s. - Running long UDP floods across a shared or production network. UDP has no congestion control and will crowd out other users.
- Expecting one server to handle several clients at once. An iperf3 server runs one test at a time and replies "the server is busy running a test" to others.
- Mixing tools: iperf3 cannot talk to an iperf 2 server, and vice versa.
A short history
The original iperf was developed at NLANR/DAST, the Distributed Applications Support Team of the National Laboratory for Applied Network Research. iperf3 is a from-scratch redesign by ESnet and Lawrence Berkeley National Laboratory, released under a three-clause BSD license, with a smaller code base, a library version and JSON output. iperf 2 lives on as a separate project: after it was orphaned at version 2.0.5, Bob McMahon restarted its development in 2014, and both tools are still actively developed. This website is an independent guide; it is not NLANR, ESnet or either iperf project. More background is on NLANR history.
Guides in this section
- iperf3 optionsThe iperf3 options you actually need, checked against the current manual: ports, duration, parallel and reverse tests, UDP rate, buffers, JSON, logging and binding.
- UDP testingHow to run UDP tests with iperf3: choosing a bitrate with -b, packet size, reading jitter and Lost/Total, out-of-order packets, and why UDP loss is often the host.
- Reading resultsWhat Retr, Cwnd, sender and receiver lines mean in iperf3 output, and how to tell window limits, packet loss, CPU limits, Wi-Fi and duplex problems apart.
- iperf 2 vs iperf3iperf 2 and iperf3 are separate, incompatible tools. Compare ports, threading, Windows support, multicast, latency features and output, and pick the right one.
- Multicast testingMulticast basics (groups, IGMP, ASM and SSM), how to test a multicast path with iperf 2 and ssmping, and what the old NLANR Multicast Beacon measured.
- Slow path diagnosisA practical order of tests for a slow network path: ping, mtr, iperf3 in both directions, the bandwidth-delay check, MTU, duplex, locating loss and perfSONAR.