HSPA and TCP Window Auto-Scaling

Back in 2006 I noticed that my Windows XP machine could not fully use the bandwidth of my ADSL line and also throughput over HSDPA to some servers was less than I expected. As I found out at the time, the fixed and small TCP window size was responsible for the behavior. In Windows XP, things could be tweaked by changing the window size in the registry as I described here. When running some throughput tests with Ubuntu Linux this week with an HSPA 7.2 MBit/s 3G stick, I noticed that no tweaking was necessary to get the full speed.

A quick look with Wireshark revealed why: Unlike Windows XP that has a static window size that is set somewhere around 17 kbytes, Ubuntu sets the TCP window size dynamically. It starts with a modest 5k window and steadily increases it during the file download to over 1 megabyte. Looks like Vista has a similar algorithm as well. Very nice, no more worries about throughput limitations in the future!

3 thoughts on “HSPA and TCP Window Auto-Scaling”

  1. A couple days back you’d mentioned that you were getting ping times of 65 ms with an E-DCH-capable stick. If, by some miracle, you were able to get 7.2 Mbits/sec on the downlink with a Cat 8, that implies you’d need a window of:

    7.2×10^6 x 65×10^-3 / 8 =~ 58 kbytes

    At 3.6 Mbits/sec with 100 ms ping time, you’d have needed about 45 kbytes, so it makes sense that tweaking the XP registry helped.

  2. I’ve seen similar problem one couple of smartphones.
    It’s hard to explain it to end users though.


  3. It’s even more involved than that. There’s the starting window size, and the maximum window size supported by both the client and the server, and the algorithm to scale up.
    Under XP (which has a fairly old TCP/IP stack), even with a large maximum size, it can take a long time to ramp up and actually use it. A single dropped packet sets it back suddenly, to start ramping again. Vista scales up much more aggressively.

Comments are closed.