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

Stefanos Harhalakis <> Sun, 21 September 2008 09:44 UTC

Return-Path: <>
Received: from [] (localhost []) by (Postfix) with ESMTP id 73F553A6966; Sun, 21 Sep 2008 02:44:26 -0700 (PDT)
Received: from localhost (localhost []) by (Postfix) with ESMTP id 41E473A68B6 for <>; Sun, 21 Sep 2008 02:44:25 -0700 (PDT)
X-Virus-Scanned: amavisd-new at
X-Spam-Flag: NO
X-Spam-Score: -0.305
X-Spam-Status: No, score=-0.305 tagged_above=-999 required=5 tests=[AWL=1.694, BAYES_00=-2.599, J_CHICKENPOX_34=0.6]
Received: from ([]) by localhost ( []) (amavisd-new, port 10024) with ESMTP id 6xlEA4Wrwmsb for <>; Sun, 21 Sep 2008 02:44:19 -0700 (PDT)
Received: from ( []) by (Postfix) with ESMTP id F3C253A687C for <>; Sun, 21 Sep 2008 02:44:18 -0700 (PDT)
Received: from ( []) by (8.14.3/8.14.3) with ESMTP id m8L9iYRw018039; Sun, 21 Sep 2008 12:44:34 +0300
Received: from ( []) by (8.14.3/8.14.3) with ESMTP id m8L9iYce021293; Sun, 21 Sep 2008 12:44:34 +0300
Received: from ( []) by (8.14.3/8.14.3) with ESMTP id m8L9iUex023988; Sun, 21 Sep 2008 12:44:31 +0300
Authentication-Results:; spf=neutral
Authentication-Results:; sender-id=neutral
From: Stefanos Harhalakis <>
To: Joe Touch <>
Date: Sun, 21 Sep 2008 12:44:30 +0300
User-Agent: KMail/1.9.9
References: <> <> <>
In-Reply-To: <>
MIME-Version: 1.0
Content-Disposition: inline
Message-Id: <>
Cc: Adam Langley <>,
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 Sunday 21 September 2008, Joe Touch wrote:
> > Stefanos Harhalakis wrote:
> >> Add a generic 'user data' option for SYN fields that would carry user
> >> data.
> There are two reasons for doing this:
> 	1- to send an out-of-band signal
> 	2- to send a signal that the server acts on before the
> 	handshake completes
> #2 violates TCP semantics, so the SYN-ACK cannot have application data
> that depends on the SYN's user data option (which is the desired result
> here). The signal can't be acted on at the application layer until the
> handshake completes.
> #1 changes TCP semantics as well, since TCP does not have an out-of-band
> signal path, and this would add that. However, because it cannot be
> acted on until after the handshake completes, it cannot modify
> application behavior that isn't required to wait until the handshake
> finishes - i.e., apps that can write to the socket before the handshake
> completes (e.g., to write data available to a SYN-ACK) would never
> change because of this signal. The utility of this feature depends on
> application behavior, which cannot be known, and thus cannot be relied
> upon.

What I proposed is what you describe in #1. It is different from the 
SA-with-data proposal and thus it hasn't to do anything with #2. As I said in 
the original mail, it has to do with what Adam said:

"If HTTP sent a banner, like SMTP servers, then my life would be a lot
easier! The banner could advertise all the extensions supported.
However, without SYNACK payloads, this banner would cost another round

and more specifically with the first sentence. Supposing that (a hypothetical) 
HTTP/1.3 would support an optional banner, such an option would allow the 
server side to send it without braking backwards compatibility:

Client --> SYN+DATA --> Server
Client <-- SYNACK+? <-- Server
Client -->   ACK    --> Server
Client <--  BANNER  <-- Server

Without changing current behavior (It is not required that data be sent with 
the SYNACK option).

Also, this is not exactly "data" as there is space for a very small amount of 
information (some bits). Considering the possibilities of this, it can be 
used in many situations such as:
* HTTP or other protocols that use a well-known-port, to negotiate different
  behavior without introducing a new port number (SSL over port 80?).
* Cryptographic applications
* Anything that someone out there can think of. 8 bits (or a little more) of 
  information can be used for many things.


p.s: I can write a draft if this would clarify things.
tcpm mailing list