Hi Mohamed,

It's great to talk this through. I've inlined my answers.

Cheers,

Vlad


On 7/5/2017 9:00 AM, [email protected] wrote:

Hi Valdimir,

Thank you for your answer.

Please see inline.

Cheers,

Med

*De :*Vladimir Olteanu [mailto:[email protected]]
*Envoyé :* mercredi 5 juillet 2017 01:35
*À :* BOUCADAIR Mohamed IMT/OLN; David Schinazi
*Cc :* [email protected]; multipathtcp
*Objet :* Re: [Int-area] SOCKS 6 Draft

Hi Mohamed,

No problem. BTW, your work on MPTCP Plain Mode has, in fact, served as inspiration for SOCKS 6.

When coupled with TFO on the client-proxy leg, SOCKS 6 also has a 0-RTT overhead.

[Med] Glad to see that we are pursuing the same goal. That’s said I’m not sure about the 0-RTT in the current proposal given this text that puts a dependency on the server side:

   In the fast case, when authentication is properly set up, the proxy

   attempts to create the socket immediately after the receipt of the

   request, thus achieving an operational conection in one RTT (provided

   TFO functionality is available at the client, proxy, and server).

                                             ^^^^^^^^

Oops, we meant to say a data response in 1 RTT (e.g. HTTP GET, then HTTP OK).

It can also be stacked as many times as desired for arbitrarily long proxy chains. However: * We avoid using the SYN's payload as extra option space (which, I think, goes against TCP's core philosophy).

[Med] This is also true for MP_CONVERT Information Element which is not a TCP option, but a data supplied for proxy purposes in the SYN payload.

Fair enough, but this is not a purely layer 5+ protocol. It seems that you are strongly tied to TFO (between the client and the proxy). MP_CONVERT must be part of the SYN's payload, because the following SYN+ACK depends on the contents of MP_CONVERT and signals that the remote server has accepted your connection.

The magic number at the start of the MP_CONVERT element implies that if any MPTCP stream happens to start with 0xFAA8FAA8, the client should not use TFO.

[Med] This can be fixed by registering a service port for the proxy service because, after all, the ultimate destination port is conveyed in the MP_CONVERT.

I think this is more sensible.

I think moving up the protocol stack is a more desirable alternative.
* We support authentication. Connections to the proxy can also be initiated from networks outside of the operator's control (e.g. home WiFis).

[Med] Authentication/authorization can be supported by various means. This depends on the deployment scheme.


* SOCKS 6 is easier to extend. If the client needs to request some special behavior from the proxy (e.g. what packet scheduler to use), all we have to do is define (and standardize) a new SOCKS option.

[Med] That’s also true for MP_CONVERT Information Element. You can define new “Types” if needed.

Can you please let me know if the proposal supports the following features:

·Support incoming connections (Proxy<---Remote Host): That is the proxy intercept a TCP connection that it transforms into an MPTCP one.

Yes. See section 7.2. The client makes a request and then has to keep the connection to the proxy open. When the proxy accepts a connection from a remote host, it informs the client of the remote host's address and starts relaying data. SOCKS 5 has the exact same feature. You are limited to one incoming connection per request, though.

·If such feature is supported, how a host located behind a CPE (Host----CPE-----Proxy----Remote Host) can instruct dynamically the CPE so that it can forward appropriately incoming connections?

It does not have to. The connection on the host-proxy leg is initiated by the client.

·Use MPTCP in the leg between the proxy and server

Yes.

·Notify the client that the server is also MPTCP-capable (so that the proxy can be withdrawn from the communication)

It depends on the implementation. A basic implementation just listens for a connection from the client and then opens a socket to the server using the vanilla socket API. It can't do any fancy stuff.

A smarter implementation (the one we're aiming for) can mirror the keys/tokens/DSS sequence numbers (also taking the DSS delta(s) incurred by the request/auth. reply/operation reply into account) and advertise the server's real address(es) via ADD_ADDR. We plan to go a step further in -01 and add an option in the operation reply that hints that the main subflow (the one going through the proxy) should be closed once other subflows are established.

·Relay untouched the set of TCP options supplied by the client/server without any alteration from the proxy

Yes-ish. In both SOCKS 6 and MPTCP Plain mode, when you strip away the initial exchange between the client and the proxy, you end up with the actual data that has to be relayed, so I would argue that both solutions are similar and suffer from roughly the same issues.

As long as there is a 1:1 mapping between client-proxy and proxy-server subflows, I don't think there are many issues. In case you have TFO on the client-proxy leg, but not on the server, you have to transmit the SYN's payload in a subsequent packet.

When you have to convert between MPTCP and regular TCP, you can no longer translate everything packet-by-packet and let end-to-end congestion control do the work for you (and you can't relay ECN, either). Further: * In MPTCP, different subflows may send the same data using different options and/or DSCP. * You can't freely mix TCP timestamps from different subflows. (The only guarantee is that timestamps are numbers that increase monotonically for each individual subflow.)

I would go even further and say that, on principle, a proxy should not relay unknown TCP options, but rather strip them.

·IPv6 source address/prefix preservation


I'm not sure what you mean by that.

(I've also CCed the MPTCP WG).

[Med] Thanks.



Cheers,
Vlad

On 07/04/2017 12:09 PM, [email protected] <mailto:[email protected]> wrote:

    Hi Vladimir, all,

    (focusing only on this part of the message).

    I do fully agree that shortening MPTCP connections setup is key.
    Having 0-RTT is an important requirement for this effort.
    Achieving it without out-of-band signaling would be even ideal.

    Can you please elaborate on the benefits of your proposal compared
    to
    
https://www.ietf.org/proceedings/98/slides/slides-98-mptcp-sessa-network-assisted-mptcp-03.pdf
    which allows to achieve 0-RTT proxying.

    Thank you.

    Cheers,

    Med

    *De :*Int-area [mailto:[email protected]] *De la part de*
    Vladimir Olteanu
    *Envoyé :* vendredi 30 juin 2017 23:37
    *À :* David Schinazi
    *Cc :* [email protected] <mailto:[email protected]>
    *Objet :* Re: [Int-area] SOCKS 6 Draft

    Hi David,

        */[/*SNIP]


        - Out of curiosity, what specific use case are you using this
        protocol for?

        We are looking into using MPTCP on mobile devices to "bind"
        4G/LTE and WiFi. Mobile data networks have high latency, hence
        the drive to shave off as many RTTs as possible and to take
        advantage of TFO, at least on the client-proxy leg.

    Cheers,
    Vlad


_______________________________________________
Int-area mailing list
[email protected]
https://www.ietf.org/mailman/listinfo/int-area

Reply via email to