I had recently been experiencing a frustrating problem with timeout errors when connecting to some web sites (my blog for instance) within Firefox 2.0 on my IBM Lenovo Thinkpad (X60), running Vista RTM.
For the last couple of weeks I have been trawling the Internet looking for anyone else suffering the same symptoms, and came across the following forum thread:
I tried all the suggestions mentioned and was still none the wiser as to why I could not access my blog from FF2. Yet, IE7 worked, FF1.5 + Vista worked, and FF2 + XP worked (head scratching). Further more, I started experiencing similar timeout errors in Windows Live Writer when posting to my blog from Vista.
When connecting from the office LAN, using the same laptop, the timeout problems go away – so I wondered if my WRT54GS Linksys router was at fault. After upgrading the firmware, nothing changed – sigh.
I finally came across a blog by Andy, who found a solution to my problem –
The synopsis is that their appears to be a problem with Vista being too smart for it’s own good, with the addition of the “Receive Window Auto-Tuning Level” setting in the TCP/IP stack. Disabling this setting fixed the timeout problem in FF2 and Windows Live Writer on my machine.
Make sure you’re running as an Administrator (can open a command window as Administrator) and execute the following command at the prompt:
“netsh interface tcp set global autotuning=disabled”
Changing “disabled” to “normal” will re-enable this setting, should you want to turn it back on again. The following command will list the status of the current TCP settings:
“netsh interface tcp show global”
Thanks Andy, you’ve stopped me going bald.
It appears that some routers are having problems with “TCP Windows Scaling.” Essentially, the TCP spec limits a TCP packet to 64KB, since faster networks allow for more data transfer, 64KB is a tad on the small side. TCP windows scaling involves negotiating a larger packet size between the client and the server during connection by the client sending a special SYN packet and waiting for an acknowledgment. Problem is, some routers (mine for example) strip the SYN acknowledgment packet. The sever thinks that scaling is enabled and starts sending data back, meanwhile the client waits for it’s SYN acknowledgment that it never receives, and eventually times out.
By default Windows 2003 does not send Windows Scaling SYN ack packets unless the client requests scaling (known as auto-tuning). Vista, now uses auto-tuning in it’s TCP stack, where as XP did not.
So why does IE7 work? Windows scaling requires a scale factor to determine how much extra data can be squeezed into TCP packet (typically 64K * 2 ^ factor). IE7 forces a scale factor of 2, which seems to work through my router, whereas other applications, such as FF2 use a default factor of 8.
Turning auto-tuning off on Vista is a quick fix but not ideal. Replacing my router with one that does not strip out the SYN packets is another quick fix. Since other readers of my site may be using a buggy router and an installation of vista the only proper fix is to prevent the server from sending SYN packets. The attached registry file will disable auto-tuning on a Windows 2003 server.
Note, turning off auto-tuning on the server will not produce undesirable performance. Up to recently, most (if not all) clients connecting to Windows 2003 did so without requesting auto-tuning. By default, Windows 2003 will not enable auto-tuning unless it is requested by the client – Vista!! Disabling auto-tuning with this registry change will assume XP like behavior.
Current Mood: relieved[tags:Windows Vista]