Re: [multipathtcp] potential MPTCP proxy charter item

<> Wed, 09 November 2016 14:12 UTC

Return-Path: <>
Received: from localhost (localhost []) by (Postfix) with ESMTP id 536E41296D5 for <>; Wed, 9 Nov 2016 06:12:38 -0800 (PST)
X-Virus-Scanned: amavisd-new at
X-Spam-Flag: NO
X-Spam-Score: -3.115
X-Spam-Status: No, score=-3.115 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, FREEMAIL_FROM=0.001, FREEMAIL_REPLY=1, HTML_MESSAGE=0.001, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H3=-0.01, RCVD_IN_MSPIKE_WL=-0.01, RP_MATCHES_RCVD=-1.497, SPF_PASS=-0.001, UNPARSEABLE_RELAY=0.001] autolearn=ham autolearn_force=no
Received: from ([]) by localhost ( []) (amavisd-new, port 10024) with ESMTP id cLEshdgyWExJ for <>; Wed, 9 Nov 2016 06:12:36 -0800 (PST)
Received: from ( []) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by (Postfix) with ESMTPS id 03859129645 for <>; Wed, 9 Nov 2016 06:12:35 -0800 (PST)
Received: from (unknown [xx.xx.xx.69]) by (ESMTP service) with ESMTP id EE8DAC0671; Wed, 9 Nov 2016 15:12:33 +0100 (CET)
Received: from Exchangemail-eme2.itn.ftgroup (unknown [xx.xx.31.58]) by (ESMTP service) with ESMTP id 8102420082; Wed, 9 Nov 2016 15:12:33 +0100 (CET)
Received: from OPEXCLILMA3.corporate.adroot.infra.ftgroup ([fe80::60a9:abc3:86e6:2541]) by OPEXCLILM33.corporate.adroot.infra.ftgroup ([fe80::3881:fc15:b4b2:9017%19]) with mapi id 14.03.0319.002; Wed, 9 Nov 2016 15:12:33 +0100
To: Alan Ford <>
Thread-Topic: [multipathtcp] potential MPTCP proxy charter item
Thread-Index: AQHSOo6bnemdljzUmEGiGID3gGUCC6DQqmzA
Date: Wed, 09 Nov 2016 14:12:32 +0000
Message-ID: <787AE7BB302AE849A7480A190F8B933009DAE977@OPEXCLILMA3.corporate.adroot.infra.ftgroup>
References: <> <> <787AE7BB302AE849A7480A190F8B933009D9577B@OPEXCLILMA3.corporate.adroot.infra.ftgroup> <22907_1476946228_58086934_22907_5464_1_a7bca8d2-7656-4ff0-9f01-cf307f017148@OPEXCLILM42.corporate.adroot.infra.ftgroup> <> <> <b8bfd5c6-21eb-4c4f-879a-851c3a71792a@OPEXCLILM31.corporate.adroot.infra.ftgroup> <> <787AE7BB302AE849A7480A190F8B933009D9CA84@OPEXCLILMA3.corporate.adroot.infra.ftgroup> <> <787AE7BB302AE849A7480A190F8B933009DAAA88@OPEXCLILMA3.corporate.adroot.infra.ftgroup> <> <> <> <> <787AE7BB302AE849A7480A190F8B933009DAE3A6@OPEXCLILMA3.corporate.adroot.infra.ftgroup> <> <787AE7BB302AE849A7480A190F8B933009DAE743@OPEXCLILMA3.corporate.adroot.infra.ftgroup> <> <787AE7BB302AE849A7480A190F8B933009DAE7DC@OPEXCLILMA3.corporate.adroot.infra.ftgroup> <>
In-Reply-To: <>
Accept-Language: fr-FR, en-US
Content-Language: fr-FR
x-originating-ip: []
Content-Type: multipart/alternative; boundary="_000_787AE7BB302AE849A7480A190F8B933009DAE977OPEXCLILMA3corp_"
MIME-Version: 1.0
Archived-At: <>
Cc: "" <>
Subject: Re: [multipathtcp] potential MPTCP proxy charter item
X-Mailman-Version: 2.1.17
Precedence: list
List-Id: Multi-path extensions for TCP <>
List-Unsubscribe: <>, <>
List-Archive: <>
List-Post: <>
List-Help: <>
List-Subscribe: <>, <>
X-List-Received-Date: Wed, 09 Nov 2016 14:12:38 -0000


