1998-09-16 16:12:46

by Erik Elmgren

[permalink] [raw]
Subject: Re: RTO [was Re: my broken TCP is faster on broken networks [Re: Very poor TCP/SACK performance]]

Quoting Andrea Arcangeli ([email protected]):
> On Wed, 16 Sep 1998, Savochkin Andrey Vladimirovich wrote:
>
> >> Steven's books and the tcp-impl "known TCP implementation problems"
> >> draft, amongst other places.
>
> Thanks. I' ll search for the draft (BTW, if anyone has a URL pointer could
> save me the time for the search ;-).

http://www.ietf.org/internet-drafts/draft-ietf-tcpimpl-prob-04.txt

It lists:

No initial slow start
No slow start after retransmission timeout
Uninitialized CWND
Inconsistent retransmission
Failure to retain above-sequence data
Extra additive constant in congestion avoidance
Initial RTO too low
Failure of window deflation after loss recovery
Excessively short keepalive connection timeout
Failure to back off retransmission timeout
Insufficient interval between keepalives
Stretch ACK violation
Retransmission sends multiple packets
Failure to send FIN notification promptly
Failure to send a RST after Half Duplex Close
Failure to RST on close with data pending
Options missing from TCP MSS calculation

And is dated August 1998

The other drafts reachable through:

http://www.ietf.org/html.charters/tcpimpl-charter.html

Looks to be interesting too.

And this time I checked that it can be downloaded ;)

>
> >I have no arguments for a certain initial value of RTO.
> >If 25/4 of the initial RTT is a design decision rather than a misprint
> >I'm quite satisfied.
>

Abovementioned document quotes RFC1122, the initial RTO SHOULD be tree seconds,
but at that point it talks about RTO being to low and not to high. Neither
does it clearly state that three seconds is still the correct initial RTO.

The RTO is initialized to three seconds, see:

/usr/src/linux/include/net/tcp.h:286:#define TCP_TIMEOUT_INIT (3*HZ) /* RFC 1122 initial timeout value */

And in tcp_v4_init_sock():

tcp_ipv4.c:1756: tp->rto = TCP_TIMEOUT_INIT; /*TCP_WRITE_TIME*/

In net/ipv4/tcp.c the following error is found:

343 * Retransmission Timeout Calculation (4.2.3.1)
344 * MUST implement Karn's algorithm and Jacobson's algorithm for RTO
345 * calculation. (does, or at least explains them in the comments 8*b)
346 * SHOULD initialize RTO to 0 and RTT to 3. (does)
^ ^

It's the RTO that should be three seconds, and the RTT zero.

Regards Erik ``bigot?? Elmgren

--

I haven't lost my mind - I've got it backed up on tape somewhere...
--- unknown