Re: [tcpm] initial RTO (was Re: Tuning TCP parameters for the 21st century)

Jerry Chu <> Wed, 29 July 2009 14:56 UTC

Return-Path: <>
Received: from localhost (localhost []) by (Postfix) with ESMTP id A1EC33A6F27 for <>; Wed, 29 Jul 2009 07:56:06 -0700 (PDT)
X-Virus-Scanned: amavisd-new at
X-Spam-Flag: NO
X-Spam-Score: -101.677
X-Spam-Status: No, score=-101.677 tagged_above=-999 required=5 tests=[AWL=-0.301, BAYES_00=-2.599, FM_FORGED_GMAIL=0.622, HTML_MESSAGE=0.001, J_CHICKENPOX_34=0.6, USER_IN_WHITELIST=-100]
Received: from ([]) by localhost ( []) (amavisd-new, port 10024) with ESMTP id pE3XFCUifJ9M for <>; Wed, 29 Jul 2009 07:56:05 -0700 (PDT)
Received: from ( []) by (Postfix) with ESMTP id 27AF33A6D3D for <>; Wed, 29 Jul 2009 07:56:05 -0700 (PDT)
Received: from ( []) by with ESMTP id n6TEu4eD016982 for <>; Wed, 29 Jul 2009 15:56:05 +0100
DKIM-Signature: v=1; a=rsa-sha1; c=relaxed/relaxed;; s=beta; t=1248879365; bh=wJqF5U8T8Tnnm3KA1cBq1edfo3s=; h=DomainKey-Signature:MIME-Version:In-Reply-To:References:Date: Message-ID:Subject:From:To:Cc:Content-Type:X-System-Of-Record; b=h pyiMDhyx1xi2wJza9z03INdYRHXJIlpqWPNC5ppklTm2faNHjWOY63jk6zPlaDcMp3F fcDG7Envlo4dhdUziQ==
DomainKey-Signature: a=rsa-sha1; s=beta;; c=nofws; q=dns; h=mime-version:in-reply-to:references:date:message-id:subject:from:to: cc:content-type:x-system-of-record; b=Qbt3KDEWHY1/bfVG0a35dFLQMdN68pfuIH7bO1LILj+PWWLlOYQSnJa8wTxQOq/qM y9EIsqsfuRLX9J1Tl+DZg==
Received: from ( []) by with ESMTP id n6TEu24a031353 for <>; Wed, 29 Jul 2009 07:56:02 -0700
Received: by with SMTP id c3so405418ana.17 for <>; Wed, 29 Jul 2009 07:56:02 -0700 (PDT)
MIME-Version: 1.0
Received: by with SMTP id d4mr12045650anc.39.1248879361876; Wed, 29 Jul 2009 07:56:01 -0700 (PDT)
In-Reply-To: <>
References: <> <>
Date: Wed, 29 Jul 2009 07:56:01 -0700
Message-ID: <>
From: Jerry Chu <>
Content-Type: multipart/alternative; boundary="0016e64135dcbb6531046fd9623c"
X-System-Of-Record: true
Cc: "" <>
Subject: Re: [tcpm] initial RTO (was Re: Tuning TCP parameters for the 21st century)
X-Mailman-Version: 2.1.9
Precedence: list
List-Id: TCP Maintenance and Minor Extensions Working Group <>
List-Unsubscribe: <>, <>
List-Archive: <>
List-Post: <>
List-Help: <>
List-Subscribe: <>, <>
X-List-Received-Date: Wed, 29 Jul 2009 14:56:06 -0000


On Tue, Jul 28, 2009 at 11:35 AM, Mark Allman <> wrote:

> Jerry-
> > So the active open side has retransmitted SYN, assuming initRTO of
> > 1sec, and eventually received a SYN-ACK but the TS option was
> > denied so no good RTT sample can be taken. It will continue to send
> > the init data with the initRTO.
> >
> > If the SYN retransmission has been unnecessary because the initRTO has
> > been too aggressive, more SYN-ACK will be triggered. Assuming these
> > dup SYN-ACKs are not lost, could they be used as a hint to the active
> > open side that the initRTO has been too short, so that the RTO timer
> > can be reverted back to 3secs immediately, in time to avoid further
> > RTO hell?
> So, you're saying that if you send N SYNs (N>1) and you get N SYN+ACKs
> then you take that to mean the initRTO was too short.
> Yeah, perhaps ...
> Are you suggesting something like this ...
>  (1) Use an initRTO of 1sec.
>  (2) If the RTO fires and you retransmit the SYN back the RTO to 3sec.
>      (And, if necessary you exponential backoff even more.)
>  (3) After the 3WHS you will either (a) have a good RTT sample from the
>      timestamp option and can therefore set the RTO reasonably or (b)
>      you retain the 3sec RTO until you get a good RTT sample.
> ??
> That means that if 1sec is not enough in the 3WHS you have to use 3sec
> until you have some idea about the network.  However, you also get a
> shot [*one shot*] to retransmit sooner based on the notion that most
> RTTs are less than 1sec.
> I think I buy that notion ... that both allows for more aggressiveness
> for the common case while also protecting against RTO Hell for the long
> path cases.  Is that the right walking of the line?

I can think of a number of variations. The one-shot 1-sec-initRTO idea you
described above also came through my mind but the drawback is you only
get one-shot even though we know statistically > 98% of connections
have RTT < 1 sec so most likely the continuous use of 1-sec-initRTO will
out to be better. (A counter argument might be one-shot is "good enough",
benefitting > 90% of the cases statistically...) The advantage of it is its
restricting the max # of spurious retransmissions caused by the reduced
to 1, and obviously avoiding the RTO hell problem.

A different variation that is slightly more complex but allowing the reduced
initRTO to be used more than one-time (hence potentially providing more
to those > 98% connections) is to only terminate its use upon the detection
of spurious retransmission. Specifically -

1. initRTO = 1sec
2. if a valid pkt with the SYN bit on is received (so it could be either SYN
SYN-ACK) and the following two conditions are met:
  2a. the connection state is neither SYN-SENT nor SYN-RCVD
  2b. RTO == 1sec (or no good RTT sample has been taken)
Simply reset the RTO to 3secs.

On a second look it doesn't seem much more complex, although it may be
slightly more work to analyze its thoroughness (e.g., what if all the dup
SYN/SYN-ACK were lost, or all come back late...) Also it does incur
more spurious pkts for those connections with RTT > 2sec.

What do you think?


> allman