rs79.vrx.palo-alto.ca.us


Microsoft breaking TCP/IP to 'fake' faster speeds of IIS and IE

Dustmite on Slashdot wrote the best treatise on this:

Are you thinking of Microsoft breaking TCP/IP to 'fake' faster speeds of IIS and IE? It works like this: Normally when an HTTP session ends, the TCP/IP connection is torn down by the server, which according to TCP/IP standards, involves two packets: a "disconnect request" (sent by IIS or Apache to the browser) and then a "disconnect acknowledge" (sent by the browser back to the server to acknowledge that the disconnect was received. When the client receives the "disconnect" it sends the ACK and closes up the socket on its side; when the server receives the "disconnect ACK", the connection is fully closed and the resources it uses are freed up on the server side. Under normal conditions, if the occasional ACK happens to get lost, then all that happens is that the TCP/IP socket remains open for usually about another two minutes until it times out from inactivity and gets cleaned up by the OS anyway (if you "netstat -a" you should see these hanging around for a little while).



Now, Microsoft did two things: they modified TCP/IP when in conjunction with Internet Explorer to not send the disconnect ACK, and they modified IIS to not wait until it received the ACK to close and free up the socket, but rather to close it and free up the associated resources immediately. This perversion of the very open standard on which the Internet was founded has the following effects:



An IIS/IE exchange has fewer packets to send and less overhead when disconnecting, so artificially appears faster on stress-test benchmarks (normally a user would not feel the difference, but it makes a difference in stress-test benchmarks) Here's the real clincher, and this is where Microsoft's slimy brilliance shines: When an Apache server is subjected to the same stress-test of dozens or hundreds of connections per second from IE clients, because the ACK is not received, the Apache server soon ends up with hundreds of open TCP/IP sockets waiting to time out. This slows down the OS's TCP/IP handling, artificially slowing down Apache in a way that would not happen if Microsoft had used TCP/IP and not MSTCP/IP. And of course the poor Apache system is just behaving correctly according to TCP/IP.


This whole rather unethical bit of sliminess was primarily concocted to not only make IIS artificially appear faster during benchmarks, but to artificially slow Apache down (because Microsoft was getting frustrated that IIS was unable to kick the Linux/Apache servers' asses).