Agree a test window and acceptable load before testing a shared link. Use one variable at a time and preserve both endpoint versions. The server address below is a placeholder. Do not expose a permanent test listener to untrusted networks.
Establish a repeatable baseline #
On the destination:
Establish a repeatable baseline
Network tools · Local shell; platform and privileges as described below
iperf3 -s -1Press Ctrl+C to stop early. The one-off server exits after one session; client duration is bounded.
On the source:
Establish a repeatable baseline
Network tools · Local shell; platform and privileges as described below
Replace these example values: 192.0.2.20.
iperf3 -c 192.0.2.20 -t 20 -O 3Press Ctrl+C to stop early. The one-off server exits after one session; client duration is bounded.
The one-off server exits after the client session; start it again for each following test. The omit interval excludes the initial three seconds from the reported measurements. Keep duration, path and endpoint placement consistent when comparing results.
Change one property #
Change one property
Network tools · Local shell; platform and privileges as described below
Replace these example values: 192.0.2.20.
iperf3 -c 192.0.2.20 -t 20 -O 3 -RPress Ctrl+C to stop early. The one-off server exits after one session; client duration is bounded.
Replace these example values: 192.0.2.20.
iperf3 -c 192.0.2.20 -t 20 -O 3 -P 4Press Ctrl+C to stop early. The one-off server exits after one session; client duration is bounded.
Replace these example values: 192.0.2.20.
iperf3 -c 192.0.2.20 -u -b 20M -t 20Press Ctrl+C to stop early. The one-off server exits after one session; client duration is bounded.
Replace these example values: 192.0.2.20.
iperf3 -c 192.0.2.20 -t 20 -O 3 -JPress Ctrl+C to stop early. The one-off server exits after one session; client duration is bounded.
Reverse mode sends test data from server to client. Parallel streams test aggregate behavior across several TCP connections. The UDP example requests 20 Mbit/s rather than attempting unlimited load. JSON output makes runs easier to compare and archive. Permit the control connection and the chosen test transport through the relevant firewall.
Interpret the evidence #
| Observation | Investigation direction |
|---|---|
| Reverse direction is much slower | Compare sender and receiver resources and the opposite path |
| Four streams greatly exceed one | Investigate per-flow limits, latency/loss and endpoint behavior |
| UDP loss rises as offered load rises | Check the actual bottleneck, policing and receiver capacity |
| Results vary during busy periods | Repeat with background utilization recorded |
Neither UDP loss nor TCP retransmissions alone identifies where packets were lost. Compare interface counters and endpoint load during the same interval. CPU, virtual-machine scheduling, socket behavior and host networking can limit a test before the link does. iperf3 versions differ in threading behavior, so avoid old universal claims that every version is single-threaded.
Report the protocol, direction, stream count, duration, versions and sender/receiver summaries. Keep the single-stream result even when parallel tests look better. It is often the more relevant result for a single transfer, while the aggregate result answers a separate capacity question.
Sources
Documentation reviewed: 8 October 2026