A new 10 Gbit/s uplink went in between two switches, a file copy between servers crawls along at 900 Mbit/s, and everyone has a theory: the NIC, the SMB stack, the storage, the cable. Before anyone orders parts, you want one number that leaves disks and file protocols out of it — how many bits per second the network itself moves between these two hosts. iPerf3 gives you that number in ten seconds.
What iPerf3 does
iPerf3 is a client/server bandwidth tester maintained by ESnet (the U.S. Department of Energy’s Energy Sciences Network). You start a server on one host with iperf3 -s, which listens on TCP port 5201 by default, then run a client on the other host pointed at it. The client generates traffic from memory, the server discards it, and both sides report throughput per interval and in total. For TCP it shows retransmits and congestion window; for UDP it reports jitter and lost datagrams.
Useful switches, all documented in ESnet’s reference:
iperf3 -s # server, port 5201
iperf3 -c 10.0.20.15 -t 30 # 30-second TCP test client -> server
iperf3 -c 10.0.20.15 -R # reverse: server sends to client
iperf3 -c 10.0.20.15 --bidir # both directions at once
iperf3 -c 10.0.20.15 -P 4 # four parallel streams
iperf3 -c 10.0.20.15 -u -b 50M # UDP at 50 Mbit/s, report loss/jitter
iperf3 -c 10.0.20.15 -J > run.json # JSON output for scripts
--sctp runs SCTP on Linux and FreeBSD; -1 makes a server accept a single test and exit, which is handy for ad-hoc tests on a machine you don’t want listening permanently. Note that the control channel is always TCP, even for UDP tests, so the port has to be open in the TCP sense on the server side.
The current version at the time of writing is 3.21, released in April 2026. iPerf3 is a separate, redesigned codebase from the older iperf2 and is not wire-compatible with it — a common source of confusion when one side runs iperf and the other iperf3.
Where it’s strong: a clean, repeatable number
Because traffic comes from and goes to memory, iPerf3 isolates the network path from disks, SMB, antivirus scanning and application behaviour. If iPerf3 shows 9.4 Gbit/s and the file copy shows 900 Mbit/s, the network is exonerated and you look at storage and protocol tuning. If iPerf3 also stalls near 1 Gbit/s, you check negotiated link speeds, LACP hashing, or a 1G hop hidden in the path.
- Directional testing.
-Rand--bidirexpose asymmetric problems like a duplex mismatch or a policer applied only in one direction. - UDP loss measurement at a chosen rate. Sending UDP at, say, 80% of a WAN circuit’s committed rate and watching loss is a direct test of whether the provider delivers what the contract says.
- Scriptable. JSON output feeds straight into a dashboard or a CSV for a report.
- Tiny and dependency-light. A single binary, easy to place on a jump host or a test VM at each site.
Our guide to measuring LAN and WAN throughput with iPerf3 covers test design: durations, parallel streams, and how to avoid measuring the endpoint’s CPU instead of the link.
Where it falls short, and who should skip it
You need control of both ends. iPerf3 cannot measure a path to a SaaS provider or across the internet to a host you don’t run; public iPerf3 servers exist but results depend on their load and location.
It measures capacity, not path health over time. It won’t tell you which hop loses packets (use mtr or PingPlotter), and it won’t record latency trends (use SmokePing). A saturating test also disrupts production traffic on the link you test — schedule it, and never run it across a metered or shared circuit without agreement.
Windows is not on ESnet’s supported platform list, which names Ubuntu Linux, FreeBSD and macOS. Windows builds exist from third parties, and they generally work, but you are trusting whoever compiled them. Single-stream results on high-speed links can also be CPU-bound on the endpoints, so a low number is not automatically a network fault.
Who it suits
- Admins validating new cabling, switch uplinks, LAGs, Wi-Fi access points or WAN circuits at handover.
- Anyone who has to answer “is it the network or the server?” with a number.
- Network engineers testing QoS policies with controlled UDP streams.
Licensing and cost
iPerf3 is free and open source under a three-clause BSD licence. There is no commercial edition and no support contract from ESnet; issues go to the project’s GitHub tracker.
How it compares
iPerf3 answers a different question from the latency tools on this site, and pairs well with them: trace first with PingPlotter or mtr to find where trouble is, then confirm capacity with iPerf3. When throughput is fine but an application is still slow, capture the conversation with Wireshark. The throughput and packet inspection category lists the neighbouring tools.
Getting it safely
On Linux and FreeBSD, install from the distribution’s signed repositories (apt install iperf3, dnf install iperf3, pkg install iperf3); on macOS, Homebrew provides it. ESnet publishes source tarballs on its site and GitHub alongside SHA-256 checksums; compare the hash before building. For Windows, prefer builds whose origin you can trace and verify, and scan them before use. The general checklist is on where to get it, and our evaluation approach is on the methodology page.
FAQ
Why do I get different results for -R and a normal test?
The two directions use different paths through NIC offloads, switch queues and sometimes different routes. A large gap between them is itself a finding — look for duplex, policing or buffer issues on one side.
Should I use -P for parallel streams?
On links of 10 Gbit/s and above, a single TCP stream may be limited by CPU or window size. Trying -P 4 or -P 8 shows whether the ceiling is the path or the single flow.
Can iperf and iperf3 talk to each other?
No. iPerf3 is not backward compatible with the original iperf. Both ends must run iPerf3.
Is it safe to leave an iPerf3 server running?
Better not. It accepts tests from anyone who can reach port 5201, which can saturate the link. Use -1 for one-off tests, or restrict the port with a host firewall to your own management addresses.