<?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-01" category="exp">

  <front>
    <title>0-RTT TCP converters</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>Proxiums</organization>
      <address>
        <email>bart.peirens@proximus.com</email>
      </address>
    </author>

    <date year="2017" month="July" day="17"/>

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

    <abstract>


<t>This document proposes the utilisation of Transport Converters to
aid the deployment of TCP extensions such as Multipath TCP.</t>



    </abstract>


  </front>

  <middle>


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

<t>Transport protocols like TCP evolve regularly <xref target="RFC7414"/>. Given the end-to-end nature of those protocols, 
a new feature can only be used once it has been deployed on both clients and servers. 
Experience with TCP extensions reveals that the deployment of a new TCP extension 
requires many years <xref target="Fukuda2011"/>.</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 cellular devices. 
With Multipath TCP, cellular devices could seamlessly use WLAN and cellular networks, 
either for bonding purposes, for faster handovers, or better resiliency. 
Unfortunately, deploying those extensions on both a wide range of clients and 
servers remains difficult.</t>

<t>In this document, we propose the utilisation of a Transport Converter. A
Transport Converter is a network function that is installed by a network
operator to aid the deployment of TCP extensions and to provide the benefits of such extensons to the subscribers.  A Transport Converter
operates entirely at the transport layer and supports one or more TCP extensions. The converter protocol is an application layer protocol 
that uses a TCP port number to be assigned by IANA.</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. A Transport Converter is designed to not alter options that are supplied by the client or the server; those options can still be negotiated directly between the endpoints.</t>

<t>This document does not assume that all the traffic is eligible to the network-assisted conversion service. Only a subset of the trafic 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 organised 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"/> and illustrate its usage with a few examples
in <xref target="sec-examples"/>. We then discuss the interactions with middleboxes
(<xref target="sec-middleboxes"/>) and the security considerations (<xref target="sec-security"/>).</t>

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

<t>The architecture considers three types of end hosts:</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 allow for making use of 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 inetreface). 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 connection. This encourages the deployment of new TCP extensions 
until they are supported by all servers.</t>

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

]]></artwork></figure>

<t>Transport converters can be operated by either the network operator 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 a transport connection that pass through a transport 
converter 
may follow a different path than the packets directly exchanged 
between
the Client and the Server. Deployments should minimise this 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 actiavted 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 transport 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, 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 (shown between brackets
in <xref target="fig-estab"/>). 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. <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 connection can also be established from the Internet towards a client via a transport converter. This is typically the case when the client embbeds a server (video server, for example).</t>

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

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

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

     -------------------->
            ACK
                                 -------------------->
                                          ACK

]]></artwork></figure>

<t>As shown in <xref target="fig-estab"/>, the Converter places its supplied information 
inside the handshake packets. This information is encoded in a way that separates 
this information from the user data that can also be carried inside the payload
of such packets (e.g., <xref target="RFC7413"/>).</t>

<t>With TCP, the Converter protocol places the
destination address and port number of the final Server in the payload of the SYN. 
The SYN+ACK packet returned by the Transport Converter to the Client contains
information that confirms the establishment of the connection between the Transport 
Converter and the final Server. It is important to note that the Transport Converter 
maintains two transport 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 final Server.</t>

<t>Any user data received by the Transport Converter over the upstream (resp. downstream) 
connection is relayed over the downstream (resp. upstream) connection to give 
to the Client the illusion of an end-to-end connection.</t>

<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. 
<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 [ NoMPC ]

     -------------------->
         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.</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 in the SYN+ACK packet sent 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 or by creating a subflow to the server directly. The one established via the transport converter can be closed.</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 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 SOCKS v5 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                       Server
     -------------------->
             SYN 
     <--------------------
           SYN+ACK
     -------------------->
          Version=5 
     <--------------------
           No Auth
     -------------------->
     Connect Server:Port            -------------------->
                                           SYN

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

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

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

