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

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

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

<rfc ipr="trust200902" docName="draft-bonaventure-mptcp-converters-02" category="exp">

  <front>
    <title>0-RTT TCP Converter</title>

    <author initials="O." surname="Bonaventure" fullname="Olivier Bonaventure">
      <organization>Tessares</organization>
      <address>
        <email>Olivier.Bonaventure@tessares.net</email>
      </address>
    </author>
    <author initials="M." surname="Boucadair" fullname="Mohamed Boucadair">
      <organization>Orange</organization>
      <address>
        <email>mohamed.boucadair@orange.com</email>
      </address>
    </author>
    <author initials="B." surname="Peirens" fullname="Bart Peirens">
      <organization>Proximus</organization>
      <address>
        <email>bart.peirens@proximus.com</email>
      </address>
    </author>
    <author initials="S." surname="Seo" fullname="SungHoon Seo">
      <organization>Korea Telecom</organization>
      <address>
        <email>sh.seo@kt.com</email>
      </address>
    </author>
    <author initials="A." surname="Nandugudi" fullname="Anandatirtha Nandugudi">
      <organization>Tessares</organization>
      <address>
        <email>anand.nandugudi@tessares.net</email>
      </address>
    </author>

    <date year="2017" month="October" day="30"/>

    <area>Transport</area>
    <workgroup>MPTCP Working Group</workgroup>
    <keyword>Internet-Draft</keyword>

    <abstract>


<t>This document specifies an application proxy, called Transport Converter, to
assist the deployment of Multipath TCP. This proxy is designed to avoid inducing extra 
delay when involved in a network-assisted connection (that is, 0-RTT).
This specification assumes an explicit model, where the proxy is explicitly configured on hosts.</t>



    </abstract>


  </front>

  <middle>


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

<t>Transport protocols like TCP evolve regularly <xref target="RFC7414"/>. TCP has been improved in different
ways. Some improvements such as changing the initial window size or modifying the
congestion control scheme can be applied independently on clients and servers. 
Other improvements such as Selective Acknowledgements <xref target="RFC2018"/> or large windows <xref target="RFC7323"/> require
a new TCP option or to change the semantics of some fields in the TCP header. These modifications must
be deployed on both clients and servers to be actually used on the Internet.
Experience with the latter TCP extensions reveals that their deployment can 
require many years. Fukuda reports in <xref target="Fukuda2011"/> results of a decade of measurements showing
the deployment of Selective Acknowledgements, Window Scale and TCP Timestamps. Trammel et al. provide in
<xref target="ANRW17"/> measurements showing that TCP Fast Open <xref target="RFC7413"/> (TFO) is still not widely deployed.</t>

<t>There are some situations where the transport stack used on clients (resp. servers) 
can be upgraded at a faster pace than the transport stack running on servers (resp. 
clients). In those situations, clients would typically want to benefit from the 
features of an improved transport protocol even if the servers have not yet been 
upgraded and conversely. In the past, Performance Enhancing Proxies have been 
proposed and deployed <xref target="RFC3135"/> as solutions to improve TCP performance over 
links with specific characteristics.</t>

<t>Recent examples of TCP extensions include Multipath TCP 
<xref target="RFC6824"/> or TCPINC <xref target="I-D.ietf-tcpinc-tcpcrypt"/>. Those extensions
provide features that are interesting for clients such as wireless devices. 
With Multipath TCP, those devices could seamlessly use WLAN and cellular networks, 
for bonding purposes, faster handovers, or better resiliency. 
Unfortunately, deploying those extensions on both a wide range of clients and 
servers remains difficult.</t>

<t>This document specifies an application proxy, called Transport Converter (TC). A
Transport Converter is a function that is installed by a network
operator to aid the deployment of TCP extensions and to provide the benefits of such extensions to clients.
A Transport Converter supports one or more TCP extensions. The Converter Protocol (CP) is an application layer protocol 
that uses a TCP port number (see IANA section). The Transport Converter adheres to the main principles as drawn in <xref target="RFC1919"/>. In particular, the Converter achieves the following:</t>

<t><list style="symbols">
  <t>Listen for client sessions;</t>
  <t>Receive from a client the address of the final target server;</t>
  <t>Setup a session to the final server;</t>
  <t>Relay control messages and data between the client and the server;</t>
  <t>Perform access controls according to local policies.</t>
</list></t>

<t>The main advantage of network-assisted converters is that they enable new TCP extensions to be used on 
a subset of the end-to-end path, which encourages the deployment of these extensions. The 
Transport Converter allows the client and the server to directly negotiate some options
between the endpoints. This document focuses on Multipath TCP <xref target="RFC6824"/> and TCP Fast Open 
<xref target="RFC7413"/>.  The support for other TCP extensions will be discussed in other documents.</t>

<t>This document does not assume that all the traffic is eligible to the network-assisted conversion service. Only a subset of the traffic will be forwarded to a converter according to a set of policies. Furthermore, it is possible to bypass the converter to connect to the servers that already support the required TCP extension.</t>

<t>This document assumes that a client is configured with one or a list of transport converters. Configuration means are outside the scope of this document.</t>

<t>This document is organized as follows. We first provide a brief explanation of the
operation of Transport Converters in <xref target="sec-arch"/>. We compare them in
<xref target="sec-socks"/> with SOCKS proxies that are already used to deploy
Multipath TCP in cellular networks <xref target="IETFJ16"/>. We then describe the Converter
Protocol in <xref target="sec-protocol"/>.
We then discuss the interactions with middleboxes
(<xref target="sec-middleboxes"/>) and the security considerations (<xref target="sec-security"/>).</t>

</section>
<section anchor="scope" title="Applicability Scope">

<t>This specification is designed with Multipath TCP <xref target="RFC6824"/><xref target="I-D.ietf-mptcp-rfc6824bis"/> 
and TCP Fast Open <xref target="RFC7413"/>
in mind. That is, the specification draws 
how network-assisted Multipath TCP connections can be established even if the remote server 
is not Multipath TCP-capable without inducing extra connection delays (0-RTT proxy). Further, 
the specification allows the client for end-to-end Multipath TCP connections with or without proxy involvement. 
Assessing the applicability of the solution to other use cases and other TCP extensions
such as <xref target="I-D.ietf-tcpinc-tcpcrypt"/> is outside the scope of this document. 
Future documents are required to specify the 
exact behavior when the converter is deployed in other contexts than Multipath TCP.</t>

</section>
<section anchor="sec-arch" title="Architecture">

<t>The architecture considers three types of endhosts:</t>

<t><list style="symbols">
  <t>Client endhosts;</t>
  <t>Transport Converters;</t>
  <t>Server endhosts.</t>
</list></t>

<t>It does not mandate anything on the server side. The architecture assumes that
new software will be installed on the Client hosts and on Transport Converters. 
Further, the architecture allows for making use of TCP new extensions if those are supported by a given server.</t>

<t>A Transport Converter is a network function that relays all data exchanged over one
upstream connection to one downstream connection and vice versa. A connection can be initiated from both interfaces of the transport converter (Internet-facing interface, client-facing interface). The 
converter, thus, maintains state that associates one upstream connection to
a corresponding downstream connection. One of the benefits of this design 
is that different transport protocol extensions can be used on the upstream
and the downstream connections. This encourages the deployment of new TCP extensions 
until they are supported by many servers.</t>

<figure title="A Transport Converter relays data between pairs of TCP connections" anchor="figtc"><artwork><![CDATA[
                     +------------+
   <--- upstream --->| Transport  |<--- downstream --->
                     | Converter  |
                     +------------+   

]]></artwork></figure>

<t>Transport converters can be operated by network operators or 
third parties. The Client is configured, through means that are outside the 
scope of this document, 
with the names and/or the addresses of one or more Transport Converters. The 
packets belonging to the pair of connections between the Client and Server
passing through a Transport Converter 
may follow a different path than the packets directly exchanged between the
Client and the Server. Deployments should minimize the possible additional delay
by carefully selecting the location of the Transport Converter used to reach a
given destination.</t>

<t>A transport converter can be embedded in a standalone device or be activated as
a service on a router. How such function is enabled is deployement-specific.</t>

<figure title="A Transport Converter can be installed anywhere in the network" anchor="figtc2"><artwork><![CDATA[
              +-+    +-+    +-+
    Client -  |R| -- |R| -- |R| - - -  Server
              +-+    +-+    +-+
                      |
                  Transport
                  Converter

]]></artwork></figure>

