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

Joe Touch <touch@ISI.EDU> Sun, 21 September 2008 06:17 UTC

Return-Path: <tcpm-bounces@ietf.org>
X-Original-To: tcpm-archive@megatron.ietf.org
Delivered-To: ietfarch-tcpm-archive@core3.amsl.com
Received: from [127.0.0.1] (localhost [127.0.0.1]) by core3.amsl.com (Postfix) with ESMTP id BC4573A6933; Sat, 20 Sep 2008 23:17:45 -0700 (PDT)
X-Original-To: tcpm@core3.amsl.com
Delivered-To: tcpm@core3.amsl.com
Received: from localhost (localhost [127.0.0.1]) by core3.amsl.com (Postfix) with ESMTP id 16EE13A6933 for <tcpm@core3.amsl.com>; Sat, 20 Sep 2008 23:17:44 -0700 (PDT)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -0.417
X-Spam-Level:
X-Spam-Status: No, score=-0.417 tagged_above=-999 required=5 tests=[AWL=-1.806, BAYES_00=-2.599, FRT_STOCK2=3.988]
Received: from mail.ietf.org ([64.170.98.32]) by localhost (core3.amsl.com [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id EnF1PN2QPN36 for <tcpm@core3.amsl.com>; Sat, 20 Sep 2008 23:17:43 -0700 (PDT)
Received: from vapor.isi.edu (vapor.isi.edu [128.9.64.64]) by core3.amsl.com (Postfix) with ESMTP id 15FB63A677D for <tcpm@ietf.org>; Sat, 20 Sep 2008 23:17:43 -0700 (PDT)
Received: from [192.168.1.45] (pool-71-106-119-240.lsanca.dsl-w.verizon.net [71.106.119.240]) by vapor.isi.edu (8.13.8/8.13.8) with ESMTP id m8L6Hi1m020885 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NOT); Sat, 20 Sep 2008 23:17:46 -0700 (PDT)
Message-ID: <48D5E708.4000006@isi.edu>
Date: Sat, 20 Sep 2008 23:17:44 -0700
From: Joe Touch <touch@ISI.EDU>
User-Agent: Thunderbird 2.0.0.16 (Windows/20080708)
MIME-Version: 1.0
To: Stefanos Harhalakis <v13@v13.gr>
References: <396556a20807311252j67b1ab26mf6511dbdae780fdd@mail.gmail.com> <4895B1F0.3070102@isi.edu> <396556a20808031106q18f6145cu7f6911ad8277d60c@mail.gmail.com> <200809210205.08232.v13@v13.gr>
In-Reply-To: <200809210205.08232.v13@v13.gr>
X-Enigmail-Version: 0.95.7
X-ISI-4-43-8-MailScanner: Found to be clean
X-MailScanner-From: touch@isi.edu
Cc: Adam Langley <agl@imperialviolet.org>, tcpm@ietf.org
Subject: Re: [tcpm] Faster application handshakes with SYN/ACK payloads
X-BeenThere: tcpm@ietf.org
X-Mailman-Version: 2.1.9
Precedence: list
List-Id: TCP Maintenance and Minor Extensions Working Group <tcpm.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/listinfo/tcpm>, <mailto:tcpm-request@ietf.org?subject=unsubscribe>
List-Archive: <https://www.ietf.org/mailman/private/tcpm>
List-Post: <mailto:tcpm@ietf.org>
List-Help: <mailto:tcpm-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/tcpm>, <mailto:tcpm-request@ietf.org?subject=subscribe>
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: tcpm-bounces@ietf.org
Errors-To: tcpm-bounces@ietf.org

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Hi, Stefanos,

Stefanos Harhalakis wrote:
> Hello Adam,
> 
> I've just looked again at this. Its 1.5 month late but time runs fast.
> 
>> However, it appears that I've not made the case for the option yet. To
>> do this, let me take HTTP as an example.
>>
>> HTTP is very latency sensitive[1]. Because of this, and guided by the
>> sockets API, the client starts the exchange. Thus, if the client
>> wishes to probe for optional features (like TLS upgrade: RFC2817) the
>> exchange works like this:
>>   Client --- OPTIONS ---> Server
>>   Client <--- 101 Switching --- Server
>>   Client --- GET ---> Server
> 
> AFAIKT, you're proposing that whenever the server side detects the SA option 
> it switches to a different protocol behavior. Why not extend this even more 
> and provide a generalized framework for more advanced customization?
>
> I believe that this was not proposed before so here it goes:
> 
> Add a generic 'user data' option for SYN fields that would carry user data. 
> Something like this:
> 
> KIND | LENGTH | DATA
> 
> Most of the time it should be: 
> 
> KIND | 3 | "1 Byte of data"

I've been calling a a user data option for that reason, but I feel that
it changes TCP semantics. You're using a SYN option to change the
behavior of a service on a port. This requires substantial changes to
the interface as outlined in RFC793 (and implemented in sockets). In
particular, you need the server to be able to read the SYN options from
a socket before writing the response to a SYN-ACK.

This is outlined in previous emails to the list; it might be useful to
review them.

> This is easy to implement (at the client side) and will allow for premature 
> negotiation. 

As per above and in previous emails, it seems impossible to implement in
existing stacks without substantial modification of the socket interface.

> For example this could include the client side application layer 
> protocol capabilities. It can also be symmetric so that server side also 
> sents some out-of-band data but most probably this should not be required 
> with SA data (but an echo/acknowledge is required).
> 
> The implementation at the client will just require a setsockopt() that would 
> set the extra header data and perhaps a getsockopt() that would get the reply 
> (if any). This part needs some working.

The issue is that the data is carried in the DATA of the SYN, not in the
option (in the SYN-ACK reply once negotiated). A different issue is that
TCP cannot ensure that data, once written, is solely in the SYN - it
could be retransmitted in subsequent data packets anyway, so it should
not be assumed to be inside the SYN.

Joe
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.9 (MingW32)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org

iEYEARECAAYFAkjV5wcACgkQE5f5cImnZrsR8ACeML9+DyBNxhXLuf5us0N3tKwo
S4gAn1rbAq/h/j1tRU+7pVAXS6pelstk
=u3UW
-----END PGP SIGNATURE-----
_______________________________________________
tcpm mailing list
tcpm@ietf.org
https://www.ietf.org/mailman/listinfo/tcpm