Please see inline.


De : Alan Ford []
Envoyé : mercredi 9 novembre 2016 14:39
Cc : Mirja Kühlewind;;
Objet : Re: [multipathtcp] potential MPTCP proxy charter item

Hi Med,


On 9 Nov 2016, at 09:45,<> wrote:

-----Message d'origine-----
De : Alan Ford []
Envoyé : mercredi 9 novembre 2016 09:04
Cc : Mirja Kühlewind;<>;<>
Objet : Re: [multipathtcp] potential MPTCP proxy charter item

Hi Med,

Thanks for providing some scenarios. Comments inline…

On 9 Nov 2016, at 06:41,<> wrote:

Hi Alan,

Below some examples to illustrate the problem I'm talking about.

(1) Private IPv4 addresses or RFC6598 Shared Address space

Let's consider this configuration (reusing the same topology in this

laptop <-----------+
                 | (Public IPv4@)
smartphone <----> cpe <----FIXED------> mcp <------> server
   +             +
cellular1     cellular2
              (Private IPv4)

In this example, the multipath CPEs gets a public IPv4 address from the
fixed network and a private IPv4 address (or an address from RFC6598
range) from the mobile network (cellular2).

Consider the server is MPTCP-capable.

The first subflow can be placed using the fixed line. Fine.
The MCP will remove itself from the connection because the server is
MPTCP-capable. Cool!

The second subflow that will use cellaulr2 cannot be established because
of a basic forwarding problem: packets sourced with private IPv4 addresses
cannot be forwarded over the public Internet.

Presumably cellular2 goes through a NAT in order to talk to anything in
the public Internet. So it can be addressed to the server, and work like
any other MPTCP subflow behind a NAT would work today.

[Med] You are assuming that the same Internet APN will be used for the hybrid access. This is not a valid assumption. Some deployment are considering dedicated APN for this service to avoid additional public IPv4 address are assigned to this service and also to avoid overload the service function at the Gi interface with traffic that will be routed to the backbone of the same provider.

Regrettably I’m not familiar with all these 3GPP terms here, however are you saying that cellular2 would not be able to have external, public, IP connectivity?
[Med] Yes, because this is supposed to be a dedicated APN for hybrid access service. FWIW, you can refer to the concept of APN here

If not, what’s the point of that interface? I was assuming that it would, and therefore would be able to talk direct to the server.
[Med] That’s may be another APN: Internet APN.

What am I missing? Why is this any different to today with a MPTCP end
host with private IP addresses?

[Med] The difference is that there is no NAT in the path before the MCP. The MCP has the role to use the IP address assigned by the fixed line when forwarding the secondary subflow.

I wasn’t talking before the MCP; in this scenario we are talking that the MCP gets out of the path
[Med] I got that.

- so what cellular2 needs to do is reach the server to open the second subflow.
[Med] Cellular2 needs nothing! But MPTCP connections need the flows to be intercepted but the MCP. That is avoid withdrawing the MCP even if the remote server is MPTCP-capable.  Please note that I’m not expressing my own preferences here, but I’m explaining what kind of problems may arise if we make invalid assumptions.

The smartphone does not have knowledge of cellular2, presumably… So the
CPE would have to do something funky with the traffic to split it over
fixed and cellular2

[Med] This is a proxy function (MCP) in the CPE! I didn't focused on that part of the flow because there are other problems there. If the CPE does not embed an MCP, an MPTCP capable host (laptop of smartphone) may not be able to aggregate the resources of multiple access links. Going native will lead to less QoE compared to involving the MCP located in the CPE.

- but it could still establish the subflow towards the

server on cellular2, without any knowledge of the smartphone or the

(2) IPv6-only access network

Lets' consider this configuration:

