Re: [multipathtcp] High-level design decisions /architecture

Joe Touch <touch@ISI.EDU> Tue, 10 November 2009 03:27 UTC

Return-Path: <touch@ISI.EDU>
X-Original-To: multipathtcp@core3.amsl.com
Delivered-To: multipathtcp@core3.amsl.com
Received: from localhost (localhost [127.0.0.1]) by core3.amsl.com (Postfix) with ESMTP id CD7633A6824 for <multipathtcp@core3.amsl.com>; Mon, 9 Nov 2009 19:27:31 -0800 (PST)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -2.599
X-Spam-Level:
X-Spam-Status: No, score=-2.599 tagged_above=-999 required=5 tests=[BAYES_00=-2.599]
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 5oC4gWK6ds2G for <multipathtcp@core3.amsl.com>; Mon, 9 Nov 2009 19:27:30 -0800 (PST)
Received: from vapor.isi.edu (vapor.isi.edu [128.9.64.64]) by core3.amsl.com (Postfix) with ESMTP id E9ED23A681B for <multipathtcp@ietf.org>; Mon, 9 Nov 2009 19:27:30 -0800 (PST)
Received: from [133.93.113.124] (host-113-124.meeting.ietf.org [133.93.113.124]) (authenticated bits=0) by vapor.isi.edu (8.13.8/8.13.8) with ESMTP id nAA3RajR016555 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NOT); Mon, 9 Nov 2009 19:27:39 -0800 (PST)
Message-ID: <4AF8DDA7.9030108@isi.edu>
Date: Mon, 09 Nov 2009 19:27:35 -0800
From: Joe Touch <touch@ISI.EDU>
User-Agent: Thunderbird 2.0.0.23 (Windows/20090812)
MIME-Version: 1.0
To: William Herrin <bill@herrin.us>
References: <4A916DBC72536E419A0BD955EDECEDEC06363A62@E03MVB1-UKBR.domain1.systemhost.net> <3c3e3fca0911021328h2ef65493v9f0290f384f7b800@mail.gmail.com> <2181C5F19DD0254692452BFF3EAF1D6808C85178@rsys005a.comm.ad.roke.co.uk> <4AF09EA5.9030308@isi.edu> <3c3e3fca0911041219o5ddea192h297afa82882992e3@mail.gmail.com> <4AF8B70E.90908@isi.edu> <3c3e3fca0911091918l27562923j5b1b7fd15461c04f@mail.gmail.com>
In-Reply-To: <3c3e3fca0911091918l27562923j5b1b7fd15461c04f@mail.gmail.com>
X-Enigmail-Version: 0.96.0
Content-Type: text/plain; charset="ISO-8859-1"
Content-Transfer-Encoding: 7bit
X-ISI-4-43-8-MailScanner: Found to be clean
X-MailScanner-From: touch@isi.edu
Cc: multipathtcp@ietf.org
Subject: Re: [multipathtcp] High-level design decisions /architecture
X-BeenThere: multipathtcp@ietf.org
X-Mailman-Version: 2.1.9
Precedence: list
List-Id: Multi-path extensions for TCP <multipathtcp.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/listinfo/multipathtcp>, <mailto:multipathtcp-request@ietf.org?subject=unsubscribe>
List-Archive: <http://www.ietf.org/mail-archive/web/multipathtcp>
List-Post: <mailto:multipathtcp@ietf.org>
List-Help: <mailto:multipathtcp-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/multipathtcp>, <mailto:multipathtcp-request@ietf.org?subject=subscribe>
X-List-Received-Date: Tue, 10 Nov 2009 03:27:31 -0000

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



William Herrin wrote:
> On Mon, Nov 9, 2009 at 7:42 PM, Joe Touch <touch@isi.edu> wrote:
>>> Is there a good discussion on this somewhere so I can read up on the
>>> rationale that brought it into being?
>> Since it's an artifact, I don't think there is. The issue is that
>> unknown options are ignored (as per RFC1122). The only time when you can
>> find out if an option is supported in a way that you know will preceded
>> all other segments is to put it in the SYN.
>>
>> If you put it in a later segment, you don't know when the segment will
>> be received. Here's the problem, when A sends to B (assuming the
>> connection is already open):
>>
>>        A sends segment #223 with option X
>>                presuming this is the first segment A sends
>>                with option X
>>
>> Does A stop sending segments beyond 223 until option X is ACK'd? This
>> violates window processing. If A sends segment 224 with option X, and B
>> receives segment 224 before 223, it MUST ignore option X.
> 
> Hi Joe,
> 
> I'm missing something here. I would have expected TCP to hold segment
> 224 and not process it (except perhaps for selective ack or to
> retransmit 222's ack) until after 223 had been received and processed.
> In other words, unless the option was defined to be unordered, I'd
> expect the receiver to process it in the same order as the packet
> sequence numbers.

That requires that options are processed on the data after ordered, as
you note. However, TCP is an unordered protocol. So here's the catch.
Let's say you introduce option X in segment 224.

- - can you send it in 225, or does the protocol come to a grinding halt?

If this is the first option, you need to ACK it. But you can't ACK 225.

So first, until everything up to 225 is ACKd, you can't send 226.

And second, while that's happening the reciever can't ACK 225, because
224 might have an option that's incompatible with the one in 225. So the
transmitter keeps sending 225, and the receiver keeps ignoring it.

Ultimately, what you need is a separate sequence number space and
retransmission mechanism for these options, and rules for how they tie
to TCP's data path.

That's a HUGE, non-backward compatible change to TCP.

> That's not how TCP functions? The options are required to be processed
> in order received rather than ordered by sequence? 

Yes. Options are part of the control plane, and that's processed when
the segment is received - including ACKs. Data is passed up to the app
after reordering - it's only data that is queued.

> Or is it just that
> all options to date have been designed to be processed in the order
> received? I can see the point of doing that; I'm just trying to get a
> scope on the issue.

See above. Doing otherwise requires a sequence space that doesn't exist.

>> So you can't put in a new option that has a required effect or is
>> confirmed; there's no way to 'stop the stream' until the endpoints sync.
>> The only times the endpoints sync is during the SYN.
> 
> My first thought would be a three-part handshake. Request option X,
> option X accepted, option X in effect. Requires that the receiver
> understand that order is important after sending X accepted though.

Right. How do you bury that handshake in an unordered, unreliable stream
without halting it, though?

Joe
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.9 (MingW32)

iEYEARECAAYFAkr43acACgkQE5f5cImnZrvVLACg/kQ0SrBx8JEELMQWYpODzo8m
vvQAoM+JpZ69JBm3IBP8BlVpWXKYh3gI
=+Jxu
-----END PGP SIGNATURE-----