<?xml version="1.0" encoding="UTF-8"?>
  <?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
  <!-- generated by https://github.com/cabo/kramdown-rfc2629 version 1.2.12 -->

<!DOCTYPE rfc SYSTEM "rfc2629.dtd" [
]>

<?rfc toc="yes"?>
<?rfc sortrefs="yes"?>
<?rfc symrefs="yes"?>

<rfc ipr="trust200902" docName="draft-olteanu-intarea-socks-6-10" category="exp">

  <front>
    <title abbrev="SOCKS 6">SOCKS Protocol Version 6</title>

    <author initials="V." surname="Olteanu" fullname="Vladimir Olteanu">
      <organization>University Politehnica of Bucharest</organization>
      <address>
        <postal>
          <street>313 Splaiul Independentei, Sector 6</street>
          <city>Bucharest</city>
          <country>Romania</country>
        </postal>
        <email>vladimir.olteanu@cs.pub.ro</email>
      </address>
    </author>
    <author initials="D." surname="Niculescu" fullname="Dragos Niculescu">
      <organization>University Politehnica of Bucharest</organization>
      <address>
        <postal>
          <street>313 Splaiul Independentei, Sector 6</street>
          <city>Bucharest</city>
          <country>Romania</country>
        </postal>
        <email>dragos.niculescu@cs.pub.ro</email>
      </address>
    </author>

    <date year="2020" month="July" day="13"/>

    <area>Internet</area>
    <workgroup>Internet Area Working Group</workgroup>
    <keyword>Internet-Draft</keyword>

    <abstract>


<t>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.</t>

<t>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.</t>



    </abstract>


  </front>

  <middle>


<section anchor="intro" title="Introduction">

<t>Versions 4 and 5 <xref target="RFC1928"/> of the SOCKS protocol were developed
two decades ago and are in widespread use for
circuit level gateways or as circumvention tools, and enjoy wide support and usage
from various software, such as web browsers, SSH clients, and
proxifiers. However, their design needs an update in order to
take advantage of the new features of transport protocols, such as TCP
Fast Open <xref target="RFC7413"/>, or to better assist newer transport protocols, such
as MPTCP <xref target="RFC6824"/>.</t>

<t>One of the main issues faced by SOCKS version 5 is that, when taking into account 
the TCP handshake, method negotiation, authentication, connection request and grant, 
it may take up to 5 RTTs for a data exchange to take place at the 
application layer. This is especially costly in networks with a large 
delay at the access layer, such as 3G, 4G, or satelite.</t>

<t>The desire to reduce the number of RTTs manifests itself in
the design of newer security protocols. TLS version 1.3
<xref target="RFC8446"/> defines a zero round trip (0-RTT) handshake mode
for connections if the client and server had previously communicated.</t>

<t>TCP Fast Open <xref target="RFC7413"/> is a TCP option that allows TCP to send data
in the SYN and receive a response in the first ACK, and aims at obtaining a data 
response in one RTT. The SOCKS protocol needs to concern itself with at 
least two TFO deployment scenarios: First, when TFO is available end-to-end 
(at the client, at the proxy, and at the server); second,
when TFO is active between the client and 
the proxy, but not at the server.</t>

<t>This document describes the SOCKS protocol version 6. The key improvements over SOCKS version 5 are:</t>

<t><list style="symbols">
  <t>The client sends as much information upfront as possible, and does not wait for the authentication process to conclude before requesting the creation of a socket.</t>
  <t>The connection request also mimics the semantics of TCP Fast Open <xref target="RFC7413"/>. As part of the connection request, the client can supply the potential payload for the initial SYN that is sent out to the server.</t>
  <t>The protocol can be extended via options without breaking backward-compatibility.</t>
  <t>The protocol can leverage the aforementioned options to support 0-RTT authentication schemes.</t>
</list></t>

<section anchor="revision-log" title="Revision log">

<t>Typos and minor clarifications are not listed.</t>

<t>draft-10</t>

<t><list style="symbols">
  <t>Removed untrusted sessions</t>
  <t>IP DF</t>
  <t>UDP relay:
  <list style="symbols">
      <t>Support ICMPv6 Too Big</t>
      <t>Shifted some fields in the error messages</t>
      <t>RTP support</t>
    </list></t>
</list></t>

<t>draft-09</t>

<t><list style="symbols">
  <t>Revamped UDP relay
  <list style="symbols">
      <t>Support for ICMP errors: host/net unreachable, TTL exceeded</t>
      <t>Datagrams can be sent over TCP</t>
      <t>Timeout for the receipt of the initial datagram</t>
    </list></t>
  <t>TTL stack option (intended use: traceroute)</t>
  <t>Added the “Privacy Considerations” section</t>
  <t>SOCKS-provided DNS: the proxy may provide a valid bind address and port</t>
</list></t>

<t>draft-08</t>

<t><list style="symbols">
  <t>Removed Address Resolution options</t>
  <t>Happy Eyeballs options</t>
  <t>DNS provided by SOCKS</t>
</list></t>

<t>draft-07</t>

<t><list style="symbols">
  <t>All fields are now alignned.</t>
  <t>Eliminated version minors</t>
  <t>Lots of changes to options
  <list style="symbols">
      <t>2-byte option kinds</t>
      <t>Flattened option kinds/types/reply codes; also renamed some options</t>
      <t>Socket options
      <list style="symbols">
          <t>Proxies MUST always answer them (Clients can probe for support)</t>
          <t>MPTCP Options: expanded functionality (“please do/don’t do MPTCP on my behalf”)</t>
          <t>MPTCP Scheduler options removed</t>
          <t>Listen Backlog options: code changed to 0x03</t>
        </list></t>
      <t>Revamped Idempotence options</t>
      <t>Auth data options limited to one per method</t>
    </list></t>
  <t>Authentication Reply: all authentication-related information is now in the options
  <list style="symbols">
      <t>Authentication replies no longer have a field indicating the chosen auth. method</t>
      <t>Method that must proceed (or whereby authentication succeeded) indicated in options</t>
      <t>Username/password authentication: proxy now sends reply in option</t>
    </list></t>
  <t>Removed requirements w.r.t. caching authentication methods by multihomed clients</t>
  <t>UDP: 8-byte association IDs</t>
  <t>Sessions
  <list style="symbols">
      <t>The proxy is now free to terminate ongoing connections along with the session.</t>
      <t>The session-terminating request is not part of the session that it terminated.</t>
    </list></t>
  <t>Address Resolution options</t>
</list></t>

<t>draft-06</t>

<t><list style="symbols">
  <t>Session options</t>
  <t>Options now have a 2-byte length field.</t>
  <t>Stack options
  <list style="symbols">
      <t>Stack options can no longer contain duplicate information.</t>
      <t>TFO: Better payload size semantics</t>
      <t>TOS: Added missing code field.</t>
      <t>MPTCP Scheduler options:
      <list style="symbols">
          <t>Removed support for round-robin</t>
          <t>“Default” renamed to “Lowest latency first”</t>
        </list></t>
      <t>Listen Backlog options: now tied to sessions, instead of an authenticated user</t>
    </list></t>
  <t>Idempotence options
  <list style="symbols">
      <t>Now used in the context of a session (no longer tied to an authenticated user)</t>
      <t>Idempotence options have a different codepoint: 0x05. (Was 0x04.)</t>
      <t>Clarified that implementations that support Idempotence Options must support all Idempotence Option Types.</t>
      <t>Shifted Idempotence Option Types by 1. (Makes implementation easier.)</t>
    </list></t>
  <t>Shrunk vendor-specific option range to 32 (down from 64).</t>
  <t>Removed reference to dropping initial data. (It could no longer be done as of -05.)</t>
  <t>Initial data size capped at 16KB.</t>
  <t>Application data is never encrypted by SOCKS 6. (It can still be encrypted by the TLS layer under SOCKS.)</t>
  <t>Messages now carry the total length of the options, rather than the number of options. Limited options length to 16KB.</t>
  <t>Security Considerations
  <list style="symbols">
      <t>Updated the section to reflect the smaller maximum message size.</t>
      <t>Added a subsection on resource exhaustion.</t>
    </list></t>
</list></t>

<t>draft-05</t>

<t><list style="symbols">
  <t>Limited the “slow” authentication negociations to one (and Authentication Replies to 2)</t>
  <t>Revamped the handling of the first bytes in the application data stream
  <list style="symbols">
      <t>False starts are now recommended. (Added the “False Start” section.)</t>
      <t>Initial data is only available to clients willing to do “slow” authentication. Moved the “Initial data size” field from Requests to Authentication Method options.</t>
      <t>Initial data size capped at 2^13. Initial data can no longer be dropped by the proxy.</t>
      <t>The TFO option can hint at the desired SYN payload size.</t>
    </list></t>
  <t>Request: clarified the meaning of the Address and Port fields.</t>
  <t>Better reverse TCP proxy support: optional listen backlog for TCP BIND</t>
  <t>TFO options can no longer be placed inside Operation Replies.</t>
  <t>IP TOS stack option</t>
  <t>Suggested a range for vendor-specific options.</t>
  <t>Revamped UDP functionality
  <list style="symbols">
      <t>Now using fixed UDP ports</t>
      <t>DTLS support</t>
    </list></t>
  <t>Stack options: renamed Proxy-Server leg to Proxy-Remote leg</t>
</list></t>

<t>draft-04</t>

<t><list style="symbols">
  <t>Moved Token Expenditure Replies to the Authentication Reply.</t>
  <t>Shifted the Initial Data Size field in the Request, in order to make it easier to parse.</t>
</list></t>

<t>draft-03</t>

