<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc version 1.7.1 (Ruby 3.2.2) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-piraux-tcpls-04" category="exp" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.18.2 -->
  <front>
    <title abbrev="TCPLS">TCPLS: Modern Transport Services with TCP and TLS</title>
    <seriesInfo name="Internet-Draft" value="draft-piraux-tcpls-04"/>
    <author initials="M." surname="Piraux" fullname="Maxime Piraux">
      <organization>UCLouvain &amp; WELRI</organization>
      <address>
        <email>maxime.piraux@uclouvain.be</email>
      </address>
    </author>
    <author initials="F." surname="Rochet" fullname="Florentin Rochet">
      <organization>University of Namur</organization>
      <address>
        <email>florentin.rochet@unamur.be</email>
      </address>
    </author>
    <author initials="O." surname="Bonaventure" fullname="Olivier Bonaventure">
      <organization>UCLouvain &amp; WELRI</organization>
      <address>
        <email>olivier.bonaventure@uclouvain.be</email>
      </address>
    </author>
    <date year="2023" month="October" day="23"/>
    <area>Transport Area</area>
    <keyword>Internet-Draft</keyword>
    <abstract>
      <?line 61?>

<t>This document specifies a protocol leveraging TCP and TLS to provide modern
transport services such as multiplexing, connection migration and multipath
in a secure manner.</t>
    </abstract>
    <note removeInRFC="true">
      <name>Discussion Venues</name>
      <t>Source for this draft and an issue tracker can be found at
    <eref target="https://github.com/mpiraux/draft-piraux-tcpls"/>.</t>
    </note>
  </front>
  <middle>
    <?line 67?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>The TCP/IP protocol stack continuously evolves. In the early days, most
applications were interacting with the transport layer (mainly TCP, but
also UDP) using the socket API. This is illustrated in <xref target="fig-intro-old"/>.</t>
      <figure anchor="fig-intro-old">
        <name>The classical TCP/IP protocol stack</name>
        <artwork><![CDATA[
+------------------------------+
|          Application         |
+------------------------------+
|            TCP/UDP           |
+------------------------------+
|             IPv4             |
+------------------------------+
]]></artwork>
      </figure>
      <t>The TCP/IP stack has slowly evolved and the figure above does not
anymore describe current Internet applications. IPv6 is now widely
deployed next to IPv4 in the network layer. In the transport layer,
protocols such as SCTP <xref target="RFC4960"/> or DCCP <xref target="RFC6335"/> and TCP
extensions including Multipath TCP <xref target="RFC8684"/> or tcpcrypt <xref target="RFC8548"/>
have been specified. The security aspects of the TCP/IP protocol suite
are much more important today than in the past <xref target="RFC7258"/>. Many
applications rely on TLS <xref target="RFC8446"/> and their stack is
similar to the one shown in <xref target="fig-intro-today"/>.</t>
      <figure anchor="fig-intro-today">
        <name>Today's TCP/IP protocol stack</name>
        <artwork><![CDATA[
+------------------------------+
|          Application         |
+------------------------------+
|             TLS              |
+------------------------------+
|             TCP              |
+------------------------------+
|          IPv4/IPv6           |
+------------------------------+
]]></artwork>
      </figure>
      <t>Recently, the IETF went one step further in improving the transport
layer with the QUIC protocol <xref target="RFC9000"/>. QUIC is a new secure transport
protocol primarily designed for HTTP/3. It includes the reliability and
congestion control features that are part of TCP and integrates the
security features of TLS 1.3 <xref target="RFC8446"/>. This close integration between
the reliability and security features brings a lot of benefits in QUIC.
QUIC runs above UDP to be able to pass through most middleboxes and to be
implementable in user space. While QUIC reuses TLS, it does not strictly layer
TLS on top of UDP as DTLS <xref target="I-D.ietf-tls-dtls13"/>. This organization,
illustrated in <xref target="fig-intro-quic"/> provides much more flexibility than simply
layering TLS above UDP. For example, the QUIC migration capabilities enable
an application to migrate an existing QUIC session from an IPv4 path to an
IPv6 one.</t>
      <figure anchor="fig-intro-quic">
        <name>QUIC protocol stack</name>
        <artwork><![CDATA[
+------------------------------+
|          Application         |
+------------------------------+
|..........                    |
|   TLS   |   QUIC   ..........|
|..........          |   UDP   |
+------------------------------+
|          IPv4/IPv6           |
+------------------------------+
]]></artwork>
      </figure>
      <t>In this document, we revisit how TCP and TLS 1.3 can be used to
provide modern transport services to applications. We apply a similar principle
and combine TCP and TLS 1.3 in a protocol that we call TCPLS.
TCPLS leverages the security features of TLS 1.3 like QUIC, but without
begin simply layered above a single TCP connection. In addition,
TCPLS reuses the existing TCP stacks and TCP's wider support in current
networks. A preliminary version of the TCPLS protocol is described in <xref target="CONEXT21"/>.</t>
      <figure anchor="fig-intro-tcpls">
        <name>TCPLS in the TCP/IP protocol stack</name>
        <artwork><![CDATA[
+------------------------------+
|          Application         |
+------------------------------+
|..........                    |
|   TLS   |   TCPLS  ..........|
|..........          |   TCP   |
+------------------------------+
|          IPv4/IPv6           |
+------------------------------+
]]></artwork>
      </figure>
      <t>In this document, we use the term TLS/TCP to refer to the TLS 1.3
protocol running over one TCP connection. We reserve the word TCPLS for
the protocol proposed in this document.</t>
      <t>This document is organized as follows. First, <xref target="services"/> summarizes the
different types of services that modern transports expose to application.
<xref target="overview"/> gives an overview of TCPLS and how it supports these
services. Finally, <xref target="format"/> describes the TCPLS in more details
and the TLS Extensions introduced in this document.</t>
    </section>
    <section anchor="conventions-and-definitions">
      <name>Conventions and Definitions</name>
      <t>The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL
NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>",
"<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are to be interpreted as
described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they
appear in all capitals, as shown here.</t>
      <?line -18?>

<section anchor="notational-conventions">
        <name>Notational conventions</name>
        <t>This document uses the same conventions as defined in Section 1.3 of
<xref target="RFC9000"/>.</t>
        <t>This document uses network byte order (that is, big endian) values.
Fields are placed starting from the high-order bits of each byte.</t>
      </section>
    </section>
    <section anchor="services">
      <name>Modern Transport Services</name>
      <t>Application requirements and the devices they run on evolve over time. In
the early days, most applications involved single-file transfer and ran on
single-homed computers with a fixed-line network. Today, web-based applications
require exchanging multiple objects, with different priorities, on
devices that can move from one access network to another and that often
have multiple access networks available. Security is also a key requirement
of applications that evolved from only guaranteeing the confidentiality and
integrity of application messages to also preventing pervasive monitoring.</t>
      <t>With TCP and TLS/TCP, applications use a single connection that supports
a single bytestream in each direction.
Some TCP applications such as HTTP/2 <xref target="RFC7540"/> use multiple
streams, but these are mapped to a single TCP connection which leads
to Head-of-Line (HoL) blocking when packet losses occur. SCTP <xref target="RFC4960"/>
supports multiple truly-concurrent streams and QUIC adopted a similar
approach to prevent HoL blocking.</t>
      <t>Modern transport services also changed the utilization of the underlying network.
