Re: [tcpm] SYN/ACK Payloads, draft 01

Joe Touch <touch@ISI.EDU> Thu, 14 August 2008 16:57 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 D313C3A6C5E; Thu, 14 Aug 2008 09:57:04 -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 6EDAE3A6942 for <tcpm@core3.amsl.com>; Thu, 14 Aug 2008 09:57:04 -0700 (PDT)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -0.605
X-Spam-Level:
X-Spam-Status: No, score=-0.605 tagged_above=-999 required=5 tests=[AWL=-1.994, 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 9iTkywEPd9ZU for <tcpm@core3.amsl.com>; Thu, 14 Aug 2008 09:57:03 -0700 (PDT)
Received: from vapor.isi.edu (vapor.isi.edu [128.9.64.64]) by core3.amsl.com (Postfix) with ESMTP id 052733A6CB2 for <tcpm@ietf.org>; Thu, 14 Aug 2008 09:57:00 -0700 (PDT)
Received: from [75.214.2.40] (40.sub-75-214-2.myvzw.com [75.214.2.40]) by vapor.isi.edu (8.13.8/8.13.8) with ESMTP id m7EGtxq1001476 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NOT); Thu, 14 Aug 2008 09:56:02 -0700 (PDT)
Message-ID: <48A46373.4090606@isi.edu>
Date: Thu, 14 Aug 2008 09:55:15 -0700
From: Joe Touch <touch@ISI.EDU>
User-Agent: Thunderbird 2.0.0.16 (Windows/20080708)
MIME-Version: 1.0
To: Adam Langley <agl@imperialviolet.org>
References: <396556a20808111035s2b974233o1e9d3671e82e3350@mail.gmail.com> <20080813195027.C4C5B50848@romeo.rtfm.com> <396556a20808131307r65a9f6a0oe4365be029620b2c@mail.gmail.com> <48A35CFA.4060709@isi.edu> <396556a20808131525i20dabf06w7a7a11e3468e541a@mail.gmail.com> <48A36104.6000000@isi.edu> <396556a20808131605w2ccac3ceo21160401e4545c15@mail.gmail.com> <48A383F0.9030601@isi.edu> <396556a20808131827x1ab32b13yaa9358ac1a70c6ed@mail.gmail.com> <48A3C0B3.8050003@isi.edu> <396556a20808140940p63dec2d2ib3332b27da8260ae@mail.gmail.com>
In-Reply-To: <396556a20808140940p63dec2d2ib3332b27da8260ae@mail.gmail.com>
X-Enigmail-Version: 0.95.6
X-ISI-4-43-8-MailScanner: Found to be clean
X-MailScanner-From: touch@isi.edu
Cc: tcpm@ietf.org
Subject: Re: [tcpm] SYN/ACK Payloads, draft 01
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-Transfer-Encoding: 7bit
Content-Type: text/plain; charset="us-ascii"; Format="flowed"
Sender: tcpm-bounces@ietf.org
Errors-To: tcpm-bounces@ietf.org

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

FWIW, IMO it is not wise to deploy code into a widely-used codebase that
uses the experimental KIND values. Experiments should be controlled.

See RFC4727, notably:

~   ... The network scope of support
~   for experimental values should carefully be evaluated before
~   deploying any experiment across extended network domains, such as the
~   public Internet.

Joe

Adam Langley wrote:
| On Wed, Aug 13, 2008 at 10:20 PM, Joe Touch <touch@isi.edu> wrote:
|> I'm confused now; your code - and your note. Let's go back to the key
issue:
|>
|>        - is the data received by the client dependent on the option?
|
| I do apologise, the confusion is my fault:
|
| There are two extensions interacting here. Firstly, there's an
| extension to include data in the SYNACK. Then there's the application
| layer signaling with the option. I was outlining the code for the
| latter. The former is an extension that could be deployed today, it's
| managed with a setsockopt on the server socket:
|
| struct tcpsa tcpsa;
| memcpy(tcpsa.tcpsa_payload, mysynackdata, length);
| setsockopt(socket, SOL_TCP, TCP_SADATA, &tcpsa, sizeof(tcpsa));
|
| listen(socket);
|
| for (;;) { accept(); ... }
|
| Obviously, this is just an implementation detail. It's nice for
| sockets based APIs to do it like this. Since such stacks are dominant,
| the idea of a constant payload appears in the draft. I make a couple
| of exceptions to this. The ability to include a 64-bit nonce is very
| useful and easy for the stack to manage. That's done with:
|
| struct tcpsa tcpsa;
| memcpy(tcpsa.tcpsa_payload, mysynackdata, length);
| tcpsa.tcpsa_flags = TCP_SADATA_INC_NONCE;
| tcpsa.tcpsa_nonce_offset = 0;
| setsockopt(socket, SOL_TCP, TCP_SADATA, &tcpsa, sizeof(tcpsa));
|
| Also, the ability to only send this data when the SYN includes the
| SAPP option. At the moment, this is the default, although there is
| space in the flags set aside for when I get round to it.
|
| Example client side code and stack patches are referenced below.
|
| Again, this is just to appease the sockets API. Stacks like [1] allow
| the application to process the SYN directly and construct any SYNACK
| payload they like on a per-packet basis.
|
| [1] http://tservice.net.ru/~s0mbre/old/?section=projects&item=unetstack
|
|> As a final question, if this is experimental, why not just use the
|> experimental TCP option KIND?
|>
|> (and how much of this has been implemented, traced, and checked for
|> things like simultaneous open - I don't recall if you noted that before)
|
| A linux patch[2] has been reviewed by the networking maintainer,
| although I haven't asked for it to be applied yet because it's not
| quite final. (It's using an experimental KIND number for one). Example
| client side code example can be found at [3]. This includes preload
| code to support Apache, Firefox etc (screenshot: [4]). It's been
| tested by several people over the real Internet. (Note that [3] is
| just a dump of my current code, it has many rough edges at the moment.
| And ignore the TCP-AO stuff therein, it's #ifdef'ed out).
|
| Also, I believe that I currently have the Diffie-Hellman speed record
| with [5] since my implementation is 10% faster than the previously
| claimed best[6]. (The version in [3] is much slower, I've yet to
| update it.)
|
| I'm am currently using an experimental KIND. However, if I were to,
| say, deploy this on all the Google frontend servers (hypothetically,
| of course), I suspect that would be in excess of what the experimental
| kinds were for.
|
| As for simultaneous open. The linux patch handles it by not doing
| anything different. The option may be carried in the SYN, but the ACKs
| are as normal. Since all BSD like stacks would, very likely, work the
| same, it might be best to specify that behaviour in the draft.
|
|
| Cheers
|
|
| AGL
|
| [2] http://marc.info/?l=linux-netdev&m=121857466907992&w=2
| [3] http://www.imperialviolet.org/binary/libobstcp-0.2a.tar.bz2
| [4]
http://bp3.blogger.com/_kRcqvZJgJFs/SH0B_oPSlzI/AAAAAAAAAUM/eg-IxgbyhIs/s1600-h/firefox-obstcp.png
| [5] http://code.google.com/p/curve25519-donna
| [6] http://cr.yp.to/ecdh/reports.html
|
|
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.9 (MingW32)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org

iEYEARECAAYFAkikY3IACgkQE5f5cImnZru7hQCg1o2zdXMursx8kNpgMLh0xtuj
R+EAoOTQhKfHeKusrxwDuxY1qCO68oee
=r4iA
-----END PGP SIGNATURE-----
_______________________________________________
tcpm mailing list
tcpm@ietf.org
https://www.ietf.org/mailman/listinfo/tcpm