<t><list style="symbols">
  <t>Shifted some fields in the Operation Reply to make it easier to parse.</t>
  <t>Added connection attempt timeout response code to Operation Replies.</t>
  <t>Proxies send an additional Authentication Reply after the authentication phase. (Useful for token window advertisements.)</t>
  <t>Renamed the section “Connection Requests” to “Requests”</t>
  <t>Clarified the fact that proxies don’t need to support any command in particular.</t>
  <t>Added the section “TCP Fast Open on the Client-Proxy Leg”</t>
  <t>Options:
  <list style="symbols">
      <t>Added constants for option kinds</t>
      <t>Salt options removed, along with the relevant section from Security Considerations. (TLS 1.3 Makes AEAD mandatory.)</t>
      <t>Limited Authentication Data options to one per method.</t>
      <t>Relaxed proxy requirements with regard to handling multiple Authentication Data options. (When the client violates the above bullet point.)</t>
      <t>Removed interdependence between Authentication Method and Authentication Data options.</t>
      <t>Clients SHOULD omit advertising the “No authentication required” option. (Was MAY.)</t>
      <t>Idempotence options:
      <list style="symbols">
          <t>Token Window Advertisements are now part of successful Authentication Replies (so that the proxy-server RTT has no impact on their timeliness).</t>
          <t>Proxies can’t advetise token windows of size 0.</t>
          <t>Tweaked token expenditure response codes.</t>
          <t>Support no longer mandatory on the proxy side.</t>
        </list></t>
      <t>Revamped Socket options
      <list style="symbols">
          <t>Renamed Socket options to Stack options.</t>
          <t>Banned contradictory socket options.</t>
          <t>Added socket level for generic IP. Removed the “socket” socket level.</t>
          <t>Stack options no longer use option codes from setsockopt().</t>
          <t>Changed MPTCP Scheduler constants.</t>
        </list></t>
    </list></t>
</list></t>

<t>draft-02</t>

<t><list style="symbols">
  <t>Made support for Idempotence options mandatory for proxies.</t>
  <t>Clarified what happens when proxies can not or will not issue tokens.</t>
  <t>Limited token windows to 2^31 - 1.</t>
  <t>Fixed definition of “less than” for tokens.</t>
  <t>NOOP commands now trigger Operation Replies.</t>
  <t>Renamed Authentication options to Authentication Data options.</t>
  <t>Authentication Data options are no longer mandatory.</t>
  <t>Authentication methods are now advertised via options.</t>
  <t>Shifted some Request fields.</t>
  <t>Option range for vendor-specific options.</t>
  <t>Socket options.</t>
  <t>Password authentication.</t>
  <t>Salt options.</t>
</list></t>

<t>draft-01</t>

<t><list style="symbols">
  <t>Added this section.</t>
  <t>Support for idempotent commands.</t>
  <t>Removed version numbers from operation replies.</t>
  <t>Request port number for SOCKS over TLS. Deprecate encryption/encapsulation within SOCKS.</t>
  <t>Added Version Mismatch Replies.</t>
  <t>Renamed the AUTH command to NOOP.</t>
  <t>Shifted some fields to make requests and operation replies easier to parse.</t>
</list></t>

</section>
</section>
<section anchor="requirements-language" title="Requirements language">

<t>The key words “MUST”, “MUST NOT”, “REQUIRED”, “SHALL”, “SHALL NOT”,
“SHOULD”, “SHOULD NOT”, “RECOMMENDED”, “MAY”, and “OPTIONAL” in this
document are to be interpreted as described in <xref target="RFC2119"/>.</t>

</section>
<section anchor="op" title="Mode of operation">

<figure title="The SOCKS version 6 protocol message exchange" anchor="fig-socks6-topview"><artwork><![CDATA[
  
 CLIENT                                                        PROXY 

         +------------------------+ 
         | Authentication methods | Request
 --------> Command code           +------------------------------>
         | Address                |         
         | Port                   |         
         | Options                |         
         +------------------------+
         
         +------------------------+
 --------> Initial data           +------------------------------>
         +------------------------+

                                     +-----------------------+
                Authentication Reply | Type                  |
  <----------------------------------+ Options               <-----
                                     +-----------------------+    
     
  <-------------------(Authentication protocol)------------------>

  
                                     +-----------------------+
                Authentication Reply | Type = Success        |
  <----------------------------------+ Options               <-----
                                     +-----------------------+    
  
                       +-----------------------+
     Operation Reply   | Reply code            |
  <--------------------+ Bind address          <------------------
                       | Bind port             |
                       | Options               |
                       +-----------------------+

]]></artwork></figure>

<t>When a TCP-based client wishes to establish a connection to a server,
it must open a TCP connection to the appropriate SOCKS port on the
SOCKS proxy. The client then enters a negotiation phase, by
sending the request in <xref target="fig-socks6-topview"/>, that 
contains, in addition to fields present in SOCKS 5 <xref target="RFC1928"/>, fields 
that facilitate low RTT usage and faster authentication negotiation.</t>

<t>Next, the server sends an authentication reply. If the request did not contain the necessary 
authentication information, the proxy indicates an authentication method that must proceed. This 
may trigger a longer authentication sequence
that could include tokens for ulterior faster authentications. The part labeled 
“Authentication protocol” is specific to the authentication 
method employed and is not expected to be employed for every connection between a
client and its proxy server. The authentication protocol typically takes up 1 RTT or more.</t>

<t>If the authentication is successful, an operation reply is generated by the proxy.
It indicates whether the proxy was successful in creating the requested socket or not.</t>

<t>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).</t>

</section>
<section anchor="req" title="Requests">

<t>The client starts by sending a request to the proxy.</t>

<figure title="SOCKS 6 Request" anchor="fig-req"><artwork><![CDATA[
                     1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+---------------+---------------+-------------------------------+
|  Version = 6  | Command Code  |        Options Length         |
+---------------+---------------+---------------+---------------+
|             Port              |  Padding = 0  | Address Type  |
+-------------------------------+---------------+---------------+
|                                                             ...
...                 Address (variable length)                 ...
...                                                             |
+---------------------------------------------------------------+
|                                                             ...
...                 Options (variable length)                 ...
...                                                             |
+---------------------------------------------------------------+

]]></artwork></figure>

<t><list style="symbols">
  <t>Version: 6</t>
  <t>Command Code:
  <list style="symbols">
      <t>0x00 NOOP: does nothing.</t>
      <t>0x01 CONNECT: requests the establishment of a TCP connection. TFO MUST NOT be used unless explicitly requested.</t>
      <t>0x02 BIND: requests the establishment of a TCP port binding.</t>
      <t>0x03 UDP ASSOCIATE: requests a UDP port association.</t>
    </list></t>
  <t>Address Type:
  <list style="symbols">
      <t>0x01: IPv4</t>
      <t>0x03: Domain Name</t>
      <t>0x04: IPv6</t>
    </list></t>
  <t>Address: this field’s format depends on the address type:
  <list style="symbols">
      <t>IPv4: a 4-byte IPv4 address</t>
      <t>Domain Name: one byte that contains the length of the FQDN, followed by the FQDN itself. The string is not NUL-terminated, but padded by NUL characters, if needed.</t>
      <t>IPv6: a 16-byte IPv6 address</t>
    </list></t>
  <t>Port: the port in network byte order.</t>
  <t>Padding: set to 0</t>
  <t>Options Length: the total size of the SOCKS options that appear in the Options field. MUST NOT exceed 16KB.</t>
  <t>Options: see <xref target="opts"/>.</t>
</list></t>

<t>The Address and Port fields have different meanings based on the Command Code:</t>

<t><list style="symbols">
  <t>NOOP: The fields have no meaning. The Address Type field MUST be either 0x01 (IPv4) or 0x04 (IPv6). The Address and Port fields MUST be 0.</t>
  <t>CONNECT: The fields signify the address and port to which the client wishes to connect.</t>
  <t>BIND, UDP ASSOCIATE: The fields indicate the desired bind address and port. If the client does not require a certain address, it can set the Address Type field to 0x01 (IPv4) or 0x04 (IPv6), and the Address field to 0. Likewise, if the client does not require a certain port, it can set the Port field to 0.</t>
</list></t>

<t>Clients can advertise their supported authentication methods by including an Authentication Method Advertisement option (see <xref target="opts-auth-method"/>).</t>

</section>
<section anchor="version-mismatch-replies" title="Version Mismatch Replies">

<t>Upon receipt of a request starting with a version number other than 6,
the proxy sends the following response:</t>

<figure title="SOCKS 6 Version Mismatch Reply" anchor="fig-vrep"><artwork><![CDATA[
                 
 0 1 2 3 4 5 6 7 
+---------------+
|  Version = 6  |
+---------------+
 
]]></artwork></figure>

<t><list style="symbols">
  <t>Version: 6</t>
</list></t>

<t>A client MUST close the connection after receiving such a reply.</t>

</section>
<section anchor="irep" title="Authentication Replies">

<t>Upon receipt of a valid request, the proxy sends an Authentication Reply:</t>

<figure title="SOCKS 6 Authentication Reply" anchor="fig-irep"><artwork><![CDATA[
                     1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+---------------+---------------+-------------------------------+
|  Version = 6  |     Type      |        Options Length         |
+---------------+---------------+-------------------------------+
|                                                             ...
...                 Options (variable length)                 ...
...                                                             |
+---------------------------------------------------------------+
 
]]></artwork></figure>

<t><list style="symbols">
  <t>Version: 6</t>
  <t>Type:
  <list style="symbols">
      <t>0x00: authentication successful.</t>
      <t>0x01: authentication failed.</t>
    </list></t>
  <t>Options Length: the total size of the SOCKS options that appear in the Options field. MUST NOT exceed 16KB.</t>
  <t>Options: see <xref target="opts"/>.</t>
</list></t>

<t>If the server signals that the authentication has failed and does not signal that any authentication negotiation can continue (via an Authentication Method Selection option), the client MUST close the connection.</t>

