Ethereal-dev: RE: [Ethereal-dev] TCP/IP Retransmission
Note: This archive is from the project's previous web site, ethereal.com. This list is no longer active.
From: Biot Olivier <Olivier.Biot@xxxxxxxxxxx>
Date: Fri, 26 Mar 2004 17:37:58 +0100
I don't want to add to the polemic, but I can add a note of what I've personally seen in practice :) The RST trick will do a "fine" job in most of the "well-behaved" networks... where the TCP (client) protocol stack implements the state transition from all states (different from SYN-RECEIVED) when receiving a RST. >From the moment that you get network (or CPU) congestion, or multiple routes, or you're talking about wireless links, you *cannot* guarantee the in-sequence delivery of messages. As a result, if the server sends an ACK segment and after some time a RST segment, the possibility that the RST arrives to the client *before* the ACK has to be considered. A) Packet swapping often occurs in temporary congestion scenarios where the operation mode of some network equipment partly switches from queue (FIFO) mode to stack (LIFO) mode. B) Packet swapping is also very common in situations where connection load balancing/distribution occurs as you *cannot* ensure that both routes will have the same delay. C) Last but not least, and this is really nasty, some web switches simply drop out-of-order packets when running in specific operation modes, so the end device will never receive the RST segment and it may be willing to continue to use the connection that is still available to his knowledge. These problems are really hard to track down. Of course, nobody forbids us to be creative, but when the problems *are* known you may want to evaluate the introduced risk. If you want to take this risk, you have to live with the implied consequences. And if you're bound to a SLA in which performance is described, you'll have serious problems in fixing the errors introduced by the unexpected packet swapping as you'll have a decreased performance, but that's leading us far from home :) The funny thing is that people still try "optimizing" a protocol which is already about a quarter of a century old, and it still surprises me that there has not been a single major successful attempt at replacing TCP with a more "efficient" reliable streaming protocol :) Finally, I *personally* don't believe in a one-size-fits-all protocol that is the best protocol in all situations. But I *personally* believe that a well-designed protocol is an authoritative reference. Again, this paragraph is my *personal* opinion and you may take it for what it's worth. Best regards, Olivier |-----Original Message----- |From: Scott Emberley | |Think about what's really happening. The RST is after the client acks |(if you actually took the time to look). I can serve 20% more |clients in |the same time period (since we are talking about WEB servers). Open |your eyes and look at what's happening and its benefits rather that |pissing about the fact that some piece of code was not written robustly |enough to handle a procedure that is defined by the specification. | |Note: Those nice guys who put the pretty butterfly on your web |page were |the first guys to use this process and others followed. | |Note: "Wrong" and "Stupid" is an attitude problem for software |developers. Creative, open minded and flexible attitudes would be more |helpful and productive. | |-----Original Message----- |From: ethereal-dev-bounces@xxxxxxxxxxxx |[mailto:ethereal-dev-bounces@xxxxxxxxxxxx] On Behalf Of Pia Sahlberg |Sent: Friday, March 26, 2004 3:25 AM |To: ethereal-dev@xxxxxxxxxxxx |Subject: RE: [Ethereal-dev] TCP/IP Retransmission | |>"wrong" and "stupid" are funny terms for open source |developers to use |>when talking about someones efforts to improve performance |(even if you | |>do not agree with the procedures)... | |lets clarify with an example: |It is wrong and stupid since it removes one of the nice features of TCP |: |reliability. | |Without thinking an implementoir might think lets just RST the session |after i sent out the last segment to the other and performance will be |better than doing it the real way with FIN. | |So he writes code that generates packets like : |Server->Client TCP last segment of the data pdu |Server->Client TCP RST | |Now, will the server ever know if teh data was received reliably or |not? |Will it even work? |Think packet reordering. When the RST arrives to the client before the |data segment so the client kills the session before it has |even received |the data it was waiting for. |Bad. |This can not happen if you close the session using FIN. | | |So essentially that implementation is now using unreliable tcp and no |one |can figure out why there are sometimes "issues" causing the client to |reissue the commands across a new session. |Worse, Server does not even know whether the client received |the data or | |not. |whats the point in using TCP if not to know whether the data arrived |safely |to the other end or not. | |_________________________________________________________________ |What's your house worth? Click here to find out: |http://www.ninemsn.realestate.com.au | |_______________________________________________ |Ethereal-dev mailing list |Ethereal-dev@xxxxxxxxxxxx |http://www.ethereal.com/mailman/listinfo/ethereal-dev | |____________________________ |This email has been scanned. | |_______________________________________________ |Ethereal-dev mailing list |Ethereal-dev@xxxxxxxxxxxx |http://www.ethereal.com/mailman/listinfo/ethereal-dev |
- Follow-Ups:
- RE: [Ethereal-dev] TCP/IP Retransmission
- From: Richard Sharpe
- RE: [Ethereal-dev] TCP/IP Retransmission
- Prev by Date: [Ethereal-dev] Ethereal 0.10.3 Win32 installer: broken ethereal-filter.html
- Next by Date: [Ethereal-dev] FW: [Ethereal-users] Support for Lotus Sametime
- Previous by thread: RE: [Ethereal-dev] TCP/IP Retransmission
- Next by thread: RE: [Ethereal-dev] TCP/IP Retransmission
- Index(es):