How to Measure Wireless Throughput Using iPerf
By Karla Cisneros Galvan
Overview
This guide explains how to measure upstream and downstream throughput on a wireless network using iPerf.
Step-by-step instructions
Step 1. Set up the iPerf server (wired client)
- Install iPerf on a client connected by cable to the network. This client acts as the iPerf server.
Step 2. Set up the iPerf client (wireless client)
- Install iPerf on a client connected wirelessly to the network. This client acts as the iPerf client.
Step 3. Build a topology:
- Build a topology as shown in the diagram below

- Ensure both iperf server and client belong to the same VLAN/subnet.
- Ensure either the server or the client is connected by wired, otherwise they'll be sharing the RF spectrum and most likely will halve their speed.
Step 4. Start iperf on the server
Run the following command on the wired client acting as the server:
$ iperf -s
-s = host acting as server
Note: If using iperf v3, use the command iperf3 -s.
Step 5. Measure upstream throughput
- Start the iperf data transfer on the client to measure the throughput.
- Upstream throughput is the traffic flowing from the wireless client to the access point.
- Run the following command on the wireless client:
$ iperf -c <server-IP> -u -i 1 -t 10 -b 900M
- The flags used in this command are defined below:
-u = UDP
-i 1 = measurement is displayed every one sec
-t 10 = Test performed for 10 seconds
-b 900M = client will attempt to send/receive 900M per measurement. Modify as desired.
- To learn more about the flags and their usage, see iPerf user documentation.
Output examples
Upstream measurements
|
Server |
Client |
|
----------------------------------------------------------- Server listening on 5201 ----------------------------------------------------------- Accepted connection from 192.168.40.9, port 59825 [ 6] local 172.16.10.208 port 5201 connected to 192.168.40.9 port 55823 [ ID] Interval Transfer Bitrate Jitter Lost/Total Datagrams [ 6] 0.00-1.00 sec 7.53 MBytes 63.2 Mbits/sec 0.138 ms 14687/20139 (73%) [ 6] 1.00-2.00 sec 7.87 MBytes 66.0 Mbits/sec 0.123 ms 11372/17073 (67%) [ 6] 2.00-3.00 sec 7.99 MBytes 67.0 Mbits/sec 0.136 ms 14009/19795 (71%) [ 6] 3.00-4.00 sec 8.30 MBytes 69.6 Mbits/sec 0.121 ms 11912/17919 (66%) [ 6] 4.00-5.00 sec 8.19 MBytes 68.7 Mbits/sec 0.190 ms 25572/31501 (81%) [ 6] 5.00-6.00 sec 7.95 MBytes 66.7 Mbits/sec 0.114 ms 14714/20469 (72%) [ 6] 6.00-7.00 sec 8.24 MBytes 69.1 Mbits/sec 0.126 ms 11797/17762 (66%) [ 6] 7.00-8.00 sec 8.20 MBytes 68.8 Mbits/sec 0.139 ms 13415/19353 (69%) [ 6] 8.00-9.00 sec 7.77 MBytes 65.2 Mbits/sec 0.243 ms 21567/27196 (79%) [ 6] 9.00-10.00 sec 8.41 MBytes 70.5 Mbits/sec 0.115 ms 16571/22660 (73%) [ 6] 10.00-10.13 sec 1.12 MBytes 70.6 Mbits/sec 0.138 ms 0/811 (0%) - - - - - - - - - - - - - - - - - - - - - - - - - [ ID] Interval Transfer Bitrate Jitter Lost/Total Datagrams [ 6] 0.00-10.13 sec 81.6 MBytes 67.5 Mbits/sec 0.138 ms 155616/214678 (72%) receiver |
Connecting to host 172.16.10.208, port 5201 [ 12] local 192.168.40.9 port 55823 connected to 172.16.10.208 port 5201 [ ID] Interval Transfer Bitrate Total Datagrams [ 12] 0.00-1.00 sec 13.1 MBytes 110 Mbits/sec 29988 [ 12] 1.00-2.00 sec 6.98 MBytes 58.5 Mbits/sec 24316 [ 12] 2.00-3.00 sec 6.53 MBytes 54.8 Mbits/sec 16638 [ 12] 3.00-4.00 sec 6.55 MBytes 54.9 Mbits/sec 17566 [ 12] 4.00-5.00 sec 12.3 MBytes 103 Mbits/sec 24058 [ 12] 5.00-6.00 sec 7.46 MBytes 62.5 Mbits/sec 29484 [ 12] 6.00-7.00 sec 6.60 MBytes 55.3 Mbits/sec 18189 [ 12] 7.00-8.00 sec 6.55 MBytes 54.9 Mbits/sec 17004 [ 12] 8.00-9.00 sec 6.81 MBytes 57.1 Mbits/sec 17517 [ 12] 9.00-10.00 sec 13.2 MBytes 110 Mbits/sec 34007 - - - - - - - - - - - - - - - - - - [ ID] Interval Transfer Bitrate Jitter Lost/Total Datagrams [ 12] 0.00-10.00 sec 86.0 MBytes 72.1 Mbits/sec 0.000 ms 0/228767 (0%) sender [ 12] 0.00-10.13 sec 81.6 MBytes 67.5 Mbits/sec 0.138 ms 155616/214678 (72%) receiver |
The client output may display a bitrate close to the value used in the -b option. This represents the total traffic the client attempted to send to the server during each test interval. Check the server output to confirm the actual traffic received.
Measure downstream throughput
Downstream throughput is the traffic flowing from the access point to the wireless client.
- Run the following command on the wireless client:
$ iperf -c <server-IP> -u -i 1 -t 10 -b 900M -R
- Use the -R flag to reverse the traffic direction so that the server sends traffic to the client. By default, iPerf sends traffic from the client to the server
Additional usage notes:
- If using iPerf v3, use the command iperf3 -c …
- If the server runs on the wireless client and the wired device acts as the iPerf client, use the -R flag to measure upstream throughput correctly.
- If you are testing with a mobile device such as a smartphone or tablet, you can use an iPerf mobile app. The same command syntax applies.
Downstream output example server:
| Server | Client |
|
----------------------------------------------------------- Server listening on 5201 ----------------------------------------------------------- Accepted connection from 192.168.40.9, port 59827 [ 6] local 172.16.10.208 port 5201 connected to 192.168.40.9 port 54576 [ ID] Interval Transfer Bitrate Total Datagrams [ 6] 0.00-1.00 sec 60.8 MBytes 510 Mbits/sec 44013 [ 6] 1.00-2.00 sec 76.6 MBytes 643 Mbits/sec 55469 [ 6] 2.00-3.00 sec 76.6 MBytes 643 Mbits/sec 55466 [ 6] 3.00-4.00 sec 76.5 MBytes 642 Mbits/sec 55418 [ 6] 4.00-5.00 sec 76.7 MBytes 643 Mbits/sec 55526 [ 6] 5.00-6.00 sec 76.8 MBytes 644 Mbits/sec 55608 [ 6] 6.00-7.00 sec 76.5 MBytes 641 Mbits/sec 55364 [ 6] 7.00-8.00 sec 76.6 MBytes 643 Mbits/sec 55483 [ 6] 8.00-9.00 sec 76.4 MBytes 641 Mbits/sec 55304 [ 6] 9.00-10.00 sec 76.1 MBytes 638 Mbits/sec 55088 [ 6] 10.00-10.03 sec 1.91 MBytes 640 Mbits/sec 1386 - - - - - - - - - - - - - - - - - - - - - - - - - [ ID] Interval Transfer Bitrate Jitter Lost/Total Datagrams [ 6] 0.00-10.03 sec 751 MBytes 629 Mbits/sec 0.000 ms 0/544125 (0%) sender |
Connecting to host 172.16.10.208, port 5201 Reverse mode, remote host 172.16.10.208 is sending [ 13] local 192.168.40.9 port 54576 connected to 172.16.10.208 port 5201 [ ID] Interval Transfer Bitrate Jitter Lost/Total Datagrams [ 13] 0.00-1.00 sec 9.34 MBytes 78.4 Mbits/sec 0.290 ms 28490/35256 (81%) [ 13] 1.00-2.00 sec 9.45 MBytes 79.3 Mbits/sec 0.271 ms 48924/55770 (88%) [ 13] 2.00-3.00 sec 8.88 MBytes 74.5 Mbits/sec 0.425 ms 48069/54502 (88%) [ 13] 3.00-4.00 sec 8.87 MBytes 74.4 Mbits/sec 0.229 ms 49659/56085 (89%) [ 13] 4.00-5.00 sec 8.04 MBytes 67.3 Mbits/sec 0.249 ms 46848/52670 (89%) [ 13] 5.00-6.00 sec 8.83 MBytes 74.2 Mbits/sec 0.274 ms 52210/58605 (89%) [ 13] 6.00-7.00 sec 9.03 MBytes 75.7 Mbits/sec 0.194 ms 48272/54810 (88%) [ 13] 7.00-8.00 sec 9.26 MBytes 77.7 Mbits/sec 0.299 ms 49219/55925 (88%) [ 13] 8.00-9.00 sec 9.20 MBytes 77.2 Mbits/sec 0.274 ms 48075/54739 (88%) [ 13] 9.00-10.00 sec 8.27 MBytes 69.3 Mbits/sec 0.304 ms 44997/50983 (88%) - - - - - - - - - - - - - - - - - - [ ID] Interval Transfer Bitrate Jitter Lost/Total Datagrams [ 13] 0.00-10.03 sec 751 MBytes 629 Mbits/sec 0.000 ms 0/544125 (0%) sender [SUM] 0.0-10.0 sec 2 datagrams received out-of-order [ 13] 0.00-10.00 sec 89.2 MBytes 74.8 Mbits/sec 0.304 ms 464763/529345 (88%) receiver |
In the downstream example, the server bitrate is approximately 640 Mbits/sec, which represents the total traffic the server attempted to send to the client during each test interval. The client output shows the actual traffic the client received.

