Iperf on Windows

Iperf is a neat little tool with the simple goal of helping administrators measure the performance of their network. Worthy of mention is the fact that it can measure both TCP and UDP performance on a network. Iperf is cross platform software and open source.

You can download Iperf.exe from:

Iperf.exe (locally hosted)


Iperf.exe Ucf.edu

Link updated on 12/30/2010

We will be making use of the command line, do not fear the command line Iperf is a simple tool to use.

Say I want to test the available bandwidth between a server(Windows Server 2008) and a client workstation(Windows 7). Iperf will try to move as much data as possible using the available link in order to conduct the test.



Download the Iperf executable and place the file on any directory you wish, my web browser(Firefox) places all downloaded files on the Download directory which is where I will be executing Iperf from.

Note:You will need to open port 5001 on the Iperf server.

Server Setup

Go to Start > All Programs > Accessories > Command Prompt


With the command line prompt open type

cd Dowloads

or the location where the Iperf executable resides.


Now that you are in the same directory as Iperf type

iperf -s

to start the Iperf server. If you look at the screen Iperf listens on port 5001 you may have to open port 5001 on your firewall.


Client Set Up

Imitating the steps above execute Iperf in the same manner, but this time we are going to give the Iperf client different instructions. On the Iperf client command line type

iperf -c

. This will be our client and we are telling Iperf the server is located at


Give Iperf some time to test the connection, after the test is done Iperf will present the results.


The results are easy to understand in this case Iperf managed to transfer 113 Mbytes at 94.5 Mbit/s, the results will changed when used on a busy network which is where Iperf will reveal the amount of available bandwidth in the network.


My previous Iperf on Linux post