<t>The client and proxy begin a method-specific negotiation.
During such negotiations, the proxy MAY supply information that allows the client to authenticate a future request using an Authentication Data option.
Application data is not subject to any encryption negotiated during this phase.
Descriptions of such negotiations are beyond the scope of this memo.</t>

<t>When the negotiation is complete (either successfully or unsuccessfully), the proxy sends a second Authentication Reply.
The second Authentication Reply MUST NOT allow for further negotiations.</t>

</section>
<section anchor="frep" title="Operation Replies">

<t>After the authentication negotiations are complete, the proxy sends an Operation Reply:</t>

<figure title="SOCKS 6 Operation Reply" anchor="fig-frep"><artwork><![CDATA[
                     1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+---------------+---------------+-------------------------------+
|  Version = 6  |  Reply Code   |        Options Length         |
+---------------+---------------+---------------+---------------+
|           Bind Port           |  Padding = 0  | Address Type  |
+-------------------------------+---------------+---------------+
|                                                             ...
...              Bind Address (variable length)               ...
...                                                             |
+---------------------------------------------------------------+
|                                                             ...
...                 Options (variable length)                 ...
...                                                             |
+---------------------------------------------------------------+
 
]]></artwork></figure>

<t><list style="symbols">
  <t>Version: 6</t>
  <t>Reply Code:
  <list style="symbols">
      <t>0x00: Succes</t>
      <t>0x01: General SOCKS server failure</t>
      <t>0x02: Connection not allowed by ruleset</t>
      <t>0x03: Network unreachable</t>
      <t>0x04: Host unreachable</t>
      <t>0x05: Connection refused</t>
      <t>0x06: TTL expired</t>
      <t>0x07: Command not supported</t>
      <t>0x08: Address type not supported</t>
      <t>0x09: Connection attempt timed out</t>
    </list></t>
  <t>Bind Port: the proxy bound port in network byte order.</t>
  <t>Padding: set to 0</t>
  <t>Address Type:
  <list style="symbols">
      <t>0x01: IPv4</t>
      <t>0x03: Domain Name</t>
      <t>0x04: IPv6</t>
    </list></t>
  <t>Bind Address: the proxy bound address in the following format:
  <list style="symbols">
      <t>IPv4: a 4-byte IPv4 address</t>
      <t>Domain Name: one byte that contains the length of the FQDN, followed by the FQDN itself. The string is not NUL-terminated, but padded by NUL characters, if needed.</t>
      <t>IPv6: a 16-byte IPv6 address</t>
    </list></t>
  <t>Options Length: the total size of the SOCKS options that appear in the Options field. MUST NOT exceed 16KB.</t>
  <t>Options: see <xref target="opts"/>.</t>
</list></t>

<t>Proxy implementations MAY support any subset of the client commands listed in <xref target="req"/>.</t>

<t>If the proxy returns a reply code other than “Success”, the client MUST close the connection.</t>

<t>If the client issued an NOOP command, the client MUST close the connection after receiving the Operation Reply.</t>

<section anchor="handling-connect" title="Handling CONNECT">

<t>In case the client has issued a CONNECT request, data can now pass.</t>

</section>
<section anchor="handling-bind" title="Handling BIND">

<t>In case the client has issued a BIND request, it must wait for a second Operation reply from the proxy, which signifies that a host has connected to the bound port.
The Bind Address and Bind Port fields contain the address and port of the connecting host. Afterwards, application data may pass.</t>

</section>
<section anchor="udp-assoc" title="Handling UDP ASSOCIATE">

<t>Proxies offering UDP functionality may be configured with a UDP port used for relaying UDP datagrams to and from the client, and/or a port used for relaying datagrams over DTLS.</t>

<t>Following a successful Operation Reply, the client and the proxy begin exchanging messages with the following header:</t>

<figure title="UDP Association Header" anchor="fig-assoc-hdr"><artwork><![CDATA[
                     1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+---------------+---------------+-------------------------------+
|  Version = 6  | Message Type  |        Message Length         |
+---------------+---------------+-------------------------------+
|                        Association ID                         |
|                           (8 bytes)                           |
+---------------------------------------------------------------+

]]></artwork></figure>

<t><list style="symbols">
  <t>Message Type:
  <list style="symbols">
      <t>0x01: Association Initialization</t>
      <t>0x02: Association Confirmation</t>
      <t>0x03: Datagram</t>
      <t>0x04: Error</t>
    </list></t>
  <t>Message Length: the total length of the message</t>
  <t>Association ID: the identifier of the UDP association</t>
</list></t>

<t>First, the proxy picks an Association ID sends a an Association Initialization message:</t>

<figure title="UDP Association Initialization" anchor="fig-udp-assoc-init"><artwork><![CDATA[
                     1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+---------------+---------------+-------------------------------+
|  Version = 6  |     0x01      |      Message Length = 12      |
+---------------+---------------+-------------------------------+
|                        Association ID                         |
|                           (8 bytes)                           |
+---------------------------------------------------------------+

]]></artwork></figure>

<t>Proxy implementations SHOULD generate Association IDs randomly or pseudo-randomly.</t>

<t>Clients may start sending datagrams to the proxy either:</t>

<t><list style="symbols">
  <t>over the TCP connection,</t>
  <t>in plaintext, using the proxy’s configured UDP port(s), or</t>
  <t>over an established DTLS session.</t>
</list></t>

<t>A client’s datagrams are prefixed by a Datagram Header, indicating the remote host’s address and port:</t>

<figure title="Datagram Header" anchor="fig-dgram-hdr"><artwork><![CDATA[
                     1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+---------------+---------------+-------------------------------+
|  Version = 6  |     0x03      |        Message Length         |
+---------------+---------------+-------------------------------+
|                        Association ID                         |
|                           (8 bytes)                           |
+---------------+---------------+-------------------------------+
| Address Type  |  Padding = 0  |             Port              |
+---------------+---------------+-------------------------------+
|                                                             ...
...                 Address (variable length)                 ...
...                                                             |
+---------------------------------------------------------------+

]]></artwork></figure>

<t><list style="symbols">
  <t>Version: 0x06</t>
  <t>Association ID: the identifier of the UDP association</t>
  <t>Address Type:
  <list style="symbols">
      <t>0x01: IPv4</t>
      <t>0x03: Domain Name</t>
      <t>0x04: IPv6</t>
    </list></t>
  <t>Address: this field’s format depends on the address type:
  <list style="symbols">
      <t>IPv4: a 4-byte IPv4 address</t>
      <t>Domain Name: one byte that contains the length of the FQDN, followed by the FQDN itself. The string is not NUL-terminated.</t>
      <t>IPv6: a 16-byte IPv6 address</t>
    </list></t>
  <t>Port: the port in network byte order.</t>
</list></t>

<t>Datagrams sent over UDP MAY be padded with arbitrary data (i. e., the Message Length MAY be smaller than the actual UDP/DTLS payload). Client and proxy implementations MUST ignore the padding.
If the Message Length is larger than the size of the UDP or DTLS payload, the message MUST be silently ignored.</t>

<t>Following the receipt of the first datagram from the client, the proxy makes a one-way mapping between the Association ID and:</t>

<t><list style="symbols">
  <t>the TCP connection, if it was received over TCP, or</t>
  <t>the 5-tuple of the UDP conversation, if the datagram was received over plain UDP, or</t>
  <t>the DTLS connection, if the datagram was received over DTLS. The DTLS connection is identified either by its 5-tuple, or some other mechanism, like <xref target="I-D.ietf-tls-dtls-connection-id"/>.</t>
</list></t>

<t>The proxy SHOULD close the TCP connection if the initial datagram is not received after a timeout.</t>

<t>Further datagrams carrying the same Association ID, but not matching the established mapping, are silently dropped.</t>

<t>The proxy then sends an UDP Association Confirmation message over the TCP connection with the client:</t>

<figure title="UDP Association Confirmation" anchor="fig-udp-assoc-confirm"><artwork><![CDATA[
                     1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+---------------+---------------+-------------------------------+
|  Version = 6  |     0x02      |      Message Length = 12      |
+---------------+---------------+-------------------------------+
|                        Association ID                         |
|                           (8 bytes)                           |
+---------------------------------------------------------------+

]]></artwork></figure>

<t>Following the confirmation message, UDP packets bound for the proxy’s bind address and port are relayed to the client, also prefixed by a Datagram Header.</t>

<t>The UDP association remains active for as long as the TCP connection between the client and the proxy is kept open.</t>

<section anchor="proxying-udp-servers" title="Proxying UDP servers">

<t>Under some circumstances (e.g. when hosting a server), the SOCKS client expects the remote host to send UDP datagrams first.
As such, the SOCKS client must trigger a UDP Association Confirmation without having the proxy relay any datagrams on its behalf.</t>

<t>To that end, it sends an empty datagram prefixed by a Datagram Header with an IP address and port consisting of zeroes.
If it is using UDP, the client SHOULD resend the empty datagram if an UDP Association Confirmation is not received after a timeout.</t>

</section>
<section anchor="proxying-multicast-traffic" title="Proxying multicast traffic">

<t>The use of multicast addessses is permitted for UDP traffic only.</t>

</section>
<section anchor="sec-udperr" title="Reporting ICMP Errors">

<t>If a client has opted in (see <xref target="sec-opt-udperr"/>), the proxy MAY relay information contained in some ICMP Error packets.
The message format is as follows:</t>