<t>When establishing a connection, the Client can, depending on local policies, 
either contact the Server directly (e.g., by sending a TCP SYN towards the Server)
or create the connection via a Transport Converter. In the latter case, which is the case we consider in this document, the Client
initiates a connection towards the Transport Converter and indicates the address and port number of 
the ultimate Server inside the connection establishment packet. Doing so enables the Transport Converter to immediately initiate 
a connection towards that Server, without experiencing an extra delay. The Transport Converter waits until the 
confirmation that the Server agrees to establish the connection before confirming 
it to the Client.</t>

<t>The client places the
destination address and port number of the target Server in the payload of the SYN sent to the Converter by
leveraging TCP Fast Open <xref target="RFC7413"/>. In accordance with <xref target="RFC1919"/>, the Transport Converter 
maintains two connections that are combined together. The upstream 
connection is the one between the Client and the Transport Converter. The 
downstream connection is between the Transport Converter and the remote Server. Any user data received by the Transport Converter over the upstream (resp., downstream) 
connection is relayed over the downstream (resp., upstream) connection.</t>

<t>At a high level, the objective of the Transport Converter is to allow the
Client to use a specific extension, e.g. Multipath TCP, on a subset of
the end-to-end path even if the Server does not support this extension.
This is illustrated in <xref target="fig-highlevel"/> where the Client initiates a
Multipath TCP connection with the Converter (Multipath packets are shown
with =) while the Converter uses a regular TCP connection with the Server.</t>

<figure title="Different TCP variants can be used on the Client-Converter path and on the Converter-Server path" anchor="fig-highlevel"><artwork><![CDATA[
                         Transport
Client                   Converter                       Server
     ======================>
      
                                 -------------------->
                                         
                                 <--------------------
                                         
     <======================
       Multipath TCP packets      Regular TCP packets
]]></artwork></figure>

<t><xref target="fig-estab"/> illustrates the 
establishment of a TCP connection by the Client through a Transport Converter. The
information shown between brackets is part of the Converter protocol 
described later in this document.</t>

<t>The Client sends a SYN destined to the Transport Converter. This SYN contains a
TFO Cookie and inside its payload the addresses and ports of the destination
Server. The Transport Converter does not reply immediately to this SYN. It
first tries to create a TCP connection towards the destination Server. If this
second connection succeeds, the Transport Converter confirms the establishment of
the connection to the Client by returning a SYN+ACK and the first bytes of
the bytestream contain information about the TCP Options that were negotiated 
with the final Server. This information
is sent at the beginning of the bytestream, either directly in the SYN+ACK or in 
a subsequent packet. For graphical reasons, the figures in this section show
that the Converter returns this information in the SYN+ACK packet. An implementation
could also place this information in a packet that it sent shortly after the SYN+ACK.</t>

<figure title="Establishment of a TCP connection through a Converter" anchor="fig-estab"><artwork><![CDATA[
                         Transport
Client                   Converter                       Server
     -------------------->
      SYN TFO [->Server:port]

                                 -------------------->
                                          SYN

                                 <--------------------
                                         SYN+ACK
     <--------------------
       SYN+ACK [ ]

]]></artwork></figure>

<t>The connection can also be established from the Internet towards a client via a transport converter. 
This is typically the case when the client embeds a server (video server, for example).</t>

<t>The procedure described in <xref target="fig-estab"/> assumes that the Client has obtained a TFO Cookie
from the Transport Converter. This is part of the Bootstrap procedure which is illustrated
in <xref target="fig-bootstrapex"/>. The Client sends a SYN with a TFO Request option to obtain a
valid cookie from the Converter. The Converter replies with a TFO cookie in the SYN+ACK. 
Once this connection has been established, the Client sends a Bootstrap message to request
the list of TCP options supported by the Transport Converter. Thanks to this procedure, the
Client knows which TCP options are supported by a given Transport Converter.</t>

<figure title="Bootstrapping a Client connection to a Transport Converter" anchor="fig-bootstrapex"><artwork><![CDATA[
                         Transport
Client                   Converter                       Server
     -------------------->
      SYN TFO(empty) 
                          
     <--------------------
       SYN+ACK TFO(cookie) 

     -------------------->
         [Bootstrap]

     <--------------------
       [Supported TCP Options] 


]]></artwork></figure>

<t>Note that the Converter may rely on local policies to decide whether it can service a given
requesting client. That is, the Converter may not return a cookie for that client.</t>

<t>Also, the Converter may behave in a Cookie-less mode when appropriate means are enforced 
at the converter and the network in-between to protect against attacks such as spoofing 
and SYN flood. Under such deployments, the use of TFO is not required.</t>

<section anchor="sample-examples-of-converter-assisted-multipath-tcp-connections" title="Sample Examples of Converter-Assisted Multipath TCP Connections">

<t>As an example, let us consider how such a protocol can help the deployment of 
Multipath TCP <xref target="RFC6824"/>. We assume that both the Client and the Transport 
Converter support Multipath TCP, but consider two different cases depending<vspace />
whether the Server supports Multipath TCP or not. A Multipath TCP connection is created
by placing the MP_CAPABLE (MPC) option in the SYN sent by the Client.</t>

<t><xref target="fig-mpestab"/> describes the operation of the Transport Converter 
if the Server does not support Multipath TCP.</t>

<figure title="Establishment of a Multipath TCP connection through a Converter" anchor="fig-mpestab"><artwork><![CDATA[
                         Transport
Client                   Converter                    Server
     -------------------->
     SYN, MPC [->Server:port]

                                 -------------------->
                                       SYN, MPC

                                 <--------------------
                                         SYN+ACK 
     <--------------------
       SYN+ACK,MPC [ ]

     -------------------->
         ACK,MPC
                                 -------------------->
                                          ACK

]]></artwork></figure>

<t>The Client tries to initiate a Multipath TCP connection by sending a SYN with the 
MP_CAPABLE option (MPC in <xref target="fig-mpestab"/>). The SYN includes the address and port number 
of the final Server and the Transport Converter attempts to initiate a Multipath TCP 
connection towards this Server. Since the Server does not support Multipath TCP, it 
replies with a SYN+ACK that does not contain the MP_CAPABLE option. The Transport 
Converter notes that the connection with the Server does not support Multipath TCP
and returns the TCP Options received from the Server to the Client.</t>

<t><xref target="fig-mpestabok"/> considers a Server that supports Multipath TCP. In this case, it 
replies to the SYN sent by the Transport Converter with the MP_CAPABLE option. 
Upon reception of this SYN+ACK, the Transport Converter confirms the establishment 
of the connection to the Client and indicates to 
the Client that the Server supports Multipath TCP. With this information, 
the Client has discovered that the Server supports Multipath TCP 
natively. This will enable it to bypass the Transport Converter for the next 
Multipath TCP connection that it will initiate towards this Server.</t>

<figure title="Establishment of a Multipath TCP connection through a converter" anchor="fig-mpestabok"><artwork><![CDATA[
                         Transport
Client                   Converter                       Server
     -------------------->
     SYN, MPC [->Server:port]

                                 -------------------->
                                       SYN, MPC

                                 <--------------------
                                         SYN+ACK, MPC
     <--------------------
       SYN+ACK, MPC [ MPC supported ]

     -------------------->
         ACK, MPC
                                 -------------------->
                                          ACK, MPC
]]></artwork></figure>

</section>
<section anchor="sample-example-of-incoming-converter-assisted-multipath-tcp-connection" title="Sample Example of Incoming Converter-Assisted Multipath TCP Connection">

<t>An example of an incoming converter-assisted Multipath TCP connection is depicted 
in <xref target="fig-inestab"/>. In order to support incoming connections from remote hosts, 
the client may use PCP <xref target="RFC6887"/> to instruct the converter to create dynamic 
mappings. Those mappings will be used by the converter to intercept an incoming 
TCP connection destined to the client and convert it into a Multipath TCP connection.</t>

<figure title="Establishment of an Incoming TCP Connection through a Converter" anchor="fig-inestab"><artwork><![CDATA[
                     Transport
H1                   Converter                       Remote Host
                                <-------------------
                                  SYN

     <-------------------
    SYN, MPC[Remote Host:port]                  

     --------------------->
            SYN+ACK, MPC
                                --------------------->
                                        SYN+ACK

                                <---------------------
                                           ACK
     <-------------------
              ACK, MPC

]]></artwork></figure>

</section>
<section anchor="sec-socks" title="Differences with SOCKSv5">

