Re: [tcpm] Faster application handshakes with SYN/ACK payloads

"Adam Langley" <> Tue, 05 August 2008 18:27 UTC

Return-Path: <>
Received: from [] (localhost []) by (Postfix) with ESMTP id 9ABDA3A6856; Tue, 5 Aug 2008 11:27:27 -0700 (PDT)
Received: from localhost (localhost []) by (Postfix) with ESMTP id 4607D28C30C for <>; Tue, 5 Aug 2008 11:27:26 -0700 (PDT)
X-Virus-Scanned: amavisd-new at
X-Spam-Flag: NO
X-Spam-Score: -1.609
X-Spam-Status: No, score=-1.609 tagged_above=-999 required=5 tests=[AWL=0.368, BAYES_00=-2.599, FM_FORGED_GMAIL=0.622]
Received: from ([]) by localhost ( []) (amavisd-new, port 10024) with ESMTP id BsYKl9UcyADo for <>; Tue, 5 Aug 2008 11:27:25 -0700 (PDT)
Received: from ( []) by (Postfix) with ESMTP id 50C5E3A6774 for <>; Tue, 5 Aug 2008 11:27:25 -0700 (PDT)
Received: by with SMTP id b25so2290397rvf.49 for <>; Tue, 05 Aug 2008 11:27:56 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;; s=gamma; h=domainkey-signature:received:received:message-id:date:from:sender :to:subject:cc:in-reply-to:mime-version:content-type :content-transfer-encoding:content-disposition:references :x-google-sender-auth; bh=0l8tCgTNp1ysr6qLhIoqsm4mOjBOILixHpVrFNe+rNM=; b=K5DegxsYl6/V4UvKXnnssumJptEiBzToAsuCbVLEVC6TToJeGnMIT3JZnjJ80BToIj ol+UO87UT35lg1s+5vCg0NmPqHu9P0VbQ/04Y8nmKmN0QQLPLa7Y0+fmCsL0GwAJr0NO QOOpcVamUGlc06nA1gLgkCJ5YM4YGxHWFAfb8=
DomainKey-Signature: a=rsa-sha1; c=nofws;; s=gamma; h=message-id:date:from:sender:to:subject:cc:in-reply-to:mime-version :content-type:content-transfer-encoding:content-disposition :references:x-google-sender-auth; b=EBfm9Jk7dJdodC/m5PxqBtFGT2XmHEkRyDUcswMvixeuMFdpkPoC5a13ieQhiqG+XZ TTYPxM1/C9lJ4MMtZprCEEcXSS/8yWGBH2DrU+jUJFW4pWGAgYeBl/eSuIlfhytJc11J dDqB32xzc7C3CpnRxeK4jgemsCi+wkoC4nJgw=
Received: by with SMTP id o14mr8382693rvf.130.1217960875972; Tue, 05 Aug 2008 11:27:55 -0700 (PDT)
Received: by with HTTP; Tue, 5 Aug 2008 11:27:55 -0700 (PDT)
Message-ID: <>
Date: Tue, 05 Aug 2008 11:27:55 -0700
From: Adam Langley <>
To: Joe Touch <>
In-Reply-To: <>
MIME-Version: 1.0
Content-Disposition: inline
References: <> <> <> <> <> <> <> <> <> <>
X-Google-Sender-Auth: d8032bae403148d3
Subject: Re: [tcpm] Faster application handshakes with SYN/ACK payloads
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: <>, <>
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit

On Mon, Aug 4, 2008 at 11:20 AM, Joe Touch <> wrote:
> | Imaging that we change the sockets interface such that applications
> | get a callback when a SYN frame is received on a listening socket.
> | Applications could inspect the SYN frame and choose to enqueue data to
> | be written. Hopefully the kernel would send some of that data in the
> | SYNACK, but that's unimportant here.
> Why wouldn't the application just enqueue the data? Why does it need to
> know that the other end supports this?

It doesn't always. SMTP, IRC and SSH protocols, for example, all
include a banner from the server to the client. In this case, the data
can be unconditionally enqueued for transmission. It's for protocols
which don't already start with a server->client transmission, and for
which we wish to add one, that the client must signal that we're
changing the application level protocol for this connection.

> 150ms is large when considered in the context of a small number of RTTs,
> but in the context of a connection that lasts 10 RTTs, it's 10%; the
> impact drops as you keep the connection going.
> I.e., a reduction of a single RTT is important only when the total
> exchange lasts 2-3 RTTs. That's 8KB-16KB of data - and it matters only
> for the first chunk of data in a persistent connection. For web pages
> with dozens of embedded components (in specific, more than 4, which is
> the typical limit for simultaneous connections), again this seems very
> much in the noise...

Many Google users are now using search bars to submit queries. Thus
they type into a text field in the browser, hit enter and the browser
makes a connection, sends the query encoded in a GET and displays the
result. This is one example of a situation where the connection
latency isn't amortised. There are many others, but obviously, this is
the example that usually dominates my thinking. And, in this
situation, it turns out that every 10ms makes a difference.

I might be wrong here. This might be an overcomplex solution. But I
think only time will tell, which is why I wish to have it published as
an experimental spec. If, in a couple of years, it doesn't work the
option number can be released, ready for the next guy.



Adam Langley
tcpm mailing list