Re: [apps-discuss] AD Fail - MPTCP API

John Leslie <john@jlc.net> Sat, 17 November 2012 04:30 UTC

Return-Path: <john@jlc.net>
X-Original-To: apps-discuss@ietfa.amsl.com
Delivered-To: apps-discuss@ietfa.amsl.com
Received: from localhost (localhost [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id 94B7C21F86CE for <apps-discuss@ietfa.amsl.com>; Fri, 16 Nov 2012 20:30:30 -0800 (PST)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -106.364
X-Spam-Level:
X-Spam-Status: No, score=-106.364 tagged_above=-999 required=5 tests=[AWL=0.235, BAYES_00=-2.599, RCVD_IN_DNSWL_MED=-4, USER_IN_WHITELIST=-100]
Received: from mail.ietf.org ([64.170.98.30]) by localhost (ietfa.amsl.com [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id E89gBUjVrBQZ for <apps-discuss@ietfa.amsl.com>; Fri, 16 Nov 2012 20:30:30 -0800 (PST)
Received: from mailhost.jlc.net (mailhost.jlc.net [199.201.159.4]) by ietfa.amsl.com (Postfix) with ESMTP id 97C0721F84E2 for <apps-discuss@ietf.org>; Fri, 16 Nov 2012 20:30:28 -0800 (PST)
Received: by mailhost.jlc.net (Postfix, from userid 104) id B1FA733D2A; Fri, 16 Nov 2012 23:30:28 -0500 (EST)
Date: Fri, 16 Nov 2012 23:30:28 -0500
From: John Leslie <john@jlc.net>
To: Marc Blanchet <marc.blanchet@viagenie.ca>
Message-ID: <20121117043028.GK72469@verdi>
References: <50A411A3.6060600@qti.qualcomm.com> <01OMMH6GA83U00008S@mauve.mrochek.com> <50A4631D.2060606@qti.qualcomm.com> <01OMMYVTHCB000008S@mauve.mrochek.com> <50A507F9.4070103@qti.qualcomm.com> <ACE405AE-04E7-42CA-909E-B85A8D2F5DC5@viagenie.ca>
Mime-Version: 1.0
Content-Type: text/plain; charset="us-ascii"
Content-Disposition: inline
In-Reply-To: <ACE405AE-04E7-42CA-909E-B85A8D2F5DC5@viagenie.ca>
User-Agent: Mutt/1.4.1i
Cc: IETF Apps Discuss <apps-discuss@ietf.org>
Subject: Re: [apps-discuss] AD Fail - MPTCP API
X-BeenThere: apps-discuss@ietf.org
X-Mailman-Version: 2.1.12
Precedence: list
List-Id: General discussion of application-layer protocols <apps-discuss.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/apps-discuss>, <mailto:apps-discuss-request@ietf.org?subject=unsubscribe>
List-Archive: <http://www.ietf.org/mail-archive/web/apps-discuss>
List-Post: <mailto:apps-discuss@ietf.org>
List-Help: <mailto:apps-discuss-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/apps-discuss>, <mailto:apps-discuss-request@ietf.org?subject=subscribe>
X-List-Received-Date: Sat, 17 Nov 2012 04:30:30 -0000

Marc Blanchet <marc.blanchet@viagenie.ca> wrote:
> 
> to me, it remains to be seen how the interaction of:
> - happy eyeballs
> - IPv4 vs IPv6 address family preference
> - application using a non-80 port and then falling back to port
>   80/443 because of outgoing port blocking in some access networks
>   (I wrote a draft on that)
> - multiple interfaces which are pretty common these days, such as
>   wifi and cell data-3G-LTE-...
> 
> all of those are common cases today,  many with specific APIs.
> Then you add MP-TCP on top of that.
> 
> I fail to see how those interactions will work. Each of them, taken
> separately, does a good job for its own purpose. but the common case
> shall include all of these. Not sure the underlying OS could do all
> the job for the APP, too.
> 
> so, no clear suggestion, but a concern about complexity of apps and
> how well these techniques will interact and work each other.

   I think this deserves some discussion (and I was hoping someone else
would start it. ;^)

   Understand, first, that MPTCP can only use multiple paths if

- one TCP connection is established with MP_CAPABLE negotiated by
  three-way handshake with the MP_CAPABLE TCP option (this presumably
  will be quite common, eventually);

- at least one endpoint originates another TCP connection with MP_JOIN
  (instead of MP_CAPABLE) negotiated by three-way handshake with the
  MP_JOIN TCP option.

(i.e. without three MP_CAPABLE TCP options, followed by three MP_JOIN
options, there can be no multiple paths involved.)

   The MP_CAPABLE handshake exchanges keys. If for any reason the
MP_JOIN reaches a different endpoint, the keys will not match.

   In the simple case, the host originating the MP_JOIN will send it to
the same remote address, but from a different interface using a different
source IP address. But there's also a way to advise the other endpoint
of another local address, using ADD_ADDR.

   With ADD_ADDR it is possible to enable multiple paths using both
IPv4 and IPv6, as well as different ports, though some implementations
may not support this, and even if supported by the endpoints, things
can go wrong in the middle.

   So, let me try to chip away at the cases Marc asked about...

> - happy eyeballs

   Happy eyeballs is implemented in different ways, but generally
overlaps an attempt to establish an IPv6 connection with an attempt to
establish an IPv4 connection, discarding the one which doesn't complete
first.

   Both attempted connections are likely to carry the MP_CAPABLE option,
and may or may not succeed in negotiating it. But only one will be used.
Attempting an MP_JOIN must happen later, though I suppose ADD_ADDRs
could be exchanged so that the other IP version could be tried for a
secondary path -- that probably won't be common -- and even with that
there would be no re-use of the connection which finished second.

> - IPv4 vs IPv6 address family preference

   Same as "happy eyeballs". (Note that ADD_ADDRs would need to be
exchanged to make use of both address families.)

> - application using a non-80 port and then falling back to port 
>   80/443 because of outgoing port blocking in some access networks 

   Really the same, also; though different ports within the same
address families are easier to implement.

> - multiple interfaces which are pretty common these days, such as 
>   wifi and cell data-3G-LTE-...

   It would be quite practical to establish the initial TCP connection
on a more expensive service; then do MP_JOINs on the less expensive
service, essentially dropping the more expensive service so long as
the less expensive one keeps working.

   Note also that MPTCP _intends_ to keep the same MPTCP connection
(group) functioning as an interface gets different IP addresses.

====

   (I have only answered for what the protocol allows for. YMMV with
differing implementations.)

   The draft named in this thread covers only a basic API, which
could give the endpoint application(s) better control over various
tradeoffs involved in the internals of an MPTCP implementation. The
protocol itself is found in draft-ietf-mptcp-multiaddressed, which
is already approved for publication as an Experimental track RFC.

--
John Leslie <john@jlc.net>