<t>The description above is a simplified description of the Converter protocol. 
At a first glance, the proposed solution could seem similar to the SOCKS v5 protocol 
<xref target="RFC1928"/>. This protocol is used to proxy TCP connections. The Client creates
a connection to a SOCKS proxy, exchanges authentication information and indicates
the destination address and port of the final server. At this point, the SOCKS
proxy creates a connection towards the final server and relays all data between
the two proxied connections. The operation of an implementation based on SOCKSv5 is illustrated in <xref target="fig-socks5"/>.</t>

<figure title="Establishment of a TCP connection through a SOCKS proxy without authentication" anchor="fig-socks5"><artwork><![CDATA[
                         
Client                     SOCKS Proxy                  Server
     -------------------->
             SYN 
     <--------------------
           SYN+ACK
     -------------------->
             ACK
             
     -------------------->
     Version=5, Auth Methods
     <--------------------
           Method
     -------------------->
         Auth Request (if "No auth" method negotiated)
     <--------------------
         Auth Response
     -------------------->
     Connect Server:Port            -------------------->
                                           SYN

                                    <--------------------
                                         SYN+ACK
     <--------------------
          Succeeded

     -------------------->
            Data1
                                    -------------------->
                                           Data1

                                    <--------------------
                                           Data2
     <--------------------
              Data2
]]></artwork></figure>

<t>The Converter protocol also relays data
between an upstream and a downstream connection, but there are important
differences with SOCKSv5.</t>

<t>A first difference is that the Converter protocol leverages the TFO option <xref target="RFC7413"/>
to exchange all control information during the three-way handshake. This reduces
the connection establishment delay compared to SOCKS that requires two
or more round-trip-times before the establishment of the downstream connection towards
the final destination. In today's Internet, latency is a important metric and 
various protocols have been tuned to reduce their latency <xref target="I-D.arkko-arch-low-latency"/>. A recently proposed extension to SOCKS also leverages the TFO
option <xref target="I-D.olteanu-intarea-socks-6"/>.</t>

<t>A second difference is that the Converter protocol explicitly takes the TCP extensions
into account. By using the Converter protocol, the Client can learn whether
a given TCP extension is supported by the destination Server. This enables the Client to 
bypass the Transport Converter when the destination supports the required 
TCP extension. Neither SOCKS v5 <xref target="RFC1928"/> nor the proposed SOCKS v6 <xref target="I-D.olteanu-intarea-socks-6"/>
provide such a feature.</t>

<t>A third difference is that a Transport Converter will only accept the connection
initiated by the Client provided that the downstream connection is accepted by
the Server. If the Server refuses the connection establishment attempt from
the Transport Converter, then the upstream connection from the Client
is rejected as well. This feature is important for applications that check the 
availability of a Server or use the time to connect as a hint on the
selection of a Server <xref target="RFC6555"/>.</t>

</section>
</section>
<section anchor="sec-protocol" title="The Converter Protocol">

<t>We now describe in details the messages that are exchanged between a Client and
a Transport Converter. The Converter Protocol (CP) leverages the TCP Fast Open
extension defined in <xref target="RFC7413"/>.</t>

<t>The Converter Protocol uses a 32 bits long fixed header that is sent
by both the Client and the Transport Converter. This header indicates both
the version of the protocol used and the length of the CP message.</t>

<section anchor="sec-header" title="The Fixed Header">

<t>The Fixed Header is used to exchange information about the version and length of
the messages between the Client and the Transport Converter. The Client and the
Transport Converter MUST send the fixed-sized header shown in <xref target="fig-header"/> as
the first four bytes of the bytestream.</t>

<figure title="The fixed-sized header of the Converter protocol" anchor="fig-header"><artwork><![CDATA[
                        1                   2                   3
    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
   +---------------+---------------+-------------------------------+
   |  Version      |  Total Length |          Reserved             |
   +---------------+---------------+-------------------------------+
]]></artwork></figure>

<t>The Version is encoded as an 8 bits unsigned integer value. This document specifies
version 1. The Total Length is the number of 32 bits word, including the
header, of the bytestream that are consumed by the Converter protocol messages.
Since Total Length is also an 8 bits unsigned integer, those messages cannot
consume more than 1020 bytes of data. This limits the number of bytes
that a Transport Converter needs to process. A
Total Length of zero is invalid and the connection MUST be reset upon
reception of such a header. The Reserved field MUST be set to zero in this
version of the protocol.</t>

</section>
<section anchor="sec-tlv" title="Transport Converter TLVs">

<t>The Converter protocol uses variable length messages that are encoded using 
a TLV format to simplify the parsing of the messages and leave room to extend
the protocol in the future.
A given TLV can only appear once on a connection. If two or more
copies of the same TLV are exchanged over a Converter connection, the associated
TCP connections MUST be closed. All fields are encoded using the network byte order.</t>

<t>Five TLVs are defined in this document. They are listed in <xref target="tab-converter-tlv"/>.</t>

<texttable title="The TLVs used by the Converter protocol" anchor="tab-converter-tlv">
      <ttcol align='left'>Type</ttcol>
      <ttcol align='left'>Hex</ttcol>
      <ttcol align='left'>Length</ttcol>
      <ttcol align='left'>Description</ttcol>
      <c>1</c>
      <c>0x1</c>
      <c>1</c>
      <c>Bootstrap TLV</c>
      <c>10</c>
      <c>0xA</c>
      <c>Variable</c>
      <c>Connect TLV</c>
      <c>20</c>
      <c>0x14</c>
      <c>Variable</c>
      <c>Extended TCP Header TLV</c>
      <c>21</c>
      <c>0x15</c>
      <c>Variable</c>
      <c>Supported TCP Options TLV</c>
      <c>30</c>
      <c>0x1E</c>
      <c>Variable</c>
      <c>Error TLV</c>
</texttable>

<t>To use a given Transport Converter, a Client MUST first obtain a valid 
TFO cookie from it. This is the bootstrap procedure during which the Client
opens a connection to the Transport Converter with an empty TFO option. 
According to <xref target="RFC7413"/>, the Transport Converter returns its cookie in the SYN+ACK.
Then the Client sends a Bootstrap TLV and the Transport Converter replies with 
the Supported TCP Options TLV that lists the TCP options that it
supports (section <xref target="sec-supported"/>).</t>

<t>With the TFO Cookie of the Transport Converter, the Client can request
the establishment of connections to remote servers with the Connect TLV
(see <xref target="sec-connect"/>). If the connection can be established with the final server,
the Transport Converter replies with the Extended TCP Header TLV
and returns an Error TLV inside a RST packet 
(see section <xref target="sec-error"/>).</t>

<section anchor="sec-connect" title="Connect TLV">

<t>This TLV (<xref target="fig-connect"/>) is used to request the establishment of a connection via a Transport Converter.</t>

<t>The 'Remote Peer Port' and 'Remote Peer IP Address' fields contain the destination port and IP address of the target server for an outgoing connection towards a server located on the Internet. For incoming connections destined to a client serviced via a Converter, these fields convey the source port and IP address.</t>

<t>The Remote Peer IP Address MUST be encoded
as an IPv6 address. IPv4 addresses MUST be encoded using the 
IPv4-Mapped IPv6 Address format defined in <xref target="RFC4291"/>.</t>

<t>The optional 'TCP Options' field is used to specify how specific TCP Options 
should be advertised by the Transport Converter
to the final destination of a connection. If this field is not supplied, the Transport 
Converter MUST use the default TCP options that correspond to its local 
policy.</t>

<figure title="The Connect TLV" anchor="fig-connect"><artwork><![CDATA[
                        1                   2                   3
    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
   +---------------+---------------+-------------------------------+
   |     Type      |     Length    |      Remote Peer Port         |
   +---------------+---------------+-------------------------------+
   |                                                               |
   |         Remote Peer IP Address (128 bits)                     |
   |                                                               |
   |                                                               |
   +---------------------------------------------------------------+
   |                          TCP Options (Variable)               |
   |                              ...                              |
   +---------------------------------------------------------------+
]]></artwork></figure>

