[e2e] TCP retransmissions at end of data stream
Angelo Dell'Aera
buffer at antifork.org
Tue Jun 17 12:20:00 PDT 2003
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
On Sun, 15 Jun 2003 14:09:52 -0400
Eric Travis <travis at gst.com> wrote:
>I believe that the common (but not the most agressive) solution to
>this - and a simple tweak for your implementation - is to recognize
>the *special case* where you experience a timeout while the FIN is in
>flight. Since you've already sent the FIN, you know that you will
>not have any new data to send: Upon receipt of an ACK for the initial
>retransmitted segment, you should be able to *immediately* send the
>next segment (the new snduna); When this segment is ACKed, you get to
>repeat this cycle (snduna moving toward your segment that contains
>the FIN) until you've gotten an ACK covering the FIN. (Being able to
>go into slow-start at this point is of no help in most
>implementations, as there is nothing at send_next). Assuming that
>*all* the in-flight segments were lost, this will still require one
>rtt per segment in flight, but this is still better than waiting an
>RTO between retransmitting each of the outstanding segments.
I found no rationale in this. If all the in-flight packets are lost,
RTO will fire. When it happens (in the classical Reno implementation)
ssthresh is set to max(FlightSize/2, 2*SMSS) and cwnd to 1. This leads
the sender to retransmit *just the first segment* in the retrasmission
queue while being in the slow start phase. When it receives the ACK it
increments cwnd to 2 thus being able to send two packets. If the
packets are both ACKed, cwnd will be set to 4 and so on until ssthresh
is reached as stated in RFC2581. In this perspective, I'm not able to
understand what you propose. In fact, I think there's actually no
meaning for any `special case'. Moreover, slow start is really useful
since if you lose f.e. 7 packets your solution takes 7 RTTs to recover
from this situation. Otherwise, using slow start you need just 3 RTTs.
There's no reason IMHO for a special case for a FIN packet since
- - if the receiver receives the FIN packet after an hole, it will
simply send a DUPACK not caring about FIN flag (RFC 793 - page 69 :
"If an incoming segment is not acceptable, an acknowledgment should be
sent in reply (unless the RST bit is set, if so drop the segment and
return)" ).
- - if the receiver doesn't receive it, it's just like it was never
transmitted.
Regards.
- --
Angelo Dell'Aera
Antifork Research, Inc. http://buffer.antifork.org
PGP information in e-mail header
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.2.2 (GNU/Linux)
iD8DBQE+72ngpONIzxnBXKIRAgExAKDF2CmpxjcTMAvuLe9VmNzGCjLpGgCfSNJ7
KHOFprGzh/PlI1gH5pItyKQ=
=BSLH
-----END PGP SIGNATURE-----
More information about the end2end-interest
mailing list