Re: [tcpm] Re: RFC 1323: Timestamps option

David Borman <> Wed, 30 May 2007 20:56 UTC

Return-path: <>
Received: from [] ( by with esmtp (Exim 4.43) id 1HtVDX-0002gP-95; Wed, 30 May 2007 16:56:27 -0400
Received: from [] ( by with esmtp (Exim 4.43) id 1HtVDV-0002gK-R8 for; Wed, 30 May 2007 16:56:25 -0400
Received: from ([] by with esmtp (Exim 4.43) id 1HtVDU-0003QL-Aa for; Wed, 30 May 2007 16:56:25 -0400
Received: from (ala-mail03 []) by (8.13.6/8.13.6) with ESMTP id l4UKuMQO011422; Wed, 30 May 2007 13:56:22 -0700 (PDT)
Received: from ([]) by with Microsoft SMTPSVC(6.0.3790.1830); Wed, 30 May 2007 13:56:22 -0700
Received: from [] ([]) by with Microsoft SMTPSVC(6.0.3790.1830); Wed, 30 May 2007 13:56:21 -0700
In-Reply-To: <>
References: <> <> <> <> <>
Mime-Version: 1.0 (Apple Message framework v752.3)
Content-Type: text/plain; charset="US-ASCII"; delsp="yes"; format="flowed"
Message-Id: <>
Content-Transfer-Encoding: 7bit
From: David Borman <>
Subject: Re: [tcpm] Re: RFC 1323: Timestamps option
Date: Wed, 30 May 2007 15:56:19 -0500
To: Joe Touch <>
X-Mailer: Apple Mail (2.752.3)
X-OriginalArrivalTime: 30 May 2007 20:56:21.0941 (UTC) FILETIME=[FA601E50:01C7A2FC]
X-Spam-Score: 0.1 (/)
X-Scan-Signature: 7aafa0432175920a4b3e118e16c5cb64
Cc: TCP Maintenance and Minor Extensions WG <>
X-Mailman-Version: 2.1.5
Precedence: list
List-Id: TCP Maintenance and Minor Extensions Working Group <>
List-Unsubscribe: <>, <>
List-Post: <>
List-Help: <>
List-Subscribe: <>, <>

Hi Joe,

On May 30, 2007, at 12:41 PM, Joe Touch wrote:

> David Borman wrote:
> ...
>>> I'm wondering whether there's a case where you could have started
>>> sending new TSvals, and you get a new data ACK (and start  
>>> calculating
>>> RTTs), and then a packet comes in out of order (e.g., duplicated or
>>> SACK). Could this corrupt the RTT? Could this ever happen?
>> Besides being an ACK for new data, it also has to have a TSecr beyond
>> the initial timestamp you sent.  By the time both of those things are
>> true, you should be into normal RFC-1323 processing.
> So two checks for every incoming packet, not just during 'sync',  
> right?
> (just checking; that's not obvious to me from the description)

Good question.  That'll be part of coming up with a good description.

The blind way of doing this is to just believe the TSecr value  
whenever it arrives in a packet that ACKs new data.  You'll get some  
bad samples during the transition when Timestamps are being enabled,  
but they should be averaged out after a little bit.  That might work  
ok most of the time, but that's not a good way to design a protocol;  
I'm looking for a deterministic way to enable timestamps mid-stream,  
and not get erroneous RTT measurements.

One way to simplify things is to restrict enabling timestamp mid- 
stream to data packets only, and go ahead and always put in the  
correct TSval value.  That means that the receiver in a one-way data  
transfer can't start sending timestamps.  This solves the problem of  
having to validate the TSecr values for RTT measurement for one-way  
transfers, but it still leaves ambiguity in the case of a bi- 
directional transfer, if both sides decide to enable Timestamps at  
the same time.  In that case, you can still construct scenarios where  
you get ACK only packets that acknowledge new data, and don't have a  
valid TSecr value.  So, you have the same problem, how to identify  
whether or not the TSecr is valid for RTT measurement.  Hence, I  
didn't propose restricting starting timestamps to data-only packets,  
and came up with an alternate way to identify invalid TSecr values.

But even with the TSecr validation, I'm sure there are clever ways of  
doing implementations to avoid doing extra checks once Timestamps are  
started.  I can some up with a few ideas myself. :-)

If anyone has a better idea of how to identify the invalid TSecr  
values, I'm open to all suggestions.


tcpm mailing list