An MTU story
January 5, 2007
For the last couple of months, my PC behaved strangely. On some sites, but not all, i could not get the link i was requesting. It ended up in a connection reset message on FireFox (which was actually the case) and on a DNS error message in internet explorer (which was incorrect).
I lived with it. It mostly bothered me when accessing some (not all) emails from my yahoo account.
When my wife could not post her resume to some websites I finally decided to invest some time in finding what was wrong. It was a tricky problem, tricky enough to document the solution to the problem.
After reluctantly upgrading my PC to service pack 2 (always refused to do it, respectly the old saying “Don’t break something which is ain’t broken” – well, actually now it was broken – the behavior did not change. Same problem.
I then started to spy the TCP connection between my PC and the yahoo mail web server. I used Packetyzer, a tool based on ethereal that you can download from the site of networkchemistry.
The PC was sending HTTP requests to the internet but I noticed that the length of the TCP packet was exceeding 1500 bytes, which is beyond the usual MSS (Maximum Segment Size) of a TCP packet over an ethernet connection.
In addition to this, it had the “don’t fragment” bit set in the IP header. In simple english terms, this means my TCP/IP stack was trying to send a packet exceeding the capacity of the network interface. The interface had no choice but discard it. The packet never went out to the internet, was never received by the server. At some point, the server decided to reset the connection, effectively closing the ephemeral port.
Tricky isn’t it ?.
The problem was identified at this point, but not solved…
The fact that my TCP/IP stack was sending packets exceeding the MSS is a TCP/IP issue. My TCP config was at fault. Problem is that you do not find the level of detailed configuration in the useless TCP/IP GUIs Microsoft is offering, even with service pack 2
.
I had to download DrTCP (you can find it on the site of dslreports) and refix the MTU (Maximum Transfer Unit) of the TCP/IP stack to 1500…
It then all worked!.