<figure title="Datagram Error Message" anchor="fig-udp-err"><artwork><![CDATA[
                     1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+---------------+---------------+-------------------------------+
|  Version = 6  |     0x04      |        Message Length         |
+---------------+---------------+-------------------------------+
|                        Association ID                         |
|                           (8 bytes)                           |
+---------------+---------------+-------------------------------+
| Address Type  |  Padding = 0  |             Port              |
+---------------+---------------+-------------------------------+
|                                                             ...
...                 Address (variable length)                 ...
...                                                             |
+---------------+---------------+-------------------------------+
| Reporter ATYP |  Error Code   |          Padding = 0          |
+---------------+---------------+-------------------------------+
|                                                             ...
...           Reporter Address (variable length)              ...
...                                                             |
+---------------------------------------------------------------+

]]></artwork></figure>

<t><list style="symbols">
  <t>Address: The destination address of the IP header contained in the ICMP payload</t>
  <t>Address Type: Either 0x01 (IPv4) or 0x04 (IPv6)</t>
  <t>Port: The destination port of the UDP header contained in the ICMP payload</t>
  <t>Reporter Address: The IP address of the host that issued the ICMP error</t>
  <t>Reporter Address Type (ATYP): Either 0x01 (IPv4) or 0x04 (IPv6)</t>
  <t>Error code:
  <list style="symbols">
      <t>0x01: Network unreachable</t>
      <t>0x02: Host unreachable</t>
      <t>0x03: TTL expired</t>
      <t>0x04: Datagram too big (IPv6 only)</t>
    </list></t>
</list></t>

<t>It is possible for ICMP Error packets to be spurious, and not be related to any UDP packet that was sent out.
The proxy is not required to check the validity of ICMP Error packets before reporting them to the client.</t>

<t>Clients MUST NOT send Datagram Error messages to the proxy. Proxies MUST NOT send Error messages unless the clients have opted in.</t>

</section>
</section>
</section>
<section anchor="opts" title="SOCKS Options">

<t>SOCKS options have the following format:</t>

<figure title="SOCKS 6 Option" anchor="fig-opt"><artwork><![CDATA[
                     1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-------------------------------+-------------------------------+
|             Kind              |            Length             |
+-------------------------------+-------------------------------+
|                                                             ...
...               Option Data (variable length)               ...
...                                                             |
+---------------------------------------------------------------+
 
]]></artwork></figure>

<t><list style="symbols">
  <t>Kind: Allocated by IANA. (See <xref target="iana"/>.)</t>
  <t>Length: The total length of the option. MUST be a multiple of 4.</t>
  <t>Option Data: The contents are specific to each option kind.</t>
</list></t>

<t>Unless otherwise noted, client and proxy implementations MAY omit supporting any of the options described in this document.
Upon encountering an unsupported option, a SOCKS endpoint MUST silently ignore it.</t>

<section anchor="opts-stack" title="Stack options">

<t>Stack options can be used by clients to alter the behavior of the protocols on top of which SOCKS is running,
as well the protcols used by the proxy to communicate with the remote host (i.e. IP, TCP, UDP).
A Stack option can affect either the proxy’s protocol on the client-proxy leg or on the proxy-remote leg.
Clients can only place Stack options inside SOCKS Requests.</t>

<t>Proxies MAY choose not to honor any Stack options sent by the client.</t>

<t>Proxies include Stack options in their Operation Replies to signal their behavior, and MUST do so for every supported Stack option sent by the client.
Said options MAY also be unsolicited, i. e. the proxy MAY send them to signal behaviour that was not explicitly
requested by the client.</t>

<t>If a particular Stack option is unsupported, the proxy MUST silently ignore it.</t>

<t>In case of UDP ASSOCIATE, the stack options refer to the UDP traffic relayed by the proxy.</t>

<t>Stack options that are part of the same message MUST NOT contradict one another or contain duplicate information.</t>

<figure title="Stack Option" anchor="fig-opt-stack"><artwork><![CDATA[
                     1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-------------------------------+-------------------------------+
|           Kind = 1            |            Length             |
+---+-----------+---------------+-------------------------------+
|Leg|   Level   |     Code      |                             ...
+---+-----------+---------------+                             ...
...                                                           ...
...               Option Data (variable length)               ...
...                                                             |
+---------------------------------------------------------------+
 
]]></artwork></figure>

<t><list style="symbols">
  <t>Leg:
  <list style="symbols">
      <t>1: Client-Proxy Leg</t>
      <t>2: Proxy-Remote Leg</t>
      <t>3: Both Legs</t>
    </list></t>
  <t>Level:
  <list style="symbols">
      <t>1: IP: options that apply to either IPv4 or IPv6</t>
      <t>2: IPv4</t>
      <t>3: IPv6</t>
      <t>4: TCP</t>
      <t>5: UDP</t>
    </list></t>
  <t>Code: Option code</t>
  <t>Option Data: Option-specific data</t>
</list></t>

<section anchor="ip-tos-options" title="IP TOS options">

<figure title="IP TOS Option" anchor="fig-opt-stack-tos"><artwork><![CDATA[
                     1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-------------------------------+-------------------------------+
|           Kind = 1            |          Length = 8           |
+---+-----------+---------------+---------------+---------------+
|Leg| Level = 1 |   Code = 1    |      TOS      |  Padding = 0  |
+---+-----------+---------------+---------------+---------------+
 
]]></artwork></figure>

<t><list style="symbols">
  <t>TOS: The IP TOS code</t>
</list></t>

<t>The client can use IP TOS options to request that the proxy use a certain value for the IP TOS field.
Likewise, the proxy can use IP TOS options to advertise the TOS values being used.</t>

</section>
<section anchor="happy-eyeballs-options" title="Happy Eyeballs options">

<figure title="Happy Eyeballs Option" anchor="fig-opt-stack-eyeball"><artwork><![CDATA[
                     1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-------------------------------+-------------------------------+
|           Kind = 1            |          Length = 8           |
+---+-----------+---------------+-------------------------------+
| 2 | Level = 1 |   Code = 2    |          Padding = 0          |
+---+-----------+---------------+-------------------------------+
 
]]></artwork></figure>

<t>This memo provides enough features for clients to implement a mechanism analogous to Happy Eyeballs <xref target="RFC8305"/> over SOCKS.
However, when the delay between the client and the proxy, or the proxy’s vantage point, is high, doing so can become impractical or inefficient.</t>

<t>In such cases, the client can instruct the proxy to employ the Happy Eyeballs technique on its behalf when connecting to a remote host.</t>

<t>The client MUST supply a Domain Name as part of its Request. Otherwise, the proxy MUST silently ignore the option.</t>

<t>TODO: Figure out which knobs to include.</t>

</section>
<section anchor="ttl-options" title="TTL options">

<figure title="IP TTL Option" anchor="fig-opt-stack-ttl"><artwork><![CDATA[
                     1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-------------------------------+-------------------------------+
|           Kind = 1            |          Length = 8           |
+---+-----------+---------------+---------------+---------------+
|Leg| Level = 1 |   Code = 3    |      TTL      |  Padding = 0  |
+---+-----------+---------------+---------------+---------------+
 
]]></artwork></figure>

<t><list style="symbols">
  <t>TTL: The IP TTL or Hop Limit</t>
</list></t>

</section>
<section anchor="no-fragmentaion-options" title="No Fragmentaion options">

<figure title="No Fragmentaion Option" anchor="fig-opt-stack-df"><artwork><![CDATA[
                     1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-------------------------------+-------------------------------+
|           Kind = 1            |          Length = 8           |
+---+-----------+---------------+-------------------------------+
|Leg| Level = 1 |   Code = 4    |          Padding = 0          |
+---+-----------+---------------+-------------------------------+
 
]]></artwork></figure>

<t>A No Fragmentation option instructs the proxy to avoid IP fragmentation. In the case of IPv4, this also entails setting the DF bit on outgoing packets.</t>

</section>
<section anchor="tfo-options" title="TFO options">

<figure title="TFO Option" anchor="fig-opt-stack-tfo"><artwork><![CDATA[
                     1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-------------------------------+-------------------------------+
|           Kind = 1            |          Length = 8           |
+---+-----------+---------------+-------------------------------+
| 2 | Level = 4 |   Code = 1    |         Payload Size          |
+---+-----------+---------------+-------------------------------+
 
]]></artwork></figure>

<t><list style="symbols">
  <t>Payload Size: The desired payload size of the TFO SYN. Ignored in case of a BIND command.</t>
</list></t>

<t>If a SOCKS Request contains a TFO option, the proxy SHOULD attempt to use TFO in case of a CONNECT command, or accept TFO in case of a BIND command.
Otherwise, the proxy MUST NOT attempt to use TFO in case of a CONNECT command, or accept TFO in case of a BIND command.</t>

<t>In case of a CONNECT command, the client can indicate the desired payload size of the SYN. If the field is 0, the proxy can use an arbitrary payload size.
If the field is non-zero, the proxy MUST NOT use a payload size larger than the one indicated. The proxy MAY use a smaller payload size than the one indicated.</t>

</section>
<section anchor="multipath-options" title="Multipath options">

<t>In case of a CONNECT or BIND command, the client can inform the proxy whether MPTCP is desired on the proxy-remote leg by sending a Multipath option.</t>

<t>Conversely, the proxy can use a Multipath option to convey the following information:</t>

<t><list style="symbols">
  <t>whether or not the connection uses MPTCP or not, when replying to a CONNECT command, or in the second Operation reply to a BIND command, or</t>
  <t>whether an MPTCP connection will be accepted, when first replying to a BIND command.</t>
</list></t>

<figure title="Multipath Option" anchor="fig-opt-stack-mp"><artwork><![CDATA[
                     1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-------------------------------+-------------------------------+
|           Kind = 1            |          Length = 8           |
+---+-----------+---------------+---------------+---------------+
| 2 | Level = 4 |   Code = 2    | Availability  |  Padding = 0  |
+---+-----------+---------------+---------------+---------------+
 
]]></artwork></figure>

