iperf3 is the latest version of the popular iperf program to measure the bandwidth between two or more computers on a local network or the Internet. This new iperf3 version is not compatible with the old iperf2, therefore, we must update both the server and the client if we want to use this new program. This tool allows you to adjust various parameters in a very advanced way, related to the TCP, UDP and SCTP protocols, of course, it is compatible with both IPv4 and IPv6 networks. Iperf3 has undergone a large number of improvements that allow to squeeze even more the real performance of the local network, therefore, it is ideal for performing performance tests of Multigigabit and even 10G equipment. Do you want to know how to download it and use it to measure performance?
In this article we have been using iperf3 for a long time, to measure the performance we obtain in the LAN-LAN, LAN-WAN and WiFi 6 tests. We have found that it behaves much better than iperf2 as soon as we exceed the speed of 1Gbps, therefore , when we use routers, switches or WiFi 6 access points, we use this program that gives us a more accurate measurement of the speed we achieve.

In this tutorial we are going to teach you how to use this very interesting program to measure the real speed between two computers, regardless of whether they are connected to the local LAN or the Internet, since by making use of the TCP and UDP protocols, we can open a port on the server for one or more clients to communicate directly, and to check the real speed.
Iperf3 main features
iperf3 is a completely renewed program, which has nothing to do with iperf2, since they are not compatible with each other. iperf3 inherits the best of iperf2, and incorporates new features to allow us to perform measurements at multigigabit speeds without problems. For each test that we carry out, it will inform us of the upload and download bandwidth, packet loss and other parameters.
Regarding the TCP and SCTP protocols, it is able to measure the bandwidth, report the size of the MTU (Maximum Transfer Unit) and the MSS (Maximum Segment Size), in addition, it also supports to configure the TCP window size through the socket buffer. Regarding UDP, the client can create different UDP data streams, allows to measure packet loss, jitter (delay jitter), and even supports multicast. The client allows to establish multiple simultaneous connections with the server, in addition, the server is capable of receiving multiple simultaneous connections from several different sources. Of course, we can run it for a certain time, or defining a certain amount of data to send.
Other important features of iperf3 are the ability to periodically show the connection status, the bandwidth so far, the jitter, the packet loss, etc. We can also make the iperf server work as a daemon in the operating system. Other new features incorporated are the possibility of ignoring TCP Slowstart from the TCP protocol itself, setting the bandwidth for UDP or TCP, setting a flow label for IPv6, configuring the congestion control algorithm, and the possibility of getting all the information in format JSON, and we can even carry out read and write tests directly on the hard disk.
This new iperf3 program is BSD licensed, that means it is open source and cross-platform, it is compatible with Windows, Linux, Android, MacOS X, FreeBSD, OpenBSD, NetBSD, VxWorks, Solaris operating systems and many others.
Iperf3 download and installation
This program continues its development, on the official Iperf3 website you have the latest versions available for the different operating systems. Once downloaded, we will have to unzip the ZIP file and we will be able to execute it, but in this case we do not have a graphical user interface or an executable script, we must execute it through the command line, either in Windows or Linux / MacOS.
Running iperf3 on Windows, Linux, and macOS
Once we have unzipped the downloaded ZIP, we enter the command prompt (cmd) or the Linux terminal, we move with the command “cd” through the different directories, and when we are in the iperf3 directory, we must execute it in server mode on a PC, and in client mode on another PC:
iperf3.exe ./iperf3
Of course, when executing it, we will get the help of iperf, since we have not put any arguments.
Operation and first speed test
The operation of iperf3 is very simple, the first thing we must be clear about is that it is a program that is executed through the command line, and we have different arguments to configure its behavior. When facing a client-server program, it is necessary to run two iperf3s, one on a PC as a server, and another iperf as a client to check the speed from the client to the server.
To boot iperf3 in server mode:
iperf3.exe -s ./iperf3 -s
To start iperf3 in client mode with certain options that we will explain later:
iperf3.exe -c IP -P 50 -fg -t 5