<t>The 'TCP Options' field is a variable length field that carries
a list of TCP Option fields (<xref target="fig-tcpopt"/>). Each TCP Option field is encoded as a
block of 2+n bytes where the first byte is the TCP 
Option Type and the second byte is the length of the TCP Option
as specified in <xref target="RFC0793"/>. The minimum value for the TCP Option Length is 2. 
The TCP Options that do not include a length subfield, i.e., option types 
0 (EOL) and 1 (NOP) defined in <xref target="RFC0793"/> cannot be placed inside the 
TCP Options field of the Connect TLV. The optional Value field 
contains the variable-length part of the TCP option. A length of two 
indicates the absence of the Value field. The TCP Options field 
always ends on a 32 bits boundary after being padded with zeros.</t>

<figure title="The TCP Options field" anchor="fig-tcpopt"><artwork><![CDATA[
                        1                   2                   3
    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
   +---------------+---------------+---------------+---------------+
   |  TCPOpt type  | TCPOpt Length | Value  (opt)  |  ....         |
   +---------------+---------------+---------------+---------------+
   |                             ....                              |
   +---------------------------------------------------------------+
   |                              ...                              |
   +---------------------------------------------------------------+
]]></artwork></figure>

<t>If a Transport Converter receives a Connect TLV with a non-empty TCP Options
field, it shall present those options to the destination
peer in addition to the TCP Options that it would have used according to its local
policies. For the 
TCP Options that are listed without an optional value, the Converter MUST generate its
own value. For the TCP Options that are included in the 'TCP Options' field with
an optional value, it shall copy the entire option for use in the connection with the destination peer. This feature is required to support TCP Fast Open.</t>

</section>
<section anchor="sec-ext-header" title="Extended TCP Header TLV">

<t>The Extended TCP Header TLV is used by the Transport Converter to send 
to the Client the extended TCP header that was returned by the Server in the
SYN+ACK packet. This TLV is only sent if the Client sent
a Connect TLV to request the establishment of a connection.</t>

<figure title="The Extended TCP Header TLV" anchor="fig-tcpheader"><artwork><![CDATA[
                        1                   2                   3
    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
   +---------------+---------------+-------------------------------+
   |     Type      |     Length    |           Reserved            |
   +---------------+---------------+-------------------------------+
   |               Returned Extended TCP header                    |
   |                              ...                              |
   +---------------------------------------------------------------+
]]></artwork></figure>

<t>The Returned Extended TCP header field is a copy of the extended header
that was received in the SYN+ACK by the Transport Converter. The 
Reserved field is set to zero by the transmitter and ignored by the 
receiver.</t>

</section>
<section anchor="sec-error" title="Error TLV">

<t>This optional TLV can be used by the Transport Converter to provide
information about some errors that occurred during the processing
of a request to convert a connection. This TLV appears after
the Converter header in a RST segment returned by the 
Transport Converter if the error is fatal and prevented the
establishment of the connection. If the error is not fatal and
the connection could be established with the final destination, then
the error TLV will be carried in the payload.</t>

<figure title="The Error TLV" anchor="fig-error"><artwork><![CDATA[
                        1                   2                   3
    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
   +---------------+---------------+----------------+--------------+
   |     Type      |     Length    |    Error       |  Value       |
   +---------------+---------------+----------------+--------------+
]]></artwork></figure>

<t>Different types of errors can occur while processing Converter protocol
messages. Each error is identified by a code represented as an unsigned integer.
Four classes of errors are defined:</t>

<t><list style="symbols">
  <t>Message validation and processing errors (0&lt;= error code &lt; 31): returned upon reception of an an invalid message (including valid messages but with invalid or unknown TLVs).</t>
  <t>Client-side errors (32&lt;= error code &lt; 63): the Client sent a request that could not be accepted by the Converter (e.g., unsupported operation).</t>
  <t>Converter-side errors (64&lt;= error code &lt;96) : problems encountered on the Converter (e.g., lack of ressources) which prevent it from fulfilling the Client's request.</t>
  <t>Errors caused by destination server (96&lt;= error code &lt; 127) : the final destination could not be reached or it replied with a reset message.</t>
</list></t>

<t>The following errors are defined in this document:</t>

<t><list style="symbols">
  <t>Unsupported Version (0): The version number indicated in the fixed header of a message received from a peer is not supported. This error code MUST be generated by a Converter when it receives a request having a version number that it does not support. The value field MUST be set to the version supported by the Converter. When multiple versions are supported by the converter, it includes the list of supported version in the value field; each version is encoded in 8 bits. Upon receipt of this error code, the client checks whether it supports one of the versions returned by the Converter. The highest common supported version MUST be used by the client in subsequent exchanges with the Converter.</t>
  <t>Malformed Message (1): This error code is sent to indicate that a message can not be successfully parsed. To ease troubleshooting, the value field MUST echo the received message. The Converter and the Client MUST send a RST containing this error upon reception of a malformed message.</t>
  <t>Unsupported Message (2): This error code is sent to indicate that a message type is not supported by the converter. To ease troubleshooting, the value field MUST echo the received message. The Converter and the Client MUST send a RST containing this error upon reception of an unsupported message.</t>
  <t>Not Authorized (32): This error code indicates that the Converter refused to create a connection because of a lack of authorization (e.g., administratively prohibited, authorization failure, etc.). The Value field is set to zero. This error code MUST be sent by the Converter when a request cannot be successfully processed because the authorization failed.</t>
  <t>Unsupported TCP Option (33). A TCP Option that the Client requested to
advertise to the final Server is not supported by the Transport
Converter. The Value field is set to the type of the unsupported
TCP Option. If several unsupported TCP Options were specified in the 
Connect TLV, only one of them is returned in the Value.</t>
  <t>Resource Exceeded (64): This error indicates that the Transport Converter does 
not have enough resources to perform the request. This error MUST be sent by the Converter when it does not have sufficient resources to handle a new connection.</t>
  <t>Network Failure (65): This error indicates that the converter is experiencing a network failure to relay the request. The converter MUST send this error code when it experiences forwarding issues to relay a connection.</t>
  <t>Connection Reset (96): This error indicates that the final
destination responded with a RST packet. The Value field is set to zero.</t>
  <t>Destination Unreachable (97): This error indicates that an ICMP destination 
unreachable, port unreachable, or network unreachable was received
by the  Converter. The Value field contains the Code 
field of the received ICMP message. This error message MUST be sent by the Converter when it receives an error message that is bound to a message it relayed previously.</t>
</list></t>

<t><xref target="tab-error-types"/> summarizes the different error codes.</t>

<texttable title="The different error codes" anchor="tab-error-types">
      <ttcol align='left'>Error</ttcol>
      <ttcol align='left'>Hex</ttcol>
      <ttcol align='left'>Description</ttcol>
      <c>0</c>
      <c>0x00</c>
      <c>Unsupported version</c>
      <c>1</c>
      <c>0x01</c>
      <c>Malformed Message</c>
      <c>2</c>
      <c>0x02</c>
      <c>Unsupported Message</c>
      <c>32</c>
      <c>0x20</c>
      <c>Not Authorized</c>
      <c>33</c>
      <c>0x21</c>
      <c>Unsupported TCP Option</c>
      <c>64</c>
      <c>0x40</c>
      <c>Resource Exceeded</c>
      <c>65</c>
      <c>0x41</c>
      <c>Network Failure</c>
      <c>96</c>
      <c>0x60</c>
      <c>Connection Reset</c>
      <c>97</c>
      <c>0x61</c>
      <c>Destination Unreachable</c>
</texttable>

</section>
<section anchor="sec-bootstrap-tlv" title="The Bootstrap TLV">

<t>The Bootstrap TLV is sent by a Client to request the TCP Extensions that are 
supported by a Transport Converter. It is typically sent on the first connection
that a Client establishes with a Transport Converter to learn its
capabilities. The Transport Converter replies with the Supported TCP
Options TLV described in <xref target="sec-supported"/>.</t>

<figure title="The Bootstrap TLV" anchor="fig-bootstrap"><artwork><![CDATA[
                        1                   2                   3
    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
   +---------------+---------------+-------------------------------+
   |     Type      |     Length    |             Zero              |
   +---------------+---------------+-------------------------------+

]]></artwork></figure>

</section>
<section anchor="sec-supported" title="Supported TCP Options TLV">

<t>The Supported TCP Options TLV is used by a Converter to announce the 
TCP options that it supports. Each supported TCP Option is encoded
with its TCP option Kind listed in the TCP Parameters registry 
maintained by IANA. TCP option Kinds 0, 1, and 2 defined in 
<xref target="RFC0793"/> are supported by all TCP implementations and thus cannot
appear in this list. The list of supported TCP Options is padded with
0 to end on a 32 bits boundary.</t>