With TCP, when a host creates a connection, it is bound to the
IP addresses used by the client and the server during the handshake. When the
client moves and receives a different IP address, it has to reestablish all TCP
connections bound to the previous address.
When the client and the server are dual-stack, they cannot easily switch from
one address family to another. Happy Eyeballs <xref target="RFC8305"/> provides a partial
answer to this problem for web applications with heuristics that clients can
use to probe TCP connections with different address families.
With Multipath TCP, the client and the
server can learn other addresses of the remote host and combine several
TCP connections within a single Multipath TCP connection that is exposed to
the application. This supports various use cases <xref target="RFC8041"/>. QUIC <xref target="RFC9000"/>
enables applications to migrate from one network path to another, but not
to simultaneously use different paths.</t>
    </section>
    <section anchor="overview">
      <name>TCPLS Overview</name>
      <t>In order for TCPLS to be widely compatible with middleboxes that inspect TCP
segments and TLS records, TCPLS does not modify the TCP connection establishment
and only adds a TLS extension to the TLS handshake. <xref target="fig-overview-handshake"/>
illustrates the opening of a TCPLS session which starts with the TCP
3-way handshake, followed by the TLS handshake. In
the Extensions of the ClientHello and in the server EncryptedExtensions, the
tcpls TLS Extension is introduced to announce the support of TCPLS.</t>
      <figure anchor="fig-overview-handshake">
        <name>Starting a TCPLS session</name>
        <artwork><![CDATA[
Client                                   Server
 |                    SYN                    |
 |------------------------------------------>|
 |                  SYN+ACK                  |
 |<------------------------------------------|
 |       ACK, TLS ClientHello + tcpls        |
 |------------------------------------------>|
 |  TLS ServerHello, TLS EncryptedExtensions |
 |                          + tcpls, ...     |
 |<------------------------------------------|
 |               TLS Finished                |
 |------------------------------------------>|
 |                                           |
]]></artwork>
      </figure>
      <t>TCP/TLS offers a single encrypted bytestream service to the application.
To achieve this, TLS records are used to encrypt and secure chunks of
the application bytestream and are then sent through the TCP bytestream.
TCPLS leverages TLS records differently. TCPLS defines its own framing
that allows encoding application data and control information. A TCPLS frame
is the basic unit of information for TCPLS. A TCPLS frame always fits in a
single record. One or more TCPLS frames can be encoded in a TLS record.
This TLS record is then reliably transported by a TCP connection.
<xref target="fig-tcpls-frames"/> illustrates the relationship between
TCPLS frames and TLS records.</t>
      <figure anchor="fig-tcpls-frames">
        <name>The first TLS record contains two TCPLS frames</name>
        <artwork><![CDATA[
  TCPLS Data     TCP Control      TCPLS Data
  abcdef         0010010          mnopq...
  <--------->   <----------->    <------------>
 /                          /
/                          /
|                         /
|                        /
|                      /
|                    /
|                  /
|                 /
+----------------+     +-----------------+
|   TLS record n |     | TLS record n+1  |  ....
+----------------+     +-----------------+
]]></artwork>
      </figure>
      <section anchor="multiple-streams">
        <name>Multiple Streams</name>
        <t>TCPLS extends the service provided by TCP with streams. Streams are
independent bidirectional bytestreams that can be used by applications to
concurrently convey several objects over a TCPLS session.
Streams can be opened by the client and by the server.</t>
        <t>Streams are identified by a 32-bit unsigned integer. The parity of this number
indicates the initiator of the stream. The client opens even-numbered
streams while the server opens odd-numbered streams. Streams are opened in
sequence, e.g. a client that has opened stream 0 will use stream 2 as the
next one.</t>
        <t>Data is exchanged using Stream frames whose format is
described in <xref target="stream-frame"/>. Each Stream frame carries a chunk of data of
a given stream. Applications can mark the end of a stream to close it.</t>
        <t>TCPLS enables the receiver to decrypt and process TLS records in
zero copy similarly to TLS 1.3 under circumstances discussed in
<xref target="zero-copy-receive-path"/>.</t>
        <t>Similarly to HTTP/2 <xref target="RFC7540"/>, conveying several streams on a single TCP
connection introduces Head-of-Line (HoL) blocking between the streams. To
alleviate this, TCPLS provides means to the application to choose the degree
of HoL blocking resilience it needs for its application objects by spreading
streams among different underlying TCP connections.</t>
      </section>
      <section anchor="multiple-tcp-connections">
        <name>Multiple TCP connections</name>
        <t>TCPLS is not restricted to using a single TCP connection to exchange frames.
A TCPLS session starts with the TCP connection that was used to transport the
TLS handshake. After this handshake, other TCP connections can be added
to a TCPLS session, either to spread the load or for failover. TCPLS manages
the utilization of the underlying TCP connections within a TCPLS session.</t>
        <t>Multipath TCP enables both the client and the server to establish additional
TCP connections. However, experience has shown that additional subflows are only
established by the clients. TCPLS focuses on this deployment and only allows
clients to create additional TCP connections.</t>
        <t>Using Multipath TCP, a client can try establishing a new TCP connection at
any time. If a server wishes to restrict the number of TCP connections that
correspond to one Multipath TCP connection, it has to respond with RST to
the in excess connection attempts.</t>
        <t>TCPLS takes another approach. To control the number of connections that a
client can establish, a TCPLS server supplies unique tokens. A client includes
one of the server supplied tokens when it attaches a new TCP connection to a
TCPLS session. Each token can only be used once, hence limiting the amount of
additional TCP connections.</t>
        <t>TCPLS endpoints can advertise their local addresses, allowing new TCP
connections for a given TCPLS session to be established between new pairs of
addresses. When an endpoint is no more willing new TCP connections to use one
of its advertised addresses, it can remove this address from the TCPLS session.</t>
        <section anchor="joining-tcp-connections">
          <name>Joining TCP connections</name>
          <t>The TCPLS server provides tokens to the client in order to join new TCP
connections to the TCPLS session. <xref target="join-connections"/> illustrates a client
and server first establishing a new TCPLS session as described in <xref target="overview"/>.
Then the server sends a token over this connection using the New Token
frame. Each token has a sequence number (e.g. 1) and a value (e.g. "abc").
The client uses this token to open a new TCP connection and initiates the
TCPLS handshake. It adds the token inside the TCPLS Join TLS extension in the
ClientHello.</t>
          <figure anchor="join-connections">
            <name>Joining a new TCP connection</name>
            <artwork><![CDATA[
              <-1.TCPLS Handshake->
       .----------------------------------.
       |             <-2.New Token(1,abc) |
       v                                  v
+--------+                             +--------+
| Client |                             | Server |
+--------+                             +--------+
       ^                                  ^
       | 3.TCPLS Hsh. + tcpls_join(abc)-> |      Legend:
       .----------------------------------.        --- TCP connection
]]></artwork>
          </figure>
          <t>When receiving a TCPLS Join Extension, the server validates the token and
associates the TCP connection to the TCPLS session.</t>
          <t>Each TCP connection that is part of a TCPLS session is identified by a 32-bit
unsigned integer called its Connection ID. The first TCP connection of a session
corresponds to Connection ID 0. When joining a new connection,
the sequence number of the token, i.e. 1 in our example, becomes the
Connection ID of the connection. The Connection ID enables the Client and
the Server to identify a specific TCP connection within a given TCPLS
session.</t>
        </section>
        <section anchor="robust-session-establishment">
          <name>Robust session establishment</name>
          <t>The TCPLS protocol also supports robust session establishment, where a
multihomed or dual-stack client can establish a TCPLS session when at least
one network path to the server can be established. This guarantees robustness
against network failures and lowers the overall latency of a session
establishment.</t>
          <t><xref target="fig-robust-session-establishment"/> illustrates a dual-homed client that