40 thoughts on “Iperf on Windows”

  1. Hi Luis, solid page. I’ve been running in to some bugs with the version of iperf from that site (1.7.0). Have you seen a windows executable for iperf version 2.0.4?

  2. Troubleshooting an agitating VPN client throughput issue, this was very helpful in making it very clear what the issue was. I get 992 Kbit/sec over the tunnel, one user was getting a tenth of that. Thanks for sharing!

  3. Iperf works fine for me in a LAN environment.
    If either the server and the client are behind firewalls, and given that standard port is used, what ports should I open on either firewalls?

  4. Any info on how to force iperf to use a specific interface on a windows machine? I.E. using a secondary NIC instead of the main one.

  5. can I get the aspects such Throghput,Packet losess rate and Communiction delay of UDP in Wirelss LAN by using iperf.

  6. Could you advise me,what the best software program I can use to make UDP performance analyses(Throughput,packet loses and delay).

  7. How does it choose the data to transfer? My test is only transferring about 800K. I thought maybe is chose an file in the folder it is in. I put a 5MB file in the folder but it doesn’t use it. I would like to lengthen the test results.

  8. Does iperf/jperf monitor/measure bandwidth over SATCOM, i.e. client in Europe and the server in U.S.A with SATCOM as the transmission media?

    1. Sorry for taking so long to reply. iPerf will work over any medium that uses TCP/UDP and if Wikipedia is right then the answer to your question is “yes”.

  9. @Mike – you can pass a lot of cl parameters:

    C:Windowssystem32>iperf -s
    Server listening on TCP port 5001
    TCP window size: 8.00 KByte (default)
    [256] local port 5001 connected with port 1442
    [ ID] Interval Transfer Bandwidth
    [256] 0.0-11.9 sec 216 KBytes 149 Kbits/sec

    C:Windowssystem32>iperf /?
    iperf: ignoring extra argument — /?
    Usage: iperf [-s|-c host] [options]
    Try `iperf –help’ for more information.

    C:Windowssystem32>iperf –help
    Usage: iperf [-s|-c host] [options]
    iperf [-h|–help] [-v|–version]

    -f, –format [kmKM] format to report: Kbits, Mbits, KBytes, MBytes
    -i, –interval # seconds between periodic bandwidth reports
    -l, –len #[KM] length of buffer to read or write (default 8 KB)
    -m, –print_mss print TCP maximum segment size (MTU – TCP/IP header)
    -o, –output output the report or error message to this specifie
    d file
    -p, –port # server port to listen on/connect to
    -u, –udp use UDP rather than TCP
    -w, –window #[KM] TCP window size (socket buffer size)
    -B, –bind bind to , an interface or multicast address
    -C, –compatibility for use with older versions does not sent extra msgs
    -M, –mss # set TCP maximum segment size (MTU – 40 bytes)
    -N, –nodelay set TCP no delay, disabling Nagle’s Algorithm
    -V, –IPv6Version Set the domain to IPv6

    Server specific:
    -s, –server run in server mode
    -D, –daemon run the server as a daemon
    -R, –remove remove service in win32

    Client specific:
    -b, –bandwidth #[KM] for UDP, bandwidth to send at in bits/sec
    (default 1 Mbit/sec, implies -u)
    -c, –client run in client mode, connecting to
    -d, –dualtest Do a bidirectional test simultaneously
    -n, –num #[KM] number of bytes to transmit (instead of -t)
    -r, –tradeoff Do a bidirectional test individually
    -t, –time # time in seconds to transmit for (default 10 secs)
    -F, –fileinput input the data to be transmitted from a file
    -I, –stdin input the data to be transmitted from stdin
    -L, –listenport # port to recieve bidirectional tests back on
    -P, –parallel # number of parallel client threads to run
    -T, –ttl # time-to-live, for multicast (default 1)

    -h, –help print this message and quit
    -v, –version print version information and quit

    [KM] Indicates options that support a K or M suffix for kilo- or mega-

    The TCP window size option can be set by the environment variable
    TCP_WINDOW_SIZE. Most other options can be set by an environment variable

    Report bugs to

  10. Great piece of software.

    Is there a way to test the download bandwidth? (i.e. read packets in reverse order from Server to Client – assuming that command “iPerf -c host” does a write from Client to Server).


  11. Iam Student doing my Academic project with imx35 Processor using eclipse and gdb (gcc complier) and flywatter debugger ,i can able to program, excute ,debug etc I need to control the motor via ethernet port, i wrote the Embeeed code and its working fine , now my task is find out the datarate of ethernet port
    For that iam trying to use the iperf, but i have lot of doubts in that,
    iam able read the data rate between my college PC and server via iperf, but the for target board, i have no idea,
    whether i need to download the source code of iperf and change for my target device?
    Please advice and show me right path .


  12. I tried to do some TCP connection scale/stress test using -P parameter. When I do “-P 10”, the tool works ok, but if I do “-P” with a higher number, e.g. 200, the tool crashed with stackdump.
    Is this a known bug? Is there a limitation on how many TCP connections can be tested at the same time?
    Thanks in advance.

  13. Hi,

    I have saved iperf exe file in the D drive and run iperf as a server in the location where the Iperf executable resides. But i always have this error when setting it as server, ‘OpenSCManager failed – Access is denied. (0x5)’. Would appreciate if you can help me as I am new in using iperf. I have no problem when using it as client. Thanks!

  14. I’m confused about this tool.
    It says:
    iperf -c -t 600
    Client connecting to, TCP port 5001
    TCP window size: 8.00 KByte (default)
    [168] local port 50779 connected with port 5001
    [ ID] Interval Transfer Bandwidth
    [168] 0.0-30.4 sec 807 MBytes 223 Mbits/sec

    iperf -c -t 600 -P 2
    Client connecting to, TCP port 5001
    TCP window size: 8.00 KByte (default)
    [184] local port 50792 connected with port 5001
    [172] local port 50791 connected with port 5001
    [ ID] Interval Transfer Bandwidth
    [184] 0.0-100.2 sec 1.93 GBytes 166 Mbits/sec
    [172] 0.0-100.2 sec 1.93 GBytes 165 Mbits/sec
    [SUM] 0.0-100.2 sec 3.86 GBytes 331 Mbits/sec

    iperf -c -t 600 -P 5
    Client connecting to, TCP port 5001
    TCP window size: 8.00 KByte (default)
    [204] local port 51120 connected with port 5001
    [188] local port 51118 connected with port 5001
    [180] local port 51117 connected with port 5001
    [196] local port 51119 connected with port 5001
    [168] local port 51116 connected with port 5001
    [ ID] Interval Transfer Bandwidth
    [188] 0.0-34.9 sec 540 MBytes 130 Mbits/sec
    [196] 0.0-34.9 sec 535 MBytes 129 Mbits/sec
    [180] 0.0-34.9 sec 535 MBytes 129 Mbits/sec
    [168] 0.0-34.9 sec 529 MBytes 127 Mbits/sec
    [204] 0.0-34.9 sec 530 MBytes 127 Mbits/sec
    [SUM] 0.0-34.9 sec 2.61 GBytes 641 Mbits/sec

    it’s gigabit network on gigabit switch, all cards are Gigabit. The only difference is I’m trying to get 1Gbit/s via bridged and bonded interface in server.

  15. @TooMeeK you might not be able to fully utilise the link due to TCP constraints. Try playing around with the “-w” switch and increase your window size. The problem is with something called bandwidth delay product. This can be a problem on highspeed or high-latency links. This website has a good explanation and a calculator for finding the optimum window size.

  16. My question is it possible to generate multiple tests at, or nearly at, the same time to test multiple networks at the same time? example 1 server, 1 client, 3 independent loops connected on each end to a layer 2 switch?
    1 parallel stream on port 3001,
    a second parallel stream on port 4001,
    and finally a third parallel stream on port 5001? (see picture enclosed…)

Comments are closed.