laptop <-----------+
                 | (Public IPv4@
smartphone <----> cpe <----FIXED------> mcp <------> server
   +              +                                IPv4-only
cellular1     cellular2
              (IPv6-only prefix)

In this example, the multipath CPEs gets a public IPv4 address from the
fixed network and an IPv6 prefix from the mobile network (cellular2).

Consider the server is MPTCP-capable, but IPv4-only.

The first subflow can be placed using the fixed line. Fine.
The MCP will remove itself from the connection because the server is
MPTCP-capable. Cool!

The second subflow that will use cellaulr2 cannot be added because the
remote server does not support IPv6.

So in this case, if the MCP was on-path, it could be dual-stack and could
add its IPv6 address to the subflows.

[Med] Yes.

If the MCP knew the connection was being proxied, would this help? Since
as you’ve already defined, the MCP <—> server path would then be TCP. If
the MCP stayed on-path, you could do multi path towards the MCP but then
lose MPTCP capabilities to the server.

[Med] The MCP can do the following:
* It removes itself from the connection, then the connection will be e2e MPTCP... but only one access network will be used at the client side.
* The MCP may decide the stay in the connection to glue two adjacent MPTCP connections. Doing so, we benefit from both MPTCP capabilities at the client and servier side.

The exact behavior should IMHO be configurable.

So the desire is for the CPE to make this choice, based on some internal logic, and without having a MCP address to explicitly communicate with?
[Med] My take on this is to have configurable parameters that will be instructed by an operator. The MCP will behave according to those instructions. If an MCP is configured to be removed from a connection, it will coordinate its withdrawal accordingly.

Or alternatively, the MCP could always stay on-path but only add IPv6
addresses if it somehow had knowledge that was required based on the
source or destination address. Does it need to know by a flag? Would there
actually be any harm by maintaining itself on the path anyway?

[Med] I don't see a harm in doing so (see above), but those who want to have an e2e MPTCP connection may see something bad in that design. I though they wanted to completely remove the MCP from the path when both the client and server are MPTCP-capable.

That would certainly be desirable, yes. But if not possible, then there’s not much harm with always sitting on the path - it’s a bit like a NAT.

It’s not

like it’s doing anything other than packet forwarding on the initial
subflow, and just adds its IPv6 addresses to the initial exchanges in case

[Med] It needs to terminate the MPTCP connections, mange them, etc. This is exactly the MCP job.

it would be useful - and if it receives traffic to the relevant
address/port, it can start forwarding it to the far end too (possibly over
a second IPv4 subflow). Again, no need or any explicit signalling to make
this work.

[Med] We are not discussing about any explicit signaling her, Alan. We are discussing the implications on removing the MCP from the path based on SYN/ACK that will carry an MP_CAPABLE option!

My hypothesis here is that an explicit signal is not required if you choose to sit on the path or not based on the presence of MP_CAPABLE in the SYN/ACK.
[Med] The explicit signal is useful for not intercepting the initial subflow. That is, we don’t even enter the phase of waiting a SYN/ACK as the MCP does not see those.

I can share other examples where problems arise when the proxy is
blindly removed from the connection based on the presence of MP_CAPABLE in

If it would help to clarify, please do! Since I don’t see a problem in
(1), and whilst I can see a potential problem in (2) above, I am not sure
how you are resolving it. Any other examples very welcome!

[Med] Happily. You can consider a homenet architecture where MPTCP-capable hosts may not be aware of the presence of multiple paths (see this simple topology).  The use of a proxy will to deterministically make use of the path diversity.

Great! So the CPE can act as a MCP here, and optionally there could be a secondary MCP in the path to terminate paths for the far ends that do not support MPTCP (i.e. sitting on the path if the SYN/ACK does not contain MPTCP capability, and could advertise its own address in an ADD_ADDR). So why do you need an explicit signal in this case?
[Med] It is useful to deterministically force a connection to be forwarded via a node that embeds the MCP. Classical dst-based forwarding may not always allow for that. In such case, the explicit mode can be enabled inside the user’s internal network. The signal may be useful for cases that do not require reverting MPTCP back to TCP in the providers networks (implicit mode). It is also useful if.…one decides to use MPTCP connection to carry other protocol’s payload (UDP, for example) (as captured in the “Protocol” field of the MP_CONVERT MPTCP option).