<figure title="The Supported TCP Options TLV" anchor="fig-supported"><artwork><![CDATA[
                        1                   2                   3
    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
   +---------------+---------------+-------------------------------+
   |     Type      |     Length    |           Reserved            |
   +---------------+---------------+-------------------------------+
   |     Kind #1   |     Kind #2   |           ...                 |
   +---------------+---------------+-------------------------------+   
   /                              ...                              /
   /                                                               /
   +---------------------------------------------------------------+   
]]></artwork></figure>

</section>
</section>
</section>
<section anchor="sec-middleboxes" title="Interactions with middleboxes">

<t>The Converter protocol was designed to be used in networks that do not
contain middleboxes that interfere with TCP. We describe in this
section how a Client can detect middlebox interference and stop using
the Transport Converter affected by this interference.</t>

<t>Internet measurements <xref target="IMC11"/> 
have shown that middleboxes can affect the deployment of TCP extensions. 
In this section, we only discuss the middleboxes
that modify SYN and SYN+ACK packets since the Converter protocol places
its messages in such packets.</t>

<t>Let us first consider a middlebox that removes the TFO Option from the SYN packet.
This interference will be detected by the Client during the bootstrap procedure
shown in <xref target="fig-bootstrapex"/>. A Client should not use a Transport Converter
that does not reply with the TFO option during the Bootstrap.</t>

<t>Consider a middlebox that removes the SYN payload after the bootstrap
procedure. The Client can detect this problem by looking at the 
acknowledgement number field of
the SYN+ACK returned by the Transport Converter. 
The Client should stop to use this 
Transport Converter given the middlebox interference.</t>

<t>As explained in <xref target="RFC7413"/>, some carrier-grade NATs can affect the operation of 
TFO if they assign different IP addresses to the same end host. Such carrier-grade
NATs could affect the operation of the TFO Option used by the Converter protocol. 
See also the discussion in section 7.1 of <xref target="RFC7413"/>.</t>

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

<section anchor="privacy-ingress-filtering" title="Privacy &amp; Ingress Filtering">

<t>The Converter may have access to privacy-related information (e.g., subscriber credentials). 
The Converter MUST NOT leak such sensitive information outside a local domain.</t>

<t>Given its function and its location in the network, a Transport Converter has
access to the payload of all the packets that it processes. As such, it must be protected as a core IP router.</t>

<t>Furthermore, ingress filtering policies MUST be enforced at the network boundaries <xref target="RFC2827"/>.</t>

<t>This document assumes that all network attachements are managed by the same administrative entity. Therefore, enforcing anti-spoofing filters at these network ensures that hosts are not sending traffic with spoofed source IP addresses.</t>

</section>
<section anchor="authorization" title="Authorization">

<t>The Converter protocol is intended to be used in managed networks where end hosts
can be identified by their IP address. Thanks to the Bootstrap procedure 
(<xref target="fig-bootstrapex"/>), the Transport Converter can verify that
the Client correctly receives packets sent by the Converter. Stronger authentication
schemes should be defined to use the Converter protocol in more open network environments.</t>

<t>See below for authorization considerations that are specific for Multipath TCP.</t>

</section>
<section anchor="denial-of-service" title="Denial of Service">

<t>Another possible risk is the amplification attacks since a Transport Converter sends
a SYN towards a remote Server upon reception of a SYN from a Client. This could 
lead to amplification attacks if the SYN sent by the Transport Converter were larger
than the SYN received from the Client or if the Transport Converter retransmits the
SYN. To mitigate such attacks, the Transport Converter SHOULD rate limit the number of 
pending requests for a given Client. It SHOULD also avoid sending to remote Servers SYNs 
that are significantly longer than the SYN received from the Client. In practice, 
Transport Converters SHOULD NOT advertise to a Server TCP Options that were not specified
by the Client in the received SYN. Finally, the Transport Converter SHOULD only retransmit
a SYN to a Server after having received a retransmitted SYN from the corresponding Client.</t>

<t>Upon reception of a SYN that contains a valid TFO Cookie and a Connect TLV, the
Transport Converter attempts to establish a TCP connection to a remote Server. There is a
risk of denial of service attack if a Client requests too many connections
in a short period of time. Implementations SHOULD limit the number of pending 
connections from a given Client. Means to protect against SYN flooding
attacks MUST also be enabled <xref target="RFC4987"/>.</t>

</section>
<section anchor="traffic-theft" title="Traffic Theft">

<t>Traffic theft is a risk if an illegitimate Converter is inserted in the
   path.  Indeed, inserting an illegitimate Converter in the forwarding path
   allows traffic interception and can therefore provide access to
   sensitive data issued by or destined to a host. Converter discovery and configuration are out of scope of this document.</t>

</section>
<section anchor="multipath-tcp-specific-considerations" title="Multipath TCP-specific Considerations">

<t>Multipath TCP-related security threats are discussed in <xref target="RFC6181"/> and
<xref target="RFC6824"/>.</t>

<t>The operator that manages the various network attachments
(including the Converters) can enforce authentication and authorization
policies using appropriate mechanisms.  For example, a non-exhaustive
list of methods to achieve authorization is provided hereafter:</t>

<t><list style="symbols">
  <t>The network provider may enforce a policy based on the
International Mobile Subscriber Identity (IMSI) to verify that a
user is allowed to benefit from the aggregation service. If that
authorization fails, the Packet Data Protocol (PDP) context/bearer 
will not be mounted. This method does not require any
interaction with the Converter.</t>
  <t>The network provider may enforce a policy based upon Access
Control Lists (ACLs), e.g., at a Broadband Network Gateway (BNG)
to control the hosts that are authorized to communicate with 
a Converter. These ACLs may be installed as a result of RADIUS exchanges,
e.g. <xref target="I-D.boucadair-mptcp-radius"/>.  This method does not
require any interaction with the Converter.</t>
  <t>A device that embeds the Converter may also host a RADIUS client that
will solicit an AAA server to check whether connections received
from a given source IP address are authorized or not
<xref target="I-D.boucadair-mptcp-radius"/>.</t>
</list></t>

<t>A first safeguard against the misuse of Converter resources by illegitimate
users (e.g., users with access networks that are not managed by the
same provider that operates the Converter) is the Converter to reject 
Multipath TCP connections received on its Internet-facing interfaces. Only 
Multipath PTCP connections received on the customer-facing interfaces of a Converter will
be accepted.</t>

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

<t>This document requests the allocation of a reserved service name and port
number for the converter protocol at https://www.iana.org/assignments/service-names-port-numbers/service-names-port-numbers.xhtml.</t>

<t>This documents specifies version 1 of the Converter protocol. 
Five types of Converter messages are defined:</t>

<t><list style="symbols">
  <t>1: Bootstrap TLV</t>
  <t>10: Connect TLV</t>
  <t>20: Extended TCP Header TLV</t>
  <t>21: Supported TCP Options TLV</t>
  <t>30: Error TLV</t>
</list></t>

<t>Furthermore, it also defines the following error codes:</t>

<texttable title="The different error codes" anchor="tab-error-summary">
      <ttcol align='left'>Error</ttcol>
      <ttcol align='left'>Hex</ttcol>
      <ttcol align='left'>Description</ttcol>
      <c>0</c>
      <c>0x00</c>
      <c>Unsupported version</c>
      <c>1</c>
      <c>0x01</c>
      <c>Malformed Message</c>
      <c>2</c>
      <c>0x02</c>
      <c>Unsupported Message</c>
      <c>32</c>
      <c>0x20</c>
      <c>Not Authorized</c>
      <c>33</c>
      <c>0x21</c>
      <c>Unsupported TCP Option</c>
      <c>64</c>
      <c>0x40</c>
      <c>Resource Exceeded</c>
      <c>65</c>
      <c>0x41</c>
      <c>Network Failure</c>
      <c>96</c>
      <c>0x60</c>
      <c>Connection Reset</c>
      <c>97</c>
      <c>0x61</c>
      <c>Destination Unreachable</c>
</texttable>

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

<t>Although they could disagree with the contents of the document, 
we would like to thank Joe Touch and Juliusz Chroboczek whose 
comments on the MPTCP mailing list have forced
us to reconsider the design of the solution several times.</t>

<t>We would like to thank Raphael Bauduin and Stefano Secci for their help
in preparing this draft. Sri Gundavelli and Nandini Ganesh provided 
valuable feedback about the handling of TFO and the error codes. 
Thanks to them.</t>