robustly establish a TCPLS session over two local addresses. In this example,
the path from IP b towards the server exhibits a higher delay.</t>
          <figure anchor="fig-robust-session-establishment">
            <name>Robust session establishment example</name>
            <artwork><![CDATA[
Client @ IP a                 Server                 Client @ IP b
 |             SYN              |             SYN              |
 |----------------------------->|               /--------------|
 |           SYN+ACK            |<-------------/               |
 |<-----------------------------|           SYN+ACK            |
 | ACK, TLS CH + tcpls          |--------------\               |
 |----------------------------->|               \------------->|
 |      TLS SH, EE + tcpls,     |             ACK              |
 |        tcpls_token(abc), ... |<-----------------------------|
 |<-----------------------------|TLS CH + tcpls,tcpls_join(abc)|
 | TLS Finished                 |<-----------------------------|
 |----------------------------->|                              |
 | TCPLS session established and 2nd connection can be joined. |
                               ...
]]></artwork>
          </figure>
          <t>The client starts by opening a TCP connection on from each of its local
addresses. The TCP connection from IP "a" towards the server completes faster
than the other. The client then starts a TCPLS Handshake on
this connection. When the other connection is established, the client
waits for receiving a TCPLS token allowing to join it to the session being
established. In addition to the New Token frame, the TCPLS protocol enables
the server to provide one such token during the handshake using the TCPLS Token
TLS extension. The server uses this extension when sending its
EncryptedExtensions over the faster connection to provide the TCPLS token
"abc". As soon as the client has received this token, it uses
it over the other connection to join it to the session.
When the TLS handshake completes over the fastest connection, the TCPLS session
is established and the other connection can be joined to the session.</t>
        </section>
        <section anchor="failover">
          <name>Failover</name>
          <t>TCPLS supports two types of failover. In make-before-break, the client
creates a TCP connection using the procedure described in
<xref target="joining-tcp-connections"/> but only uses it once the initial connection fails.</t>
          <t>In break-before-make, the
client creates the initial TCP connection and uses it for the TCPLS handshake
and the data. The server advertises one or more tokens over this connection.
Upon failure of the initial TCP connection, the client initiates a
second TCP connection using the server-provided token.</t>
          <t>In both cases, some records sent by the client or the server might be
in transit when the failure occurs. Some of these records could have been
partially received but not yet delivered to the TCPLS layer when the
underlying TCP connection fails. Other records could have already been received,
decrypted and data of their frames could have been delivered to the
application. To prevent data losses and duplication, TCPLS includes its own
acknowledgments.</t>
          <t>A TCPLS receiver acknowledges the received records using the ACK
frame. Records are acknowledged after the record protection has been
successfully removed. This enables the sender to know which records have been
received. TCPLS enables the endpoint to send acknowledgments for a TCP
connection over any connections, e.g. not only the receiving connection.</t>
        </section>
        <section anchor="migration">
          <name>Migration</name>
          <t>To migrate from a given TCP connection, an endpoint stops transmitting
over this TCP connection and sends the following frames on other TCP
connections. It leverages the acknowledgments to retransmit the frames of
TLS records that have not been yet acknowledged.</t>
          <t>When an endpoint abortfully closes a TCP connection, its peer leverages the
acknowlegments to retransmit the TLS records that were not acknowlegded.</t>
        </section>
        <section anchor="multipath">
          <name>Multipath</name>
          <t>TCPLS also supports the utilization of different TCP connections, over
different paths or interfaces, to improve throughput or spread stream frames
over different TCP connections.
When the endpoints have opened several TCP connections, they can send frames
over the connections. TCPLS can send all the stream frames belonging to a
given stream over one or more underlying TCP connections. The latter enables
bandwidth aggregation by using TCP connections established over different
network paths.</t>
        </section>
      </section>
      <section anchor="record-protection">
        <name>Record protection</name>
        <t>When adding new TCP connections to a TCPLS session, an endpoint does not
complete the TLS handshake. TCPLS provides a nonce construction for TLS
record protection that is used for all connections of a session. This
reduces the cryptographic cost of adding connections. The endpoints <bcp14>SHOULD</bcp14> send
TLS messages to form an apparent complete TLS handshake to middleboxes.</t>
        <t>In order to use the TLS session over multiple connections, TCPLS adds a
record sequence number space per connection that is maintained independently at
both sides. Each record sent over a TCPLS session is identified by the
Connection ID of its connection and its record sequence number. Each record
nonce is constructed as defined in <xref target="fig-record-nonce"/>.</t>
        <figure anchor="fig-record-nonce">
          <name>TCPLS TLS record nonce construction</name>
          <artwork><![CDATA[
N                  N-32                   64                    0
+---------------------------------------------------------------+
|                    client/server_write_iv                     |
+---------------------------------------------------------------+
         XOR                                        XOR
+-------------------+                      +--------------------+
|   Connection ID   |                      | Conn. record sequ. |
+-------------------+                      +--------------------+
]]></artwork>
        </figure>
        <t>This construction guarantees that every TLS record sent over the TLS session
is protected with a unique nonce. As in TLS 1.3, the per-connection record
sequence is implicit.</t>
      </section>
      <section anchor="authenticating-tcp-with-opportunistic-tcp-ao">
        <name>Authenticating TCP with Opportunistic TCP-AO</name>
        <t>The TCP packets exchanged by TCPLS endpoints can be authenticated using the
opportunistic mode for TCP-AO defined in <xref target="I-D.piraux-tcp-ao-tls"/>. The
TCP connection initiating the TCPLS session follows the same procedure as
described in <xref target="I-D.piraux-tcp-ao-tls"/>. Then, additional TCP connections
can reuse the MKT derived from the TLS handshake. When using TCP-AO over
several TCP connections of a TCPLS session, endpoints <bcp14>SHOULD</bcp14> use different
KeyID values that appears as random to observers toi avoid correlation.
Enabling TCP-AO on TCP connections part of a TCPLS session remains a
per-connection decision.</t>
      </section>
      <section anchor="closing-a-tcpls-session">
        <name>Closing a TCPLS session</name>
        <t>Endpoints notify their peers that they do not intend to send more data over
a given TCPLS session by sending a TLS Alert "close_notify". The alert can
be sent over one or more TCP connections of the session. The alert <bcp14>MUST</bcp14> be
sent before closing the last TCP connection of the TCPLS session.
The endpoint <bcp14>MAY</bcp14> close its side of the TCP connections after sending the alert.</t>
        <t>When all TCP connections of a session are closed and the TLS Alert
"close_notify" was exchanged in both directions, the TCPLS session is
considered as closed.</t>
        <t>We leave defining an abortful and idle session closure mechanisms for future
versions of this document.</t>
      </section>
      <section anchor="zero-copy-receive-path">
        <name>Zero-Copy Receive Path</name>
        <t>TCPLS enables the receiver to process TLS records in a zero-copy manner
under several conditions. When they are met, the application data carried
in TCPLS frames can be decrypted at the right place in the application
buffers.</t>
        <t>First, zero-copy can be achieved when Stream frames of a given stream
arrive in order. When using several TCP connections, out-of-order Stream frames
cannot be processed in zero copy. A Multipath scheduling algorithm
may target the minimization of out-of-order packets.</t>
        <t>Second, the composition
of TCPLS frames in a TLS record is impactful. The sender <bcp14>SHOULD</bcp14> encode a
single Stream Data frame as the first frame of the record, followed by
control-related frames if needed.
When the sender encodes several Stream frames, the frame at the start of
the record <bcp14>SHOULD</bcp14> be the largest, in order to maximise the use of zero copy.
When several Stream frames are included in a record, they <bcp14>SHOULD</bcp14> belong to
different streams.</t>
      </section>
    </section>
    <section anchor="format">
      <name>TCPLS Protocol</name>
      <section anchor="tcpls-tls-extensions">
        <name>TCPLS TLS Extensions</name>
        <t>This document specifies three TLS extensions used by TCPLS. The first,
