Hey David,

Thanks for the kind words. I'll address your questions inline:

On 6/29/2017 9:09 PM, David Schinazi wrote:
Hi Vladimir,

Thanks for writing this up, I agree SOCKS needs to be modernized and I think your draft
has a lot of good ideas. A few questions:

- Why do you mimic the TFO semantics so closely?
Since SOCKSv6 runs over TCP, I'm not sure I understand the meaning of the initial data offset. The server can pull enough data for the upstream TCP SYN from its initial window and leave the rest of the SOCKSv6 initial data there for later, instead of resending it twice.

The main idea is to let the client send some data before running the authentication protocol. The initial data offset gives the server a carte blanche as to how much of the initial data it buffers while waiting for the client to authenticate. (It still must read all of it from the TCP stream before getting to the part where the client proves its credentials.) Were it not for the authentication phase, these fields would indeed be useless.
- Does it make sense to keep sending the version number over the wire?
Proxy protocols need to be provisioned out of band (e.g. SOCKS vs HTTP, port number)
and there is no way for a SOCKSv5 server to reply "I don't speak SOCKSv6".
I'm not sure I see the value of a minor version either, as there's still plenty of room
for major versions 7-255.

I think version numbers still make sense. When presented with a SOCKSv6 request, a v5 proxy must at least know that the client is speaking some other protocol. I will add a way for the proxy to signal that it doesn't speak SOCKSv7+ in the next version of the draft. Version numbers in operation replies don't make sense; I'll remove those. As for minor versions, they might indeed be overkill, given that v6 is extensible via options.
- Instead of having a command code enum with 3 values and a TFO enum with 2 values,
could we instead add a CONNECT_WITH_TFO command code to save a byte?
We could even take that one step further and also merge in the address type enum.

This is certainly worth considering. Alternatively, we could use a bit field: 2-3 bits for the command code, one bit for TFO, 2 for address type etc. Otherwise, we might end up with too many command codes (connect/bind x TFO x address type x whatever else we want to cram in).
- One pain point I had when implementing SOCKSv5 was the fact that the port number was after the address which meant that it moved, would it make sense to place it before
the variable length address field to simplify and optimize parsing?

I don't see why not.
- Could we make the client supported auth methods optional?
Since the client is sending tentative auth proposals as options, one could imagine making the list of supported auth methods an option, an treating it as "I only support
no auth" when it's not there

I like this idea. A side effect of this approach is that we move another variable-length field to the back of the request, further simplifying parsing.
- 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

Thanks,
David Schinazi


On Jun 29, 2017, at 05:08, Vladimir Olteanu <vladimir.olte...@cs.pub.ro <mailto:vladimir.olte...@cs.pub.ro>> wrote:

Hello,

We have submitted a draft describing a new version of the SOCKS protocol. You can find the abstract and a link to the draft below.

Best,
Vlad and DragoČ™



-------- Forwarded Message --------
Subject: New Version Notification for draft-olteanu-intarea-socks-6-00.txt
Date:   Wed, 28 Jun 2017 22:01:16 -0700
From:   internet-dra...@ietf.org
To: Vladimir Olteanu <vladimir.olte...@cs.pub.ro>, Dragos Niculescu <dragos.nicule...@cs.pub.ro>



A new version of I-D, draft-olteanu-intarea-socks-6-00.txt
has been successfully submitted by Vladimir Olteanu and posted to the
IETF repository.

Name:           draft-olteanu-intarea-socks-6
Revision:       00
Title:          SOCKS Protocol Version 6
Document date:  2017-06-28
Group:          Individual Submission
Pages:          12
URL:https://www.ietf.org/internet-drafts/draft-olteanu-intarea-socks-6-00.txt
Status:https://datatracker.ietf.org/doc/draft-olteanu-intarea-socks-6/
Htmlized:https://tools.ietf.org/html/draft-olteanu-intarea-socks-6-00
Htmlized:https://datatracker.ietf.org/doc/html/draft-olteanu-intarea-socks-6-00


Abstract:
    The SOCKS protocol is used primarily to proxy TCP connections to
    arbitrary destinations via the use of a proxy server.  Under the
    latest version of the protocol (version 5), it takes 2 RTTs (or 3, if
    authentication is used) before data can flow between the client and
    the server.

    This memo proposes SOCKS version 6, which reduces the number of RTTs
    used, takes full advantage of TCP Fast Open, and adds support for
    0-RTT authentication.


Please note that it may take a couple of minutes from the time of submission
until the htmlized version and diff are available attools.ietf.org 
<http://tools.ietf.org>.

The IETF Secretariat



_______________________________________________
Int-area mailing list
Int-area@ietf.org
https://www.ietf.org/mailman/listinfo/int-area

Reply via email to