<?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.6.13 (Ruby 3.1.2) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-piraux-tcpls-02" category="exp" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.13.0 -->
  <front>
    <title abbrev="TCPLS">TCPLS: Modern Transport Services with TCP and TLS</title>
    <seriesInfo name="Internet-Draft" value="draft-piraux-tcpls-02"/>
    <author initials="M." surname="Piraux" fullname="Maxime Piraux">
      <organization>UCLouvain</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</organization>
      <address>
        <email>olivier.bonaventure@uclouvain.be</email>
      </address>
    </author>
    <date year="2022" month="July" day="11"/>
    <area>Transport Area</area>
    <keyword>Internet-Draft</keyword>
    <abstract>
      <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>
    <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>
      <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 Handshake + 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="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="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 two 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. Their
types are defined as follows.</t>
        <artwork><![CDATA[
enum {
    tcpls(TBD1),
    tcpls_join(TBD2),
    (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>
          </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>;
} Join;
]]></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>
          <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>
      <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>
        </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 {
    Type (8) = 0x09,
    Next Offset (64),
    Next Record Stream ID (32),
}
]]></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>
          </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>
        <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">
              <organization/>
            </author>
            <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">
              <organization/>
            </author>
            <author fullname="B. Leiba" initials="B." surname="Leiba">
              <organization/>
            </author>
            <author fullname="T. Narten" initials="T." surname="Narten">
              <organization/>
            </author>
            <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">
              <organization/>
            </author>
            <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">
              <organization/>
            </author>
            <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>
        <name>Informative References</name>
        <reference anchor="RFC4960">
          <front>
            <title>Stream Control Transmission Protocol</title>
            <author fullname="R. Stewart" initials="R." role="editor" surname="Stewart">
              <organization/>
            </author>
            <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">
              <organization/>
            </author>
            <author fullname="L. Eggert" initials="L." surname="Eggert">
              <organization/>
            </author>
            <author fullname="J. Touch" initials="J." surname="Touch">
              <organization/>
            </author>
            <author fullname="M. Westerlund" initials="M." surname="Westerlund">
              <organization/>
            </author>
            <author fullname="S. Cheshire" initials="S." surname="Cheshire">
              <organization/>
            </author>
            <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">
              <organization/>
            </author>
            <author fullname="H. Tschofenig" initials="H." surname="Tschofenig">
              <organization/>
            </author>
            <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">
              <organization/>
            </author>
            <author fullname="C. Paasch" initials="C." surname="Paasch">
              <organization/>
            </author>
            <author fullname="G. Detal" initials="G." surname="Detal">
              <organization/>
            </author>
            <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">
              <organization/>
            </author>
            <author fullname="T. Pauly" initials="T." surname="Pauly">
              <organization/>
            </author>
            <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">
              <organization/>
            </author>
            <author fullname="D. Giffin" initials="D." surname="Giffin">
              <organization/>
            </author>
            <author fullname="M. Handley" initials="M." surname="Handley">
              <organization/>
            </author>
            <author fullname="D. Mazieres" initials="D." surname="Mazieres">
              <organization/>
            </author>
            <author fullname="Q. Slack" initials="Q." surname="Slack">
              <organization/>
            </author>
            <author fullname="E. Smith" initials="E." surname="Smith">
              <organization/>
            </author>
            <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">
              <organization/>
            </author>
            <author fullname="C. Raiciu" initials="C." surname="Raiciu">
              <organization/>
            </author>
            <author fullname="M. Handley" initials="M." surname="Handley">
              <organization/>
            </author>
            <author fullname="O. Bonaventure" initials="O." surname="Bonaventure">
              <organization/>
            </author>
            <author fullname="C. Paasch" initials="C." surname="Paasch">
              <organization/>
            </author>
            <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">
              <organization/>
            </author>
            <author fullname="M. Thomson" initials="M." role="editor" surname="Thomson">
              <organization/>
            </author>
            <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">
              <organization/>
            </author>
            <author fullname="R. Peon" initials="R." surname="Peon">
              <organization/>
            </author>
            <author fullname="M. Thomson" initials="M." role="editor" surname="Thomson">
              <organization/>
            </author>
            <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">
              <organization/>
            </author>
            <author fullname="B. Korver" initials="B." surname="Korver">
              <organization/>
            </author>
            <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">
              <organization>RTFM, Inc.</organization>
            </author>
            <author fullname="Hannes Tschofenig">
              <organization>Arm Limited</organization>
            </author>
            <author fullname="Nagendra 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="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>
    <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 general 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-01">
        <name>Since draft-piraux-tcpls-01</name>
        <ul spacing="normal">
          <li>Change frames and fields order to enable zero-copy receiver.</li>
        </ul>
      </section>
      <section numbered="false" anchor="since-draft-piraux-tcpls-00">
        <name>Since draft-piraux-tcpls-00</name>
        <ul spacing="normal">
          <li>Added the addresses exchange mechanism with New Address and Remove Address
frames.</li>
        </ul>
      </section>
    </section>
  </back>
  <!-- ##markdown-source:
H4sIAAAAAAAAA81963IbR5bm/3yKXOqHJRuASOpimd3tGJqiRtqWKI5It7t3
YsZTABJktQpV6LqQgkXts+zfeY2dF9tzzUuhQFIzOxGNcFhgoSrz5Mlz/fJk
1ng8Nm3eFu7A7pwfnb49O7DvqrmrS3teZ2WzqurWnrn6Kp+5xl7n7aWFu2xW
zu3527Mdk02ntbvSZ3fMvJqV2RIam9fZoh2v8jrrPo3b2apoxrv7Zpa17qKq
1wfWfVoZk6/qA9vWXdPu7+7+AL9ntcsOop4P4W9zXdUfL+qqWx2Yj24Nf80P
7JuyBRpdO36J/RjTtEDSr1lRldD32jWmWWZ1++vfuqp1zYEtK7PKD+w/t9Vs
ZBtouXaLBr6tl/jlX4zJuvayqg+MHRsLHx7Du+xTvnT2lAZB16v6Iivz37I2
r8oD+/PR26q7yvKSfnPLLC8O7JIemvDI/6GbFXzLZOrSxl8VVe3KNi/th2p2
6dqh9sv8ytVN3q5ttbAn2bKr454W2sKkphb+oSvxlo2e3hf5Ve5q+1NVZlfw
QFe7+w6m4kcn0/BoOiRTVvUSWrhywDv74dXRi6dPn+vXvX34avJy0bvn6Q/P
d+Xr8ydPnsnX7/efvdAnd5/u6dcnu3rDi2dP/Q3PXzyVrz/s7mpj3z97ql+f
PHu2j1/fjF9Octcuxi0I4Bz+t/cELx+9Pzn+8/k+dWKtn3z8jG1egsS8msTz
olePJ/awaaqLaZZcfjeJhUSv/nFij+euyEuXXP5pYl9WZdlr+f1kY35ELUmz
4Lb7qyU93bg6dw0y/8CegoA4N8/LiwYlqb10du97eIa1iAQgK+xRVS4cSNTM
2aoECXD1BTxhT1yLGohfj/+8glaXQGPDfbnZZVkV1QX0ZB8eVcjUb/b3HhEB
c9D1A/vSzdxyCtK3v7u/Z+AzHo9tNm3aOpuB3p5f5o0Fo9Fho7ZZuVm+wMYy
u6or0NaqsIUDJciIlGiMtq3wlqt87uySOGNaz5lGOdN0s0ubNXbZFW2+Ktwn
aGVkZ8j+GY7aLvOLmsZP7fJtWXsJQgskNG4GcwEaDbfXEyZ9mc/nBcj9A2Re
Xc07agcH4pC8x29OA+VglGYfsTfQ0a7qmmJt3VVVXLlmAk/TNLishqvzbA3W
aFk1rclWqyKfEUkwsTAdIB4wScAsZADNND4Xxlpka+DuQ9DXEloCEkZ22kE7
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
POUaNzoLxhixdcZ5i8vqidk5er0TNRHX+XMV3s7xcXzDQI0+jPMm2nUBsdyh
aE5CzI25OYhCs+SP6DK0FW0vgLjw9cgeH/fDRb2LeEd3DQWVFPlxFSmeuRNY
MM6YQroc0joJCWOq5UasFkKnsB4UaikzFYnnKRIJjZdE77OnL5Jjw3HZsCSH
Zn3xa1nx0rC4A95fuMJTHMrWaHwQllTCFhu8tm1jTZQOU3QFI1DsiGIdSXs1
3Enz/ogptCLHK8CGg2jRiWqV+bqS3z/Z//F3IPZ47+/43oiXrK53MlS1eDM+
M34HE/OmkduHdHuIwZms28cVwmHqkupWPUcgCprpTCasx9g2mpLX+aIVc7ux
upnoJzheQ+GVG1zoBDeN58loRK+L9w2vgNLMIw1+udOkFo99sq4fCvgUc8m7
PN8wBhHUuC4dEh3ECwol6e6AjXDqU2LNhrvIil9XGbomlCqNmn9aazlTsVHV
o6tIHBklVSUpG7JS/XevJgoP6rwazC8GJULaY89oagdyj9uEAgukwmkjKaid
wv+31dTIpVcckomS6aFjyak6FMZ41DcquIxjJqmM1NUaLxwKr2VrqmukdKBp
fR4i6WQvANPtHzBDjaxP3rYNhONwlGhWt7gpI+fNNcqNLAqn0y0rUfyvcWkT
w/ObZ0JQgoe5o4gDh3dUvM3BAx0roSdFRJEQ7+uPqBLTBw1dZ7WsOdD5TyUt
UixCbtafGJQ1THW0Wr7xeyk54OtVvxqimU7GEC+rks63Y4ShVrqUp+DSWNe8
jQxqhbyic4PBjIwIn5T8G+/+E9UM4V6kiTnDYwEogsQb/NbbKCkRbgvhJN9x
l8rHrDHuEyQ9AYy7pab7/sU/4fMqis6JbdtuTL1+2PETN4CzGW6y5RZo7Sb9
YwuGl5YLXcnxVPD5Nn782/6feBudT3VjeUZucHZuNv68b2v3QgcDBPhyQNHu
tRNnSO81XDoVEe8lbASTJEmbCH6sXhOMnD5/jpodU0QNNqUgq4QKotquR8QO
HY10Q2IupXE3bETpSPUw4R86FPOb6MSkIdm5M0bVa1viV70LKNr9tLvrez+V
5YZYBE/k38+fV/yrbgpJKcKG9kJDaSs2QKrU0HAroaH9MfzvCdWccTq4paF0
l8pAQ0/9zZt7juOhQa4/TJA29Cw8pMV5MUVn2lDprsfkZjeak4ae+4ci0PkD
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
9v8AgpIhJ7KJAAA=

-->

</rfc>