"tcpls", is used to announce the support of TCPLS. The second,
"tcpls_join", is used to join a TCP connection to a TCPLS session. The third,
"tcpls_token", is used to provide a token to the client before the handshake
completes. Their types are defined as follows.</t>
        <artwork><![CDATA[
enum {
    tcpls(TBD1),
    tcpls_join(TBD2),
    tcpls_token(TBD3),
    (65535)
} ExtensionType;
]]></artwork>
        <t>The table below indicates the TLS messages where these extensions can appear.
"CH" indicates ClientHello while "EE" indicates EncryptedExtensions.</t>
        <table anchor="tcpls-tls-extensions-allowed-tls-messages">
          <name>TLS messages allowed to carry TCPLS TLS Extensions</name>
          <thead>
            <tr>
              <th align="left">Extension</th>
              <th align="left">Allowed TLS messages</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">tcpls</td>
              <td align="left">CH, EE</td>
            </tr>
            <tr>
              <td align="left">tcpls_join</td>
              <td align="left">CH</td>
            </tr>
            <tr>
              <td align="left">tcpls_token</td>
              <td align="left">EE</td>
            </tr>
          </tbody>
        </table>
        <section anchor="tcpls">
          <name>TCPLS</name>
          <t>The "tcpls" extension is used by the client and the server to announce
their support of TCPLS. The extension contains no value. When it is present
in both the ClientHello and the EncryptedExtensions, the endpoints <bcp14>MUST</bcp14> use
TCPLS after completing the TLS handshake.</t>
        </section>
        <section anchor="tcpls-join">
          <name>TCPLS Join</name>
          <artwork><![CDATA[
struct {
    opaque token<32>;
} TCPLSJoin;
]]></artwork>
          <t>The "tcpls_join" extension is used by the client to join the TCP connection
on which it is sent to a TCPLS session. The extension contains a token
provided by the server. The client <bcp14>MUST NOT</bcp14> send more than one
"tcpls_join" extension in its ClientHello. When receiving a ClientHello with
this extension, the server checks that the token is valid and joins the TCP
connection to the corresponding TCPLS session. When the token is not valid,
the server <bcp14>MUST</bcp14> abort the handshake with an illegal_parameter alert.</t>
        </section>
        <section anchor="tcpls-token">
          <name>TCPLS Token</name>
          <artwork><![CDATA[
struct {
    opaque token<32>;
} TCPLSToken;
]]></artwork>
          <t>The "tcpls_token" extension is used by the server to provide a token to the
client during the TLS handshake. When receiving this
extension, the client associates the token value as the first token of the TCPLS
session, i.e. with a sequence number of 1. The server <bcp14>MUST NOT</bcp14> send this
extension when the corresponding ClientHello contains
a "tcpls_join" extension.</t>
        </section>
      </section>
      <section anchor="tcpls-frames">
        <name>TCPLS Frames</name>
        <t>TCPLS uses TLS Application Data records to exchange TCPLS frames. After
decryption, the record payload consists of a sequence of TCPLS frames.
<xref target="fig-parsing-tcpls-frames"/> illustrates the manner in which TCPLS frames
are parsed from a decrypted TLS record.
The receiver processes the frames starting from the last one to the first one.
The fields of each frames are also parsed from the end towards the beginning
of the TLS Application Data content. The parsing of a frame starts with the
last byte indicating the frame type and then with type-specific
fields preceeding it, forming a Type-Value unit.
Such ordering enables a zero-copy processing of the type-specific fields as
explained in <xref target="zero-copy-receive-path"/>.</t>
        <figure anchor="fig-parsing-tcpls-frames">
          <name>Parsing TCPLS frames inside a TLS record starts from the end.</name>
          <artwork><![CDATA[
                       First frame start
                                   |
0         First frame end          | n
+---------------------|------------|-+
|                     v            v |
|      *------------* *------------* |
| .... | Value |Type| | Value |Type| |
|      *------------* *------------* |
+------------------------------------+
        Decrypted TLS record
]]></artwork>
        </figure>
        <t><xref target="tcpls-frame-types"/> lists the
frames specified in this document.</t>
        <table anchor="tcpls-frame-types">
          <name>TCPLS frames</name>
          <thead>
            <tr>
              <th align="left">Type value</th>
              <th align="left">Frame name</th>
              <th align="left">Rules</th>
              <th align="left">Definition</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">0x00</td>
              <td align="left">Padding</td>
              <td align="left">N</td>
              <td align="left">
                <xref target="padding-frame"/></td>
            </tr>
            <tr>
              <td align="left">0x01</td>
              <td align="left">Ping</td>
              <td align="left"> </td>
              <td align="left">
                <xref target="ping-frame"/></td>
            </tr>
            <tr>
              <td align="left">0x02-0x03</td>
              <td align="left">Stream</td>
              <td align="left"> </td>
              <td align="left">
                <xref target="stream-frame"/></td>
            </tr>
            <tr>
              <td align="left">0x04</td>
              <td align="left">ACK</td>
              <td align="left">N</td>
              <td align="left">
                <xref target="ack-frame"/></td>
            </tr>
            <tr>
              <td align="left">0x05</td>
              <td align="left">New Token</td>
              <td align="left">S</td>
              <td align="left">
                <xref target="new-token-frame"/></td>
            </tr>
            <tr>
              <td align="left">0x06</td>
              <td align="left">Connection Reset</td>
              <td align="left"> </td>
              <td align="left">
                <xref target="connection-reset-frame"/></td>
            </tr>
            <tr>
              <td align="left">0x07</td>
              <td align="left">New Address</td>
              <td align="left"> </td>
              <td align="left">
                <xref target="new-address-frame"/></td>
            </tr>
            <tr>
              <td align="left">0x08</td>
              <td align="left">Remove Address</td>
              <td align="left"> </td>
              <td align="left">
                <xref target="remove-address-frame"/></td>
            </tr>
            <tr>
              <td align="left">0x09</td>
              <td align="left">Stream Change</td>
              <td align="left">Cs</td>
              <td align="left">
                <xref target="stream-change-frame"/></td>
            </tr>
          </tbody>
        </table>
        <t>The "Rules" column in <xref target="tcpls-frame-types"/> indicates special requirements
regarding certain frames.</t>
        <dl>
          <dt>N:</dt>
          <dd>
            <t>Non-ack-eliciting. Receiving this frame does not elicit the sending of a
TCPLS acknowledgment.</t>
          </dd>
          <dt>S:</dt>
          <dd>
            <t>Server only. This frame <bcp14>MUST NOT</bcp14> be sent by the client.</t>
          </dd>
          <dt>Cs:</dt>
          <dd>
            <t>Connection-specific semantics. This frame is not idempotent and has specific
semantics based on the TCP connection over which it is exchanged.</t>
          </dd>
        </dl>
        <section anchor="padding-frame">
          <name>Padding frame</name>
          <t>This frame has no semantic value. It can be used to mitigate traffic
analysis on the TLS records of a TCPLS session. The Padding frame has no
content.</t>
          <figure anchor="padding-frame-format">
            <name>Padding frame format</name>
            <artwork><![CDATA[
Padding frame {
    Type (8) = 0x00,
}
]]></artwork>
          </figure>
        </section>
        <section anchor="ping-frame">
          <name>Ping frame</name>
          <t>This frame is used to elicit an acknowledgment from its peer. It has no
