Update 09/14/2016: Uploaded newest version (5.33) with an updated EULA and bundled documentation (NTttcp.docx). Binary updates include:

Update 07/08/2015: Uploaded newest version (5.31) with a revised EULA and posting title. Binary updates include:

Update 10/23/2014: Added previous version's documentation (latest available) to the download package and removed stale links.

Update 10/2/2014: Binaries now signed with a digital signature.

Leveraged extensively by both external customers and Microsoft Product Groups alike to profile and measure Windows networking performance, updated versions of NTttcp (a Winsock-based port of BSD’s TTCP tool) have remained 'internal-only' for the past five years (the last public version, v3.0, was released in 2008).  That is, of course, until now!

I’m excited to announce that the latest version of NTttcp is now also publicly available, posted here on TechNet Gallery bundled with an updated EULA.  This latest version (v5.28) brings forth both performance improvements and feature enhancements including:

Overall, the basic program workflow follows the previously released public version (v3.0 documentation included in download package), with the most notable exception related to the setup of the sender and receiver.  Rather than needing to rename the program based on function, parameters enable the selected functionality: '-s'  for the sender and '-r' for the receiver.

For example, to measure the network performance between two multi-core serves running Windows Server 2012, NODE1 ( and NODE2 (, connected via a 10GigE connection, on NODE1 (the sender), run:

ntttcp.exe -s -m 8,*, -l 128k -a 2 -t 15

(Translation: Run ntttcp.exe as a sender, with eight threads dynamically allocated across all cores targeting, allocating a 128K buffer length and operating in asynchronous mode with 2 posted send overlapped buffers per thread for 15 seconds.)

And on NODE2 (the receiver), run:

ntttcp.exe -r -m 8,*, -rb 2M -a 16 -t 15

(Translation: Run ntttcp.exe as a receiver, with eight threads dynamically allocated across all cores listening on, allocating 64KB buffers [since -l is not specified], a 2MB SO_RCVBUF Winsock buffer and operating in asynchronous mode with 16 posted receive overlapped buffers per thread for 15 seconds.)

Using the above parameters, the program returns results on both the sender and receiver nodes, correlating network communication to CPU utilization.  Example sender-side output from a given run (which showcases a fully saturated 10GigE connection at 1131.4 MB/s):

D:\>NTttcp.exe -s -m 8,*, -l 128k -a 2 -t 15
Copyright Version 5.28
Network activity progressing...
Thread  Time(s) Throughput(KB/s) Avg B / Compl
======  ======= ================ =============
     0   30.016        77074.627    131072.000
     1   30.016       231692.964    131072.000
     2   30.016       115782.516    131072.000
     3   30.016       231496.802    131072.000
     4   30.016       116072.495    131072.000
     5   30.016        77155.650    131072.000
     6   30.016       231611.940    131072.000
     7   30.016        77633.262    131072.000
#####  Totals:  #####
   Bytes(MEG)    realtime(s) Avg Frame Size Throughput(MB/s)
================ =========== ============== ================
    33959.125000      30.016       1456.355         1131.367
Throughput(Buffers/s) Cycles/Byte       Buffers
===================== =========== =============
             9050.939       2.453    271673.000
DPCs(count/s) Pkts(num/DPC)   Intr(count/s) Pkts(num/intr)
============= ============= =============== ==============
    40284.215         1.228       51434.235          0.962
Packets Sent Packets Received Retransmits Errors Avg. CPU %
============ ================ =========== ====== ==========
    24450576          1485400           0      0      4.559

And here is a Task Manager screenshot profiling the run: 


Note that in keeping to the theme of making this latest version’s operation more robust, dynamic and streamlined, the following options are no longer available and/or replaced with new functionality:

-x   [PacketArray size]     
-i   Infinite Loop         
-f   <File Name>           
-fr  Full buffers posted on reads
-mb  Multiple buffer post mode

For more information about specific parameters and options, please reference the documentation included with the previous version and/or run the tool without arguments to display all supported options.  And stay tuned for future blog posts detailing the expanded functionality and additional use cases available with this latest version.