Once we know how to perform a basic performance test with iperf3, we are going to show you all the options available in this program.
General configuration options: for client and server
The following arguments can be entered after the execution of the program itself, as follows: “iperf3 -arguments” and the order when entering the arguments does not matter.
- -p port: we can choose the port to use, either TCP or UDP, this port must be exactly both on the server and on all clients.
- –Cport port: this option allows us to specify the port on the client side, only for iperf 3.1 or higher.
- -f format: we can choose the unit of measurement that will appear when we see the speed.
- k: Kbits
- K: Kbytes / s
- m: Mbits
- M: MBytes / s
- g: Gbps
- G: GBytes / s
- -i interval: time interval measured in seconds where iperf3 will show us all the information on bandwidth, jitter and packet loss. By default it is 0.
- -F filename: on the client is the file read and written on the local network, instead of using random information. On the server it is what is read from the network and written to a file.
- -B host: allows binding to a specific network card, ideal if we have multiple interfaces.
- -V: output with all the details (verbose)
- -J: output in JSON format
- –Logfile file: send the output to a log file (iperf 3.1 only)
- –D: debug
- -v: program version
- -h: launch the program help
Configuration options for server only
The following arguments can be entered after the execution of the program itself, as follows: “iperf3 -arguments” and the order when entering the arguments does not matter. These arguments can only be used on the iperf3 server.
- -s: start iperf in server mode.
- -D: start the program in the background as a daemon.
- -I: write a file with the process ID, ideal for use with -D (daemon).
Below, you can see some examples.
We can run the iperf3 server by default, it will automatically use the TCP protocol on port 5201.
iperf3.exe -s

We can run the iperf3 server with TCP and port 5000 in the following way:
./iperf3 -s -p 5000

Customer-only configuration options
The following arguments can be entered after the execution of the program itself, as follows: “iperf3 -arguments” and the order when entering the arguments does not matter. These arguments can only be used in the iperf3 client.
- -c IP_address: start iperf in client mode to connect to a server, we must define the IP address right after.
- –Sctp – Use this SCTP protocol instead of TCP (default).
- -u: use UDP protocol instead of TCP (default).
- -b bandwidth: allows defining a bandwidth in N bits / sec, by default it is 1MB / s in UDP and unlimited in TCP. If we use the -P argument to send multiple data streams, this bandwidth is applied to each of them.
- -t time: in seconds to transmit information at maximum speed. By default it is 10 seconds, but we can put what we want.
- -n number: number of data to transmit, instead of using time (-t) we use data.
- -k packets: number of packets to transmit, instead of using time (-t) or data (-n).
- -l (lowercase L): length of buffer read or written.
- -P number: number of simultaneous data flows, it is recommended to put 5 or higher to squeeze the network to the maximum.
- -R: iperf traffic normally goes from the client to the server, if we put this argument, the traffic will go from the server to the client.
- -w size: specify the TCP window size
- -M mss: allows configuring the TCP MSS
- -N: configures the TCP no-delay option.
- -4: we use IPv4 networks.
- -6: we use IPv6 networks.
- -S: type of service for outgoing packages.
- -L label: allows you to configure the flow label for IPv6 networks.
- -Z: uses the zero-copy method, greatly reduces CPU usage by the program.
- -O seconds: skip the first X seconds of the test, to avoid problems with TCP slowstart and to provide us with a measurement without the burst at the beginning.
- -T title: allows you to put a title in front of each string
- -C algorithm: allows you to configure the congestion algorithm, only in Linux with iperf 3.0 and in FreeBSD with iperf 3.1
Below, you can see some examples.
We can run the iperf3 client with some very interesting arguments:
iperf3.exe -c 192.168.1.10 -P 50 -p 5000 -fg -t 5
- -c 192.168.1.10: works in client mode with the defined IP.
- -P 50: we send a total of 50 TCP connections
- -p 5000: we use port 5000, the default is 5201
- -fg: we show the speed in Gbps
- -t 5: we launch the test for 5 seconds.
As you have seen, this iperf3 program is very simple because it allows us to run an iperf with a graphical user interface, without the need to enter complicated commands and arguments.