<t>This document builds upon earlier documents that proposed various forms
of Multipath TCP proxies <xref target="I-D.boucadair-mptcp-plain-mode"/>, 
<xref target="I-D.peirens-mptcp-transparent"/> and <xref target="HotMiddlebox13b"/>.</t>

<t>From <xref target="I-D.boucadair-mptcp-plain-mode"/>:</t>

<t>Many thanks to Chi Dung Phung, Mingui Zhang, Rao Shoaib, Yoshifumi
   Nishida, and Christoph Paasch for their valuable comments.</t>

<t>Thanks to Ian Farrer, Mikael Abrahamsson, Alan Ford, Dan Wing, and
   Sri Gundavelli for the fruitful discussions in IETF#95 (Buenos
   Aires).</t>

<t>Special thanks to Pierrick Seite, Yannick Le Goff, Fred Klamm, and
   Xavier Grall for their inputs.</t>

<t>Thanks also to Olaf Schleusing, Martin Gysi, Thomas Zasowski, Andreas
   Burkhard, Silka Simmen, Sandro Berger, Michael Melloul, Jean-Yves
   Flahaut, Adrien Desportes, Gregory Detal, Benjamin David, Arun
   Srinivasan, and Raghavendra Mallya for the discussion.</t>

<section anchor="contributors" title="Contributors">

<t>As noted above, this document builds on two previous documents.</t>

<t>The authors of <xref target="I-D.boucadair-mptcp-plain-mode"/> were:
 - Mohamed Boucadair
 - Christian Jacquenet
 - Olivier Bonaventure
 - Denis Behaghel
 - Stefano Secci
 - Wim Henderickx
 - Robert Skog
 - Suresh Vinapamula
 - SungHoon Seo
 - Wouter Cloetens
 - Ullrich Meyer
 - Luis M. Contreras
 - Bart Peirens</t>

<t>The authors of <xref target="I-D.peirens-mptcp-transparent"/> were:
 - Bart Peirens
 - Gregory Detal
 - Sebastien Barre
 - Olivier Bonaventure</t>

</section>
</section>


  </middle>

  <back>

    <references title='Normative References'>





<reference  anchor='RFC0793' target='https://www.rfc-editor.org/info/rfc793'>
<front>
<title>Transmission Control Protocol</title>
<author initials='J.' surname='Postel' fullname='J. Postel'><organization /></author>
<date year='1981' month='September' />
</front>
<seriesInfo name='STD' value='7'/>
<seriesInfo name='RFC' value='793'/>
<seriesInfo name='DOI' value='10.17487/RFC0793'/>
</reference>



<reference  anchor='RFC4291' target='https://www.rfc-editor.org/info/rfc4291'>
<front>
<title>IP Version 6 Addressing Architecture</title>
<author initials='R.' surname='Hinden' fullname='R. Hinden'><organization /></author>
<author initials='S.' surname='Deering' fullname='S. Deering'><organization /></author>
<date year='2006' month='February' />
<abstract><t>This specification defines the addressing architecture of the IP Version 6 (IPv6) protocol.  The document includes the IPv6 addressing model, text representations of IPv6 addresses, definition of IPv6 unicast addresses, anycast addresses, and multicast addresses, and an IPv6 node's required addresses.</t><t>This document obsoletes RFC 3513, &quot;IP Version 6 Addressing Architecture&quot;.   [STANDARDS-TRACK]</t></abstract>
</front>
<seriesInfo name='RFC' value='4291'/>
<seriesInfo name='DOI' value='10.17487/RFC4291'/>
</reference>



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



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



<reference  anchor='RFC4987' target='https://www.rfc-editor.org/info/rfc4987'>
<front>
<title>TCP SYN Flooding Attacks and Common Mitigations</title>
<author initials='W.' surname='Eddy' fullname='W. Eddy'><organization /></author>
<date year='2007' month='August' />
<abstract><t>This document describes TCP SYN flooding attacks, which have been well-known to the community for several years.  Various countermeasures against these attacks, and the trade-offs of each, are described.  This document archives explanations of the attack and common defense techniques for the benefit of TCP implementers and administrators of TCP servers or networks, but does not make any standards-level recommendations.  This memo provides information for the Internet community.</t></abstract>
</front>
<seriesInfo name='RFC' value='4987'/>
<seriesInfo name='DOI' value='10.17487/RFC4987'/>
</reference>




    </references>

    <references title='Informative References'>





<reference  anchor='RFC1919' target='https://www.rfc-editor.org/info/rfc1919'>
<front>
<title>Classical versus Transparent IP Proxies</title>
<author initials='M.' surname='Chatel' fullname='M. Chatel'><organization /></author>
<date year='1996' month='March' />
<abstract><t>This document explains &quot;classical&quot; and &quot;transparent&quot; proxy techniques and attempts to provide rules to help determine when each proxy system may be used without causing problems.  This memo provides information for the Internet community.  This memo does not specify an Internet standard of any kind.</t></abstract>
</front>
<seriesInfo name='RFC' value='1919'/>
<seriesInfo name='DOI' value='10.17487/RFC1919'/>
</reference>



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



<reference  anchor='RFC2018' target='https://www.rfc-editor.org/info/rfc2018'>
<front>
<title>TCP Selective Acknowledgment Options</title>
<author initials='M.' surname='Mathis' fullname='M. Mathis'><organization /></author>
<author initials='J.' surname='Mahdavi' fullname='J. Mahdavi'><organization /></author>
<author initials='S.' surname='Floyd' fullname='S. Floyd'><organization /></author>
<author initials='A.' surname='Romanow' fullname='A. Romanow'><organization /></author>
<date year='1996' month='October' />
<abstract><t>This memo proposes an implementation of SACK and discusses its performance and related issues.  [STANDARDS-TRACK]</t></abstract>
</front>
<seriesInfo name='RFC' value='2018'/>
<seriesInfo name='DOI' value='10.17487/RFC2018'/>
</reference>



<reference  anchor='RFC2827' target='https://www.rfc-editor.org/info/rfc2827'>
<front>
<title>Network Ingress Filtering: Defeating Denial of Service Attacks which employ IP Source Address Spoofing</title>
<author initials='P.' surname='Ferguson' fullname='P. Ferguson'><organization /></author>
<author initials='D.' surname='Senie' fullname='D. Senie'><organization /></author>
<date year='2000' month='May' />
<abstract><t>This paper discusses a simple, effective, and straightforward method for using ingress traffic filtering to prohibit DoS (Denial of Service) attacks which use forged IP addresses to be propagated from 'behind' an Internet Service Provider's (ISP) aggregation point.  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='38'/>
<seriesInfo name='RFC' value='2827'/>
<seriesInfo name='DOI' value='10.17487/RFC2827'/>
</reference>



<reference  anchor='RFC3135' target='https://www.rfc-editor.org/info/rfc3135'>
<front>
<title>Performance Enhancing Proxies Intended to Mitigate Link-Related Degradations</title>
<author initials='J.' surname='Border' fullname='J. Border'><organization /></author>
<author initials='M.' surname='Kojo' fullname='M. Kojo'><organization /></author>
<author initials='J.' surname='Griner' fullname='J. Griner'><organization /></author>
<author initials='G.' surname='Montenegro' fullname='G. Montenegro'><organization /></author>
<author initials='Z.' surname='Shelby' fullname='Z. Shelby'><organization /></author>
<date year='2001' month='June' />
<abstract><t>This document is a survey of Performance Enhancing Proxies (PEPs) often employed to improve degraded TCP performance caused by characteristics of specific link environments, for example, in satellite, wireless WAN, and wireless LAN environments.  This memo provides information for the Internet community.</t></abstract>
</front>
<seriesInfo name='RFC' value='3135'/>
<seriesInfo name='DOI' value='10.17487/RFC3135'/>
</reference>



<reference  anchor='RFC6555' target='https://www.rfc-editor.org/info/rfc6555'>
<front>
<title>Happy Eyeballs: Success with Dual-Stack Hosts</title>
<author initials='D.' surname='Wing' fullname='D. Wing'><organization /></author>
<author initials='A.' surname='Yourtchenko' fullname='A. Yourtchenko'><organization /></author>
<date year='2012' month='April' />
<abstract><t>When a server's IPv4 path and protocol are working, but the server's IPv6 path and protocol are not working, a dual-stack client application experiences significant connection delay compared to an IPv4-only client.  This is undesirable because it causes the dual- stack client to have a worse user experience.  This document specifies requirements for algorithms that reduce this user-visible delay and provides an algorithm.  [STANDARDS-TRACK]</t></abstract>
</front>
<seriesInfo name='RFC' value='6555'/>
<seriesInfo name='DOI' value='10.17487/RFC6555'/>
</reference>