<t>The converter protocol proposed in this document also relays data
between an upstream and a downstream connection, but there are important
differences with SOCKS v5.</t>

<t>A first difference is that the converter protocol leverages the TFO option <xref target="RFC7413"/>
to place all its control information inside the SYN and SYN+ACK packets. 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 takes the TCP extensions
explicitly into account. With 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 SOCKSv5 <xref target="RFC1928"/> nor the proposed SOCKS v6 <xref target="I-D.olteanu-intarea-socks-6"/>
provide such 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"/>. This is illustrated in<xref target="fig-mpestabrst"/>.</t>

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

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

                                 <--------------------
                                         RST
     <--------------------
       RST [ ... ]

]]></artwork></figure>

<t>These differences between SOCKS and the Converter protocol imply that
a Transport Converter cannot be implemented as a regular user-space application
like a SOCKS proxy. A Transport Converter needs to interact with the underlying
TCP implementation more closely than the regular socket APIs used by the SOCKS
proxy.</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 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 messages.</t>

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

<t>When a Client initiates a connection to a Transport Converter using the Converter
Protocol, it 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[
   +---------------+---------------+-------------------------------+
   |  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 bytestram 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="The TLV Messages">

<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 Converter connection. If two or more
copies of the same TLV are exchanged over a Converter connection, the associated
TCP connections MUST be closed.</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'>Length</ttcol>
      <ttcol align='left'>Description</ttcol>
      <c>1</c>
      <c>1</c>
      <c>Bootstrap TLV</c>
      <c>10</c>
      <c>Variable</c>
      <c>Connect TLV</c>
      <c>20</c>
      <c>Variable</c>
      <c>Extended TCP Header TLV</c>
      <c>21</c>
      <c>Variable</c>
      <c>Supported TCP Options TLV</c>
      <c>30</c>
      <c>Variable</c>
      <c>Error TLV</c>
</texttable>

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

<t>This TLV is used to request the Transport Converter to establish a 
connection towards the Server address
and port included in the TLV. The Server Address is always encoded
as an IPv6 address. IPv4 addresses are encoded using the 
IPv4-Mapped IPv6 Address format defined in <xref target="RFC4291"/>.
The optional TCP Options field is used to specify how some TCP Options 
are advertised by the Transport Converter
to the final destination. If this field is empty, then the Transport 
Converter uses the standard TCP options that correspond to its local 
policy.</t>

<figure title="The Connect TLV" anchor="fig-connect"><artwork><![CDATA[
   +---------------+---------------+-------------------------------+
   |     Type      |     Length    |          Server  Port         |
   +---------------+---------------+-------------------------------+
   |                                                               |
   |                         Server Address                        |
   |                                                               |
   |                                                               |
   +---------------------------------------------------------------+
   |                          TCP Options                          |
   |                              ...                              |
   +---------------------------------------------------------------+
]]></artwork></figure>

<t>The TCP Options field is a variable length field that carries
a list of TCP Option fields. 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 TCPOpt 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[
   +---------------------------------------------------------------+
   |  TCPOpt type  | TCPOpt Length | Value  (opt)  |  ....         |
   +---------------+---------------+-------------------------------+
   |                             ....                              |
   +---------------------------------------------------------------+
   |                               |         Padded with zeros     |
   +---------------------------------------------------------------+
]]></artwork></figure>

<t>If a Transport Converter receives a Connect TLV with an empty TCP Options
field, it shall place in the SYN that it sends towards the 
Server the TCP Options that it would have used according to its local
policy.</t>

<t>If a Transport Converter receives a Connect TLV with an non-empty TCP Options
field, it shall place in the SYN that it sends towards the destination
Server the TCP Options that it would have used according to its local
policies and the options that are listed in the TCP Options field. For the 
TCP Options that are listed without an optional value, it will 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 in the SYN sent to the Server. This feature is required to support TCP Fast Open as explained in
<xref target="sec-ex-tfo"/>.</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 return 
to the Client the extended TCP header that was returned by the Server in the
SYN+ACK packet. This TLV is only present if the Client has sent
a Connect TLV to request the establishment of a connection.</t>

