<?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.14 -->

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

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

<rfc ipr="trust200902" docName="draft-olteanu-intarea-socks-6-11" category="std">

  <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="November" day="02"/>

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

<t><list style="symbols">
  <t>Changed intended status to Standards Track</t>
  <t>Renamed Vendor-specific option range to Experimental</t>
  <t>Stack options:
  <list style="symbols">
      <t>Fixed some instances where an unsupported option was indistinguishable from a case where the proxy couldn’t or wouldn’t honor it (offenders: Happy Eyeballs, IP Fragmentation, UDP Error, Port Parity)</t>
      <t>MPTCP: changed semantics w.r.t. TCP BIND: the absence of such an option SHOULD no longer lead the proxy to refuse MPTCP</t>
      <t>Port Parity: relaxed restrictions in case the client supplies a specific port</t>
    </list></t>
</list></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 aligned.</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 negotiations 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 advertise 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 connection 
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: Success</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 addresses 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 protocols 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 behavior 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    | Availability  |  Padding = 0  |
+---+-----------+---------------+-------------------------------+
 
]]></artwork></figure>

<t><list style="symbols">
  <t>Availability:  <list style="symbols">
      <t>0x01: Happy Eyeballs is not desired (client) or was not performed (proxy)</t>
      <t>0x02: Happy Eyeballs is desired (client) or was attempted (proxy)</t>
    </list></t>
</list></t>

<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-fragmentation-options" title="No Fragmentation options">

<figure title="No Fragmentation 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    | Availability  |  Padding = 0  |
+---+-----------+---------------+-------------------------------+
 
]]></artwork></figure>

<t><list style="symbols">
  <t>Availability:  <list style="symbols">
      <t>0x01: IP fragmentation is allowed (client) or the lack thereof is not enforced (proxy)</t>
      <t>0x02: IP fragmentation is not desired (client) or avoidance of fragmentation is enforced (proxy)</t>
    </list></t>
</list></t>

<t>A No Fragmentation option can be used to instruct 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 (client) or available (proxy)</t>
      <t>0x02: MPTCP is desired (client) or available (proxy)</t>
    </list></t>
</list></t>

<t>In the absence of such an option, the proxy SHOULD NOT enable MPTCP for CONNECT commands.</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 signaling 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    | Availability  |  Padding = 0  |
+---+-----------+---------------+-------------------------------+
 
]]></artwork></figure>

<t><list style="symbols">
  <t>Availability:  <list style="symbols">
      <t>0x01: Error reporting is not dersired (client) or will not be performed (proxy)</t>
      <t>0x02: Error reporting is dersired (client) or will be performed (proxy)</t>
    </list></t>
</list></t>

<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 running 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: No particular parity</t>
      <t>0x01: Even</t>
      <t>0x02: 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 ignore the suggested parity.</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 also does not reserve the allocated port’s counterpart.</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 signaling “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>Experimental: 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="acknowledgments" title="Acknowledgments">

<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='October' day='16' 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-08' />
<format type='TXT'
        target='http://www.ietf.org/internet-drafts/draft-ietf-tls-esni-08.txt' />
</reference>




    </references>



  </back>

<!-- ##markdown-source:
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
ooMNAQA=

-->

</rfc>

