iperf3: measure network throughput between two hosts

Updated November 2026

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

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; -R measures 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

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

Sources