content. When an endpoint receives a Ping frame, it acknowledges the TLS
record that contains this frame. This frame can be used by an endpoint to check
that its peer can receive TLS records over a particular TCP connection.</t>
          <figure anchor="ping-frame-format">
            <name>Ping frame format</name>
            <artwork><![CDATA[
Ping frame {
    Type (8) = 0x01,
}
]]></artwork>
          </figure>
        </section>
        <section anchor="stream-frame">
          <name>Stream frame</name>
          <t>This frame is used to carry chunks of data of a given stream.</t>
          <figure anchor="stream-frame-format">
            <name>Stream frame format</name>
            <artwork><![CDATA[
Stream frame {
    Stream Data (...),
    Length (16),
    Offset (64),
    Stream ID (32),
    FIN (1),
    Type (7) = 0x01,
}
]]></artwork>
          </figure>
          <dl>
            <dt>FIN:</dt>
            <dd>
              <t>The last bit of the frame type bit indicates that this Stream frame
ends the stream when its value is 1. The last byte of the stream is at the sum of the
Offset and Length fields of this frame.</t>
            </dd>
            <dt>Stream ID:</dt>
            <dd>
              <t>A 32-bit unsigned integer indicating the ID of the stream this frame
relates to.</t>
            </dd>
            <dt>Offset:</dt>
            <dd>
              <t>A 64-bit unsigned integer indicating the offset in bytes of the carried
data in the stream.</t>
            </dd>
            <dt>Length:</dt>
            <dd>
              <t>A 16-bit unsigned integer indicating the length of the Stream Data field.</t>
            </dd>
          </dl>
        </section>
        <section anchor="ack-frame">
          <name>ACK frame</name>
          <t>This frame is sent by the receiver to acknowledge the receipt of TLS records on
a particular TCP connection of the TCPLS session. Although the reliability
of the data exchange on a connection is handled by TCP, there are situations
such as the failure of a TCP connection where a sender does not know whether the
TLS frames that it sent have been correctly received by the peer. The ACK frame
allows a TCPLS receiver to indicate the highest TLS record sequence number
received on a specific connection. The ACK frame can be sent over any TCP
connection of a TCPLS session.</t>
          <figure anchor="ack-frame-format">
            <name>ACK frame format</name>
            <artwork><![CDATA[
ACK frame {
    Highest Record Sequence Received (64),
    Connection ID (32),
    Type (8) = 0x04,
}
]]></artwork>
          </figure>
          <dl>
            <dt>Connection ID:</dt>
            <dd>
              <t>A 32-bit unsigned integer indicating the TCP connection for which the
acknowledgment was sent.</t>
            </dd>
            <dt>Highest Record Sequence Received:</dt>
            <dd>
              <t>A 64-bit unsigned integer indicating the highest TLS record sequence
number received on the connection indicated by the Connection ID.</t>
            </dd>
          </dl>
        </section>
        <section anchor="new-token-frame">
          <name>New Token frame</name>
          <t>This frame is used by the server to provide tokens to the client. Each token
can be used to join a new TCP connection to the TCPLS session, as described
in <xref target="joining-tcp-connections"/>. Clients <bcp14>MUST NOT</bcp14> send New Token frames.</t>
          <figure anchor="new-token-frame-format">
            <name>New Token frame format</name>
            <artwork><![CDATA[
New Token frame {
    Token (256),
    Sequence (8),
    Type (8) = 0x05,
}
]]></artwork>
          </figure>
          <dl>
            <dt>Sequence:</dt>
            <dd>
              <t>A 8-bit unsigned integer indicating the sequence number of this token</t>
            </dd>
            <dt>Token:</dt>
            <dd>
              <t>A 32-byte opaque value that can be used as a token by the client.</t>
            </dd>
          </dl>
          <t>By controlling the amount of tokens given to the client, the server can
control the number of active TCP connections of a TCPLS session. The server <bcp14>SHOULD</bcp14>
replenish the tokens when TCP connections are removed from the TCPLS session.</t>
        </section>
        <section anchor="connection-reset-frame">
          <name>Connection Reset frame</name>
          <t>This frame is used by the receiver to inform the sender that a TCP
connection has been reset.</t>
          <figure anchor="connection-reset-format">
            <name>Connection Reset format</name>
            <artwork><![CDATA[
Connection Reset frame {
    Connection ID (32)
    Type (8) = 0x06,
}
]]></artwork>
          </figure>
          <dl>
            <dt>Connection ID:</dt>
            <dd>
              <t>A 32-bit unsigned integer indicating the ID of the connection that failed.</t>
            </dd>
          </dl>
        </section>
        <section anchor="new-address-frame">
          <name>New Address frame</name>
          <t>This frame is used by an endpoint to add a new local address to the TCPLS
session. This address can then be used to establish new TCP connections.
The server advertises addresses that the client can use as destination when
adding TCP connections. The client advertises address that it can use as source
when adding TCP connections.</t>
          <figure anchor="new-address-format">
            <name>New Address format</name>
            <artwork><![CDATA[
New Address frame {
    Port (16),
    Address (..),
    Address Version (8),
    Address ID (8),
    Type (8) = 0x07,
}
]]></artwork>
          </figure>
          <dl>
            <dt>Address ID:</dt>
            <dd>
              <t>A 8-bit identifier for this address. For a given Address ID, an endpoint
receiving a frame with a content that differs from previously received frames
<bcp14>MUST</bcp14> ignore the frame. An endpoint receiving a frame for an Address ID that was
previously removed <bcp14>MUST</bcp14> ignore the frame.</t>
            </dd>
            <dt>Address Version:</dt>
            <dd>
              <t>A 8-bit value identifying the Internet address version of this address. The
number 4 indicates IPv4 while 6 indicates IPv6.</t>
            </dd>
            <dt>Address:</dt>
            <dd>
              <t>The address value. Its size depends on its version. IPv4 addresses are 32-bit
long while IPv6 addresses are 128-bit long.</t>
            </dd>
            <dt>Port:</dt>
            <dd>
              <t>A 16-bit value indicating the TCP port used with this address.</t>
            </dd>
          </dl>
        </section>
        <section anchor="remove-address-frame">
          <name>Remove Address frame</name>
          <t>This frame is used by an endpoint to announce that it is not willing to use a
given address to establish new TCP connections. After receiving this frame, a
client <bcp14>MUST NOT</bcp14> establish new TCP connections to the given address. After
receiving this frame, an endpoint <bcp14>MUST</bcp14> close all TCP connections using the
given address.</t>
          <figure anchor="remove-address-format">
            <name>Remove Address format</name>
            <artwork><![CDATA[
Remove Address frame {
    Address ID (8),
    Type (8) = 0x08,
}
]]></artwork>
          </figure>
          <dl>
            <dt>Address ID:</dt>
            <dd>
              <t>A 8-bit identifier for the address to remove. An endpoint receiving a frame
for an address that was nonexistent or already removed <bcp14>MUST</bcp14> ignore the frame.</t>
            </dd>
          </dl>
        </section>
        <section anchor="stream-change-frame">
          <name>Stream Change frame</name>
          <t>This frame is used by a sender to announce the Stream ID and Offset
of the next record over a given TCP connection. It can be used to make
explicit a change in stream scheduling over a connection to the receiver,
enabling a zero-copy receive path as explained in <xref target="zero-copy-receive-path"/>.
The hint contained in this frame relates to the connection over which it
was exchanged.</t>
          <figure anchor="stream-change-format">
            <name>Stream Change format</name>
            <artwork><![CDATA[
Stream Change frame {
    Next Record Stream ID (32),
    Next Offset (64),
    Type (8) = 0x09,
}
]]></artwork>
          </figure>
          <dl>
            <dt>Next Record Stream ID:</dt>
            <dd>
              <t>A 32-bit unsigned integer indicating the Stream ID of the Stream frame in the