<reference  anchor='RFC6181' target='https://www.rfc-editor.org/info/rfc6181'>
<front>
<title>Threat Analysis for TCP Extensions for Multipath Operation with Multiple Addresses</title>
<author initials='M.' surname='Bagnulo' fullname='M. Bagnulo'><organization /></author>
<date year='2011' month='March' />
<abstract><t>Multipath TCP (MPTCP for short) describes the extensions proposed for TCP so that endpoints of a given TCP connection can use multiple paths to exchange data.  Such extensions enable the exchange of segments using different source-destination address pairs, resulting in the capability of using multiple paths in a significant number of scenarios.  Some level of multihoming and mobility support can be achieved through these extensions.  However, the support for multiple IP addresses per endpoint may have implications on the security of the resulting MPTCP.  This note includes a threat analysis for MPTCP. This document is not an Internet Standards Track specification; it is published for informational purposes.</t></abstract>
</front>
<seriesInfo name='RFC' value='6181'/>
<seriesInfo name='DOI' value='10.17487/RFC6181'/>
</reference>



<reference  anchor='RFC7414' target='https://www.rfc-editor.org/info/rfc7414'>
<front>
<title>A Roadmap for Transmission Control Protocol (TCP) Specification Documents</title>
<author initials='M.' surname='Duke' fullname='M. Duke'><organization /></author>
<author initials='R.' surname='Braden' fullname='R. Braden'><organization /></author>
<author initials='W.' surname='Eddy' fullname='W. Eddy'><organization /></author>
<author initials='E.' surname='Blanton' fullname='E. Blanton'><organization /></author>
<author initials='A.' surname='Zimmermann' fullname='A. Zimmermann'><organization /></author>
<date year='2015' month='February' />
<abstract><t>This document contains a roadmap to the Request for Comments (RFC) documents relating to the Internet's Transmission Control Protocol (TCP).  This roadmap provides a brief summary of the documents defining TCP and various TCP extensions that have accumulated in the RFC series.  This serves as a guide and quick reference for both TCP implementers and other parties who desire information contained in the TCP-related RFCs.</t><t>This document obsoletes RFC 4614.</t></abstract>
</front>
<seriesInfo name='RFC' value='7414'/>
<seriesInfo name='DOI' value='10.17487/RFC7414'/>
</reference>



<reference  anchor='RFC6887' target='https://www.rfc-editor.org/info/rfc6887'>
<front>
<title>Port Control Protocol (PCP)</title>
<author initials='D.' surname='Wing' fullname='D. Wing' role='editor'><organization /></author>
<author initials='S.' surname='Cheshire' fullname='S. Cheshire'><organization /></author>
<author initials='M.' surname='Boucadair' fullname='M. Boucadair'><organization /></author>
<author initials='R.' surname='Penno' fullname='R. Penno'><organization /></author>
<author initials='P.' surname='Selkirk' fullname='P. Selkirk'><organization /></author>
<date year='2013' month='April' />
<abstract><t>The Port Control Protocol allows an IPv6 or IPv4 host to control how incoming IPv6 or IPv4 packets are translated and forwarded by a Network Address Translator (NAT) or simple firewall, and also allows a host to optimize its outgoing NAT keepalive messages.</t></abstract>
</front>
<seriesInfo name='RFC' value='6887'/>
<seriesInfo name='DOI' value='10.17487/RFC6887'/>
</reference>



<reference  anchor='RFC7323' target='https://www.rfc-editor.org/info/rfc7323'>
<front>
<title>TCP Extensions for High Performance</title>
<author initials='D.' surname='Borman' fullname='D. Borman'><organization /></author>
<author initials='B.' surname='Braden' fullname='B. Braden'><organization /></author>
<author initials='V.' surname='Jacobson' fullname='V. Jacobson'><organization /></author>
<author initials='R.' surname='Scheffenegger' fullname='R. Scheffenegger' role='editor'><organization /></author>
<date year='2014' month='September' />
<abstract><t>This document specifies a set of TCP extensions to improve performance over paths with a large bandwidth * delay product and to provide reliable operation over very high-speed paths.  It defines the TCP Window Scale (WS) option and the TCP Timestamps (TS) option and their semantics.  The Window Scale option is used to support larger receive windows, while the Timestamps option can be used for at least two distinct mechanisms, Protection Against Wrapped Sequences (PAWS) and Round-Trip Time Measurement (RTTM), that are also described herein.</t><t>This document obsoletes RFC 1323 and describes changes from it.</t></abstract>
</front>
<seriesInfo name='RFC' value='7323'/>
<seriesInfo name='DOI' value='10.17487/RFC7323'/>
</reference>



<reference anchor='I-D.ietf-tcpinc-tcpcrypt'>
<front>
<title>Cryptographic protection of TCP Streams (tcpcrypt)</title>

<author initials='A' surname='Bittau' fullname='Andrea Bittau'>
    <organization />
</author>

<author initials='D' surname='Giffin' fullname='Daniel Giffin'>
    <organization />
</author>

<author initials='M' surname='Handley' fullname='Mark Handley'>
    <organization />
</author>

<author initials='D' surname='Mazieres' fullname='David Mazieres'>
    <organization />
</author>

<author initials='Q' surname='Slack' fullname='Quinn Slack'>
    <organization />
</author>

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

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

<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 may be transmitted.  However, this cost can be avoided between two hosts that have recently established a previous tcpcrypt connection.</t></abstract>

</front>

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



<reference anchor='I-D.olteanu-intarea-socks-6'>
<front>
<title>SOCKS Protocol Version 6</title>

<author initials='V' surname='Olteanu' fullname='Vladimir Olteanu'>
    <organization />
</author>

<author initials='D' surname='Niculescu' fullname='Dragos Niculescu'>
    <organization />
</author>

<date month='June' day='28' year='2017' />

<abstract><t>The SOCKS protocol is used primarily to proxy TCP connections to arbitrary destinations via the use of a proxy server.  Under the latest version of the protocol (version 5), it takes 2 RTTs (or 3, if authentication is used) before data can flow between the client and the server.  This memo proposes SOCKS version 6, which reduces the number of RTTs used, takes full advantage of TCP Fast Open, and adds support for 0-RTT authentication.</t></abstract>

</front>

<seriesInfo name='Internet-Draft' value='draft-olteanu-intarea-socks-6-00' />
<format type='TXT'
        target='http://www.ietf.org/internet-drafts/draft-olteanu-intarea-socks-6-00.txt' />
</reference>



<reference anchor='I-D.boucadair-mptcp-plain-mode'>
<front>
<title>Extensions for Network-Assisted MPTCP Deployment Models</title>

<author initials='M' surname='Boucadair' fullname='Mohamed Boucadair'>
    <organization />
</author>

<author initials='C' surname='Jacquenet' fullname='Christian Jacquenet'>
    <organization />
</author>

<author initials='O' surname='Bonaventure' fullname='Olivier Bonaventure'>
    <organization />
</author>

<author initials='D' surname='Behaghel' fullname='Denis Behaghel'>
    <organization />
</author>

<author initials='s' surname='stefano.secci@lip6.fr' fullname='stefano.secci@lip6.fr'>
    <organization />
</author>

<author initials='W' surname='Henderickx' fullname='Wim Henderickx'>
    <organization />
</author>

<author initials='R' surname='Skog' fullname='Robert Skog'>
    <organization />
</author>

<author initials='S' surname='Vinapamula' fullname='Suresh Vinapamula'>
    <organization />
</author>

<author initials='S' surname='Seo' fullname='SungHoon Seo'>
    <organization />
</author>

<author initials='W' surname='Cloetens' fullname='Wouter Cloetens'>
    <organization />
</author>

<author initials='U' surname='Meyer' fullname='Ullrich Meyer'>
    <organization />
</author>

<author initials='L' surname='Contreras' fullname='Luis Contreras'>
    <organization />
</author>

<author initials='B' surname='Peirens' fullname='Bart Peirens'>
    <organization />
</author>

<date month='March' day='9' year='2017' />

