iperf3 3.18
Measures achievable network throughput between two hosts by generating traffic, reporting bandwidth, retransmits, and jitter for TCP and UDP.
Download TAR.GZ Project website ↗Download Mirrors
iperf3 answers “how fast is the network between these two machines,” which is different from what a speed test website tells you and usually more relevant.
Running it
One side is a server, the other a client. Both need iperf3.
# On the server
iperf3 -s
# On the client
iperf3 -c server.local
iperf3 -c server.local -R # reverse, tests download
iperf3 -c server.local -t 30 # 30 seconds
iperf3 -c server.local -P 4 # 4 parallel streams
Reading the output
[ ID] Interval Transfer Bitrate Retr
[ 5] 0.00-10.00 sec 1.09 GBytes 938 Mbits/sec 0
938 Mbits/sec on a gigabit link is about right; protocol overhead accounts for the rest.
Retr is retransmits, and it is the column people ignore. Non-zero means packets are being lost and resent, which points at a cable, a duplex mismatch, or a saturated buffer. High throughput with high retransmits is a link that is working hard to look fine.
Check the interface counters alongside it with ethtool.
Parallel streams
iperf3 -c server.local -P 8
A single TCP stream is limited by the bandwidth-delay product, so on a high-latency link one stream cannot fill the pipe regardless of capacity. Parallel streams show what the link can actually carry.
If one stream is much slower than eight, latency is your constraint rather than bandwidth.
UDP, for jitter and loss
iperf3 -c server.local -u -b 100M
TCP hides loss by retransmitting. UDP does not, so this is how you measure jitter and packet loss, which is what matters for voice and video rather than raw throughput.
What it does not tell you
It measures the path between two machines you control. It says nothing about your internet connection unless the other end is on the internet, and a public iperf3 server is measuring a path you do not control end to end.
For diagnosing a slow LAN, this is the right tool. For diagnosing a slow internet connection, look at bufferbloat as well as throughput, because latency under load is usually the real complaint.
Firewall
The server listens on TCP 5201 by default. Open it or the client just times out:
sudo ufw allow 5201/tcp
Verify Your Download
Source releases on GitHub are published with checksums.