next record .</t>
            </dd>
            <dt>Next Offset:</dt>
            <dd>
              <t>A 64-bit unsigned integer indicating the Offset of the Stream frame in the
next record.</t>
            </dd>
          </dl>
        </section>
      </section>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>When issuing tokens to the client as presented in <xref target="joining-tcp-connections"/>,
the server <bcp14>SHOULD</bcp14> ensure that their values appear as random to observers and
cannot be correlated together for a given TCPLS session.</t>
      <t>The security considerations for TLS apply to TCPLS.
The next versions of this document will elaborate on other security
considerations following the guidelines of <xref target="RFC3552"/>.</t>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>IANA is requested to create a new "TCPLS" heading for the new registry
described in <xref target="tcpls-frames"/>. New registrations in TCPLS registries follow
the "Specification Required" policy of <xref target="RFC8126"/>.</t>
      <section anchor="tcpls-tls-extensions-1">
        <name>TCPLS TLS Extensions</name>
        <t>IANA is requested to add the following entries to the existing "TLS
ExtensionType Values" registry.</t>
        <table>
          <thead>
            <tr>
              <th align="left">Value</th>
              <th align="left">Extension Name</th>
              <th align="left">TLS 1.3</th>
              <th align="left">Recommended</th>
              <th align="left">Reference</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">TBD1</td>
              <td align="left">tcpls</td>
              <td align="left">CH, EE</td>
              <td align="left">N</td>
              <td align="left">This document</td>
            </tr>
            <tr>
              <td align="left">TBD2</td>
              <td align="left">tcpls_join</td>
              <td align="left">CH</td>
              <td align="left">N</td>
              <td align="left">This document</td>
            </tr>
            <tr>
              <td align="left">TBD3</td>
              <td align="left">tcpls_token</td>
              <td align="left">EE</td>
              <td align="left">N</td>
              <td align="left">This document</td>
            </tr>
          </tbody>
        </table>
        <t>Note that "Recommended" is set to N as these extensions are intended for
uses as described in this document.</t>
      </section>
      <section anchor="tcpls-frames-1">
        <name>TCPLS Frames</name>
        <t>IANA is requested to create a new registry "TCPLS Frames Types" under the
"TCPLS" heading.</t>
        <t>The registry governs an 8-bit space. Entries in this registry must include a
