tech-net archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

Re: problems in TCP RTO calculation



I've committed a large comment change.

The following diff fixes a 1-tick bias error in rtt estimation.  We have
been running it in a private tree, and I haven't tested it in current.
I'll check it in at the earlier of my testing it, someone reporting that
they have tested it, or the tech-net TCP experts concurring.

The rationale was in the previous commit.  Basically, ts_rtt is set to

   now - send + 1

so that it can be tested against 0 to represent 'no valid estimate' and
one has to undo the 1 before use.  (This was ok in 4.4BSD and is a
NetBSD regression from 15 years ago.)

Index: tcp_input.c
===================================================================
RCS file: /cvsroot/src/sys/netinet/tcp_input.c,v
retrieving revision 1.309
diff -u -p -r1.309 tcp_input.c
--- tcp_input.c 20 Apr 2011 13:35:51 -0000      1.309
+++ tcp_input.c 20 Apr 2011 13:42:32 -0000
@@ -1754,7 +1754,7 @@ after_listen:
                                 * this is a pure ack for outstanding data.
                                 */
                                if (ts_rtt)
-                                       tcp_xmit_timer(tp, ts_rtt);
+                                       tcp_xmit_timer(tp, ts_rtt - 1);
                                else if (tp->t_rtttime &&
                                    SEQ_GT(th->th_ack, tp->t_rtseq))
                                        tcp_xmit_timer(tp,
@@ -2437,7 +2437,7 @@ after_listen:
                 * Recompute the initial retransmit timer.
                 */
                if (ts_rtt)
-                       tcp_xmit_timer(tp, ts_rtt);
+                       tcp_xmit_timer(tp, ts_rtt - 1);
                else if (tp->t_rtttime && SEQ_GT(th->th_ack, tp->t_rtseq))
                        tcp_xmit_timer(tp, tcp_now - tp->t_rtttime);
 

Attachment: pgp76Q4NmXwPF.pgp
Description: PGP signature



Home | Main Index | Thread Index | Old Index