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

Joe Touch <touch@ISI.EDU> Tue, 10 November 2009 21:12 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 D6A9C28C1EC for <multipathtcp@core3.amsl.com>; Tue, 10 Nov 2009 13:12:45 -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=[AWL=0.000, 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 GlXaPiuSMkNV for <multipathtcp@core3.amsl.com>; Tue, 10 Nov 2009 13:12:44 -0800 (PST)
Received: from vapor.isi.edu (vapor.isi.edu [128.9.64.64]) by core3.amsl.com (Postfix) with ESMTP id 88A523A68A2 for <multipathtcp@ietf.org>; Tue, 10 Nov 2009 13:12:44 -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 nAALCepD009972 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NOT); Tue, 10 Nov 2009 13:12:43 -0800 (PST)
Message-ID: <4AF9D747.5080707@isi.edu>
Date: Tue, 10 Nov 2009 13:12:39 -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> <4AF8DDA7.9030108@isi.edu> <3c3e3fca0911101245y7db0aa21wab41a66834feef19@mail.gmail.com>
In-Reply-To: <3c3e3fca0911101245y7db0aa21wab41a66834feef19@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 21:12:45 -0000

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



William Herrin wrote:
> On Mon, Nov 9, 2009 at 10:27 PM, Joe Touch <touch@isi.edu> wrote:
>> That requires that options are processed on the data after ordered, as
>> you note. However, TCP is an unordered protocol.
>>
>>> 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?
> 
> Hi Joe,
> 
> How about a 4-step handshake like this:
> 
> Request option X, option X accepted, option X in effect (1), option X
> in effect (2).
> 
> When you receive X accepted, attach X1 to *every* outgoing packet
> until you get an ack for everything up to and including the first X1
> packet.

What happens to retransmitted packets that were first sent before you
decided to set X?

> Then start sending X2 in every outgoing packet until you get
> an ack for any X2 packet. Then stop sending the X option on any packet
> that isn't a retransmission of one where X1 or X2 was sent.
> 
> At the receiver end: until you receive a packet with X2, only packets
> with X1 or X2 have option X in effect.

So now you have a problem. Some packets are handled as if option X is in
effect, and some are not. These could arrive in any order. What if the
option has something to do with the order in which the packets are ACKd?
Or the order in which they're sent to the app? You now have essentially
two separate data streams, so you need to reimplement buffering to
handle the old stream as it was, and the new stream treats the option
exchange as a SYN-SYN/ACK-ACK exchange.

The issue is that the receiver cannot act on X until the handshake
completes (it gets X2). None of the data with X1 in it can be processed
until X2 is received. But this "processing" could mean ACKing too - you
can't even ACK the data because the option could mean "ACK every four"
or something like that.

> After you see any packet with
> X2, all subsequent packets have option X in effect regardless of the
> presence of X1 or X2.

Not packets sent before X was set at the source. Again, you have two
separate streams now - the one before X, and the one after X2. The first
is your current connection, which is essentially draining out. The
second is your new connection - with X set - that is basically starting
anew.

At that point, it's going to be a LOT simpler to just treat this as a
CLOSE and subsequent OPEN than to do this all inside a single connection.

> Nobody pauses.

Disagree - see above.

> Options are processed in the order received.

Disagree - see above. They can't be.

> And you're
> dealing with pretty trivial state changes on each end.

Disagree - you now need another 11-state machine to talk about all the
possible ways in which the "set X" operation can fail, and to avoid
trying to negotiate another option while the first negotiation is going on.

> One concern that jumps to mind is if the receiver gets a late copy of
> an already received and acked segment where option X is not in effect.
> What will the receiver do with the late packet?  Let me narrow that a
> bit: assuming option X does not affect the use of the TCP sequence
> number in any way, what will the receiver do with a late copy of an
> already received packet where it thinks X is in effect but in reality
> X was not requested?

I think at best that there would need to be a LOT of constraints on what
the option could do. But I'm not sure there's a useful way even if
that's true to make this work.

> On the other hand, if option X has some other intrinsic value (such
> has holding the multipath TCP connection ID for middleboxes to decode)
> then you can just keep sending it in every packet which uses it for
> the remainder of the connection instead of the fancy handshake.

Options can add asynchronous information - which is how they're used
now. They simply cannot add synchronized info - which is why they can't
be used to negotiate new options - AFAICT.

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

iEYEARECAAYFAkr510cACgkQE5f5cImnZrtlpgCg7q4Dm/RtIcnNOfTkpPWlzini
JVcAn0zJpg/7Nxgx+IPTucWKqr9R7llX
=20o5
-----END PGP SIGNATURE-----