<t><list style="symbols">
  <t>Availability:  <list style="symbols">
      <t>0x01: MPTCP is not desired or available</t>
      <t>0x02: MPTCP is desired or available</t>
    </list></t>
</list></t>

<t>In the absence of such an option, the proxy SHOULD NOT enable MPTCP.</t>

</section>
<section anchor="listen-backlog-options" title="Listen Backlog options">

<figure title="Listen Backlog Option" anchor="fig-opt-stack-backlog"><artwork><![CDATA[
                     1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-------------------------------+-------------------------------+
|           Kind = 1            |          Length = 8           |
+---+-----------+---------------+-------------------------------+
| 2 | Level = 4 |   Code = 3    |            Backlog            |
+---+-----------+---------------+-------------------------------+
 
]]></artwork></figure>

<t><list style="symbols">
  <t>Backlog: The length of the listen backlog.</t>
</list></t>

<t>The default behavior of the BIND does not allow a client to simultaneously handle multiple connections to the same bind address.
A client can alter BIND’s behavior by adding a TCP Listen Backlog Option to a BIND Request, provided that the Request is part of a Session.</t>

<t>In response, the proxy sends a TCP Listen Backlog Option as part of the Operation Reply, with the Backlog field signalling the actual backlog used.
The proxy SHOULD NOT use a backlog longer than requested.</t>

<t>Following the successful negotiation of a backlog, the proxy listens for incoming connections for as long as the initial connection stays open.
The initial connection is not used to relay data between the client and a remote host.</t>

<t>To accept connections, the client issues further BIND Requests using the bind address and port supplied by the proxy in the initial Operation Reply. Said BIND requests must belong to the same Session as the original Request.</t>

<t>If no backlog is issued, the proxy signals a backlog length of 0, and BIND’s behavior remains unaffected.</t>

</section>
<section anchor="sec-opt-udperr" title="UDP Error options">

<figure title="UDP Error Option" anchor="fig-opt-stack-udperr"><artwork><![CDATA[
                     1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-------------------------------+-------------------------------+
|           Kind = 1            |          Length = 8           |
+---+-----------+---------------+-------------------------------+
| 2 | Level = 5 |   Code = 1    |          Padding = 0          |
+---+-----------+---------------+-------------------------------+
 
]]></artwork></figure>

<t>Clients can use this option to turn on error reporting for a particular UDP association. See <xref target="sec-udperr"/>.</t>

</section>
<section anchor="port-parity-options" title="Port Parity options">

<t>The RTP specification <xref target="RFC3550"/> recommends runnng the protocol on consecutive UDP ports, where the even port is the lower of the two.</t>

<t>SOCKS clients can specify the desired port parity when issuing a UDP ASSOCIATE command, and request that the port’s counterpart be reserved.</t>

<figure title="Port Parity Option" anchor="fig-opt-stack-parity"><artwork><![CDATA[
                     1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-------------------------------+-------------------------------+
|           Kind = 1            |          Length = 8           |
+---+-----------+---------------+---------------+---------------+
| 2 | Level = 5 |   Code = 2    |    Parity     |    Reserve    |
+---+-----------+---------------+---------------+---------------+
 
]]></artwork></figure>

<t><list style="symbols">
  <t>Parity:
  <list style="symbols">
      <t>0x00: Even</t>
      <t>Ox01: Odd</t>
    </list></t>
  <t>Reserve: whether or not to reserve the port’s counterpart
  <list style="symbols">
      <t>0x00: Don’t reserve</t>
      <t>0x01: Reserve</t>
    </list></t>
</list></t>

<t>If the UDP ASSOCIATE request does not have the Port field set to 0 (indicating that an arbitrary port can be chosen), the proxy MUST silently ignore this option.</t>

<t>A port’s counterpart is determined as follows:</t>

<t><list style="symbols">
  <t>for even ports, it is the next higher port and</t>
  <t>for odd ports, it is the next lower port.</t>
</list></t>

<t>If the proxy can not or will not comply with the requested parity, it does so silently, and also does not reserve the allocated port’s counterpart.
If it can not or will not comply with the reservation request, the reply MUST have its Reserve field set to 0.</t>

<t>Port reservations are in place until either:</t>

<t><list style="symbols">
  <t>the original association ends, or</t>
  <t>an association involving the reserved port is made.</t>
</list></t>

<t>An association involving a reserved port can only be made if a client explicitly requests said port.
Further, if the original association is part of a session (see <xref target="opts-session"/>), the reserved port can only be claimed from within the same session.</t>

</section>
</section>
<section anchor="opts-auth-method" title="Authentication Method options">

<t>A client that is willing to go through the authentication phase MUST include an Authentication Method Advertisement option in its Request.
In case of a CONNECT Request, the option is also used to specify the amount of initial data supplied before any method-specific authentication negotiations take place.</t>

<figure title="Authentication Method Advertisement Option" anchor="fig-opt-auth-method-advert"><artwork><![CDATA[
                     1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-------------------------------+-------------------------------+
|           Kind = 2            |            Length             |
+-------------------------------+-------------------------------+
|      Initial Data Length      |                             ...
+-------------------------------+                             ...
...                                                           ...
...                 Methods (variable length)                 ...
...                                                           ...
...             +-----------------------------------------------+
...             |   Padding = 0 (variable length, 0-3 bytes)    |
+---------------+-----------------------------------------------+
 
]]></artwork></figure>

<t><list style="symbols">
  <t>Initial Data Size: A two-byte number in network byte order. In case of CONNECT, this is the number of bytes of initial data that are supplied by the client immediately following the Request. This number MUST NOT be larger than 2^14.</t>
  <t>Methods: One byte per advertised method. Method numbers are assigned by IANA.</t>
  <t>Padding: A minimally-sized sequence of zeroes, such that the option length is a multiple of 4. Note that 0 coincides with the value for “No Authentication Required”.</t>
</list></t>

<t>Clients MUST support the “No authentication required” method. Clients SHOULD omit advertising the “No authentication required” option.</t>

<t>The proxy indicates which authentication method must proceed by sending an Authentication Method Selection option in the corresponding Authentication Reply:</t>

<figure title="Authentication Method Selection Option" anchor="fig-opt-auth-method-select"><artwork><![CDATA[
                     1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-------------------------------+-------------------------------+
|           Kind = 3            |          Length = 8           |
+---------------+---------------+-------------------------------+
|    Method     |                  Padding = 0                  |
+---------------+-----------------------------------------------+

]]></artwork></figure>

<t><list style="symbols">
  <t>Method: The selected method.</t>
</list></t>

<t>If the proxy selects “No Acceptable Methods”, the client MUST close the connection.</t>

<t>If authentication is successful via some other means, or not required at all, the proxy silently ignores the Authentication Method Advertisement option.</t>

</section>
<section anchor="opts-auth-data" title="Authentication Data options">

<t>Authentication Data options carry method-specific authentication data. They can be part of SOCKS Requests and Authentication Replies.</t>

<t>Authentication Data options have the following format:</t>

<figure title="Authentication Data Option" anchor="fig-opt-auth-data"><artwork><![CDATA[
                     1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-------------------------------+-------------------------------+
|           Kind = 4            |            Length             |
+---------------+---------------+-------------------------------+
|    Method     |                                             ...
+---------------+                                             ...
...                                                           ...
...           Authentication Data (variable length)           ...
...                                                             |
+---------------------------------------------------------------+
 
]]></artwork></figure>

<t><list style="symbols">
  <t>Method: The number of the authentication method. These numbers are assigned by IANA.</t>
  <t>Authentication Data: The contents are specific to each method.</t>
</list></t>

<t>Clients MUST only place one Authentication Data option per authentication method.</t>

</section>
<section anchor="opts-session" title="Session options">

<t>Clients and proxies can establish SOCKS sessions, which span one or more Requests.
All session-related negotiations are done via Session Options, which are placed in Requests and  Authentication Replies by the client and, respectively, by the proxy.</t>

<t>Client and proxy implementations MUST either support all Session Option Types, or none.</t>

<section anchor="session-initiation" title="Session initiation">

<t>A client can initiate a session by sending a Session Request Option:</t>

<figure title="Session Request Option" anchor="fig-opt-session-req"><artwork><![CDATA[
                     1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-------------------------------+-------------------------------+
|           Kind = 5            |          Length = 4           |
+-------------------------------+-------------------------------+
 
]]></artwork></figure>

<t>The proxy then replies with a Session ID Option in the successful Operation Reply:</t>

<figure title="Session ID Option" anchor="fig-opt-session-id"><artwork><![CDATA[
                     1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-------------------------------+-------------------------------+
|           Kind = 6            |            Length             |
+-------------------------------+-------------------------------+
|                                                             ...
...               Session ID (variable length)                ...
...                                                             |
+---------------------------------------------------------------+
 
]]></artwork></figure>

<t><list style="symbols">
  <t>Session ID: An opaque sequence of bytes specific to the session. The size MUST be a multiple of 4. MUST NOT be empty.</t>
</list></t>

<t>The Session ID serves to identify the session and is opaque to the client.</t>

<t>The credentials, or lack thereof, used to initiate the session are tied to the session.</t>

<t>The SOCKS Request that initiated the session is considered part of the session. A client MUST NOT attempt to initiate a session from within a different session.</t>

<t>If the proxy can not or will not honor the Session Request, it does so silently.</t>

</section>
<section anchor="further-socks-requests" title="Further SOCKS Requests">

<t>Any further SOCKS Requests that are part of the session MUST include a Session ID Option (as seen in  <xref target="fig-opt-session-id"/>).
The proxy MUST silently ignore any authentication attempt in the Request, and MUST NOT require any authentication.</t>

<t>The proxy then replies by placing a Session OK option in the successful Authentication Reply:</t>