<abstract><t>Because of the lack of Multipath TCP (MPTCP) support at the server side, some service providers now consider a network-assisted model that relies upon the activation of a dedicated function called MPTCP Conversion Point (MCP).  Network-Assisted MPTCP deployment models are designed to facilitate the adoption of MPTCP for the establishment of multi-path communications without making any assumption about the support of MPTCP by the communicating peers.  MCPs located in the network are responsible for establishing multi-path communications on behalf of endpoints, thereby taking advantage of MPTCP capabilities to achieve different goals that include (but are not limited to) optimization of resource usage (e.g., bandwidth aggregation), of resiliency (e.g., primary/backup communication paths), and traffic offload management.  This document specifies extensions for Network-Assisted MPTCP deployment models.</t></abstract>

</front>

<seriesInfo name='Internet-Draft' value='draft-boucadair-mptcp-plain-mode-10' />
<format type='TXT'
        target='http://www.ietf.org/internet-drafts/draft-boucadair-mptcp-plain-mode-10.txt' />
</reference>



<reference anchor='I-D.peirens-mptcp-transparent'>
<front>
<title>Link bonding with transparent Multipath TCP</title>

<author initials='B' surname='Peirens' fullname='Bart Peirens'>
    <organization />
</author>

<author initials='G' surname='Detal' fullname='Gregory Detal'>
    <organization />
</author>

<author initials='S' surname='Barre' fullname='Sebastien Barre'>
    <organization />
</author>

<author initials='O' surname='Bonaventure' fullname='Olivier Bonaventure'>
    <organization />
</author>

<date month='July' day='8' year='2016' />

<abstract><t>This document describes the utilisation of the transparent Multipath TCP mode to enable network operators to provide link bonding services in hybrid access networks.</t></abstract>

</front>

<seriesInfo name='Internet-Draft' value='draft-peirens-mptcp-transparent-00' />
<format type='TXT'
        target='http://www.ietf.org/internet-drafts/draft-peirens-mptcp-transparent-00.txt' />
</reference>



<reference anchor='I-D.arkko-arch-low-latency'>
<front>
<title>Low Latency Applications and the Internet Architecture</title>

<author initials='J' surname='Arkko' fullname='Jari Arkko'>
    <organization />
</author>

<author initials='J' surname='Tantsura' fullname='Jeff Tantsura'>
    <organization />
</author>

<date month='July' day='3' year='2017' />

<abstract><t>Some recent Internet technology developments relate to improvements in communications latency.  For instance, improvements in radio communications or the recent work in IETF transport, security, and web protocols.  There are also potential applications where latency would play a more significant role than it has traditionally been in the Internet communications.  Modern networking systems offer many tools for building low-latency networks, from highly optimised individual protocol components to software controlled, virtualised and tailored network functions.  This memo views the developments from a system viewpoint, and considers the potential future stresses that the strive for low-latency support for applications may bring.</t></abstract>

</front>

<seriesInfo name='Internet-Draft' value='draft-arkko-arch-low-latency-01' />
<format type='TXT'
        target='http://www.ietf.org/internet-drafts/draft-arkko-arch-low-latency-01.txt' />
</reference>



<reference anchor='I-D.ietf-mptcp-rfc6824bis'>
<front>
<title>TCP Extensions for Multipath Operation with Multiple Addresses</title>

<author initials='A' surname='Ford' fullname='Alan Ford'>
    <organization />
</author>

<author initials='C' surname='Raiciu' fullname='Costin Raiciu'>
    <organization />
</author>

<author initials='M' surname='Handley' fullname='Mark Handley'>
    <organization />
</author>

<author initials='O' surname='Bonaventure' fullname='Olivier Bonaventure'>
    <organization />
</author>

<author initials='C' surname='Paasch' fullname='Christoph Paasch'>
    <organization />
</author>

<date month='July' day='28' year='2017' />

<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.  Multipath TCP provides the ability to simultaneously use multiple paths between peers.  This document presents a set of extensions to traditional TCP to support multipath operation.  The protocol offers the same type of service to applications as TCP (i.e., reliable bytestream), and it provides the components necessary to establish and use multiple TCP flows across potentially disjoint paths.  This document specifies v1 of Multipath TCP, obsoleting v0 as specified in RFC6824 [RFC6824] through clarifications and modifications primarily driven by deployment experience.</t></abstract>

</front>

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



<reference anchor='I-D.boucadair-mptcp-radius'>
<front>
<title>RADIUS Extensions for Network-Assisted Multipath TCP (MPTCP)</title>

<author initials='M' surname='Boucadair' fullname='Mohamed Boucadair'>
    <organization />
</author>

<author initials='C' surname='Jacquenet' fullname='Christian Jacquenet'>
    <organization />
</author>

<date month='October' day='9' year='2017' />

<abstract><t>Because of the lack of Multipath TCP (MPTCP) support at the server side, some service providers now consider a network-assisted model that relies upon the activation of a dedicated function called MPTCP Conversion Point (MCP).  Network-assisted MPTCP deployment models are designed to facilitate the adoption of MPTCP for the establishment of multi-path communications without making any assumption about the support of MPTCP by the communicating peers.  MCPs located in the network are responsible for establishing multi-path communications on behalf of endpoints, thereby taking advantage of MPTCP capabilities to achieve different goals that include (but are not limited to) optimization of resource usage (e.g., bandwidth aggregation), of resiliency (e.g., primary/backup communication paths), and traffic offload management.  This document specifies a new Remote Authentication Dial-In User Service (RADIUS) attributes that carry the IP addresses that will be returned to authorized users to reach one or multiple MCPs.</t></abstract>

</front>

<seriesInfo name='Internet-Draft' value='draft-boucadair-mptcp-radius-05' />
<format type='TXT'
        target='http://www.ietf.org/internet-drafts/draft-boucadair-mptcp-radius-05.txt' />
</reference>


<reference anchor="Fukuda2011" >
  <front>
    <title>An Analysis of Longitudinal TCP Passive Measurements (Short Paper)</title>
    <author initials="K." surname="Fukuda">
      <organization></organization>
    </author>
    <date year="2011"/>
  </front>
  <seriesInfo name="Traffic Monitoring and Analysis. TMA 2011. Lecture Notes in Computer Science, vol 6613." value=""/>
</reference>
<reference anchor="ANRW17" >
  <front>
    <title>Tracking transport-layer evolution with PATHspider</title>
    <author initials="B." surname="Trammell">
      <organization></organization>
    </author>
    <author initials="M." surname="Kuhlewind">
      <organization></organization>
    </author>
    <author initials="P." surname="De Vaere">
      <organization></organization>
    </author>
    <author initials="I." surname="Learmonth">
      <organization></organization>
    </author>
    <author initials="G." surname="Fairhurst">
      <organization></organization>
    </author>
    <date year="2017" month="July"/>
  </front>
  <seriesInfo name="Applied Networking Research Workshop 2017 (ANRW17)" value=""/>
</reference>
<reference anchor="IMC11" >
  <front>
    <title>Is it still possible to extend TCP ?</title>
    <author initials="K." surname="Honda">
      <organization></organization>
    </author>
    <author initials="Y." surname="Nishida">
      <organization></organization>
    </author>
    <author initials="C." surname="Raiciu">
      <organization></organization>
    </author>
    <author initials="A." surname="Greenhalgh">
      <organization></organization>
    </author>
    <author initials="M." surname="Handley">
      <organization></organization>
    </author>
    <author initials="T." surname="Hideyuki">
      <organization></organization>
    </author>
    <date year="2011"/>
  </front>
  <seriesInfo name="Proceedings of the 2011 ACM SIGCOMM conference on Internet measurement conference" value=""/>
</reference>
<reference anchor="IETFJ16" >
  <front>
    <title>Multipath TCP Deployment</title>
    <author initials="O." surname="Bonaventure">
      <organization></organization>
    </author>
    <author initials="S." surname="Seo">
      <organization></organization>
    </author>
    <date year="n.d."/>
  </front>
  <seriesInfo name="IETF Journal, Fall 2016" value=""/>
</reference>
<reference anchor="HotMiddlebox13b" target="http://inl.info.ucl.ac.be/publications/multipath-middlebox">
  <front>
    <title>Multipath in the Middle(Box)</title>
    <author initials="G." surname="Detal">
      <organization></organization>
    </author>
    <author initials="C." surname="Paasch">
      <organization></organization>
    </author>
    <author initials="O." surname="Bonaventure">
      <organization></organization>
    </author>
    <date year="2013" month="December"/>
  </front>
  <seriesInfo name="HotMiddlebox'13" value=""/>
</reference>


    </references>



  </back>
</rfc>

