In my previous posts on Starlink, I’ve used Linux as the operating system on my notebook and on the network side server for my iPerf3 throughput measurements. Due to packet loss on the link, there is a significant difference between using different TCP congestion avoidance algorithms. When the standard Cubic algorithm is configured on both sides, the data transfer over a single TCP connection is 5 times slower than with BBR. So what happens when I use a Windows client over Starlink?
The graph in the first image above is very similar to the graph produced by a downlink transmission between a BBR configured Linux client and a server on the Internet. However, the scale is very different! In the Linux case and BBR, I could get around 150 Mbps in the downlink direction. On Windows, no matter how often I tried, I could only get around 30 Mbps on average. I tried iperf3 downloads from my Linux notebook in between to the same server and easily got the 150 Mbps. I then tried a second Windows computer and got the same 30 Mbps per TCP session. When configuring several TCP streams in iperf3, I could get x times 30 Mbps, but single TCP stream performance would not improve. So let’s have a look at the TCP sequence graphs. The following graph shows the TCP sequence numbers as recorded with Wireshark on the Windows notebook in a 2.5 second timeframe.
The curve is mainly flat and there are no TCP DUP Acks and fast retransmissions. All looks normal, except for the throughput being very slow. And for comparison, here’s how the graph produced on Linux looks like, where throughput is a lot higher:
Both downlink throughput tests were ran over Starlink with the same Linux based server in a data center somewhere on the Internet. While Linux aggressively sends DUP Acks to get outstanding packets, there is no such behavior on the Windows side. I can’t quite explain this, I always thought that BBR only needs to be configured on the server side to yield improvements. Looks like this is not the case, the client has a significant impact as well.
I then ran a 1 GB HTTP file download from a server on the Internet, which is not under my control. And again, my Linux notebook got a significantly higher downlink throughput than the Windows machine, which remained at around 10 Mbps for the transfer.
I then ran two different browser based speed tests on the Windows notebook and got speeds of 150 Mbps and even up to 200 Mbps. So what are these speed tests doing differently compared to iperf3 to get such high speeds? I’ll have a look at that in the next part.