<figure title="Session OK Option" anchor="fig-opt-session-ok"><artwork><![CDATA[
                     1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-------------------------------+-------------------------------+
|           Kind = 8            |          Length = 4           |
+-------------------------------+-------------------------------+
 
]]></artwork></figure>

<t>If the Session ID is invalid, the first Authentication Reply MUST signal that authentication failed and can not continue (by setting the Type field to 0x01). Further, it SHALL contain a Session Invalid option:</t>

<figure title="Session Invalid Option" anchor="fig-opt-session-reject"><artwork><![CDATA[
                     1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-------------------------------+-------------------------------+
|           Kind = 9            |          Length = 4           |
+-------------------------------+-------------------------------+
 
]]></artwork></figure>

</section>
<section anchor="tearing-down-the-session" title="Tearing down the session">

<t>Proxies can, at their discretion, tear down a session and free all associated state. Proxy implementations SHOULD feature a timeout mechanism that destroys sessions after a period of inactivity.
When a session is terminated, the proxy MAY close all connections associated with said session.</t>

<t>Clients can signal that a session is no longer needed, and can be torn down, by sending a Session Teardown option in addition to the Session ID option:</t>

<figure title="Session Teardown Option" anchor="fig-opt-session-teardown"><artwork><![CDATA[
                     1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-------------------------------+-------------------------------+
|           Kind = 10           |          Length = 4           |
+-------------------------------+-------------------------------+
 
]]></artwork></figure>

<t>After sending such an option, the client MUST assume that the session is no longer valid. The proxy MUST treat the session-terminating request as if it were not part of any session.</t>

</section>
</section>
<section anchor="opts-idempotent" title="Idempotence options">

<t>To protect against duplicate SOCKS Requests, clients can request, and then spend, idempotence tokens.
A token can only be spent on a single SOCKS request.</t>

<t>Tokens are 4-byte unsigned integers in a modular 4-byte space. Therefore, if x and y are tokens, x is less than y if 0 &lt; (y - x) &lt; 2^31 in unsigned 32-bit arithmetic.</t>

<t>Proxies grant contiguous ranges of tokens called token windows. Token windows are defined by their base (the first token in the range) and size.</t>

<t>All token-related operations are done via Idempotence options.</t>

<t>Idempotence options are only valid in the context of a SOCKS Session. If a SOCKS Request is not part of a Session (either by supplying a valid Session ID or successfully initiating one via a Session Request), the proxy MUST silently ignore any Idempotence options.</t>

<t>Token windows are tracked by the proxy on a per-session basis. There can be at most one token window for every session and its tokens can only be spent from within said session.</t>

<t>Client and proxy implementations MUST either support all Idempotence Option Types, or none.</t>

<section anchor="requesting-a-token-window" title="Requesting a token window">

<t>A client can obtain a window of tokens by sending an Idempotence Request option as part of a SOCKS Request:</t>

<figure title="Token Request" anchor="fig-opt-idem-req"><artwork><![CDATA[
                     1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-------------------------------+-------------------------------+
|           Kind = 11           |          Length = 8           |
+-------------------------------+-------------------------------+
|                          Window Size                          |
+---------------------------------------------------------------+
 
]]></artwork></figure>

<t><list style="symbols">
  <t>Window Size: The requested window size.</t>
</list></t>

<t>Once a token window is issued, the proxy MUST include an Idempotence Window option in all subsequent successful Authentication Replies:</t>

<figure title="Idempotence Window" anchor="fig-opt-idem-advert"><artwork><![CDATA[
                     1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-------------------------------+-------------------------------+
|           Kind = 12           |          Length = 12          |
+-------------------------------+-------------------------------+
|                          Window Base                          |
+---------------------------------------------------------------+
|                          Window Size                          |
+---------------------------------------------------------------+
 
]]></artwork></figure>

<t><list style="symbols">
  <t>Window Base: The first token in the window.</t>
  <t>Window Size: The window size. This value MAY differ from the requested window size. Window sizes MUST be less than 2^31. Window sizes MUST NOT be 0.</t>
</list></t>

<t>If no token window is issued, the proxy MUST silently ignore the Token Request.
If there is already a token window associated with the session, the proxy MUST NOT issue a new window.</t>

</section>
<section anchor="spending-a-token" title="Spending a token">

<t>The client can attempt to spend a token by including a Idempotence Expenditure option in its SOCKS request:</t>

<figure title="Idempotence Expenditure" anchor="fig-opt-idem-spend"><artwork><![CDATA[
                     1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-------------------------------+-------------------------------+
|           Kind = 13           |          Length = 4           |
+-------------------------------+-------------------------------+
|                             Token                             |
+---------------------------------------------------------------+
 
]]></artwork></figure>

<t><list style="symbols">
  <t>Kind: 13 (Idempotence Expenditure option)</t>
  <t>Length: 8</t>
  <t>Token: The token being spent.</t>
</list></t>

<t>Clients SHOULD prioritize spending the smaller tokens.</t>

<t>The proxy responds by sending either an Idempotence Accepted or Rejected option as part of the Authentication Reply:</t>

<figure title="Idempotence Accepted" anchor="fig-opt-idem-spend-accept"><artwork><![CDATA[
                     1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-------------------------------+-------------------------------+
|           Kind = 14           |          Length = 4           |
+-------------------------------+-------------------------------+
 
]]></artwork></figure>

<figure title="Idempotence Rejected" anchor="fig-opt-idem-spend-reject"><artwork><![CDATA[
                     1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-------------------------------+-------------------------------+
|           Kind = 15           |          Length = 4           |
+-------------------------------+-------------------------------+
 
]]></artwork></figure>

<t>If eligible, the token is spent before attempting to honor the Request.
If the token is not eligible for spending, the Authentication Reply MUST indicate failure.</t>

</section>
<section anchor="shifting-windows" title="Shifting windows">

<t>Windows can be shifted (i. e. have their base increased, while retaining their size) unilaterally by the proxy.</t>

<t>Proxy implementations SHOULD shift the window:
 * as soon as the lowest-order token in the window is spent and
 * when a sufficiently high-order token is spent.</t>

<t>Proxy implementations SHOULD NOT shift the window’s base beyond the highest unspent token.</t>

</section>
<section anchor="out-of-order-window-advertisements" title="Out-of-order Window Advertisements">

<t>Even though the proxy increases the window’s base monotonically, there is no mechanism whereby a SOCKS client can receive the Token Window Advertisements in order.
As such, clients SHOULD disregard Token Window Advertisements with a Window Base less than the previously known value.</t>

</section>
</section>
</section>
<section anchor="usernamepassword-authentication" title="Username/Password Authentication">

<t>Username/Password authentication is carried out as in <xref target="RFC1929"/>.</t>

<t>Clients can also attempt to authenticate by placing the Username/Password
request in an Authentication Data Option.</t>

<figure title="Password authentication via a SOCKS Option" anchor="fig-passwd-req"><artwork><![CDATA[
                     1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-------------------------------+-------------------------------+
|           Kind = 4            |            Length             |
+---------------+---------------+---------------+---------------+
|  Method = 2   |                                             ...
+---------------+                                             ...
...                                                           ...
...                 Username/Password Request                 ...
...                                                           ...
...             +-----------------------------------------------+
...             |   Padding = 0 (variable length, 0-3 bytes)    |
+---------------+-----------------------------------------------+
 
]]></artwork></figure>

<t><list style="symbols">
  <t>Username/Password Request: The Username/Password Request, as described in <xref target="RFC1929"/>.</t>
</list></t>

<t>Proxies reply by including a Authentication Data Option in the next Authentication Reply which contains the Username/Password reply:</t>

<figure title="Reply to password authentication via a SOCKS Option" anchor="fig-passwd-reply"><artwork><![CDATA[
                     1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-------------------------------+-------------------------------+
|           Kind = 4            |          Length = 8           |
+---------------+---------------+---------------+---------------+
|  Method = 2   |    Username/Password Reply    |  Padding = 0  |
+---------------+-------------------------------+---------------+
 
]]></artwork></figure>

<t><list style="symbols">
  <t>Username/Password Reply: The Username/Password Reply, as described in <xref target="RFC1929"/>.</t>
</list></t>

</section>
<section anchor="tcp-fast-open-on-the-client-proxy-leg" title="TCP Fast Open on the Client-Proxy Leg">

<t>TFO breaks TCP semantics, causing replays of the data in the SYN’s payload under certain rare circumstances <xref target="RFC7413"/>.
A replayed SOCKS Request could itself result in a replayed connection on behalf of the client.</t>

<t>As such, client implementations SHOULD NOT use TFO on the client-proxy leg unless:</t>

<t><list style="symbols">
  <t>The protocol running on top of SOCKS tolerates the risks of TFO, or</t>
  <t>The SYN’s payload does not contain any application data (so that no data is replayed to the server, even though duplicate connections are still possible), or</t>
  <t>The client uses Idempotence Options, making replays very unlikely, or</t>
  <t>SOCKS is running on top of TLS and Early Data is not used.</t>
</list></t>

</section>
<section anchor="false-starts" title="False Starts">

<t>In case of CONNECT Requests, the client MAY start sending application data as soon as possible, as long as doing so does not incur the risk of breaking the SOCKS protocol.</t>

<t>Clients must work around the authentication phase by doing any of the following:</t>

<t><list style="symbols">
  <t>If the Request does not contain an Authentication Method Advertisement option, the authentication phase is guaranteed not to happen. In this case, application data MAY be sent immediately after the Request.</t>
  <t>Application data MAY be sent immediately after receiving an Authentication Reply indicating success.</t>
  <t>When performing a method-specific authentication sequence, application data MAY be sent immediately after the last client message.</t>
</list></t>

</section>
<section anchor="dns-provided-by-socks" title="DNS provided by SOCKS">