<figure title="The Extended TCP Header TLV" anchor="fig-tcpheader"><artwork><![CDATA[
   +---------------+---------------+-------------------------------+
   |     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 will appear 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 placed in the SYN/ACK packet.</t>

<figure title="The Error TLV" anchor="fig-error"><artwork><![CDATA[
   +---------------+---------------+-------------------------------+
   |     Type      |     Length    |    Error       |  Value       |
   +---------------+---------------+-------------------------------+
]]></artwork></figure>

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

<t><list style="symbols">
  <t>Administratively prohibited (1). This error indicates that the Converter
refused to create a connection towards the specific Server Address
Destination or Port. The Value field is set to zero.</t>
  <t>Connection reset by final destination (2). This Error indicates that the final
destination responded with a RST packet. The Value field is set to zero.</t>
  <t>Destination unreachable (3). This Error indicates that an ICMP destination 
unreachable, port unreachable or network unreachable was received
by the Transport Converter. The Value field contains the Code 
field of the received ICMP message.</t>
  <t>Invalid Converter message (4). This Error indicates that the Transport
Converter received an unknown TLV. The Value field is set to the
type of the unknown TLV. If several unknown TLVs were received, only
one of them is reported in the error.</t>
  <t>Resource Exceeded (5). This Error indicates that the Transport Converter does 
not have enough resources to perform the Client request.</t>
</list></t>

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

<t><list style="symbols">
  <t>Unsupported TCP Option (128). 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>
</list></t>

<t><xref target="tab-error-types"/> summarises the different error messages.</t>

<texttable title="The different error types" anchor="tab-error-types">
      <ttcol align='left'>Error</ttcol>
      <ttcol align='left'>Description</ttcol>
      <c>1</c>
      <c>Administratively prohibited</c>
      <c>2</c>
      <c>Connection reset by final destination</c>
      <c>3</c>
      <c>Destination unreachable</c>
      <c>16</c>
      <c>Invalid Converter message</c>
      <c>32</c>
      <c>Resource Exceeded</c>
      <c>128</c>
      <c>Error TLV</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[
   +---------------+---------------+-------------------------------+
   |     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 Options TLV" anchor="fig-supported"><artwork><![CDATA[
   +---------------+---------------+-------------------------------+
   |     Type      |     Length    |           Reserved            |
   +---------------+---------------+-------------------------------+
   |     Kind #1   |     Kind #2   |           ...                 |
   +---------------+---------------+-------------------------------+   
   /                                                               /
   /                                                               /
   +---------------+---------------+-------------------------------+   
   |                               |     Kind #n    |   Zero       |
   +---------------------------------------------------------------+
]]></artwork></figure>

</section>
</section>
</section>
<section anchor="sec-examples" title="Examples">

<t>This section provides some examples of the utilisation of the Transport
Converter. We consider the following
network to illustrate the operation of the Converter protocol.</t>

<figure title="Simple scenario" anchor="fig-example"><artwork><![CDATA[
Client               Transport                 Server
                     Converter
  @c                     @t                       @s

]]></artwork></figure>

<section anchor="sec-bootstrap" title="Bootstrap">

<t>The Converter protocol is designed with the ability to leverage on the
utilisation of TCP Fast Open between the
Client and the Transport Converter. To be able to place data inside
the SYN packet that it sends, the Client first needs to obtain a
TFO cookie from the Transport Converter. This is achieved by 
establishing a TCP connection to the Transport Converter without
requesting the establishment of a connection towards a Server. This connection is established immediatley when a new Converter is configured to the client.</t>

<t>Note that the Converter may rely on local policies to decide whether it can service a given requesting client. That is, the Convert 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 atatcks such spoofing and SYN flood. Under such deployments, the use of TFO is not required.</t>

<t>To perform the bootstrap operation, the Client sends the following 
SYN packet :</t>

<t><list style="symbols">
  <t>source IP address: @c (one of the client's IP addresses)</t>
  <t>destination IP address: @t</t>
  <t>TCP Options : MSS, TFO (2 bytes), NOP, NOP</t>
  <t>Payload : empty</t>
</list></t>

<t>The Converter replies with the following SYN+ACK packet:</t>

<t><list style="symbols">
  <t>source IP address: @t</t>
  <t>destination IP address: @c</t>
  <t>TCP Options : MSS, TFO (including @tcookie), NOP, NOP</t>
  <t>Payload : empty</t>
</list></t>

<t>At this point, the Client has learned the TFO cookie (@tcookie) that needs
to be used fro subsequent exchanges with this Transport Converter. For the examples
in this section, we assume TFO cookies that contain 4 bytes of information.
Other cookie lengths are possible as per <xref target="RFC7413"/>.</t>

<t>The Client sends the third Ack to conclude the three-way handshake. 
It then sends in a Data packet the fixed header and the 
Bootstrap TLV to query the TCP options
that are supported by the Converter. This message spans 8 bytes (4 for the fixed
header and 4 for the Bootstrap TLV). The Converter replies with the converter fixed header 
and a TCP Options TLV that indicates the TCP extensions that it supports.</t>

<t>During the bootstrap phase, the client may register on the converter the set of its available IP addresses. Announcing these addresses will help the converter to place incoming multipath connections to the client.</t>

<t>The Client needs to recontact the Converter before the expiry of the TFO Cookie to refresh it or obtain a new one.</t>

<t>The TFO-cookie supplied by the Converter is inserted in subsequent messages as part of the Converter TLVs. As such, there is no ambiguity with TFO cookie that is supplied by the Client to the remote server; this second cookie is enclosed according to the procedure in <xref target="RFC7413"/>.</t>

</section>
<section anchor="sec-ex-mptcp" title="Multipath TCP">

<t>The MP_CAPABLE Option defined in <xref target="RFC6824"/> 
allows to negotiate the utilisation
of Multipath TCP. Consider a Client that uses the Transport Converter 
to create a connection on port 123 with a Server that
supports <xref target="RFC6824"/>.</t>

<t>For this, the Client sends the following SYN packet :</t>

<t><list style="symbols">
  <t>source IP address: @c</t>
  <t>destination IP address: @t</t>
  <t>TCP Options : MSS, TFO (@t cookie), MP_CAPABLE(key@c)</t>
  <t>Payload :
  <list style="symbols">
      <t>Converter Header, Total Length=7 32 bits words</t>
      <t>Connect :
      <list style="symbols">
          <t>Length=6</t>
          <t>Port=123</t>
          <t>Address: @s</t>
          <t>TCP Options:
          <list style="symbols">
              <t>TCPOpt type: 30 (Multipath TCP)</t>
              <t>TCPOpt Length: 2 (no value)</t>
              <t>Padding: zero (2 bytes)</t>
            </list></t>
        </list></t>
    </list></t>
</list></t>

<t>Upon reception of this packet, the Transport Converter creates a SYN
packet and sends it to the destination Server:</t>

<t><list style="symbols">
  <t>source IP address: @t</t>
  <t>destination IP address: @s</t>
  <t>TCP Options : MSS, MP_CAPABLE(key@ts)</t>
  <t>Payload : empty</t>
</list></t>

<t>The Server replies with the following SYN+ACK:</t>

<t><list style="symbols">
  <t>source IP address: @s</t>
  <t>destination IP address: @t</t>
  <t>TCP Options : MSS, MP_CAPABLE(key@ts,key@s)</t>
  <t>Payload : empty</t>
</list></t>

<t>The Transport Converter then confirms the establishment of the
connection to the Client with the following SYN+ACK:</t>

<t><list style="symbols">
  <t>source IP address: @t</t>
  <t>destination IP address: @c</t>
  <t>TCP Options : MSS, MP_CAPABLE(key@c,key@tc)</t>
  <t>Payload:
  <list style="symbols">
      <t>Converter Header, Total Length=8</t>
      <t>TCP Extended Header TLV:
      <list style="symbols">
          <t>Length=7</t>
          <t>Value: MSS, MP_CAPABLE(key@ts,key@s)</t>
        </list></t>
    </list></t>
</list></t>

<t>Upon reception of this packet, the Client has the confirmation that
the Multipath TCP connection has been established through the 
Transport Converter. By parsing the TCP Extended Header TLV, 
it detects that Server @s supports Multipath TCP and will thus be able to
bypass the Transport Converter for future connections towards this Server.</t>

<t>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 an MPTCP 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-ex-tfo" title="TCP Fast Open (TFO)">

<t>The TCP Fast Open (TFO) option is defined in <xref target="RFC7413"/>. In this section,
we show how a Client can use TFO with a remote Server through a
Transport Converter. We consider two TCP connections to this Server. The
Client has already received the cookie of the Transport Converter (@t cookie).</t>

<t>For the first connection, the Client sends the following SYN packet:</t>

<t><list style="symbols">
  <t>source IP address: @c</t>
  <t>destination IP address: @t</t>
  <t>TCP Options : MSS, TFO (@t cookie)</t>
  <t>Payload :
  <list style="symbols">
      <t>Converter Header, Total Length=8</t>
      <t>Connect:
      <list style="symbols">
          <t>Length=7</t>
          <t>Port=123</t>
          <t>Address: @s</t>
          <t>TCP Options:
          <list style="symbols">
              <t>TCPOpt type: 34 (TFO)</t>
              <t>TCPOpt Length: 2 (no value)</t>
              <t>Padding: zero (2 bytes)</t>
            </list></t>
        </list></t>
    </list></t>
</list></t>

<t>The TFO option of the SYN packet contains the cookie chosen by the Transport
Converter. The Transport Converter then issues the following SYN packet towards
the Server:</t>

<t><list style="symbols">
  <t>source IP address: @t</t>
  <t>destination IP address: @s</t>
  <t>TCP Options : MSS, TFO (empty), NOP, NOP</t>
  <t>Payload : empty</t>
</list></t>

<t>The Server replies with its own TFO cookie (@s cookie) in the SYN+ACK packet:</t>

<t><list style="symbols">
  <t>source IP address: @s</t>
  <t>destination IP address: @t</t>
  <t>TCP Options : MSS, TFO (@s cookie)</t>
  <t>Payload : empty</t>
</list></t>

<t>The Converter confirms the establishment of the TCP connection to the Client
by sending the following SYN+ACK packet:</t>

<t><list style="symbols">
  <t>source IP address: @t</t>
  <t>destination IP address: @c</t>
  <t>TCP Options : MSS, NOP, NOP</t>
  <t>Payload :
  <list style="symbols">
      <t>Converter Header, Total Length=8</t>
      <t>TCP Extended Header TLV:
      <list style="symbols">
          <t>Length=7</t>
          <t>Value: MSS, TFO (@s cookie)</t>
        </list></t>
      <t>some data</t>
    </list></t>
</list></t>

<t>The Client can extract the Server cookie from the TCP Extended
Header TLV and
initiate future connections to this Server as follows (assuming that
it prefers to establish it via the Transport Converter instead of
contacting directly the final destination).</t>

<t><list style="symbols">
  <t>source IP address: @c</t>
  <t>destination IP address: @t</t>
  <t>TCP Options : MSS, TFO (@t cookie)</t>
  <t>Payload :
  <list style="symbols">
      <t>Converter Header, Total Length=4</t>
      <t>Connect:
      <list style="symbols">
          <t>Length=8</t>
          <t>Port=123</t>
          <t>Address: @s</t>
          <t>TCP Options:
          <list style="symbols">
              <t>TCPOpt type: 34 (TFO)</t>
              <t>TCPOpt Length: 6 (value is @s cookie)</t>
              <t>Padding: zero (2 bytes)</t>
            </list></t>
        </list></t>
    </list></t>
</list></t>

<t>The Transport Converter then initiates the connection towards the
final destination by sending the following SYN packet:</t>

<t><list style="symbols">
  <t>source IP address: @t</t>
  <t>destination IP address: @s</t>
  <t>TCP Options : MSS, TFO (@s cookie), NOP, NOP</t>
  <t>Payload : some data</t>
</list></t>

<t>The Server verifies the TFO option and accepts the data in the SYN. It
replies with the following SYN+ACK packet:</t>

<t><list style="symbols">
  <t>source IP address: @s</t>
  <t>destination IP address: @t</t>
  <t>TCP Options : MSS, NOP, NOP</t>
  <t>Payload : more data</t>
</list></t>

<t>The Server confirms the establishment of the TCP connection to the Client
by sending the following SYN+ACK packet:</t>

<t><list style="symbols">
  <t>source IP address: @t</t>
  <t>destination IP address: @c</t>
  <t>TCP Options : MSS, NOP, NOP</t>
  <t>Payload :
  <list style="symbols">
      <t>Converter Header, Total Length=3</t>
      <t>Report:
      <list style="symbols">
          <t>Length=2</t>
          <t>Value: MSS, NOP, NOP</t>
        </list></t>
      <t>more data</t>
    </list></t>
</list></t>

<t>The Client has thus been able to use TFO with a remote Server through
the Transport Converter.</t>

</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 boostrap procedure
described in section <xref target="sec-bootstrap"/>. 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 endhost. 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">

<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>The Converter protocol is intended to be used in managed networks where endhosts
can be identified by their IP address. Thanks to the Bootstrap procedure 
described in section <xref target="sec-bootstrap"/>, 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>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.</t>

<t>Another possible risk are 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 attack,s the Transport Converter should first limit the number of 
pending requested 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>

</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 6 types of errors.</t>

<t><list style="symbols">
  <t>1: Administratively prohibited</t>
  <t>2: Connection reset by final destination</t>
  <t>3: Destination unreachable</t>
  <t>16: Invalid Converter message</t>
  <t>32: Resource Exceeded 
 -128: Error TLV</t>
</list></t>

</section>
<section anchor="conclusion" title="Conclusion">

<t>We have proposed the utilisation of Transport Converters to aid the deployment of
TCP extensions such as Multipath TCP. Compared with deployed solutions such as
SOCKS proxies, the Transport Converters provide several benefits. First, they do
not increase the connection establishment time. Second, they are compatible and
benefit from the TCP Fast Open extension. Third, clients benefit from the
Transport Converter when the Server does not support the required extension. 
Furthermore, they can easily detect when the Server supports the required
extension and thus bypass the Transport Converter to contact those Servers.</t>

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

<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>We would like to thank Bart Peirens, Raphael Bauduin and Anand Nandugudi
for their help in preparing this draft.</t>

<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>

</section>


  </middle>

  <back>

    <references title='Normative References'>





<reference  anchor='RFC0793' target='http://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='http://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='http://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='http://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>




    </references>

    <references title='Informative References'>





<reference  anchor='RFC1928' target='http://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='RFC3135' target='http://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='http://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='RFC7414' target='http://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='http://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='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='March' day='13' 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) [I-D.ietf-tcpinc-tcpeno].  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-06' />
<format type='TXT'
        target='http://www.ietf.org/internet-drafts/draft-ietf-tcpinc-tcpcrypt-06.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="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="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>