"Frame name" field containing a short mnemonic for the frame type. The
initial content of the registry is present in <xref target="tcpls-frame-types"/>, without
the "Rules" column.</t>
      </section>
    </section>
  </middle>
  <back>
    <references>
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <reference anchor="RFC8446">
          <front>
            <title>The Transport Layer Security (TLS) Protocol Version 1.3</title>
            <author fullname="E. Rescorla" initials="E." surname="Rescorla"/>
            <date month="August" year="2018"/>
            <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="RFC8126">
          <front>
            <title>Guidelines for Writing an IANA Considerations Section in RFCs</title>
            <author fullname="M. Cotton" initials="M." surname="Cotton"/>
            <author fullname="B. Leiba" initials="B." surname="Leiba"/>
            <author fullname="T. Narten" initials="T." surname="Narten"/>
            <date month="June" year="2017"/>
            <abstract>
              <t>Many protocols make use of points of extensibility that use constants to identify various protocol parameters. To ensure that the values in these fields do not have conflicting uses and to promote interoperability, their allocations are often coordinated by a central record keeper. For IETF protocols, that role is filled by the Internet Assigned Numbers Authority (IANA).</t>
              <t>To make assignments in a given registry prudently, guidance describing the conditions under which new values should be assigned, as well as when and how modifications to existing values can be made, is needed. This document defines a framework for the documentation of these guidelines by specification authors, in order to assure that the provided guidance for the IANA Considerations is clear and addresses the various issues that are likely in the operation of a registry.</t>
              <t>This is the third edition of this document; it obsoletes RFC 5226.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="26"/>
          <seriesInfo name="RFC" value="8126"/>
          <seriesInfo name="DOI" value="10.17487/RFC8126"/>
        </reference>
        <reference anchor="RFC2119">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <author fullname="S. Bradner" initials="S." surname="Bradner"/>
            <date month="March" year="1997"/>
            <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="RFC8174">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <author fullname="B. Leiba" initials="B." surname="Leiba"/>
            <date month="May" year="2017"/>
            <abstract>
              <t>RFC 2119 specifies common key words that may be used in protocol specifications. This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the defined special meanings.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="8174"/>
          <seriesInfo name="DOI" value="10.17487/RFC8174"/>
        </reference>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="RFC4960">
          <front>
            <title>Stream Control Transmission Protocol</title>
            <author fullname="R. Stewart" initials="R." role="editor" surname="Stewart"/>
            <date month="September" year="2007"/>
            <abstract>
              <t>This document obsoletes RFC 2960 and RFC 3309. It describes the Stream Control Transmission Protocol (SCTP). SCTP is designed to transport Public Switched Telephone Network (PSTN) signaling messages over IP networks, but is capable of broader applications.</t>
              <t>SCTP is a reliable transport protocol operating on top of a connectionless packet network such as IP. It offers the following services to its users:</t>
              <t>-- acknowledged error-free non-duplicated transfer of user data,</t>
              <t>-- data fragmentation to conform to discovered path MTU size,</t>
              <t>-- sequenced delivery of user messages within multiple streams, with an option for order-of-arrival delivery of individual user messages,</t>
              <t>-- optional bundling of multiple user messages into a single SCTP packet, and</t>
              <t>-- network-level fault tolerance through supporting of multi-homing at either or both ends of an association.</t>
              <t>The design of SCTP includes appropriate congestion avoidance behavior and resistance to flooding and masquerade attacks. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="4960"/>
          <seriesInfo name="DOI" value="10.17487/RFC4960"/>
        </reference>
        <reference anchor="RFC6335">
          <front>
            <title>Internet Assigned Numbers Authority (IANA) Procedures for the Management of the Service Name and Transport Protocol Port Number Registry</title>
            <author fullname="M. Cotton" initials="M." surname="Cotton"/>
            <author fullname="L. Eggert" initials="L." surname="Eggert"/>
            <author fullname="J. Touch" initials="J." surname="Touch"/>
            <author fullname="M. Westerlund" initials="M." surname="Westerlund"/>
            <author fullname="S. Cheshire" initials="S." surname="Cheshire"/>
            <date month="August" year="2011"/>
            <abstract>
              <t>This document defines the procedures that the Internet Assigned Numbers Authority (IANA) uses when handling assignment and other requests related to the Service Name and Transport Protocol Port Number registry. It also discusses the rationale and principles behind these procedures and how they facilitate the long-term sustainability of the registry.</t>
              <t>This document updates IANA's procedures by obsoleting the previous UDP and TCP port assignment procedures defined in Sections 8 and 9.1 of the IANA Allocation Guidelines, and it updates the IANA service name and port assignment procedures for UDP-Lite, the Datagram Congestion Control Protocol (DCCP), and the Stream Control Transmission Protocol (SCTP). It also updates the DNS SRV specification to clarify what a service name is and how it is registered. This memo documents an Internet Best Current Practice.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="165"/>
          <seriesInfo name="RFC" value="6335"/>
          <seriesInfo name="DOI" value="10.17487/RFC6335"/>
        </reference>
        <reference anchor="RFC7258">
          <front>
            <title>Pervasive Monitoring Is an Attack</title>
            <author fullname="S. Farrell" initials="S." surname="Farrell"/>
            <author fullname="H. Tschofenig" initials="H." surname="Tschofenig"/>
            <date month="May" year="2014"/>
            <abstract>
              <t>Pervasive monitoring is a technical attack that should be mitigated in the design of IETF protocols, where possible.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="188"/>
          <seriesInfo name="RFC" value="7258"/>
          <seriesInfo name="DOI" value="10.17487/RFC7258"/>
        </reference>
        <reference anchor="RFC8041">
          <front>
            <title>Use Cases and Operational Experience with Multipath TCP</title>
            <author fullname="O. Bonaventure" initials="O." surname="Bonaventure"/>
            <author fullname="C. Paasch" initials="C." surname="Paasch"/>
            <author fullname="G. Detal" initials="G." surname="Detal"/>
            <date month="January" year="2017"/>
            <abstract>
              <t>This document discusses both use cases and operational experience with Multipath TCP (MPTCP) in real networks. It lists several prominent use cases where Multipath TCP has been considered and is being used. It also gives insight to some heuristics and decisions that have helped to realize these use cases and suggests possible improvements.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8041"/>
          <seriesInfo name="DOI" value="10.17487/RFC8041"/>
        </reference>
        <reference anchor="RFC8305">
          <front>
            <title>Happy Eyeballs Version 2: Better Connectivity Using Concurrency</title>
            <author fullname="D. Schinazi" initials="D." surname="Schinazi"/>
            <author fullname="T. Pauly" initials="T." surname="Pauly"/>
            <date month="December" year="2017"/>
            <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 "Happy Eyeballs". 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="RFC8548">
          <front>
            <title>Cryptographic Protection of TCP Streams (tcpcrypt)</title>
            <author fullname="A. Bittau" initials="A." surname="Bittau"/>
            <author fullname="D. Giffin" initials="D." surname="Giffin"/>
            <author fullname="M. Handley" initials="M." surname="Handley"/>
            <author fullname="D. Mazieres" initials="D." surname="Mazieres"/>
            <author fullname="Q. Slack" initials="Q." surname="Slack"/>
            <author fullname="E. Smith" initials="E." surname="Smith"/>
            <date month="May" year="2019"/>
            <abstract>
              <t>This document specifies "tcpcrypt", a TCP encryption protocol designed for use in conjunction with the TCP Encryption Negotiation Option (TCP-ENO). Tcpcrypt coexists with middleboxes by tolerating resegmentation, NATs, and other manipulations of the TCP header. The protocol is self-contained and specifically tailored to TCP implementations, which often reside in kernels or other environments in which large external software dependencies can be undesirable. Because the size of TCP options is limited, the protocol requires one additional one-way message latency to perform key exchange before application data can be transmitted. However, the extra latency can be avoided between two hosts that have recently established a previous tcpcrypt connection.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8548"/>
          <seriesInfo name="DOI" value="10.17487/RFC8548"/>
        </reference>
        <reference anchor="RFC8684">
          <front>
            <title>TCP Extensions for Multipath Operation with Multiple Addresses</title>
            <author fullname="A. Ford" initials="A." surname="Ford"/>
            <author fullname="C. Raiciu" initials="C." surname="Raiciu"/>
            <author fullname="M. Handley" initials="M." surname="Handley"/>
            <author fullname="O. Bonaventure" initials="O." surname="Bonaventure"/>
            <author fullname="C. Paasch" initials="C." surname="Paasch"/>
            <date month="March" year="2020"/>
            <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., a reliable bytestream), and it provides the components necessary to establish and use multiple TCP flows across potentially disjoint paths.</t>
              <t>This document specifies v1 of Multipath TCP, obsoleting v0 as specified in RFC 6824, through clarifications and modifications primarily driven by deployment experience.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8684"/>
          <seriesInfo name="DOI" value="10.17487/RFC8684"/>
        </reference>
        <reference anchor="RFC9000">
          <front>
            <title>QUIC: A UDP-Based Multiplexed and Secure Transport</title>
            <author fullname="J. Iyengar" initials="J." role="editor" surname="Iyengar"/>
            <author fullname="M. Thomson" initials="M." role="editor" surname="Thomson"/>
            <date month="May" year="2021"/>
            <abstract>
              <t>This document defines the core of the QUIC transport protocol. QUIC provides applications with flow-controlled streams for structured communication, low-latency connection establishment, and network path migration. QUIC includes security measures that ensure confidentiality, integrity, and availability in a range of deployment circumstances. Accompanying documents describe the integration of TLS for key negotiation, loss detection, and an exemplary congestion control algorithm.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9000"/>
          <seriesInfo name="DOI" value="10.17487/RFC9000"/>
        </reference>
        <reference anchor="RFC7540">
          <front>
            <title>Hypertext Transfer Protocol Version 2 (HTTP/2)</title>
            <author fullname="M. Belshe" initials="M." surname="Belshe"/>
            <author fullname="R. Peon" initials="R." surname="Peon"/>
            <author fullname="M. Thomson" initials="M." role="editor" surname="Thomson"/>
            <date month="May" year="2015"/>
            <abstract>
              <t>This specification describes an optimized expression of the semantics of the Hypertext Transfer Protocol (HTTP), referred to as HTTP version 2 (HTTP/2). HTTP/2 enables a more efficient use of network resources and a reduced perception of latency by introducing header field compression and allowing multiple concurrent exchanges on the same connection. It also introduces unsolicited push of representations from servers to clients.</t>
              <t>This specification is an alternative to, but does not obsolete, the HTTP/1.1 message syntax. HTTP's existing semantics remain unchanged.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7540"/>
          <seriesInfo name="DOI" value="10.17487/RFC7540"/>
        </reference>
        <reference anchor="RFC3552">
          <front>
            <title>Guidelines for Writing RFC Text on Security Considerations</title>
            <author fullname="E. Rescorla" initials="E." surname="Rescorla"/>
            <author fullname="B. Korver" initials="B." surname="Korver"/>
            <date month="July" year="2003"/>
            <abstract>
              <t>All RFCs are required to have a Security Considerations section. Historically, such sections have been relatively weak. This document provides guidelines to RFC authors on how to write a good Security Considerations section. 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="72"/>
          <seriesInfo name="RFC" value="3552"/>
          <seriesInfo name="DOI" value="10.17487/RFC3552"/>
        </reference>
        <reference anchor="I-D.ietf-tls-dtls13">
          <front>
            <title>The Datagram Transport Layer Security (DTLS) Protocol Version 1.3</title>
            <author fullname="Eric Rescorla" initials="E." surname="Rescorla">
              <organization>RTFM, Inc.</organization>
            </author>
            <author fullname="Hannes Tschofenig" initials="H." surname="Tschofenig">
              <organization>Arm Limited</organization>
            </author>
            <author fullname="Nagendra Modadugu" initials="N." surname="Modadugu">
              <organization>Google, Inc.</organization>
            </author>
            <date day="30" month="April" year="2021"/>
            <abstract>
              <t>This document specifies version 1.3 of the Datagram Transport Layer Security (DTLS) protocol. DTLS 1.3 allows client/server applications to communicate over the Internet in a way that is designed to prevent eavesdropping, tampering, and message forgery.

 The DTLS 1.3 protocol is based on the Transport Layer Security (TLS) 1.3 protocol and provides equivalent security guarantees with the exception of order protection / non-replayability. Datagram semantics of the underlying transport are preserved by the DTLS protocol.

 This document obsoletes RFC 6347.
              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-tls-dtls13-43"/>
        </reference>
        <reference anchor="I-D.piraux-tcp-ao-tls">
          <front>
            <title>Opportunistic TCP-AO with TLS</title>
            <author fullname="Maxime Piraux" initials="M." surname="Piraux">
              <organization>UCLouvain &amp; WELRI</organization>
            </author>
            <author fullname="Olivier Bonaventure" initials="O." surname="Bonaventure">
              <organization>UCLouvain &amp; WELRI</organization>
            </author>
            <author fullname="Thomas Wirtgen" initials="T." surname="Wirtgen">
              <organization>UCLouvain &amp; WELRI</organization>
            </author>
            <date day="23" month="October" year="2023"/>
            <abstract>
              <t>   This document specifies an opportunistic mode for TCP-AO.  In this
   mode, the TCP connection starts with a well-known authentication key
   which is later replaced by a secure key derived from a TLS handshake.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-piraux-tcp-ao-tls-00"/>
        </reference>
        <reference anchor="CONEXT21">
          <front>
            <title>TCPLS - Modern Transport Services with TCP and TLS</title>
            <author initials="F." surname="Rochet">
              <organization/>
            </author>
            <author initials="E." surname="Assogba">
              <organization/>
            </author>
            <author initials="M." surname="Piraux">
              <organization/>
            </author>
            <author initials="K." surname="Edeline">
              <organization/>
            </author>
            <author initials="B." surname="Donnet">
              <organization/>
            </author>
            <author initials="O." surname="Bonaventure">
              <organization/>
            </author>
            <date year="2021" month="December"/>
          </front>
          <seriesInfo name="Proceedings of the 17th International Conference on emerging Networking EXperiments and Technologies (CoNEXT'21)" value=""/>
        </reference>
      </references>
    </references>
    <?line 955?>

