Slashdot Mirror


Why IE Is So Fast ... Sometimes

safrit writes "Finally the scoop on how IE "cheats" a little to up its performance! Do RFCs mean nothing anymore? What's next, Riots in the streets, dogs and cats living together, mass hysteria! From the blog story: 'Internet Explorer on Windows always seems either to run impossibly fast (page requests are fulfilled almost before the mouse button has returned to its original unclicked position), or ridiculously slow...' Now read to see why..."

61 of 887 comments (clear)

  1. I wish I could... by crashnbur · · Score: 4, Funny

    ...but the site has already been slashdotted! I suppose I'll just read it late tonight after the "mass hysteria" has settled.

    1. Re:I wish I could... by Sayjack · · Score: 4, Funny

      Hmm...wierd, IE displayed the site before I even thought to click on the link.

      --

      -- Good judgement comes with experience. -- Experience comes with bad judgement.

  2. down before first post? by stephenisu · · Score: 4, Funny

    The same powers that make IE impossibly fast also made this site crash impossibly fast. :)

    --
    Sigs? We don't need no stinking sigs!
  3. Mozilla is quick too... by nother_nix_hacker · · Score: 4, Funny

    ...but I think thats because during the build process it caches the entire web, hence the build time!

  4. First Post... by Groganz · · Score: 5, Funny

    Ah, damn Mozilla.

  5. Re:Cut n Paste by Afrosheen · · Score: 5, Funny

    One thing looked familiar to me:

    " Client Server
    1. SYN ->
    2.
    4. Request ->"

    That's very similar to the working of the infamous underpants gnomes.

    1. Collect underpants
    2. ?
    3. Profit!

  6. Re:Cut n Paste by Todd+Knarr · · Score: 4, Informative

    If this is what I think, namely that IE doesn't close the connection after getting the response, the author may want to look into HTTP 1.1 and this thing called "persistent connections". If a browser expects to make multiple requests from a server, the browser is allowed to leave the connection open and make further requests over it. If the server doesn't support persistent connections, it's free to close it's end of the connection. The browser is supposed to see this, close it's end and open a new connection for the next request, but it's possible IE is simply assuming persistent connections and only doing the close-and-reopen when it sees an error sending the additional requests. My guess is that they combined error-recovery ("the connection died, close it, open a new one and retry the request") with handling servers that don't support persistent connections ("server closed the connection, close our half and open a new one for this request").

  7. Re:Cut n Paste by Randolpho · · Score: 5, Funny

    So that would be:

    1) Rewrite TCP
    2) ???
    3) Speed boost!

    --
    "Times have not become more violent. They have just become more televised."
    -Marilyn Manson
  8. This isn't what I'm seeing by beezly · · Score: 5, Interesting
    Ok, I've only been able to read the copy of the blog from that which has been pasted in these Slashdot replies (i.e. I might have missed some of the story), but I've just tried this out and it's not what I'm seeing at all. Between an IE6/XP machine and my Apache box...
    21:54:48.351781 10.0.0.29.4109 > 10.0.0.5.www: S 3610909795:3610909795(0) win 64240 <mss 1460,nop,nop,sackOK> (DF)
    21:54:48.352052 10.0.0.5.www > 10.0.0.29.4109: S 4178252606:4178252606(0) ack 3610909796 win 5840 <mss 1460,nop,nop,sackOK> (DF)
    21:54:48.352202 10.0.0.29.4109 > 10.0.0.5.www: . ack 1 win 64240 (DF)
    21:54:48.352400 10.0.0.29.4109 > 10.0.0.5.www: P 1:243(242) ack 1 win 64240 (DF)
    21:54:48.352528 10.0.0.5.www > 10.0.0.29.4109: . ack 243 win 6432 (DF)
    ...
    ...
    ...
    Which appears to be a perfectly standard SYN->SYN->ACK handshake at the beginning. Also, do IE5.5/6 support HTTP pipelining? Surely this would explain the web browser not tearing down connections in between HTTP commands. Mozilla supports it! :) ... or maybe I've just not understood the blog entry correctly!
    1. Re:This isn't what I'm seeing by pVoid · · Score: 4, Insightful
      Yes, you are right. The whole point is that IE is painfully slow in certain scenarios where the server just drops the packet instead of sending a RST.

      I for one am having the exact same results as you are. And realistically, I don't think any of this crowd will heed your post. It's too unhumiliating for IE.

      On another note, I personally *am* plagued by this IE being super slow thing. And unlike some, I've looked into it logically: it happens 99.9% of the time if a javascript launches a new window, or if a link is Targeted.

      I'm personally inclinded to think it might have to do with DNS. But I don't know. And I don't go around accusing people.

      For christ' sake, even the poster says: my team and I noticed a couple of years ago

      Whatever.

      And the cherry on top of the whipping cream:

      I have to admire their arrogance and their confidence. But it'll be some time before I can bring myself to admire their technical integrity.

    2. Re:This isn't what I'm seeing by Panoramix · · Score: 5, Interesting

      Thank you for posting that dump. The first thing I thought of was sniffing my ethernet myself, just to see if this was true. Regrettably, I have no Windows machines available here to test with (never imagined that I would ever think of this as 'regrettable' :-).

      Anyway, I'm having a really hard time believing this story. I just can't get me to think that such a nasty hack would have gone unnoticed for years (the article speaks of years). I mean, think of the security holes it would open! The many router and firewall mysterious misbehaving it would trigger. And no sysadmin, or lowly script kiddie noticing this? It just can't be.

      I'd love to have information on how to reproduce this, and see it for myself on my network. Yes I'd put Windows and (yuck) IIS in one of my boxes, for a couple of hours, to run this test. But until I can see it myself, or read about it in Bugtraq, I won't believe it, and will be ashamed that Slashdot is publishing it without a big note stating at the very least that "this may be not true".

      Really, even though I'm a GNU/Linux user, the kind that actually uses the "GNU/Linux" tag from time to time, and that I love Mozilla and all, if find this just as low as the best FUD Microsoft has come up with in their dirty history.

  9. No, it's not. by Rui+del-Negro · · Score: 5, Informative

    No, it doesn't. In fact, it doesn't even cache any page that's protected by a password, nor does it add them to the list of recently visited addresses (which is nice both for security and privacy reasons).

    They are only kept in the RAM cache (i.e., when you press "back" or "forward", it will usually show you a page's last state (down to the position of the scroll bars), without reloading it. This is quite useful, BTW; it means you can go back and forth between pages without losing what you were writing in a form (unlike MSIE, where forms are reset).

    RMN
    ~~~

  10. Re:Opera is Worse by doowy · · Score: 4, Informative
    For Opera to get it's "Fastest browser on earth" title, it caches EVERYTHING. Even things that aren't supposed to be cached like SSL pages.
    Opera also renders super fast. Even going through local pages or cache, the difference is noticeable to me (admittedly, on an outdated machine - but saying I should need a P4 to browse the web is silly).

    Opera isn't worse. It's better. Definitley less bloat. It CAN render faster. And if I understand the article correctly (I actually read it) then it means this:
    • IE retrieves faster from IIS servers.
    • IE retrieves SLOWER from all non-IIS servers.


    Common slashdot propoganda suggests MOST servers are not IIS. This would mean Opera can retrieve faster on average.. and I'm fairly certain it can render the page for display quite a bit faster.

    P.S. You can turn off caching in the options if it really bother you.
    --
    ..mork
  11. Re:Cut n Paste by AntiNorm · · Score: 5, Insightful

    What RFC means to MSFT:

    "Rules For Competitors." Not for themselves.

    --

    I pledge allegiance to the flag...
    of the Corporate States of America...
  12. Re:Sounds pretty decent... by gilroy · · Score: 5, Insightful
    Blockquoth the poster:

    this doesn't sound like an overly bad idea.

    Hmmm. Deliberately breaking -- oh, I'm sorry, "rewriting" -- one of the core technologies of the Internet, without telling anyone and in such a way as to pad their speed numbers? Nah, nothing wrong about that...
  13. More Browser speed ups!! by sweede · · Score: 5, Funny

    i've ran Netscape 4.1 on my pentium 133 with a 28.8 kps modem, but web pages load instantly on my box. whats my secret??

    Well i'll tell you !!

    i upgraded to IE 6.0* and the web pages popped up instantly !! even the pop-ups where there just as quickly

    using IE increased the speed of web browsing on the internet for me, it can for you too !

    *Note: to run IE 6.0 i also had to upgrade to a more recent AMD XP system running Windows XP and a 1.5mbs Cable Modem service which had a 98% impact on page load and rendering times.

    --
    I follow the SDK and GDN principles.. Spelling Dont Kount, Grammer Dont Neither
  14. FTP the same? by Shelled · · Score: 4, Interesting

    A custom application we run at work makes use of the IE ftp client to make automated connects to our ftp server. Any other client, Linux or Windows, disconnects from the server on shutdown. IE or the IE-based ftp client don't, even if you exit IE. Because of this we've been forced to set a session idle timeout of 1 minute on the server to avoid hanging connections. Is this another example of the same technique, client-side?

    1. Re:FTP the same? by Guppy06 · · Score: 4, Interesting

      "even if you exit IE."

      There's your problem. From IE 4.0 onwards, there's only one way to exit IE: You shut down Windows. Just ask the attorneys that testified before Judge Jackson.

  15. It *isn't* ingenious by Anonymous Coward · · Score: 5, Insightful
    By not closing the connection, it severly hampers IIS's scalability - in other words, it's a helluva lot more susceptible to the /. effect. Any server must keep track of open connections, and any computer only has a finite space to do that in.

    Of course, when your target market is non-scalable toy computers, who cares if you software isn't scalable either.

  16. IE's other trick: full DOM and JS caching by abischof · · Score: 5, Informative

    IE's other trick, or so it is assumed (since the source isn't available) is that it does full DOM and JS caching.

    That is to say, if you visit a webpage with (say) Mozilla, the HTML is interpreted and the HTML tree is built in memory. Pages with advanced CSS have a more complicated tree, of course. However, when the user leaves the page, that tree is destroyed and has to be recreated each time the user visits the page.

    The bug to correct this in Mozilla is bug 38486 - "[FEATURE] Keep DOM and JS context in memory to provide fast access when clicking back". You can also vote for it (free Bugzilla account required) though you'll have to copy-n-paste the URL into your browser window since Bugzilla doesn't accept referrers from Slashdot.

    PS Threaded e-mail is handy, eh? It sure is, unless your mail reader doesn't remember that you want to see your mailboxes in threaded view and keeps reverting back to collapsed form. That one is bug 64426 (vote for it if you like).

    --

    Alex Bischoff
    HTML/CSS coder for hire

  17. Re:MSIE is to blame! by ez76 · · Score: 5, Informative
    It is forcing persistant connections rather than requesting them the HTTP/1.1 way! This means that these servers are stuck with tons of open Sockets causing it to refuse new ones!
    Last time I checked, most web servers could reject persistent connections.

    Speaks pretty poorly of the server (or network architecture) if your only recourse is to say "it's the client's fault!"
  18. This was reported by SUN in 1997 !!! by Anonymous Coward · · Score: 5, Informative

    4069902 TCP in 2.5.1 should have similar slow start mechanism as in 2.6 13 Aug 1997

    ) TCP BASICS - SLOW START AND DELAYED ACK

    The TCP specification requires something known as "slow start". The
    algorithm applies to the sender side and is described in RFC2001.

    The intent of the slow start algorithm is to avoid a "congestion
    collapse" in a network by ensuring that each TCP sender doesn't
    overwhelm the network. The algorithm mandates that the first
    transmission be a single packet. If the recipient acknowledges
    the first packet successfully (i.e. the communication doesn't time
    out and the recipient believes that the packet has arrived without
    error), the sender sends two more packets. Successful transmission
    results in the sender sending yet more packets in parallel, until
    the capability of the underlying network is reached and one or more
    packets are not acknowledged successfully. Essentially the sender
    uses ACKs as a "clock" to regulate and gradually increase the
    rate packets are injected into the network until it reaches an
    equilibrium.

    The TCP specification describes another technique known as
    "delayed ACK", which concerns the receive side. The technique
    calls for an acknowledgement of a data packet to be delayed for a
    short period of time - the delayed-ACK interval. Different TCP
    implementations use different delay intervals. The TCP specification
    (RFC1122) mandates that the delayed-ACK interval must be less than
    0.5 second. Delayed ACK serves to give the application an opportunity
    to send an immediate response, in which case the ACK can be
    piggyback'ed with the packet carrying the response. This technique
    is very useful, both in saving the network bandwidth and in reducing
    the protocol processing overhead, and is widely adopted by TCP
    implementations. The TCP standard also recommends that an ACK not to
    be delayed for more than two data packets. This is to keep the slow
    start algorithm on the sender side flowing, which counts on the ACK
    packets coming back from the receive side in order to strobe more
    data packets into the network.

    2) TCP SENDER/RECEIVER DEADLOCK - THE IDLE TIME

    A simplistic implementation of delayed ACK can cause unnecessary
    idle time during the initial data transfer phase in a client-server
    network environment. The scenario is as follows. When a sender
    request can't fit in one TCP packet, TCP will break it up into
    multiple packets. During the initial slow start phase, the sender
    is allowed to send only one packet. Therefore only a partial sender
    request is sent. The receiver application, upon receiving the
    data in the packet, is not able to respond because the data is
    incomplete. In the mean time, the receiver TCP is holding back the
    ACK, waiting for the second data packet to show up. But the sender
    TCP is waiting for an ACK to come back before sending more data - a
    temporary deadlock. Eventually, the receiver TCP will give up the
    waiting after a delayed-ACK interval, and send back an ACK.

    This interplay of a simplistic delayed-ACK implementation with
    slow-start algorithm accounts for the idle time problem seen in a
    number of WEB benchmarks. These benchmarks employ HTTP response
    messages of at least 8KB and usually more. On a typical network,
    this size of data requires more than one TCP packet to carry.

    During the idle time, the client TCP holds back the acknowledgement
    of the first packet while the client HTTP is waiting for the rest
    of the response data from the server before it can issue the next
    HTTP request. But the server is waiting for the client TCP to ACK
    before it can send the rest of response data.

    3) SOLARIS CLIENTS - NO DELAY ON INITIAL ACK

    Only configurations with clients that use a simplistic delayed ACK
    implementation, e.g. Windows/NT, will exhibit the idle time problem
    when talking to a Solaris server. Configurations using Solaris
    clients are not affected by this problem because Solaris uses a more
    sophisticated delayed-ACK algorithm. It recognizes the initial data
    transfer phase, and will not delay the acknowledgement of the first
    data packet.

    4) SLOW START BUG - NO MORE IDLE TIME

    Configurations using a server running Windows/NT, or an OS with a
    BSD derived TCP stack don't exhibit this idle time problem. This
    is, rather ironically, due to a widespread bug in the slow start
    implementation in both Windows/NT and BSD derived TCP stacks.

    The bug in the server erroneously takes the last ACK in the TCP 3-way
    connection handshake as an indication of a data packet successfully
    going through the wire. Therefore, when the server is ready to send
    back the first response, it is allowed to send TWO, instead of one
    TCP packet. The client, upon receiving two packets, will ACK
    immediately as suggested by the TCP specification.

    5) BREAKING DEADLOCK - THE WORKAROUND

    A new TCP tunable "tcp_slow_start_initial" has been added to the
    Solaris 2.6 release. The default value is one (1), which gives the
    same behavior as Solaris 2.x releases prior to 2.6, and is fully
    compliant with the current TCP slow-start standard (RFC2001).

    The amount of the extra delay described above depends on the
    delayed-ACK interval of the client's TCP stack, and is usually on
    the order of 200 milli-seconds. For a normal TCP connection, this
    delay is hardly noticeable. Nevertheless, it may not be true in an
    environment that employs many short-lived connections, or connections
    transmitting only a small amount of data. A good example is a WEB
    server. In those environments, one should consider changing
    "tcp_slow_start_initial" from the default value of one (1) to two (2).

    The potential downside of the change is that, with many clients all
    starting at two packets instead of one, more network congestion
    might be introduced. IETF (Internet Engineering Task Force, the
    industry group that governs the Internet standards), after recognizing
    the problem described here and the widespread of the slow start bug
    described in 4) only recently, conducted a preliminary study over the
    global Internet on the effect of amending the slow start algorithm
    to start at two packets instead of one. The study found no evidence
    that the change caused more congestions. It's still conceivable,
    although rare, that on a configuration that supports many clients on
    very slow-links, the change might induce more network congestions.
    Therefore the change of "tcp_slow_start_initial" should be made with
    caution.

    Sun is actively participating in an effort in IETF to revise TCP
    specification to allow more packets to be sent initially. Once the
    revision is ratified, Sun will take the appropriate actions to
    upgrade Solaris TCP accordingly.

    6) COMMANDS FOR THE WORKAROUND (Solaris 2.6 only)

    > su to root
    > ndd -set /dev/tcp tcp_slow_start_initial 2

    See ndd(1M) for an explanation of the tuning facility.

  19. Re:Persistent Connections by xcomputer_man · · Score: 5, Interesting

    Err, I don't think so. From what I've read about HTTP KeepAlive, the connection should be kept alive by adding a "Connection: KeepAlive" header to the request or something like that. I can't imagine any reason why any protocol should want to interfere with the TCP handshaking sequence for keepalive purposes. That would mean crossing out of the application layer into the transport layer.

    This issue caused me a lot of grief last year, and I am just figuring out why. We set up a webmail server using Apache/Vhosts and OpenSSL, and we had this recurring problem of links just suddenly breaking in IE ... It'd just return "Page could not be loaded" or something like that. The problem never cropped up in Mozilla or other browsers, and eventually I found out that if I added this line:

    SetEnvIf User-Agent ".*MSIE.*" nokeepalive ssl-unclean-shutdown

    to the virtual host configuration, the problem went away. Now that I've read this article, I think I understand why. What I think is happening here is that Microsoft trying to make the most out of keepalive/persistent connections by bending the rules. And it's not right.

  20. Re:1 packet???? by GMC-jimmy · · Score: 5, Informative
    Not just 1 packet..

    The way I understood it was there's 2 forms of communication going on between the client and server. For simplicity, I'll use an analogy.

    It's sort of like making a telephone call in 1 of two ways:

    The first way - Call a friend on the phone, and have an entire conversation, but never do the formality of a "Hello" or "Bye" at the beginning or end of the call and don't hang up even if you've run out of things to say.

    The second way - Call a friend on the phone, but ring them individually for each and every word of the entire conversation, and be sure to include the formality of "Hello" and "Bye" with each and every call.

    Maybe I have a wierd way of reading this, but that's what I got out of it.

    --
    __________________________________
    Free your mind - Flush your toilet
  21. Re:Cut n Paste by dws · · Score: 5, Informative
    I think what we're seeing is the use of the HTTP Keep-Alive which is part of the HTTP 1.1 standard. Am I wrong?


    IE does use Keep-Alive, but that's much higher up the protocol stack, and is a separate issue from taking shorcuts when setting up a low-level connection.


    Keep-Alive merely provides a means for a browser to signal to the server that additional requests will follow on the same socket. If the server plays along, it will both leave the socket open at the end of the request, and will signal the browser by returning an appropriate header. This saves a lot of extra socket setup and tear-down, but is independent of whether the socket is set up correctly, or by a dubious short-cut.

  22. Re:Sounds pretty decent... by evilviper · · Score: 5, Insightful
    Essentially Microsoft is rewriting TCP to make it UDP-like by sacrificing TCP's guaranteed delivery for a speed boost. Since HTTP is essentially stateless, this doesn't sound like an overly bad idea.

    Well, because IE leaves server-side connections open, it would make things much more difficult for the server-end, no matter if you run IIS or not. So, it can basically be considered a low-level DoS attack on all non-IIS servers.

    Wouldn't you be upset if IE pre-cached all the links in a page, just so users would have a bit of a speed boost? If they wanted IE/IIS to be faster when speaking with each other, why no have them communicate on a different port, instead of casuing problems, and slow-downs on non-IIS servers? Hey, they could use port 80, UDP... That would be faster, and since non-IIS servers won't be using UDP/80, it won't be incorrectly leaving connections open, sending invalid packets, slowing down communications with non-IIS servers, etc.

    It's not that they sped things up, it's that they did it in such a way that it causes minor problems for servers that don't use IIS. Sound a little like the Microsoft Java fiasco a little while back? Leveraging their desktop monopoly to sell IIS...

    So, this is a overly bad idea, and there are a thousand ways they could have done this better, while not causing problems for non-Microsoft products.
    --
    Slashdot gets worse every day... Pipedot: News for nerds, without the corporate slant
  23. Re:Sounds pretty decent... by csnydermvpsoft · · Score: 5, Insightful

    Even if the Mozilla team did come up with this idea, it would never be implemented. Why? Standards compliance. That's been their goal from the beginning - they would never break a standard, especially as fundamental as TCP/IP.

    This just goes to show the differences between Microsoft and many open source projects. Microsoft didn't care at all about the impacts of this decision - as long as it makes IE and IIS look faster, it's in. However, Mozilla/Apache/etc. aren't willing to sell out.

  24. Re:MSIE is to blame! by Ponty · · Score: 5, Funny

    So what you're saying is that MSIE is responsible for a lot of the /. effect? It seems that all of those windows-using /. readers might think once or twice about their OR or browser if they know that they're ruining the Internet for everyone else.

  25. Re:slashdotted by Anonymous Coward · · Score: 5, Informative

    As the owner and operator of a small commercial web hosting outfit I wholeheatedly agree. Just two days ago one of my clients' sites got slashdotted.

    It is extremely annoying to see posts about poor server configuration from the losers who post here. The server is seldom the issue, the bandwidth is. My server gets slashdotted about once a month and every time the server load is nominal, yet my two T1s get crushed. Of course I surcharge my clients responsible for this as it creates problems for the rest of my clients.

    Some responsible behavior on the part of Slashdot editors/administrators is in order. It doesn't take a genius to figure out which sites may survive a slashdotting and which may not. When in doubt, ask.

    As for the trolls that whine like little bitches about lack of bandwidth, /. traffic accounts for less than 1% of my servers' total traffic, it just happens to happen over a short period of time. It is not economical for me to have 99% idle bandwidth for the 0.01% of the time that it is needed. Also, you trolls aren't paying for it, I am.

  26. Re:Sounds pretty decent... by baptiste · · Score: 5, Informative
    Except keep-alive connections are a part of HTTP 1.1. A part that Mozilla doesn't implement, apparently.

    You obviously have no clue about networking. keep-alives are implemented at a MUCH higher level, using a keep=alive header to keep the connection open.

    The sequences described here are low level packet tweaks which are not RFC compliant at all. They leave connections in a half closed state in case another non RFC compliant request comes in.

    SO what happens? It makes IE requests complete faster on IIS, but non IE requests slower due to an extra handshake due to the connection being half closed.

  27. Re:slashdotted by WiPEOUT · · Score: 5, Funny
    3. Waiting for a mirror to appear would make news show up incredibly slow.

    ... and /. is renowned for getting news to it's readers in a timely fashion, so this would be intolerable.

  28. This sounds like T/TCP by jelson · · Score: 5, Informative

    Which is a standard What is everyone complaining about?

    1. Re:This sounds like T/TCP by jabley · · Score: 5, Insightful

      Not a standard. RFC 1644 is classed experimental; it's not a standards-track protocol. See The Internet Standards Process (RFC 2026). The claim in the story leader that Microsoft were somehow ignoring RFCs looks, uh, foolish though, which is the point you were making.

  29. Sacrifice security, compatibility for performance? by Glytch · · Score: 5, Funny

    Of course not. Microsoft would never do such a thing. I scoff at your ridiculous suggestion, good sir.

  30. This is NOT the standard HTTP 1.1 keepalive by Admiral+Burrito · · Score: 5, Interesting
    If this is what I think, namely that IE doesn't close the connection after getting the response, the author may want to look into HTTP 1.1 and this thing called "persistent connections". If a browser expects to make multiple requests from a server, the browser is allowed to leave the connection open and make further requests over it.

    You might want to look into HTTP 1.1 as well. In fact, so should Microsoft, because (if the article is accurate) they've apparently re-invented the wheel in square form.

    Standard HTTP 1.1 keepalive still uses a regular, plain, vanilla TCP connection. No FIN packets until the connection actually is finished. It simply doesn't close the connection, allowing further requests on the same connection (because the connection is still open). The connection is closed - using the standard methods - when one side decides to close the connection (eg. after a timeout).

    What is described in the article is a bastard half-closed connection, which is completely unnecessary unless your goal is gratuitous violation of the TCP spec.

    1. Re:This is NOT the standard HTTP 1.1 keepalive by RickHunter · · Score: 5, Informative

      What is described in the article is a bastard half-closed connection, which is completely unnecessary unless your goal is gratuitous violation of the TCP spec.

      You know, I seem to recall some guy saying that Microsoft's long-term goal was to embrace, extend, extinguish TCP/IP. And that they'd start by making tiny little changes so that Microsoft programs talking to Microsoft programs worked much better than Microsoft/non-Microsoft. He got booed down quite loudly - everyone claimed that they could never try anything like that. It'd be noticed immediately and they'd have a PR disaster.

      The odd thing? He was half-right. He was wrong only in saying that they hadn't done it yet.

  31. You forgot one.. by warpSpeed · · Score: 4, Funny
    6. By the time the story is repeated/reposted on /. the site should be prepared with more bandwidth for a second /.-ing :-)

  32. Re:Sounds pretty decent... by moncyb · · Score: 5, Insightful

    Read the article closly. A request from IE to a non-ms server will take longer than a request from a normal browser using compliant TCP to the same server. This not only gives IE a speed advantage with IIS, it makes non-ms servers appear slower than they actually are when you use IE! The only speed advantage is with IE and IIS. As I remember, this sounds like part of the antitrust case against microsoft.

  33. sigh ... mod -1 disinformative? by Edgewize · · Score: 5, Informative

    The parent +5 post is flat out wrong. This is not about persistant connections, which is a high-level HTTP feature that keeps a connection open so that the browser can send more requests. This is about a low-level TCP hack that IE uses to get a small speed boost on IIS servers, while breaking TCP standards compliance.

    If I read the article correctly, instead of creating a new TCP connection and then sending a request, IE sends the request immediately without bothering to finish the TCP handshake. Microsoft IIS web servers deal with it automatically, and it is faster because it saves a round-trip wait for the ACK and the following requset.

    The down side is that non-IIS servers have no clue what this incoming packet is. It must be invalid because it is not a SYN. So it gets thrown away, and the server might or might not reset the connection. If a non-IIS server resets the connection, IE goes with a standard TCP handshake and has wasted only the round trip time for the request packet and the RST. But if the server swallows the invalid packet and does not send a RST, then Internet Explorer will just sit around for a few seconds until it times out and falls back to a standard TCP conection.

    The summary is that IE is breaking the TCP protocol for a small speed boost when connecting to IIS servers. It results in a small speed penalty when connecting to most non-IIS servers. When connecting to non-IIS servers that do not reset the connetion, it results in a very noticable delay.

    It could also be a potential security risk, because if this is true, then it makes it very easy to IP-spoof a HTTP request against IIS (since the request is a self-contained packet instead of a long connection sequence).

  34. This is a hoax! by hotpotato · · Score: 5, Informative
    This seems to be a hoax.

    Here's a tcpdump for www.microsoft.com, on an XP box:

    03:47:16.259661 10.0.0.52.1328 > www.us.microsoft.com.http: S 2485226999:2485226 999(0) win 16384 (DF)
    03:47:16.279661 www.us.microsoft.com.http > 10.0.0.52.1328: S 631604626:63160462 6(0) ack 2485227000 win 65535 (DF)
    03:47:16.289661 10.0.0.52.1328 > www.us.microsoft.com.http: . ack 1 win 17520 (D F)
    03:47:16.289661 10.0.0.52.1328 > www.us.microsoft.com.http: P 1:398(397) ack 1 w in 17520 (DF)
    03:47:16.339661 www.us.microsoft.com.http > 10.0.0.52.1328: . ack 398 win 65139

    And here's for www.msn.com:

    03:50:22.169661 10.0.0.52.1397 > www.msn.com.http: S 2535664221:2535664221(0) wi n 16384 (DF)
    03:50:22.199661 www.msn.com.http > 10.0.0.52.1397: S 3601141750:3601141750(0) ac k 2535664222 win 65535 (DF)
    03:50:22.209661 10.0.0.52.1397 > www.msn.com.http: . ack 1 win 17520 (DF) 03:50:22.209661 10.0.0.52.1397 > www.msn.com.http: P 1:391(390) ack 1 win 17520 (DF)
    03:50:22.269661 www.msn.com.http > 10.0.0.52.1397: . ack 391 win 65146

    These look like perfectly valid TCP handshakes. I did notice that when refreshing a site, IE reuses the previous connection, but that's legal (assuming it used Connection: KeepAlive in the HTTP header. I didn't verify that.)

    The samples were taken on my network's gateway, which is a Linux box, hence impartial :)

    But don't take my word for it. Try it yourself!

  35. Re:Cut n Paste by damiam · · Score: 4, Funny
    Steps:

    2.1. Invent time machine 2.2. Go back to before the time of the Karma Cap 2.3. Whore madly for karma 2.4. Leave the account dormant until now 2.5. Sell 300-karma account on eBay to an infamous troll 3. Profit!!!

    --
    It's hard to be religious when certain people are never incinerated by bolts of lightning.
  36. Re:slashdotted by chunkwhite86 · · Score: 4, Insightful

    It is preposterous to expect slashdot to be responsible for linking to someone else's site. By putting content on the WWW, you are explicitly allowing others to visit your site.

    The site operators are the ones who are liable for their own content and their own bandwidth usage. If they don't want more than a certain number of people visiting their site, they should tweak their web server accordingly. Not everyone has bandwidth that is metered.

    just my 2 cents.

    --
    I'd rather be a conservative nutjob than a liberal with no nuts and no job.
  37. Re:Cut n Paste by Sunda666 · · Score: 5, Interesting

    Unless they are *not* using the standard sockets interface... rather using some undocumented hack inside win32 that does this (hey, linux has something like this, its called the "Packet Generator"(LOL), but it is atleast documented (and has its usage higly counter-recommended)). Man, if this is the case, I see some ppl getting pretty pissed off. Thats why closed-source monopoly software is not a Good Thing (TM). Anyone remember the stories about M$ using undocumented windows APIs in Office to be faster than the competition?

    cheers.

    --


    ``If a program can't rewrite its own code, what good is it?'' - Mel
  38. Re:Still need the connection setup? by Todd+Knarr · · Score: 5, Informative

    It is being set up properly. What happens is that the browser hasn't closed it's half of the connection. When the next request happens it tries a TCP write, but since the server side has closed the connection the write fails. That's what's confusing the blog author, they're not familiar with the TCP protocol. A TCP connection has two halves and it's entirely legal to close one half but not the other, leaving a socket that can be read from but not written to (or vice versa). IE doesn't check for the server-side close like it should, treats the socket as if it's writable (which it is) and writes to it. Since the server's closed the socket on it's end, that attempted write generates an RST (which is TCPly correct), the browser gets a write error and finally notices that it's connection has been closed by the remote end, closes everything down like it should have much earlier and builds a completely new socket.

    You can get this same behavior between two Linux systems. The server side goes:

    1. socket(...)
    2. listen(...)
    3. accept(...)
    4. read(...)
    5. write(...)
    6. shutdown( SHUT_RDWR )
    7. close()
    The client side goes:
    1. socket(...)
    2. connect(...)
    3. write(...)
    4. read(...)
    5. write(...)
    6. Note error
    7. close(...)
    8. socket(...)
    9. connect(...)
    In IE, steps 3 and 4 in the client handle one request. Step 5 is an attempt to handle the next request assuming that the server handles persistent connections. Step 6 is where IE notices that the server doesn't do persistent connections.

    The right thing to do would be to notice the HTTP version and lack of a Connection: header indicating support for persistent connections in the response and close the connection upon receipt of the response. IE is stupid in not handling non-persistent-connection servers as it should, but it's not violating or even bending the TCP protocol spec in any way. It's just stupid coding.

  39. Re:This sounds like a cock-up, not a conspiracy by spectecjr · · Score: 4, Insightful

    Atleast from IE's point of view. It sounds as though the way pipelining is done is by simply trying a request first and they are using some low level api to the network stack. So if the connection happens to be open they get a speed up, if not they get a slow down. Seeing as the connection is going to be open more than it is closed it's a general plus.

    No, they're just calling
    WSAConnect (MSDN Library documentation).

    But hey, who am I to get in the way of a good conspiracy theory with real data?

    Simon

    --
    Coming soon - pyrogyra
  40. i'd like to see... by drDugan · · Score: 4, Interesting

    something I can run on my apache server that rejects clients that don not follow the rfc for tcp/ip, and hence rejects ie

    I've toyed with blocking based on agent string, but that seems cruel and stoops to the level of MS...(who do this regualrly) and besides, it goes against my beliefs of software choice... however, it would be nice to redirect peopel to a page that says, "Your browser is not standards-compliant"

  41. closer look at the TCP teardown procedure by kelnos · · Score: 5, Insightful
    Last time I checked, most web servers could reject persistent connections.

    Speaks pretty poorly of the server (or network architecture) if your only recourse is to say "it's the client's fault!"
    this isn't the same deal. based on the TCP specs, here is what a server (or client, for that matter) is supposed to do when it wants to close the connection:
    1) send FIN
    2) wait for ACK
    3) wait for FIN
    4) send an ACK
    if the server never receives the FIN in step 3, it assumes that the client wants to keep the connection open for some reason. this is _correct behaviour_ with regards to the TCP spec. if this article is correct, MS is merely exploiting the TCP spec to its advantage. yes, it's dirty and wastes resources, but it works.

    the thing that bothers me tho, is this is what should be happening on the server end (a non-IIS server, that is):
    1) send FIN
    2) wait for ACK
    3) ok, got ACK, now wait for FIN
    4) (after timeout) hmm, no FIN, must have been lost, so we'll resend our FIN
    5) client ACKs that FIN, but doesn't send its FIN
    6) server thinks the response FIN is lost again, so probably resends its FIN

    now the server will have a max amount of retries before it gives up and finally drops the connection (which is what it was trying for in the first place anyway). this should be a relatively low number, and the timeouts between each retransmission shouldn't be that long either. so unless IE comes back and requests another page fairly quickly, the server _should_ go ahead and drop the connection, so i fail to see how this is a problem.

    the only thing i can think of is that the client keeps responding with an ACK to the server's FINs (despite not sending its own FIN), so maybe the server won't drop the connection for that reason (since the client is obviously still alive, just not responding as expected). i don't remember the TCP spec all that clearly with regards to connection teardown, so that may be where IE is able to keep the connection open.

    then again, i could be totally wrong here, but i don't think so...
    --
    Xfce: Lighter than some, heavier than others. Just right.
    1. Re:closer look at the TCP teardown procedure by Anonymous Coward · · Score: 5, Funny

      It's polite to say goodbye before you hang up the phone, but you don't have to keep saying goodbye until the other guy hangs up (unless you're in love)

    2. Re:closer look at the TCP teardown procedure by Elwood+P+Dowd · · Score: 5, Informative

      IE doesn't exhibit this behavior with servers that don't support http pipelining/keepalives/whatever.

      IIS isn't the only server that supports it, btw. Apache does, and I imagine Tux or whatever the current kernelspace webserver is supports it too.

      Also, your second scenario, for a server that doesn't understand the keepalive, is, as you allow, completely wrong. If a server could be confused in such a manner, then it would be trivial to write a DoS attack for the server that would not require large amounts of bandwidth.

      --

      There are no trails. There are no trees out here.
  42. Not reproducsble with MSIE 5.0 on Win98 by pjrc · · Score: 4, Informative
    I just fired up a vmware session with windows 98 and did a test with MSIE 5.00.2614.3500 (the one that came installed with win98 second edition, no patches or updates). Watching the ethernet with tcpdump, I did not see the behaviour specified.

    I then fired up Windows XP Pro. XP sends lots of netbios stuff at startup and periodically. Very interesting. But again, nothing nearly as interesting as this article suggests. MSIE 6.0.2600.0000... also did not reproduce this non-RFC behavior.

    Here is the packet log from tcpdump, with some comments. 192.168.194.211 is the Windows XP client. 192.168.194.1 is the nameserver, and 66.218.71.83 is the web server (www.yahoo.com).

    First, XP asks the nameserver for the IP number of www.yahoo.com
    15:19:50.426473 192.168.194.211.1026 > 192.168.194.1.domain: 2+ A? www.yahoo.com. (31)

    The nameserver responds
    15:19:50.702603 192.168.194.1.domain > 192.168.194.211.1026: 2 10/11/0 CNAME[|domain] (DF)

    XP/MSIE sends a normal SYN packet. There is no non-RFC packet transmitted before this standard SYN packet, corresponding to an already-open connection before this as the article claims.
    15:19:50.734980 192.168.194.211.1032 > 66.218.71.83.http: S 3861657940:3861657940(0) win 16384 <mss 1460,nop,nop,sackOK> (DF)

    Yahoo responds with a normal SYN
    15:19:50.797377 66.218.71.83.http > 192.168.194.211.1032: S 3674114276:3674114276(0) ack 3861657941 win 65535 <mss 1460> (DF)

    XP/MSIE sends a normal ACK to finish the connection setup
    15:19:50.802506 192.168.194.211.1032 > 66.218.71.83.http: . ack 1 win 17520 (DF)

    XP/MSIE sends the HTTP request (196 bytes)
    15:19:50.809064 192.168.194.211.1032 > 66.218.71.83.http: P 1:197(196) ack 1 win 17520 (DF)

    Yahoo responds with the first 1460 bytes of data
    15:19:50.907564 66.218.71.83.http > 192.168.194.211.1032: . 1:1461(1460) ack 197 win 65535 (DF)

    XP/MSIE acks it
    15:19:50.919180 192.168.194.211.1032 > 66.218.71.83.http: . ack 2921 win 17520 (DF)

    Yahoo responds with another 1460 bytes
    15:19:50.923751 66.218.71.83.http > 192.168.194.211.1032: . 2921:4381(1460) ack 197 win 65535 (DF)

    XP/MSIE acks it
    15:19:50.941174 192.168.194.211.1032 > 66.218.71.83.http: . ack 4381 win 17520 (DF)

    Yahoo responds with two more packets
    15:19:50.999791 66.218.71.83.http > 192.168.194.211.1032: . 4381:5841(1460) ack 197 win 65535 (DF)
    15:19:51.007961 66.218.71.83.http > 192.168.194.211.1032: . 5841:7301(1460) ack 197 win 65535 (DF)

    XP/MSIE acks that it has received up to 7301. Notice how Microsoft is properly delaying the ack until a second packet is received.
    15:19:51.013652 192.168.194.211.1032 > 66.218.71.83.http: . ack 7301 win 17520 (DF)

    So there are two tests, with the MSIE shipped (unpatched) with Windows 98 SE and Windows XP Pro. It looks like there just isn't a story here.

    1. Re:Not reproducsble with MSIE 5.0 on Win98 by MoosePirate · · Score: 4, Informative

      You put a lot of work into that. But alas, Yahoo isn't using IIS so its all a moot point. The idea is that the combination of IE and IIS will cause this. Netcraft shows that Yahoo is running FreeBSD, and thus NOT IIS.

    2. Re:Not reproducsble with MSIE 5.0 on Win98 by pjrc · · Score: 5, Informative
      ok, why not. I've got a bit of time tonight (girlfriend left for a business trip with early monday morning meetings).

      This time, I tried www.intel.com (which is an IIS server). It is a bit more complicated because content comes from multiple servers. You'll see that on the second access, where all the content is caches and IE already knows a list of IP numbers it wants to contact to check if the cached copy is up to date.

      Cutting to the chase: we see 1 connection opened in the first group of packets (I didn't include enough to see the later connections for the content from other servers) and 4 connections opened in the second group of packets when reloading the page 4 minutes later. All connections are opened in an RFC compliant manner, with no requests sent before the connection is properly opened as the article claims.

      MSIE asks IP address of www.intel.com
      22:56:51.812091 192.168.194.211.1026 > 192.168.194.1.domain: 7+ A? www.intel.com. (31)

      Nameserver responds
      22:56:51.924028 192.168.194.1.domain > 192.168.194.211.1026: 7 2/2/0 CNAME www.glb.intel.com., (105) (DF)

      MSIE starts connection with normal SYN
      22:56:51.931109 192.168.194.211.1048 > 198.175.96.33.http: S 3669105715:3669105715(0) win 16384 <mss 1460,nop,nop,sackOK> (DF)

      Intel responds with SYN/ACK
      22:56:51.982576 198.175.96.33.http > 192.168.194.211.1048: S 1792107795:1792107795(0) ack 3669105716 win 8192 <mss 1460>

      MSIE responds with ACK to finish opening the connection
      22:56:51.982969 192.168.194.211.1048 > 198.175.96.33.http: . ack 1 win 17520 (DF)

      MSIE sends HTTP request (249 bytes)
      22:56:51.983879 192.168.194.211.1048 > 198.175.96.33.http: P 1:250(249) ack 1 win 17520 (DF)

      Intel responds with ACK (but no data yet)
      22:56:52.040913 198.175.96.33.http > 192.168.194.211.1048: . ack 250 win 8192

      Intel responds with two packets, each carrying 1460 bytes of data
      22:56:52.064191 198.175.96.33.http > 192.168.194.211.1048: . 1:1461(1460) ack 250 win 17271 (DF)
      22:56:52.072302 198.175.96.33.http > 192.168.194.211.1048: . 1461:2921(1460) ack 250 win 17271 (DF)

      MSIE acks both of them (delay ACK as per RFC)
      22:56:52.072713 192.168.194.211.1048 > 198.175.96.33.http: . ack 2921 win 17520 (DF)

      Intel sends more data
      22:56:52.141252 198.175.96.33.http > 192.168.194.211.1048: . 2921:4381(1460) ack 250 win 17271 (DF)

      MSIE responds
      22:56:52.141712 192.168.194.211.1048 > 198.175.96.33.http: . ack 4381 win 17520 (DF)

      Many hundred more packets occur, with connections established to other servers (opened the normal RFC compliant) way.

      .

      And here is view the same page about 4 minutes later

      .

      MSIE sends SYN to open connection to 198.175.96.33 (connection #1)
      23:00:26.798508 192.168.194.211.1062 > 198.175.96.33.http: S 3723498008:3723498008(0) win 16384 <mss 1460,nop,nop,sackOK> (DF)

      MSIE sends SYN to open connection to 216.203.32.78 (connection #2)
      23:00:26.802485 192.168.194.211.1063 > 216.203.32.78.http: S 3723557647:3723557647(0) win 16384 <mss 1460,nop,nop,sackOK> (DF)

      MSIE sends SYN to open connection to 64.154.80.51 (connection #3)
      23:00:26.826112 192.168.194.211.1064 > 64.154.80.51.http: S 3723624012:3723624012(0) win 16384 <mss 1460,nop,nop,sackOK> (DF)

      Notice the absence of any packet related to an already-open connection, as the article claimed. Below MSIE opens a 4th connection to another server, again using the RFC compliant SYN-SYN/ACK-ACK sequence before and data exchange takes place.

      Intel respond with its SYN/ACK to open the connection (#1)
      23:00:26.853681 198.175.96.33.http > 192.168.194.211.1062: S 626928500:626928500(0) ack 3723498009 win 8192 <mss 1460>

      MSIE (for some reason) sends a RST and terminates connection #1. Perhaps it abandoned the connection after calling connect (or whatever MSIE calls if it's not using the normal sockets API), maybe because it didn't really need to check if the file cached from this server is up to date. Better programmers might have simply avoided attempting to open the connection in the first place, but it's certainly allowed to abandon an open like this and sending a RST packet to abort opening the connection is legal TCP behavior.
      23:00:26.855874 192.168.194.211.1062 > 198.175.96.33.http: R 3723498009:3723498009(0) win 0

      (#3) responds with SYN/ACK to open connection #3
      23:00:26.900586 64.154.80.51.http > 192.168.194.211.1064: S 2830569043:2830569043(0) ack 3723624013 win 33580 <nop,nop,sackOK,mss 1460> (DF)

      (#2) responds with SYN/ACK to open connection #2
      23:00:26.909440 216.203.32.78.http > 192.168.194.211.1063: S 3187959102:3187959102(0) ack 3723557648 win 8760 <nop,nop,sackOK,mss 1460> (DF)

      MSIE sends ACK to finish opening connection #3
      23:00:26.912141 192.168.194.211.1064 > 64.154.80.51.http: . ack 1 win 17520 (DF)

      MSIE sends ACK to finish opening connection #2
      23:00:26.914312 192.168.194.211.1063 > 216.203.32.78.http: . ack 1 win 17520 (DF)

      MSIE transmits HTTP request (331 bytes) on connection #3
      23:00:26.917184 192.168.194.211.1064 > 64.154.80.51.http: P 1:332(331) ack 1 win 17520 (DF)

      MSIE transmits HTTP request (267 bytes) on connection #2
      23:00:26.919711 192.168.194.211.1063 > 216.203.32.78.http: P 1:268(267) ack 1 win 17520 (DF)

      connection #3 reponds with ACK to the request
      23:00:27.009910 64.154.80.51.http > 192.168.194.211.1064: . ack 332 win 33580 (DF)

      connection #3 reponds with FIN (close connection) - delivered out of order by the internet!!!
      23:00:27.010734 64.154.80.51.http > 192.168.194.211.1064: F 517:517(0) ack 332 win 33580 (DF)

      MSIE responds with ACK at byte 1 (saying it hasn't received the data yet)
      23:00:27.013719 192.168.194.211.1064 > 64.154.80.51.http: . ack 1 win 17520 <nop,nop,sack sack 1 {517:518} > (DF)

      connection #3's data finally arrives (presumably server send this before the FIN but it was delivered out-of-order)
      23:00:27.017008 64.154.80.51.http > 192.168.194.211.1064: P 1:517(516) ack 332 win 33580 (DF)

      MSIE responds with an ACK that is received all 517 bytes. Obviously HTTP/1.1 is in use here and the response with something like a 304 telling MSIE that the copy it has in its cache is up to date.
      23:00:27.019072 192.168.194.211.1064 > 64.154.80.51.http: . ack 518 win 17004 <nop,nop,sack sack 1 {517:518} > (DF)

      MSIE transmits FIN to close connection #3
      23:00:27.022234 192.168.194.211.1064 > 64.154.80.51.http: F 332:332(0) ack 518 win 17004 (DF)

      MSIE decides to open a 4th connection, and again uses a standard SYN packet
      23:00:27.026125 192.168.194.211.1065 > 64.154.80.51.http: S 3723719998:3723719998(0) win 16384 <mss 1460,nop,nop,sackOK> (DF)

      connection #2 ACKs the request, but does not send any data yet
      23:00:27.035684 216.203.32.78.http > 192.168.194.211.1063: . ack 268 win 8760 (DF)

      connection #2 sends FIN (connection close) at 441st byte (delivered out of order)
      23:00:27.081678 216.203.32.78.http > 192.168.194.211.1063: F 441:441(0) ack 268 win 8760 (DF)

      MSIE sends ACK at byte 1 (didn't receive the 440 bytes) to connection #2
      23:00:27.083705 192.168.194.211.1063 > 216.203.32.78.http: . ack 1 win 17520 <nop,nop,sack sack 1 {441:442} > (DF)

      connection #2's 440 bytes of data arrive
      23:00:27.087099 216.203.32.78.http > 192.168.194.211.1063: P 1:441(440) ack 268 win 8760 (DF)

      MSIE sends ACK for all 440 bytes (again, probably a HTTP 304 response)
      23:00:27.089153 192.168.194.211.1063 > 216.203.32.78.http: . ack 442 win 17080 <nop,nop,sack sack 1 {441:442} > (DF)

      MSIE sends FIN to close connection #2
      23:00:27.092288 192.168.194.211.1063 > 216.203.32.78.http: F 268:268(0) ack 442 win 17080 (DF)

      connection #3 sends another ACK (I'm not exactly sure why)
      23:00:27.096392 64.154.80.51.http > 192.168.194.211.1064: . ack 333 win 33580 (DF)

      (#4) responds with SYN/ACK to open connection #4
      23:00:27.100604 64.154.80.51.http > 192.168.194.211.1065: S 1240818516:1240818516(0) ack 3723719999 win 33580 <nop,nop,sackOK,mss 1460> (DF)

      MSIE sends ACK to finish opening connection #4
      23:00:27.101961 192.168.194.211.1065 > 64.154.80.51.http: . ack 1 win 17520 (DF)

      MSIE sends HTTP request (333 bytes) on connection #4
      23:00:27.112355 192.168.194.211.1065 > 64.154.80.51.http: P 1:334(333) ack 1 win 17520 (DF)

      .

      So, there you have it... a test viewing the same page twice (though the article mentions MSIE tries this speculatively) and done with an IIS-based website (though the article claims MSIE tries this with all sites and it slows down with non-IIS and speeds up with IIS).

      All the connections are opened here in an RFC compliant manner.

  43. Even more interesting..... by inKubus · · Score: 4, Interesting

    What is much more interesting is what IE does AFTER it sends that first request without opening the connection... You know the lovely MSN Search page it loves to pop up? Everytime IE encounters (for the first time in each session) a non-IIS server, it promptly connects to MSN Search and submits the website address....

    You are being watched, friends.

    --
    Cool! Amazing Toys.
  44. Hey, this is Microsoft by Alien+Being · · Score: 5, Funny

    Is there anyone out there who really expected their *handshake* to mean something?

  45. Re:MSIE is to blame! by Ageless · · Score: 5, Insightful

    Since when was there anyone else... that mattered? :)
    Majority rules baby. Live with it or do something to change it.

  46. Re:DNS is a possibility by MillionthMonkey · · Score: 5, Interesting

    When trying to connect to an address of form 1.2.3.4, the program would halt for some twenty-thirty seconds before proceeding.

    IIRC this was a problem with Sun's implementation of InetAddress.getByName() on Windows. When passed a string containing a dotted numeric quad, it stupidly tried to do a DNS lookup on it instead of simply filling in the four bytes and handing you an InetAddress. Because who knows- maybe someone registered "192.168.1.23" as a domain name! (Which would be akin to registering "microsoft.com" with a Cyrillic "o", but never mind.) Then of course your thread stalled inside InetAddress for half a minute while it waited for the DNS timeout. This makes me suspect that Sun's code was waiting for the successful DNS response and ignoring the failure response that actually arrived. Probably the same moron was responsible for both bugs. Editing the hosts file became the standard workaround.

    I don't know when it got fixed but there's code in there to check for a dotted quad now.

  47. horse manure... by Supp0rtLinux · · Score: 5, Informative

    Whoever wrote this and his 'team' are tards. What they were seeing was a keep-alive (persistent) connection, or a persistent connection...it's total BS that IE would ever send a request to a host without a connection already being open. IIS just allows for persistent connections...when you hit blah.com, you open the sock, send your request and all and specify keep-alive. Now, the socket just stays open, so when they hit another page on the same host, they send a request to the already-open socket without the initial 3-way handshake since they've already done that. If it was true that IIS allowed IE to get a page without a 3-way handshake first (not that the Windows TCP/IP stack would even _allow_ that packet to get through because it's based off of the BSD TCP/IP stack, and a 3-way handshake _must_ be done before any data can get to a user-land socket..and not like any NATed routers would let it through, either), it would allow total TCP hijacking and DoS's But it's always nice to see that people who don't know jack are able to post stuff to slashdot ;o

  48. Data after FIN shouldn't be allowed by Krellan · · Score: 4, Interesting

    The 4 steps when the server finishes sending data and closes the connection, from the article:


    Client Server
    <-- FIN
    ACK -->
    FIN -->
    <-- ACK


    When the server has no more data, it sends FIN.

    The server should not be allowed to send more data after the FIN! This is a violation of the TCP spec. Otherwise, how would clients truly know whether or not the server had more data to send?

    TCP does support something called "half close". It is possible to indicate that you have no more data to send, but that you are still willing to receive data. This is why both sides must send FIN, in order to cleanly close the connection. If one side sends FIN but the other doesn't, the connection remains open, but data can only flow in one direction (sending from the side that did not send the FIN). This is useful for cleanly shutting down connections and making sure that both sides receive all the data they were expecting.

    In the example from the article, when the client receives a FIN but does not send a FIN of its own, this is legal: the TCP connection now is one way, and data can only be sent from the client to the server. The server is not allowed to send more data. So, if IIS is doing this, it is breaking the spec. It is important to note that the client is doing nothing wrong in this case.

  49. This MAY be the first time a FP got a score of 5! by gatesh8r · · Score: 4, Funny

    Mark this down on the calanders everyone...

    --
    Karma whorin' since 1999
  50. This is getting ridiculous by zjbs14 · · Score: 5, Insightful

    700+ comments, 95% of which are:
    - MS sucks for breaking RFC's
    - Apache should do something about it
    - Users of IE are clueless morons.

    All of this because some blogger can't read a packet trace correctly. Everyone in the thread who's actually TRIED it (the other 5%) hasn't seen this behavior.

    There's no way anything's going to work if IE doesn't send a SYN. Nothing, Nada, Zip. It just won't happen. Firewalls, NAT, transparent proxies would kill it. IIS isn't going to care, the TCP/IP stack won't even let it get there. Same goes for Apache. Get THE book on TCP/IP and find out why.

    I think this thread is a prime example of what Slashdot has become. Never mind news for nerds (definition not limited to the Linux crowd) and stuff that matters. We'll post anything as long as it's anti-MS.

    --
    No sig, sorry.
  51. There is something wrong with your eyes by FooBarWidget · · Score: 5, Insightful

    I don't know where you get those "95% of which are blabla" from, but I see 800+ comments:
    - 70% "the article is fake!" or "I tested it but IE use standard TCP requests. fuck you anti-Microsoft Linux zealots!"
    - 10% "MS sucks"
    - 10% junk/flamebait/trolls/crapfloods

    Sorry, but your claims are completely false. Slashdot is everything but anti-MS. Why do you think your post is modded as +5 Insightful?
    That Slashdot is an anti-MS site is simply false. People have been saying how Slashdot is anti-MS for centuries but every time I browse through the comments, there are always lots and lots of pro-MS comments, a lot of them are even modded +3/+4/+5.