<t>Clients may require information typically obtained from DNS servers, albeit from the proxy’s vantage point.</t>

<t>While the CONNECT command can work with domain names, some clients’ workflows require that addresses be resolved as a separate step prior to connecting.
Moreover, the SOCKS Datagram Header, as described in <xref target="udp-assoc"/>, can be reduced in size by providing the resolved destination IP address, rather than the FQDN.</t>

<t>Emerging techniques may also make use of DNS to deliver server-specific information to clients.
For example, Encrypted SNI <xref target="I-D.ietf-tls-esni"/> relies on DNS to publish encryption keys.</t>

<t>Proxy implementations MAY provide a default plaintext DNS service.
A client looking to make use of it issues a CONNECT Request to IP address 0.0.0.0 or 0:0:0:0:0:0:0:0 on port 53.
Following successful authentication, the Operation Reply MAY indicate an unspecified bind address (0.0.0.0 or ::) and port (0).
The client and proxy then behave as per <xref target="RFC7766"/>.</t>

<t>The service itself can be provided directly by the proxy daemon, or by proxying the client’s request to a pre-configured DNS server.</t>

<t>If the proxy does not implement such functionality, it MAY return an error code signalling “Connection refused”.</t>

</section>
<section anchor="security-considerations" title="Security Considerations">

<section anchor="large-requests" title="Large requests">

<t>Given the format of the request message, a malicious client could craft a request that is in excess of 16 KB and proxies could be prone to DDoS attacks.</t>

<t>To mitigate such attacks, proxy implementations SHOULD be able to incrementally parse the requests. Proxies MAY close the connection to the client if:</t>

<t><list style="symbols">
  <t>the request is not fully received after a certain timeout, or</t>
  <t>the number of options or their size exceeds an imposed hard cap.</t>
</list></t>

</section>
<section anchor="replay-attacks" title="Replay attacks">

<t>In TLS 1.3, early data (which is likely to contain a full SOCKS request) is prone to replay attacks.</t>

<t>While Token Expenditure options can be used to mitigate replay attacks, anything prior to the initial Token Request is still vulnerable.
As such, client implementations SHOULD NOT make use of TLS early data unless the Request attempts to spend a token.</t>

</section>
<section anchor="resource-exhaustion" title="Resource exhaustion">

<t>Malicious clients can issue a large number of Session Requests, forcing the proxy to keep large amounts of state.</t>

<t>To mitigate this, the proxy MAY implement policies restricting the number of concurrent sessions on a per-IP or per-user basis, or barring unauthenticated clients from establishing sessions.</t>

</section>
</section>
<section anchor="privacy-considerations" title="Privacy Considerations">

<t>The timing of Operation Replies can reveal some information about a proxy’s recent usage:</t>

<t><list style="symbols">
  <t>The DNS resolver used by the proxy may cache the answer to recent queries. As such, subsequent connection attempts to the same hostname are likely to be slightly faster, even if requested by different clients.</t>
  <t>Likewise, the proxy’s OS typically caches TFO cookies. Repeated TFO connection attempts tend to be sped up, regardless of the client.</t>
</list></t>

</section>
<section anchor="iana" title="IANA Considerations">

<t>This document requests that IANA allocate 2-byte option kinds for SOCKS 6 options. Further, this document requests the following option kinds:</t>

<t><list style="symbols">
  <t>Unassigned: 0</t>
  <t>Stack: 1</t>
  <t>Authentication Method Advertisement: 2</t>
  <t>Authentication Method Selection: 3</t>
  <t>Authentication Data: 4</t>
  <t>Session Request: 5</t>
  <t>Session ID: 6</t>
  <t>Session OK: 8</t>
  <t>Session Invalid: 9</t>
  <t>Session Teardown: 10</t>
  <t>Idempotence Request: 11</t>
  <t>Idempotence Window: 12</t>
  <t>Idempotence Expenditure: 13</t>
  <t>Idempotence Accepted: 14</t>
  <t>Idempotence Rejected: 15</t>
  <t>Resolution Request: 16</t>
  <t>IPv4 Resolution: 17</t>
  <t>IPv6 Resolution: 18</t>
  <t>Vendor-specific: 64512-0xFFFF</t>
</list></t>

<t>This document also requests that IANA allocate a TCP and UDP port for SOCKS over TLS and DTLS, respectively.</t>

</section>
<section anchor="acknowledgements" title="Acknowledgements">

<t>The protocol described in this draft builds upon and is a direct continuation of SOCKS 5 <xref target="RFC1928"/>.</t>

</section>


  </middle>

  <back>

    <references title='Normative References'>





<reference  anchor="RFC2119" target='https://www.rfc-editor.org/info/rfc2119'>
<front>
<title>Key words for use in RFCs to Indicate Requirement Levels</title>
<author initials='S.' surname='Bradner' fullname='S. Bradner'><organization /></author>
<date year='1997' month='March' />
<abstract><t>In many standards track documents several words are used to signify the requirements in the specification.  These words are often capitalized. This document defines these words as they should be interpreted in IETF documents.  This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t></abstract>
</front>
<seriesInfo name='BCP' value='14'/>
<seriesInfo name='RFC' value='2119'/>
<seriesInfo name='DOI' value='10.17487/RFC2119'/>
</reference>



<reference  anchor="RFC1929" target='https://www.rfc-editor.org/info/rfc1929'>
<front>
<title>Username/Password Authentication for SOCKS V5</title>
<author initials='M.' surname='Leech' fullname='M. Leech'><organization /></author>
<date year='1996' month='March' />
<abstract><t>The protocol specification for SOCKS Version 5 specifies a generalized framework for the use of arbitrary authentication protocols in the initial socks connection setup. This document describes one of those protocols, as it fits into the SOCKS Version 5 authentication &quot;subnegotiation&quot;.  [STANDARDS-TRACK]</t></abstract>
</front>
<seriesInfo name='RFC' value='1929'/>
<seriesInfo name='DOI' value='10.17487/RFC1929'/>
</reference>



<reference  anchor="RFC8305" target='https://www.rfc-editor.org/info/rfc8305'>
<front>
<title>Happy Eyeballs Version 2: Better Connectivity Using Concurrency</title>
<author initials='D.' surname='Schinazi' fullname='D. Schinazi'><organization /></author>
<author initials='T.' surname='Pauly' fullname='T. Pauly'><organization /></author>
<date year='2017' month='December' />
<abstract><t>Many communication protocols operating over the modern Internet use hostnames.  These often resolve to multiple IP addresses, each of which may have different performance and connectivity characteristics.  Since specific addresses or address families (IPv4 or IPv6) may be blocked, broken, or sub-optimal on a network, clients that attempt multiple connections in parallel have a chance of establishing a connection more quickly.  This document specifies requirements for algorithms that reduce this user-visible delay and provides an example algorithm, referred to as &quot;Happy Eyeballs&quot;.  This document obsoletes the original algorithm description in RFC 6555.</t></abstract>
</front>
<seriesInfo name='RFC' value='8305'/>
<seriesInfo name='DOI' value='10.17487/RFC8305'/>
</reference>



<reference  anchor="RFC7766" target='https://www.rfc-editor.org/info/rfc7766'>
<front>
<title>DNS Transport over TCP - Implementation Requirements</title>
<author initials='J.' surname='Dickinson' fullname='J. Dickinson'><organization /></author>
<author initials='S.' surname='Dickinson' fullname='S. Dickinson'><organization /></author>
<author initials='R.' surname='Bellis' fullname='R. Bellis'><organization /></author>
<author initials='A.' surname='Mankin' fullname='A. Mankin'><organization /></author>
<author initials='D.' surname='Wessels' fullname='D. Wessels'><organization /></author>
<date year='2016' month='March' />
<abstract><t>This document specifies the requirement for support of TCP as a transport protocol for DNS implementations and provides guidelines towards DNS-over-TCP performance on par with that of DNS-over-UDP. This document obsoletes RFC 5966 and therefore updates RFC 1035 and RFC 1123.</t></abstract>
</front>
<seriesInfo name='RFC' value='7766'/>
<seriesInfo name='DOI' value='10.17487/RFC7766'/>
</reference>




    </references>

    <references title='Informative References'>





<reference  anchor="RFC1928" target='https://www.rfc-editor.org/info/rfc1928'>
<front>
<title>SOCKS Protocol Version 5</title>
<author initials='M.' surname='Leech' fullname='M. Leech'><organization /></author>
<author initials='M.' surname='Ganis' fullname='M. Ganis'><organization /></author>
<author initials='Y.' surname='Lee' fullname='Y. Lee'><organization /></author>
<author initials='R.' surname='Kuris' fullname='R. Kuris'><organization /></author>
<author initials='D.' surname='Koblas' fullname='D. Koblas'><organization /></author>
<author initials='L.' surname='Jones' fullname='L. Jones'><organization /></author>
<date year='1996' month='March' />
<abstract><t>This memo describes a protocol that is an evolution of the previous version of the protocol, version 4 [1]. This new protocol stems from active discussions and prototype implementations.  [STANDARDS-TRACK]</t></abstract>
</front>
<seriesInfo name='RFC' value='1928'/>
<seriesInfo name='DOI' value='10.17487/RFC1928'/>
</reference>