<section anchor="alternative-designs">
      <name>Alternative Designs</name>
      <t>In this section, we discuss alternatives to mechanisms defined in this document.</t>
      <section anchor="securing-new-tcp-connections-with-new-session-tickets">
        <name>Securing new TCP connections with New Session Tickets</name>
        <t>When adding a new TCP connection to a TCPLS session, endpoints derive a
Initial Vector based on the technique presented in <xref target="record-protection"/>.
An alternative is to use New Session Tickets to derive separate
cryptographic protection materials based on a pre-shared key sent by the
server. In this mode of operation, the server provides New Session Tickets
to control the amount of additional TCP connections that can be opened by
the client. The server could encode the Connection ID in the ticket value.</t>
        <t>Using this mechanism differs from our proposal in several ways. While it
enables to use an existing TLS mechanism for this purpose, it has a number
of differences. First, it requires the server to compute pre-shared keys
which could be more costly than computing the TCPLS tokens defined in
<xref target="joining-tcp-connections"/>. Second, when used to establish a TLS session,
additional TLS messages must be computed and exchanged to complete the
handshake, which the current mechanism does not require.
Third, TLS New Session Tickets have a lifetime that is separated from the
session they are exchanged over. This is unneeded in the context of TCPLS
and may require additional protocol specification and guidance to
implementers.</t>
      </section>
    </section>
    <section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>This work has been partially supported by the ``Programme de
recherche d'interet général WALINNOV - MQUIC project (convention number
1810018)'' and European Union through the NGI Pointer programme for the TCPLS
project (Horizon 2020 Framework Programme, Grant agreement number 871528).
The authors thank Quentin De Coninck and Louis Navarre for their
comments on the first version of this draft.</t>
    </section>
    <section numbered="false" anchor="change-log">
      <name>Change log</name>
      <section numbered="false" anchor="since-draft-piraux-tcpls-03">
        <name>Since draft-piraux-tcpls-03</name>
        <ul spacing="normal">
          <li>
            <t>Integrated Opportunistic TCP-AO</t>
          </li>
        </ul>
      </section>
      <section numbered="false" anchor="since-draft-piraux-tcpls-02">
        <name>Since draft-piraux-tcpls-02</name>
        <ul spacing="normal">
          <li>
            <t>Added the TCPLS Token TLS extension to enable fast robust session
establishment.</t>
          </li>
        </ul>
      </section>
      <section numbered="false" anchor="since-draft-piraux-tcpls-01">
        <name>Since draft-piraux-tcpls-01</name>
        <ul spacing="normal">
          <li>
            <t>Changed frames and fields order to enable zero-copy receiver.</t>
          </li>
        </ul>
      </section>
      <section numbered="false" anchor="since-draft-piraux-tcpls-00">
        <name>Since draft-piraux-tcpls-00</name>
        <ul spacing="normal">
          <li>
            <t>Added the addresses exchange mechanism with New Address and Remove Address
frames.</t>
          </li>
        </ul>
      </section>
    </section>
  </back>
  <!-- ##markdown-source:
H4sIAAAAAAAAA819a3fbRpbg9/oVtco5G7tD0nrYjqNOZ1qR5bGnbVljKZ3u
nUcGJIsS2iDABkDJjOX9Lft1/sbOH9v7rAcASvbMzjnNkxNTIFB169Z931sX
4/HYtHlbuEO7c3F89vr80L6p5q4u7UWdlc2qqlt77urrfOYae5O3Vxbuslk5
txevz3dMNp3W7lqf3THzalZmSxhsXmeLdrzK62z9YdzOVkUz3n1sZlnrLqt6
c2jdh5Ux+ao+tG29btr93d3vdvdNVrvsMJr5CP42N1X9/rKu1qtD895t4K/5
oX1VtgCja8fPcR5jmhZA+iUrqhLm3rjGNMusbn/567pqXXNoy8qs8kP7T201
G9kGRq7dooFvmyV++RdjsnV7VdWHxo6NhQ+v4U32IV86e0aLoOtVfZmV+a9Z
m1flof3p+HW1vs7y0v5P+/PJ63ev6B63zPLi0C7p4Qlj4PfrWcG3TqYuneRF
UdWubGGQd9XsyrVD85T5taubvN3YamFPs+W6jmda6AiTmkb4/brEW3ozvS3y
69zV9seqzK7hgXXtvnRRFQ8xmYYh0qWZsqqXMNK1A1zady+Onz1+/FS/7u3D
V5OXi849j797uitfnx4cPJGv3+4/eaZP7j7e068Hu3rDsyeP/Q1Pnz2Wr9/t
7upg3z55rF8PnjzZx6+vxs8nuWsX4xYIcg7/2zvQy4FWx1mFv+MPx29PT/50
sU+zW+upBD9jm5dAWi8m8cbp1ZOJPWqa6nKaJZffTGJq0qt/mNiTuSvy0iWX
f5zY51VZdkZ+O+ltoPAvsSDc9vn8S083rs5dg7tyaM+Agpyb5+Vlg6TWXjm7
9y08w+xGFJIV9rgqFw5IbuZsVQJpuPoSnrCnrkVWxa8nf1rBqEuAseG53Oyq
rIrqEmayD44rROrX+3sPCYA5CIVD+9zN3HIK5Lm/u79n4DMej202bdo6mwGD
X1zljQXpssZBbbNys3yBg2V2VVfA1lVhCwdckhEo0RptW+Et1/nc2SVhxrQe
M41iplnPrmzW2OW6aPNV4T7AKCM7Q/TPcNV2mV/WtH4al2/L2iugZgChcTPY
C2B5uL2eMOjLfD4vgCG+QuTV1XxN4+BCHIL36NVZgByk1+w9zgZMvK7WTbGx
7roqrl0zgadpG1xWw9V5tgGxtaya1mSrVZHPCCTYWNgOIA/YJEAWIoB2Gp8L
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
EYSPNzc02oXQpSEx45Oh/w+ZR3yrmpkAAA==

-->

</rfc>
