top of page
Search

Troubleshooting Slow TCP Transfers on Windows

  • robertbmacdonald
  • Dec 3, 2025
  • 1 min read

After publishing my article on Linux TCP troubleshooting using ss and nstat, I got several requests for the Windows equivalent.


The short answer: there isn't one.


Windows exposes per-socket TCP statistics through the SIO_TCP_INFO API in the form of TCP_INFO_v[01] data structures. These data structures include (some of) the data that we need!


Per-socket RTT and minimum RTT

Congestion window (cwnd)

Send/receive window sizes

Bytes in flight

Retransmit counters (fast retransmits vs timeouts)


Window scaling factors and Retransmit Timeout (RTO) values are not included, unfortunately.


The problem? No built-in command-line tool exposes this data.


Get-NetTCPConnection gives you connection state and PIDs. netstat -s gives you system-wide counters. Performance Monitor gives you graphs. But none of them show per-socket TCP behavior in real-time.


To achieve parity with Linux's ss command, a tool would need to be built that:


Enumerates active TCP connections

Obtains socket handles

Calls WSAIoctl() with SIO_TCP_INFO

Formats the output


Until that tool exists, Windows troubleshooting workflows have to rely on packet captures much earlier than their Linux counterparts. You can't quickly check "what RTT is TCP seeing?" or "is this connection stuck in retransmits?" from the command line.


In light of this discrepancy, I built a quick 'n dirty tool that queries the proper Windows APIs, reads TCP counters from the TCP_INFO_v* data structures, and print the results (both human readable and machine readable). 


Check it out! I hope the community finds it useful. If similar tools already exist, please share them in the comments.


 
 
 

Recent Posts

See All
The Hidden Problem Breaking Your Packet Analysis

The Troubleshooting Scenario You're deep into troubleshooting a performance issue. The application team reports intermittent slowdowns on a critical database connection. Response times spike from 2ms

 
 
 
bottom of page