Testing UDP with iperf3: jitter, packet loss and bandwidth

Updated November 2026

A UDP test with iperf3 sends packets at a rate you choose and counts how many arrive, how late and how unevenly. It answers a different question from a TCP test: not "how fast can I go?" but "can this path carry a given rate cleanly?"

Why test with UDP

TCP slows down when it sees loss, so a TCP test hides loss inside a lower throughput figure. UDP has no congestion control: iperf3 keeps sending at the rate you set, and the receiver reports exactly what went missing. That makes UDP the right tool for questions such as:

Running a UDP test

Start the server as usual. You do not need -u on the server; the client tells it what kind of test to run.

iperf3 -s

On the client, add -u and, most importantly, a target rate with -b:

iperf3 -c 192.0.2.10 -u -b 100M -l 1400 -t 10

Without -b, a UDP test runs at only 1 Mbit/s, which is the commonest reason for "my gigabit link does 1 Mbit/s with UDP". Use -R to send from the server to the client instead. The test data uses UDP on port 5201, but iperf3 also opens a TCP control connection to the same port, so a firewall must allow both.

Reading the results

The client (sender) prints how many datagrams it sent each second. The useful numbers are in the summary, where the receiver reports what arrived. Here is a trimmed example for the command above:

[ ID] Interval           Transfer     Bitrate         Jitter    Lost/Total Datagrams
[  5]   0.00-10.00  sec   119 MBytes   100 Mbits/sec  0.000 ms  0/89286 (0%)  sender
[  5]   0.00-10.04  sec   118 MBytes  98.4 Mbits/sec  0.045 ms  1072/89286 (1.2%)  receiver
Transfer and Bitrate
At 100 Mbit/s for 10 seconds the client sends 1,000 megabits, or 125,000,000 bytes. With 1,400-byte datagrams that is 125,000,000 ÷ 1,400 ≈ 89,286 datagrams. iperf3 shows bytes in binary units, so 125,000,000 bytes appears as 119 MBytes.
Lost/Total Datagrams
1,072 of 89,286 datagrams never arrived: 1,072 ÷ 89,286 ≈ 1.2%. iperf3 counts loss from gaps in the sequence numbers it puts in every packet.
Jitter
The smoothed average variation in packet transit time, in milliseconds. iperf3 uses the method from RTP (RFC 1889, now RFC 3550): each new difference moves the estimate one-sixteenth of the way, so a single late packet does not dominate.

If packets arrive in a different order than they were sent, iperf3 also prints a line such as "datagrams received out-of-order". A little reordering is normal on paths with several parallel links; a lot of it hurts TCP performance.

Choosing rate and packet size

Network loss or host loss?

At high rates, UDP loss often happens inside the receiving computer: its socket buffer fills before the application reads the packets. Before you blame the network:

Be careful on shared networks. UDP does not back off. A 1 Gbit/s UDP test across an office uplink or a home broadband line will crowd out everyone else for as long as it runs. Keep tests short, start low, and get permission before testing across networks you do not run.

When UDP results mislead

Some networks treat UDP differently from TCP: rate limits on UDP, policers on VPN concentrators, or Wi-Fi access points that handle bursts badly. A clean UDP result at 50 Mbit/s says the path can carry that rate of UDP; it does not prove TCP will reach the same figure, and the reverse is also true. For TCP behaviour, see Reading results.

Sources