<reference  anchor="RFC7413" target='https://www.rfc-editor.org/info/rfc7413'>
<front>
<title>TCP Fast Open</title>
<author initials='Y.' surname='Cheng' fullname='Y. Cheng'><organization /></author>
<author initials='J.' surname='Chu' fullname='J. Chu'><organization /></author>
<author initials='S.' surname='Radhakrishnan' fullname='S. Radhakrishnan'><organization /></author>
<author initials='A.' surname='Jain' fullname='A. Jain'><organization /></author>
<date year='2014' month='December' />
<abstract><t>This document describes an experimental TCP mechanism called TCP Fast Open (TFO).  TFO allows data to be carried in the SYN and SYN-ACK packets and consumed by the receiving end during the initial connection handshake, and saves up to one full round-trip time (RTT) compared to the standard TCP, which requires a three-way handshake (3WHS) to complete before data can be exchanged.  However, TFO deviates from the standard TCP semantics, since the data in the SYN could be replayed to an application in some rare circumstances.  Applications should not use TFO unless they can tolerate this issue, as detailed in the Applicability section.</t></abstract>
</front>
<seriesInfo name='RFC' value='7413'/>
<seriesInfo name='DOI' value='10.17487/RFC7413'/>
</reference>



<reference  anchor="RFC6824" target='https://www.rfc-editor.org/info/rfc6824'>
<front>
<title>TCP Extensions for Multipath Operation with Multiple Addresses</title>
<author initials='A.' surname='Ford' fullname='A. Ford'><organization /></author>
<author initials='C.' surname='Raiciu' fullname='C. Raiciu'><organization /></author>
<author initials='M.' surname='Handley' fullname='M. Handley'><organization /></author>
<author initials='O.' surname='Bonaventure' fullname='O. Bonaventure'><organization /></author>
<date year='2013' month='January' />
<abstract><t>TCP/IP communication is currently restricted to a single path per connection, yet multiple paths often exist between peers.  The simultaneous use of these multiple paths for a TCP/IP session would improve resource usage within the network and, thus, improve user experience through higher throughput and improved resilience to network failure.</t><t>Multipath TCP provides the ability to simultaneously use multiple paths between peers.  This document presents a set of extensions to traditional TCP to support multipath operation.  The protocol offers the same type of service to applications as TCP (i.e., reliable bytestream), and it provides the components necessary to establish and use multiple TCP flows across potentially disjoint paths.  This  document defines an Experimental Protocol for the Internet community.</t></abstract>
</front>
<seriesInfo name='RFC' value='6824'/>
<seriesInfo name='DOI' value='10.17487/RFC6824'/>
</reference>



<reference  anchor="RFC8446" target='https://www.rfc-editor.org/info/rfc8446'>
<front>
<title>The Transport Layer Security (TLS) Protocol Version 1.3</title>
<author initials='E.' surname='Rescorla' fullname='E. Rescorla'><organization /></author>
<date year='2018' month='August' />
<abstract><t>This document specifies version 1.3 of the Transport Layer Security (TLS) protocol.  TLS allows client/server applications to communicate over the Internet in a way that is designed to prevent eavesdropping, tampering, and message forgery.</t><t>This document updates RFCs 5705 and 6066, and obsoletes RFCs 5077, 5246, and 6961.  This document also specifies new requirements for TLS 1.2 implementations.</t></abstract>
</front>
<seriesInfo name='RFC' value='8446'/>
<seriesInfo name='DOI' value='10.17487/RFC8446'/>
</reference>



<reference  anchor="RFC3550" target='https://www.rfc-editor.org/info/rfc3550'>
<front>
<title>RTP: A Transport Protocol for Real-Time Applications</title>
<author initials='H.' surname='Schulzrinne' fullname='H. Schulzrinne'><organization /></author>
<author initials='S.' surname='Casner' fullname='S. Casner'><organization /></author>
<author initials='R.' surname='Frederick' fullname='R. Frederick'><organization /></author>
<author initials='V.' surname='Jacobson' fullname='V. Jacobson'><organization /></author>
<date year='2003' month='July' />
<abstract><t>This memorandum describes RTP, the real-time transport protocol.  RTP provides end-to-end network transport functions suitable for applications transmitting real-time data, such as audio, video or simulation data, over multicast or unicast network services.  RTP does not address resource reservation and does not guarantee quality-of- service for real-time services.  The data transport is augmented by a control protocol (RTCP) to allow monitoring of the data delivery in a manner scalable to large multicast networks, and to provide minimal control and identification functionality.  RTP and RTCP are designed to be independent of the underlying transport and network layers.  The protocol supports the use of RTP-level translators and mixers. Most of the text in this memorandum is identical to RFC 1889 which it obsoletes.  There are no changes in the packet formats on the wire, only changes to the rules and algorithms governing how the protocol is used. The biggest change is an enhancement to the scalable timer algorithm for calculating when to send RTCP packets in order to minimize transmission in excess of the intended rate when many participants join a session simultaneously.  [STANDARDS-TRACK]</t></abstract>
</front>
<seriesInfo name='STD' value='64'/>
<seriesInfo name='RFC' value='3550'/>
<seriesInfo name='DOI' value='10.17487/RFC3550'/>
</reference>



<reference anchor="I-D.ietf-tls-dtls-connection-id">
<front>
<title>Connection Identifiers for DTLS 1.2</title>

<author initials='E' surname='Rescorla' fullname='Eric Rescorla'>
    <organization />
</author>

<author initials='H' surname='Tschofenig' fullname='Hannes Tschofenig'>
    <organization />
</author>

<author initials='T' surname='Fossati' fullname='Thomas Fossati'>
    <organization />
</author>

<date month='October' day='21' year='2019' />

<abstract><t>This document specifies the Connection ID (CID) construct for the Datagram Transport Layer Security (DTLS) protocol version 1.2.  A CID is an identifier carried in the record layer header that gives the recipient additional information for selecting the appropriate security association.  In "classical" DTLS, selecting a security association of an incoming DTLS record is accomplished with the help of the 5-tuple.  If the source IP address and/or source port changes during the lifetime of an ongoing DTLS session then the receiver will be unable to locate the correct security context.</t></abstract>

</front>

<seriesInfo name='Internet-Draft' value='draft-ietf-tls-dtls-connection-id-07' />
<format type='TXT'
        target='http://www.ietf.org/internet-drafts/draft-ietf-tls-dtls-connection-id-07.txt' />
</reference>



<reference anchor="I-D.ietf-tls-esni">
<front>
<title>TLS Encrypted Client Hello</title>

<author initials='E' surname='Rescorla' fullname='Eric Rescorla'>
    <organization />
</author>

<author initials='K' surname='Oku' fullname='Kazuho Oku'>
    <organization />
</author>

<author initials='N' surname='Sullivan' fullname='Nick Sullivan'>
    <organization />
</author>

<author initials='C' surname='Wood' fullname='Christopher Wood'>
    <organization />
</author>

<date month='June' day='1' year='2020' />

<abstract><t>This document describes a mechanism in Transport Layer Security (TLS) for encrypting a ClientHello message under a server public key.</t></abstract>

</front>

<seriesInfo name='Internet-Draft' value='draft-ietf-tls-esni-07' />
<format type='TXT'
        target='http://www.ietf.org/internet-drafts/draft-ietf-tls-esni-07.txt' />
</reference>




    </references>



  </back>

<!-- ##markdown-source:
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
j0p2RoQrjR6Edzrb6xEZ37nsNaMrXSLm57u+H4m8gFMa91eFGzDwbwzkX1od
//7u1b//ePzu1RF+P//+8M0b+4s8EWwIr5OPmevZN1+evn376uRIXiZmtiGe
6Y3Ts4vj05PDNxsiwKZVYN3pkQSBTBLhznQjrF9U1s/OAhh7jBEjyLE6byGm
snnBHM8vXxSLu+6m1a8ZfvP82+2d3b1n+we/9bfg/9EP9Ijw5ZvjVycX4W/8
OXt3+n9+JjJrP/jTcM3Pn8LmoV/XkYJfDbAHoXnv30jaE4hjaT58eCZ9z5tO
ddTWz6/2N/dhVmK7P/0PGwvgIx5efzTBBz7dnI1nFfgtZ3PPNEH4mJ91A/yp
83qvVvUrWzy7w/5Kr//r/bvgWdZcgLz6O3eAL2WINYvZPOxEo3BwxFb30X8L
Avd2//gT/Y6YkcSwfX4num6UB3beNhOETC+Mb9gdaO1e/xS+cP3rrd15P+sW
+asMsWhTiV/Xv9B/omtfWH8MQrZ/GYdfzNJLyXY4GNbF4iZN4Kqps+S7jSbO
zUZvNVE7xo5sIio37oKAlVAO1xtOoso6F0lYqK7EeEQEOZpk9Cc95thd4JnR
oKMBx3HCC1IszGitR9XkWxaLMoWQoqFmOEZRdQIbfPZ+NXKDxwDkIYL3S4QV
OsGmYnoZhJNVACuOUVCt8xGMtntQiLRlFTFQ1x47taz9B2tVIYa4N8eXGJHJ
D5cemMcCHm0WTREqha0htBzqJscrs8gwiyqO6e1a2nUrJAacJO81OEw1Vg2a
y7vaNgx34fHM222cxqxvGH+lBCaDAiAkvxMX3/gwB46eabzffdPO1zjWNdo2
4DBe1TsiowC0He1YLKlbcmTiU0o1bk/0GRZtlxmdVkq/9J5bJdDBRoEsmiQZ
wWywsYYWb3CknNEEDBz6zwa6NRLYs2KViK1EXddQ4qcaFwHfk3kEy4Rde+WC
ubHARIETk5nWVSvn4aI3kFEwtF4t6DMELEu2wHIR7jAwIfSqKCEi68V3Mx0a
8wgE1Za4zV5/CTxzXGfqKTiunasnlVY9YAYsbiN3cOCDhFP6CNfYB2itdHZY
qkbuwpY4ZVxlfbm7dNCFpMxwRjXt2YVJNe9KkCemlXhDmSpI56SegKB4JtpW
0JcTerlECO1VmtxwrIVzSCRF0U3qRQZN5HC4aaOl4Ibww328YN9WfK8T2KsR
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

-->

</rfc>

