Press "Enter" to skip to content

Best Free Network Performance Test tool – Iperf

Iperf “is a commonly used network testing tool that can create TCP and UDP data streams and measure the throughput of a network that is carrying them. Iperf is a modern tool for network performance measurement written in C++.”

This tool has to configure a server side and a client side to complete a test. It can test from either client side or server side, also can test from both direction. Both TCP and UDP testing is supported. Lots of options give this tool very powerful and accurate network speed testing function.

1. Download and Install iperf3 

The main download site is from

Ubuntu:apt install iperf3
Centos:yum install iperf3


In Linux, issue command iperf3 to run. In Windows, unzip the file and place it in a folder , run it from cmd window using administrator privilege. 

2. Start it as server

Running command ‘iperf -s’ from command line as iperf server (ip address

C:\Tools>iperf -s

Server listening on TCP port 5001
TCP window size: 8.00 KByte (default)
[188] local port 5001 connected with port 48410
[ ID] Interval       Transfer     Bandwidth
[188]  0.0-10.0 sec   121 MBytes   101 Mbits/sec

Server Mode:iperf3 -s -p <port number>

3. Run iperf as test client
Client Mode:iperf3 -c <Server IP> -p <Server Port> -t <Test time, second> -P <Parallel stream numbers> -R <Test From Server to Client(Download), with -R, testing is from Client to Server(Uplod)>
User ‘ipef -c’ command to run from client test machine (ip adss  to evaluate the network throughput based on TCP connection.
C:\tools>iperf -c
Client connecting to, TCP port 5001
TCP window size: 8.00 KByte (default)
[1912] local port 48410 connected with port 5001
[ ID] Interval       Transfer     Bandwidth
[1912]  0.0-10.0 sec   121 MBytes   101 Mbits/sec

4. Send 100MBytes data for testing

iperf -c -n 100m

5. Bi-direction test

Simultaneous bi-directional bandwidth measurement: (-d argument)
To measure the bi-directional bandwidths simultaneousely, use the -d argument. If you want to test the bandwidths sequentially, use the -r argument (see previous test).
By default (ie: without the -r or -d arguments), only the bandwidth from the client to the server is measured.
iperf -c  -d
Server listening on TCP port 5001
TCP window size: 85.3 KByte (default)
Client connecting to, TCP port 5001
TCP window size: 16.0 KByte (default)
[ 5] local port 60270 connected with port 5001
[ 4] local port 5001 connected with port 2643
[ 4] 0.0-10.0 sec 76.3 MBytes 63.9 Mbits/sec
[ 5] 0.0-10.1 sec 1.55 MBytes 1.29 Mbits/sec

6. Parallel TCP connections

Parallel connections can be useful if you need to saturate the bandwidth of a link.  The bandwidth of a single TCP session can be greatly affected by the size of the receive window and the latency of the link.
iperf -s -i 1 (-i 1 means update terminal every second)
iperf -c -t 30 -P 10

Add caption

7.  Other Parameters

iperf -c -p 2233 -i 1 -t 60 -f M
c:start iperf as client, followed ip address is remote server ip.
p:set specific server port, which should be same as server side’s settings.
i:reporting intervals
t:length of test
f:change number output format

Other parameters can be found from

iperf3 –help

C:\temp\iperf-3.1.3-win64>iperf3 --h
Usage: iperf [-s|-c host] [options]
       iperf [-h|--help] [-v|--version]

Server or Client:
  -p, --port      #         server port to listen on/connect to
  -f, --format    [kmgKMG]  format to report: Kbits, Mbits, KBytes, MBytes
  -i, --interval  #         seconds between periodic bandwidth reports
  -F, --file name           xmit/recv the specified file
  -B, --bind      <host>    bind to a specific interface
  -V, --verbose             more detailed output
  -J, --json                output in JSON format
  --logfile f               send output to a log file
  -d, --debug               emit debugging output
  -v, --version             show version information and quit
  -h, --help                show this message and quit
Server specific:
  -s, --server              run in server mode
  -D, --daemon              run the server as a daemon
  -I, --pidfile file        write PID file
  -1, --one-off             handle one client connection then exit
Client specific:
  -c, --client    <host>    run in client mode, connecting to <host>
  -u, --udp                 use UDP rather than TCP
  -b, --bandwidth #[KMG][/#] target bandwidth in bits/sec (0 for unlimited)
                            (default 1 Mbit/sec for UDP, unlimited for TCP)
                            (optional slash and packet count for burst mode)
  -t, --time      #         time in seconds to transmit for (default 10 secs)
  -n, --bytes     #[KMG]    number of bytes to transmit (instead of -t)
  -k, --blockcount #[KMG]   number of blocks (packets) to transmit (instead of -t or -n)
  -l, --len       #[KMG]    length of buffer to read or write
                            (default 128 KB for TCP, 8 KB for UDP)
  --cport         <port>    bind to a specific client port (TCP and UDP, default: ephemeral port)
  -P, --parallel  #         number of parallel client streams to run
  -R, --reverse             run in reverse mode (server sends, client receives)
  -w, --window    #[KMG]    set window size / socket buffer size
  -M, --set-mss   #         set TCP/SCTP maximum segment size (MTU - 40 bytes)
  -N, --no-delay            set TCP/SCTP no delay, disabling Nagle's Algorithm
  -4, --version4            only use IPv4
  -6, --version6            only use IPv6
  -S, --tos N               set the IP 'type of service'
  -Z, --zerocopy            use a 'zero copy' method of sending data
  -O, --omit N              omit the first n seconds
  -T, --title str           prefix every output line with this string
  --get-server-output       get results from server
  --udp-counters-64bit      use 64-bit counters in UDP test packets

[KMG] indicates options that support a K/M/G suffix for kilo-, mega-, or giga-

iperf3 homepage at:
Report bugs to:


YouTube Video:

Leave a Reply

%d bloggers like this: