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.