diff options
Diffstat (limited to 'doc/rfc/rfc8803.txt')
| -rw-r--r-- | doc/rfc/rfc8803.txt | 2510 | 
1 files changed, 2510 insertions, 0 deletions
| diff --git a/doc/rfc/rfc8803.txt b/doc/rfc/rfc8803.txt new file mode 100644 index 0000000..cb1071c --- /dev/null +++ b/doc/rfc/rfc8803.txt @@ -0,0 +1,2510 @@ + + + + +Internet Engineering Task Force (IETF)               O. Bonaventure, Ed. +Request for Comments: 8803                                      Tessares +Category: Experimental                                 M. Boucadair, Ed. +ISSN: 2070-1721                                                   Orange +                                                           S. Gundavelli +                                                                   Cisco +                                                                  S. Seo +                                                           Korea Telecom +                                                              B. Hesmans +                                                                Tessares +                                                               July 2020 + + +                       0-RTT TCP Convert Protocol + +Abstract + +   This document specifies an application proxy, called Transport +   Converter, to assist the deployment of TCP extensions such as +   Multipath TCP.  A Transport Converter may provide conversion service +   for one or more TCP extensions.  The conversion service is provided +   by means of the 0-RTT TCP Convert Protocol (Convert). + +   This protocol provides 0-RTT (Zero Round-Trip Time) conversion +   service since no extra delay is induced by the protocol compared to +   connections that are not proxied.  Also, the Convert Protocol does +   not require any encapsulation (no tunnels whatsoever). + +   This specification assumes an explicit model, where the Transport +   Converter is explicitly configured on hosts.  As a sample +   applicability use case, this document specifies how the Convert +   Protocol applies for Multipath TCP. + +Status of This Memo + +   This document is not an Internet Standards Track specification; it is +   published for examination, experimental implementation, and +   evaluation. + +   This document defines an Experimental Protocol for the Internet +   community.  This document is a product of the Internet Engineering +   Task Force (IETF).  It represents the consensus of the IETF +   community.  It has received public review and has been approved for +   publication by the Internet Engineering Steering Group (IESG).  Not +   all documents approved by the IESG are candidates for any level of +   Internet Standard; see Section 2 of RFC 7841. + +   Information about the current status of this document, any errata, +   and how to provide feedback on it may be obtained at +   https://www.rfc-editor.org/info/rfc8803. + +Copyright Notice + +   Copyright (c) 2020 IETF Trust and the persons identified as the +   document authors.  All rights reserved. + +   This document is subject to BCP 78 and the IETF Trust's Legal +   Provisions Relating to IETF Documents +   (https://trustee.ietf.org/license-info) in effect on the date of +   publication of this document.  Please review these documents +   carefully, as they describe your rights and restrictions with respect +   to this document.  Code Components extracted from this document must +   include Simplified BSD License text as described in Section 4.e of +   the Trust Legal Provisions and are provided without warranty as +   described in the Simplified BSD License. + +Table of Contents + +   1.  Introduction +     1.1.  The Problem +     1.2.  Network-Assisted Connections: The Rationale +     1.3.  Applicability Scope +   2.  Conventions and Definitions +   3.  Differences with SOCKSv5 +   4.  Architecture and Behaviors +     4.1.  Functional Elements +     4.2.  Theory of Operation +     4.3.  Data Processing at the Transport Converter +     4.4.  Address Preservation vs. Address Sharing +       4.4.1.  Address Preservation +       4.4.2.  Address/Prefix Sharing +   5.  Sample Examples +     5.1.  Outgoing Converter-Assisted Multipath TCP Connections +     5.2.  Incoming Converter-Assisted Multipath TCP Connection +   6.  The Convert Protocol (Convert) +     6.1.  The Convert Fixed Header +     6.2.  Convert TLVs +       6.2.1.  Generic Convert TLV Format +       6.2.2.  Summary of Supported Convert TLVs +       6.2.3.  The Info TLV +       6.2.4.  Supported TCP Extensions TLV +       6.2.5.  Connect TLV +       6.2.6.  Extended TCP Header TLV +       6.2.7.  The Cookie TLV +       6.2.8.  Error TLV +   7.  Compatibility of Specific TCP Options with the Conversion +           Service +     7.1.  Base TCP Options +     7.2.  Window Scale (WS) +     7.3.  Selective Acknowledgments +     7.4.  Timestamp +     7.5.  Multipath TCP +     7.6.  TCP Fast Open +     7.7.  TCP-AO +   8.  Interactions with Middleboxes +   9.  Security Considerations +     9.1.  Privacy & Ingress Filtering +     9.2.  Authentication and Authorization Considerations +     9.3.  Denial of Service +     9.4.  Traffic Theft +     9.5.  Logging +   10. IANA Considerations +     10.1.  Convert Service Name +     10.2.  The Convert Protocol (Convert) Parameters +       10.2.1.  Convert Versions +       10.2.2.  Convert TLVs +       10.2.3.  Convert Error Messages +   11. References +     11.1.  Normative References +     11.2.  Informative References +   Appendix A.  Example Socket API Changes to Support the 0-RTT TCP +           Convert Protocol +     A.1.  Active Open (Client Side) +     A.2.  Passive Open (Converter Side) +   Acknowledgments +   Contributors +   Authors' Addresses + +1.  Introduction + +1.1.  The Problem + +   Transport protocols like TCP evolve regularly [RFC7414].  TCP has +   been improved in different ways.  Some improvements such as changing +   the initial window size [RFC6928] or modifying the congestion control +   scheme can be applied independently on Clients and Servers.  Other +   improvements such as Selective Acknowledgments [RFC2018] or large +   windows [RFC7323] require a new TCP option or changing 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 class of TCP extensions reveals +   that their deployment can require many years.  Fukuda reports in +   [Fukuda2011] results of a decade of measurements showing the +   deployment of Selective Acknowledgments, Window Scale, and TCP +   Timestamps.  [ANRW17] describes measurements showing that TCP Fast +   Open (TFO) [RFC7413] is still not widely deployed. + +   There are some situations where the transport stack used on Clients +   (or Servers) can be upgraded at a faster pace than the transport +   stack running on Servers (or Clients).  In those situations, Clients +   (or Servers) would typically want to benefit from the features of an +   improved transport protocol even if the Servers (or Clients) have not +   yet been upgraded.  Some assistance from the network to make use of +   these features is valuable.  For example, Performance Enhancing +   Proxies [RFC3135] and other service functions have been deployed as +   solutions to improve TCP performance over links with specific +   characteristics. + +   Recent examples of TCP extensions include Multipath TCP (MPTCP) +   [RFC8684] or tcpcrypt [RFC8548].  Those extensions provide features +   that are interesting for Clients such as wireless devices.  With +   Multipath TCP, those devices could seamlessly use Wireless Local Area +   Network (WLAN) and cellular networks for bonding purposes, faster +   hand-overs, or better resiliency.  Unfortunately, deploying those +   extensions on both a wide range of Clients and Servers remains +   difficult. + +   More recently, 5G bonding experimentation has been conducted into +   global range of the incumbent 4G (LTE) connectivity using newly +   devised Clients and a Multipath TCP proxy.  Even if the 5G and 4G +   bonding (that relies upon Multipath TCP) increases the bandwidth, it +   is also crucial to minimize latency entirely between end hosts +   regardless of whether intermediate nodes are inside or outside of the +   mobile core.  In order to handle Ultra-Reliable Low Latency +   Communication (URLLC) for the next-generation mobile network, +   Multipath TCP and its proxy mechanism such as the one used to provide +   Access Traffic Steering, Switching, and Splitting (ATSSS) must be +   optimized to reduce latency [TS23501]. + +1.2.  Network-Assisted Connections: The Rationale + +   This document specifies an application proxy called Transport +   Converter.  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 in particular.  A +   Transport Converter may provide conversion service for one or more +   TCP extensions.  Which TCP extensions are eligible for the conversion +   service is deployment specific.  The conversion service is provided +   by means of the 0-RTT TCP Convert Protocol (Convert), which is an +   application-layer protocol that uses a specific TCP port number on +   the Converter. + +   The Convert Protocol provides Zero Round-Trip Time (0-RTT) conversion +   service since no extra delay is induced by the protocol compared to +   connections that are not proxied.  Particularly, the Convert Protocol +   does not require extra signaling setup delays before making use of +   the conversion service.  The Convert Protocol does not require any +   encapsulation (no tunnels, whatsoever). + +   The Transport Converter adheres to the main steps drawn in Section 3 +   of [RFC1919].  In particular, a Transport Converter achieves the +   following: + +   *  Listening for Client sessions; + +   *  Receiving the address of the Server from the Client; + +   *  Setting up a session to the Server; + +   *  Relaying control messages and data between the Client and the +      Server; + +   *  Performing access controls according to local policies. + +   The main advantage of network-assisted conversion services is that +   they enable new TCP extensions to be used on a subset of the path +   between endpoints, which encourages the deployment of these +   extensions.  Furthermore, the Transport Converter allows the Client +   and the Server to directly negotiate TCP extensions for the sake of +   native support along the full path. + +   The Convert Protocol is a generic mechanism to provide 0-RTT +   conversion service.  As a sample applicability use case, this +   document specifies how the Convert Protocol applies for Multipath +   TCP.  It is out of scope of this document to provide a comprehensive +   list of all potential conversion services.  Applicability documents +   may be defined in the future. + +   This document does not assume that all the traffic is eligible for +   the network-assisted conversion service.  Only a subset of the +   traffic will be forwarded to a Transport Converter according to a set +   of policies.  These policies, and how they are communicated to +   endpoints, are out of scope.  Furthermore, it is possible to bypass +   the Transport Converter to connect directly to the Servers that +   already support the required TCP extension(s). + +   This document assumes an explicit model in which a Client is +   configured with one or a list of Transport Converters (statically or +   through protocols such as [DHC-CONVERTER]).  Configuration means are +   outside the scope of this document. + +   The use of a Transport Converter means that there is no end-to-end +   transport connection between the Client and Server.  This could +   potentially create problems in some scenarios such as those discussed +   in Section 4 of [RFC3135].  Some of these problems may not be +   applicable.  For example, a Transport Converter can inform a Client +   by means of Network Failure (65) or Destination Unreachable (97) +   error messages (Section 6.2.8) that it encounters a failure problem; +   the Client can react accordingly.  An endpoint, or its network +   administrator, can assess the benefit provided by the Transport +   Converter service versus the risk.  This is one reason why the +   Transport Converter functionality has to be explicitly requested by +   an endpoint. + +   This document is organized as follows: + +      Section 3 provides a brief overview of the differences between the +      well-known SOCKS protocol and the 0-RTT TCP Convert Protocol. + +      Section 4 provides a brief explanation of the operation of +      Transport Converters. + +      Section 5 includes a set of sample examples to illustrate the +      overall behavior. + +      Section 6 describes the Convert Protocol. + +      Section 7 discusses how Transport Converters can be used to +      support different TCP extensions. + +      Section 8 then discusses the interactions with middleboxes. + +      Section 9 focuses on security considerations. + +      Appendix A describes how a TCP stack would need to support the +      protocol described in this document. + +1.3.  Applicability Scope + +   The 0-RTT TCP Convert Protocol specified in this document MUST be +   used in a single administrative domain deployment model.  That is, +   the entity offering the connectivity service to a Client is also the +   entity that owns and operates the Transport Converter, with no +   transit over a third-party network. + +   Future deployment of Transport Converters by third parties MUST +   adhere to the mutual authentication requirements in Section 9.2 to +   prevent illegitimate traffic interception (Section 9.4) in +   particular. + +2.  Conventions and Definitions + +   The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", +   "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and +   "OPTIONAL" in this document are to be interpreted as described in +   BCP 14 [RFC2119] [RFC8174] when, and only when, they appear in all +   capitals, as shown here. + +3.  Differences with SOCKSv5 + +   Several IETF protocols provide proxy services, the closest to the +   0-RTT TCP Convert Protocol being the SOCKSv5 protocol [RFC1928]. +   This protocol is already used to deploy Multipath TCP in some +   cellular networks (Section 2.2 of [RFC8041]). + +   A SOCKS Client creates a connection to a SOCKS Proxy, exchanges +   authentication information, and indicates the IP address and port +   number of the target Server.  At this point, the SOCKS Proxy creates +   a connection towards the target Server and relays all data between +   the two proxied connections.  The operation of an implementation +   based on SOCKSv5 (without authentication) is illustrated in Figure 1. + +   Client                SOCKS Proxy               Server +      |                       |                       | +      | --------------------> |                       | +      |         SYN           |                       | +      | <-------------------- |                       | +      |       SYN+ACK         |                       | +      | --------------------> |                       | +      |         ACK           |                       | +      |                       |                       | +      | --------------------> |                       | +      |Version=5, Auth Methods|                       | +      | <-------------------- |                       | +      |       Method          |                       | +      | --------------------> |                       | +      |Auth Request (unless "No auth" method negotiated) +      | <-------------------- |                       | +      |     Auth Response     |                       | +      | --------------------> |                       | +      | Connect Server:Port   | --------------------> | +      |                       |          SYN          | +      |                       | <-------------------- | +      |                       |        SYN+ACK        | +      | <-------------------- |                       | +      |      Succeeded        |                       | +      | --------------------> |                       | +      |       Data1           |                       | +      |                       | --------------------> | +      |                       |         Data1         | +      |                       | <-------------------- | +      |                       |         Data2         | +      | <-------------------- |                       | +      |          Data2        |                       | +                            ... + +     Figure 1: Establishment of a TCP Connection through a SOCKS Proxy +                           without Authentication + +   When SOCKS is used, an "end-to-end" connection between a Client and a +   Server becomes a sequence of two TCP connections that are glued +   together on the SOCKS Proxy.  The SOCKS Client and Server exchange +   control information at the beginning of the bytestream on the Client- +   Proxy connection.  The SOCKS Proxy then creates the connection with +   the target Server and then glues the two connections together so that +   all bytes sent by the application (Client) to the SOCKS Proxy are +   relayed to the Server and vice versa. + +   The Convert Protocol is also used on TCP proxies that relay data +   between an upstream and a downstream connection, but there are +   important differences with SOCKSv5.  A first difference is that the +   0-RTT TCP Convert Protocol exchanges all the control information +   during the initial RTT.  This reduces the connection establishment +   delay compared to SOCKS, which requires two or more round-trip times +   before the establishment of the downstream connection towards the +   final destination.  In today's Internet, latency is an important +   metric, and various protocols have been tuned to reduce their latency +   [LOW-LATENCY].  A recently proposed extension to SOCKS leverages the +   TCP Fast Open (TFO) option [INTAREA-SOCKS] to reduce this delay. + +   A second difference is that the Convert Protocol explicitly takes the +   TCP extensions into account.  By using the Convert 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 Server supports the required TCP extension(s). +   Neither SOCKSv5 [RFC1928] nor the proposed SOCKSv6 [INTAREA-SOCKS] +   provide such a feature. + +   A third difference is that a Transport Converter will only confirm +   the establishment of the connection initiated by the Client provided +   that the downstream connection has already been 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 [RFC8305]. + +   A fourth difference is that the 0-RTT TCP Convert Protocol only +   allows the Client to specify the IP address/port number of the +   destination Server and not a DNS name.  We evaluated an alternate +   design that included the DNS name of the remote peer instead of its +   IP address as in SOCKS [RFC1928].  However, that design was not +   adopted because it induces both an extra load and increased delays on +   the Transport Converter to handle and manage DNS resolution requests. +   Note that the name resolution at the Converter may fail (e.g., +   private names discussed in Section 2.1 of [RFC6731]) or may not match +   the one that would be returned by a Client's resolution library +   (e.g., Section 2.2 of [RFC6731]). + +4.  Architecture and Behaviors + +4.1.  Functional Elements + +   The Convert Protocol considers three functional elements: + +   *  Clients + +   *  Transport Converters + +   *  Servers + +   A Transport Converter is a network function that proxies all data +   exchanged over one upstream connection to one downstream connection +   and vice versa (Figure 2).  Thus, the Transport Converter maintains +   state that associates one upstream connection to a corresponding +   downstream connection. + +   A connection can be initiated from both sides of the Transport +   Converter (External realm, Internal realm). + +                              | +                              : +                              | +                        +------------+ +   Client <- upstream ->| Transport  |<- downstream -> Server +            connection  | Converter  |   connection +                        +------------+ +                              | +               Internal realm : External realm +                              | + +     Figure 2: A Transport Converter Proxies Data between Pairs of TCP +                                Connections + +   "Client" refers to a software instance embedded on a host that can +   reach a Transport Converter in the internal realm.  The "Client" can +   initiate connections via a Transport Converter (referred to as +   outgoing connections).  Also, the "Client" can accept incoming +   connections via a Transport Converter (referred to as incoming +   connections). + +   A Transport Converter can be embedded in a standalone device or be +   activated as a service on a router.  How such a function is enabled +   is deployment specific. + +   The architecture assumes that new software will be installed on the +   Client hosts to interact with one or more Transport Converters. +   Furthermore, the architecture allows for making use of new TCP +   extensions even if those are not supported by a given Server. + +   A Client is configured, through means that are outside the scope of +   this document, with the names and/or addresses of one or more +   Transport Converters and the TCP extensions that they support.  The +   procedure for selecting a Transport Converter among a list of +   configured Transport Converters is outside the scope of this +   document. + +   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 widely supported, in particular, by Servers. + +   The architecture does not mandate anything on the Server side. + +   Similar to SOCKS, the architecture does not interfere with end-to-end +   TLS connections [RFC8446] between the Client and the Server +   (Figure 3).  In other words, end-to-end TLS is supported in the +   presence of a Converter. + +       Client             Transport                Server +          |               Converter                  | +          |                   |                      | +          /==========================================\ +         |            End-to-end TLS                  | +          \==========================================/ + +       * TLS messages exchanged between the Client +         and the Server are not shown. + +             Figure 3: End-to-end TLS via a Transport Converter + +   It is out of scope of this document to elaborate on specific +   considerations related to the use of TLS in the Client-Converter +   connection leg to exchange Convert messages (in addition to the end- +   to-end TLS connection).  In particular, (1) assessment of whether +   0-RTT data mode discussed in Section 2.3 of [RFC8446] is safe under +   replay and (2) specification of a profile for its use (Appendix E.5 +   of [RFC8446]) are out of scope. + +4.2.  Theory of Operation + +   At a high level, the objective of the Transport Converter is to allow +   the use a specific extension, e.g., Multipath TCP, on a subset of the +   path even if the peer does not support this extension.  This is +   illustrated in Figure 4 where the Client initiates a Multipath TCP +   connection with the Transport Converter (packets belonging to the +   Multipath TCP connection are shown with "===") while the Transport +   Converter uses a TCP connection with the Server. + +       Client             Transport                Server +          |               Converter                  | +          |                   |                      | +          |==================>|--------------------->| +          |                   |                      | +          |<==================|<---------------------| +          |                   |                      | +         Multipath TCP packets     TCP packets + +       Figure 4: An Example of 0-RTT Network-Assisted Outgoing MPTCP +                                 Connection + +   The packets belonging to a connection established 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. + +   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 (that is, the conversion service is +   used), the Client initiates a connection towards the Transport +   Converter and indicates the IP address and port number of the Server +   within 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 receipt of the confirmation that the Server agrees to +   establish the connection before confirming it to the Client. + +   The Client places the destination address and port number of the +   Server in the payload of the SYN sent to the Transport Converter to +   minimize connection establishment delays.  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 the one between the Transport +      Converter and the Server. + +   Any user data received by the Transport Converter over the upstream +   (or downstream) connection is proxied over the downstream (or +   upstream) connection. + +   Figure 5 illustrates the establishment of an outgoing TCP connection +   by a Client through a Transport Converter. + +      |  Note: The information shown between brackets in Figure 5 (and +      |  other figures in the document) refers to Convert Protocol +      |  messages described in Section 6. + +                           Transport +       Client              Converter              Server +          |                   |                      | +          |SYN [->Server:port]|         SYN          | +          |------------------>|--------------------->| +          |<------------------|<---------------------| +          |    SYN+ACK [ ]    |        SYN+ACK       | +          |        ...        |          ...         | + +      Figure 5: Establishment of an Outgoing TCP Connection through a +                            Transport Converter + +   The Client sends a SYN destined to the Transport Converter.  The +   payload of this SYN contains the address and port number of the +   Server.  The Transport Converter does not reply immediately to this +   SYN.  It first tries to create a TCP connection towards the target +   Server.  If this upstream 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 +   Server.  Also, a state entry is instantiated for this connection. +   This state entry is used by the Converter to handle subsequent +   messages belonging to the connection. + +   The connection can also be established from the Internet towards a +   Client via a Transport Converter (Figure 6).  This is typically the +   case when the Client hosts an application Server that listens to a +   specific port number.  When the Converter receives an incoming SYN +   from a remote host, it checks if it can provide the conversion +   service for the destination IP address and destination port number of +   that SYN.  The Transport Converter receives this SYN because it is, +   for example, on the path between the remote host and the Client or it +   provides address-sharing service for the Client (Section 2 of +   [RFC6269]).  If the check fails, the packet is silently ignored by +   the Converter.  If the check is successful, the Converter tries to +   initiate a TCP connection towards the Client from its own address and +   using its configured TCP options.  In the SYN that corresponds to +   this connection attempt, the Transport Convert inserts a TLV message +   that indicates the source address and port number of the remote host. +   A transport session entry is created by the Converter for this +   connection.  SYN+ACK and ACK will then be exchanged between the +   Client, the Converter, and remote host to confirm the establishment +   of the connection.  The Converter uses the transport session entry to +   proxy packets belonging to the connection. + +     Transport              Remote +       Client              Converter             Host (RH) +          |                   |                      | +          |SYN [<-RH IP@:port]|         SYN          | +          |<------------------|<---------------------| +          |------------------>|--------------------->| +          |    SYN+ACK [ ]    |        SYN+ACK       | +          |        ...        |          ...         | + +      Figure 6: Establishment of an Incoming TCP Connection through a +                            Transport Converter + +   Standard TCP (Section 3.4 of [RFC0793]) allows a SYN packet to carry +   data inside its payload but forbids the receiver from delivering it +   to the application until completion of the three-way-handshake.  To +   enable applications to exchange data in a TCP handshake, this +   specification follows an approach similar to TCP Fast Open [RFC7413] +   and thus, removes the constraint by allowing data in SYN packets to +   be delivered to the Transport Converter application. + +   As discussed in [RFC7413], such change to TCP semantics raises two +   issues.  First, duplicate SYNs can cause problems for applications +   that rely on TCP; whether or not a given application is affected +   depends on the details of that application protocol.  Second, TCP +   suffers from SYN flooding attacks [RFC4987].  TFO solves these two +   problems for applications that can tolerate replays by using the TCP +   Fast Open option that includes a cookie.  However, the utilization of +   this option consumes space in the limited TCP header.  Furthermore, +   there are situations, as noted in Section 7.3 of [RFC7413], where it +   is possible to accept the payload of SYN packets without creating +   additional security risks such as a network where addresses cannot be +   spoofed and the Transport Converter only serves a set of hosts that +   are identified by these addresses. + +   For these reasons, this specification does not mandate the use of the +   TCP Fast Open option when the Client sends a connection establishment +   packet towards a Transport Converter.  The Convert Protocol includes +   an optional Cookie TLV that provides similar protection as the TCP +   Fast Open option without consuming space in the TCP header. +   Furthermore, this design allows for the use of longer cookies than +   [RFC7413]. + +   If the downstream (or upstream) connection fails for some reason +   (excessive retransmissions, reception of an RST segment, etc.), then +   the Converter reacts by forcing the teardown of the upstream (or +   downstream) connection.  In particular, if an ICMP error message that +   indicates a hard error is received on the downstream connection, the +   Converter echoes the Code field of that ICMP message in a Destination +   Unreachable Error TLV (see Section 6.2.8) that it transmits to the +   Client.  Note that if an ICMP error message that indicates a soft +   error is received on the downstream connection, the Converter will +   retransmit the corresponding data until it is acknowledged or the +   connection times out.  A classification of ICMP soft and hard errors +   is provided in Table 1 of [RFC5461]. + +   The same reasoning applies when the upstream connection ends with an +   exchange of FIN segments.  In this case, the Converter will also +   terminate the downstream connection by using FIN segments.  If the +   downstream connection terminates with the exchange of FIN segments, +   the Converter should initiate a graceful termination of the upstream +   connection. + +4.3.  Data Processing at the Transport Converter + +   As mentioned in Section 4.2, the Transport Converter acts as a TCP +   proxy between the upstream connection (i.e., between the Client and +   the Transport Converter) and the downstream connection (i.e., between +   the Transport Converter and the Server). + +   The control messages (i.e., the Convert messages discussed in +   Section 6) establish state (called transport session entry) in the +   Transport Converter that will enable it to proxy between the two TCP +   connections. + +   The Transport Converter uses the transport session entry to proxy +   packets belonging to the connection.  An implementation example of a +   transport session entry for TCP connections is shown in Figure 7. + +                      (C,c) <--> (T,t), (S,s), Lifetime + +              Figure 7: An Example of Transport Session Entry + +   Where: + +   *  C and c are the source IP address and source port number used by +      the Client for the upstream connection. + +   *  S and s are the Server's IP address and port number. + +   *  T and t are the source IP address and source port number used by +      the Transport Converter to proxy the connection. + +   *  Lifetime is a timer that tracks the remaining lifetime of the +      entry as assigned by the Converter.  When the timer expires, the +      entry is deleted. + +   Clients send packets bound to connections eligible for the conversion +   service to the provisioned Transport Converter and destination port +   number.  This applies for both control messages and data.  Additional +   information is supplied by Clients to the Transport Converter by +   means of Convert messages as detailed in Section 6.  User data can be +   included in SYN or non-SYN messages.  User data is unambiguously +   distinguished from Convert TLVs by a Transport Converter owing to the +   Convert Fixed Header in the Convert messages (Section 6.1).  These +   Convert TLVs are destined to the Transport Convert and are, thus, +   removed by the Transport Converter when proxying between the two +   connections. + +   Upon receipt of a packet that belongs to an existing connection +   between a Client and the Transport Converter, the Converter proxies +   the user data to the Server using the information stored in the +   corresponding transport session entry.  For example, in reference to +   Figure 7, the Transport Converter proxies the data received from +   (C,c) downstream using (T,t) as source transport address and (S,s) as +   destination transport address. + +   A similar process happens for data sent from the Server.  The +   Converter acts as a TCP proxy and sends the data to the Client +   relying upon the information stored in a transport session entry. +   The Converter associates a lifetime with state entries used to bind +   an upstream connection with its downstream connection. + +   When Multipath TCP is used between the Client and the Transport +   Converter, the Converter maintains more state (e.g., information +   about the subflows) for each Multipath TCP connection.  The procedure +   described above continues to apply except that the Converter needs to +   manage the establishment/termination of subflows and schedule packets +   among the established ones.  These operations are part of the +   Multipath TCP implementation.  They are independent of the Convert +   Protocol that only processes the Convert messages in the beginning of +   the bytestream. + +   A Transport Converter may operate in address preservation mode (that +   is, the Converter does not rewrite the source IP address (i.e., +   C==T)) or address-sharing mode (that is, an address pool is shared +   among all Clients serviced by the Converter (i.e., C!=T)); refer to +   Section 4.4 for more details.  Which behavior to use by a Transport +   Converter is deployment specific.  If address-sharing mode is +   enabled, the Transport Converter MUST adhere to REQ-2 of [RFC6888], +   which implies a default "IP address pooling" behavior of "Paired" (as +   defined in Section 4.1 of [RFC4787]) MUST be supported.  This +   behavior is meant to avoid breaking applications that depend on the +   source address remaining constant. + +4.4.  Address Preservation vs. Address Sharing + +   The Transport Converter is provided with instructions about the +   behavior to adopt with regard to the processing of source addresses +   of outgoing packets.  The following subsections discuss two +   deployment models for illustration purposes.  It is out of the scope +   of this document to make a recommendation. + +4.4.1.  Address Preservation + +   In this model, the visible source IP address of a packet proxied by a +   Transport Converter to a Server is an IP address of the end host +   (Client).  No dedicated IP address pool is provisioned to the +   Transport Converter, but the Transport Converter is located on the +   path between the Client and the Server. + +   For Multipath TCP, the Transport Converter preserves the source IP +   address used by the Client when establishing the initial subflow. +   Data conveyed in secondary subflows will be proxied by the Transport +   Converter using the source IP address of the initial subflow.  An +   example of a proxied Multipath TCP connection with address +   preservation is shown in Figure 8. + +                                         Transport +          Client                        Converter          Server + +           @:C1,C2                        @:Tc                @:S +              ||                            |                  | +              |src:C1     SYN         dst:Tc|src:C1       dst:S| +              |-------MPC [->S:port]------->|-------SYN------->| +              ||                            |                  | +              ||dst:C1                src:Tc|dst:C1       src:S| +              |<---------SYN/ACK------------|<-----SYN/ACK-----| +              ||                            |                  | +              |src:C1                 dst:Tc|src:C1       dst:S| +              |------------ACK------------->|-------ACK------->| +              |                             |                  | +              |src:C2          ...    dst:Tc|       ...        | +              ||<-----Secondary Subflow---->|src:C1       dst:S| +              ||                            |-------data------>| +              |               ..            |    ...           | + +   Legend: +     Tc: IP address used by the Transport Converter on the internal +         realm. + +                 Figure 8: Example of Address Preservation + +   The Transport Converter must be on the forwarding path of incoming +   traffic.  Because the same (destination) IP address is used for both +   proxied and non-proxied connections, the Transport Converter should +   not drop incoming packets it intercepts if no matching entry is found +   for the packets.  Unless explicitly configured otherwise, such +   packets are forwarded according to the instructions of a local +   forwarding table. + +4.4.2.  Address/Prefix Sharing + +   A pool of global IPv4 addresses is provisioned to the Transport +   Converter along with possible instructions about the address-sharing +   ratio to apply (see Appendix B of [RFC6269]).  An address is thus +   shared among multiple Clients. + +   Likewise, rewriting the source IPv6 prefix [RFC6296] may be used to +   ease redirection of incoming IPv6 traffic towards the appropriate +   Transport Converter.  A pool of IPv6 prefixes is then provisioned to +   the Transport Converter for this purpose. + +   Adequate forwarding policies are enforced so that traffic destined to +   an address of such a pool is intercepted by the appropriate Transport +   Converter.  Unlike Section 4.4.1, the Transport Converter drops +   incoming packets that do not match an active transport session entry. + +   An example is shown in Figure 9. + +                                        Transport +         Client                         Converter          Server + +            @:C                        @:Tc|Te                @:S +             |                             |                  | +             |src:C                  dst:Tc|src:Te       dst:S| +             |-------SYN [->S:port]------->|-------SYN------->| +             |                             |                  | +             |dst:C                  src:Tc|dst:Te       src:S| +             |<---------SYN/ACK------------|<-----SYN/ACK-----| +             |                             |                  | +             |src:C                  dst:Tc|src:Te       dst:S| +             |------------ACK------------->|-------ACK------->| +             |                             |                  | +             |              ...            |    ...           | + +   Legend: +     Tc: IP address used by the Transport Converter on the internal +         realm. +     Te: IP address used by the Transport Converter on the external +         realm. + +                         Figure 9: Address Sharing + +5.  Sample Examples + +5.1.  Outgoing Converter-Assisted Multipath TCP Connections + +   As an example, let us consider how the Convert Protocol can help the +   deployment of Multipath TCP.  We assume that both the Client and the +   Transport Converter support Multipath TCP but consider two different +   cases depending on whether or not the Server supports Multipath TCP. + +   As a reminder, a Multipath TCP connection is created by placing the +   MP_CAPABLE (MPC) option in the SYN sent by the Client. + +   Figure 10 describes the operation of the Transport Converter if the +   Server does not support Multipath TCP. + +                           Transport +       Client              Converter              Server +          |SYN, MPC           |                      | +          |[->Server:port]    |         SYN, MPC     | +          |------------------>|--------------------->| +          |<------------------|<---------------------| +          |  SYN+ACK,MPC [.]  |      SYN+ACK         | +          |------------------>|--------------------->| +          |     ACK, MPC      |          ACK         | +          |        ...        |          ...         | + +      Figure 10: Establishment of a Multipath TCP Connection through a +         Transport Converter towards a Server That Does Not support +                               Multipath TCP + +   The Client tries to initiate a Multipath TCP connection by sending a +   SYN with the MP_CAPABLE option (MPC in Figure 10).  The SYN includes +   the address and port number of the target Server, that are extracted +   and used by the Transport Converter 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 +   extended TCP header received from the Server to the Client. + +   Note that, if the TCP connection is reset for some reason, the +   Converter tears down the Multipath TCP connection by transmitting an +   MP_FASTCLOSE.  Likewise, if the Multipath TCP connection ends with +   the transmission of DATA_FINs, the Converter terminates the TCP +   connection by using FIN segments.  As a side note, given that with +   Multipath TCP, RST only has the scope of the subflow and will only +   close the concerned subflow but not affect the remaining subflows, +   the Converter does not terminate the downstream TCP connection upon +   receipt of an RST over a Multipath subflow. + +   Figure 11 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.  This will enable the Client to bypass the +   Transport Converter for the subsequent Multipath TCP connections that +   it will initiate towards this Server. + +                           Transport +       Client              Converter              Server +          |SYN, MPC           |                      | +          |[->Server:port]    |         SYN, MPC     | +          |------------------>|--------------------->| +          |<------------------|<---------------------| +          |SYN+ACK, MPC       |      SYN+ACK, MPC    | +          |[MPC supported]    |                      | +          |------------------>|--------------------->| +          |     ACK, MPC      |        ACK, MPC      | +          |        ...        |          ...         | + +      Figure 11: Establishment of a Multipath TCP Connection through a +                 Converter towards an MPTCP-Capable Server + +5.2.  Incoming Converter-Assisted Multipath TCP Connection + +   An example of an incoming Converter-assisted Multipath TCP connection +   is depicted in Figure 12.  In order to support incoming connections +   from remote hosts, the Client may use the Port Control Protocol (PCP) +   [RFC6887] to instruct the Transport Converter to create dynamic +   mappings.  Those mappings will be used by the Transport Converter to +   intercept an incoming TCP connection destined to the Client and +   convert it into a Multipath TCP connection. + +   Typically, the Client sends a PCP request to the Converter asking to +   create an explicit TCP mapping for the internal IP address and +   internal port number.  The Converter accepts the request by creating +   a TCP mapping for the internal IP address, internal port number, +   external IP address, and external port number.  The external IP +   address, external port number, and assigned lifetime are returned +   back to the Client in the PCP response.  The external IP address and +   external port number will then be advertised by the Client (or the +   user) using an out-of-band mechanism so that remote hosts can +   initiate TCP connections to the Client via the Converter.  Note that +   the external and internal information may be the same. + +   Then, when the Converter receives an incoming SYN, it checks its +   mapping table to verify if there is an active mapping matching the +   destination IP address and destination port of that SYN.  If no entry +   is found, the Converter silently ignores the message.  If an entry is +   found, the Converter inserts an MP_CAPABLE option and Connect TLV in +   the SYN packet, and rewrites the source IP address to one of its IP +   addresses and, eventually, the destination IP address and port number +   in accordance with the information stored in the mapping.  SYN+ACK +   and ACK will then be exchanged between the Client and the Converter +   to confirm the establishment of the initial subflow.  The Client can +   add new subflows following normal Multipath TCP procedures. + +                           Transport             Remote +       Client              Converter              Host +         |                     |                    | +         |<--------------------|<-------------------| +         |SYN, MPC             |         SYN        | +         |[Remote Host:port]   |                    | +         |-------------------->|------------------->| +         |      SYN+ACK, MPC   |       SYN+ACK      | +         |<--------------------|<-------------------| +         |       ACK, MPC      |           ACK      | +         |        ...          |          ...       | + +      Figure 12: Establishment of an Incoming Multipath TCP Connection +                       through a Transport Converter + +   It is out of scope of this document to define specific Convert TLVs +   to manage incoming connections (that is, TLVs that mimic PCP +   messages).  These TLVs can be defined in a separate document. + +6.  The Convert Protocol (Convert) + +   This section defines the Convert Protocol (Convert, for short) +   messages that are exchanged between a Client and a Transport +   Converter. + +   The Transport Converter listens on a specific TCP port number for +   Convert messages from Clients.  That port number is configured by an +   administrator.  Absent any policy, the Transport Converter SHOULD +   silently ignore SYNs with no Convert TLVs. + +   Convert messages may appear only in SYN, SYN+ACK, or ACK. + +   Convert messages MUST be included as the first bytes of the +   bytestream.  All Convert messages start with a fixed header that is +   32 bits long (Section 6.1) followed by one or more Convert TLVs +   (Type, Length, Value) (Section 6.2). + +   If the initial SYN message contains user data in its payload (e.g., +   see [RFC7413]), that data MUST be placed right after the Convert TLVs +   when generating the SYN. + +   The protocol can be extended by defining new TLVs or bumping the +   version number if a different message format is needed.  If a future +   version is defined but with a different message format, the version +   negotiation procedure defined in Section 6.2.8 (see "Unsupported +   Version") is meant to agree on a version that is supported by both +   peers. + +      |  Implementation note 1: Several implementers expressed concerns +      |  about the use of TFO.  As a reminder, the Fast Open Cookie +      |  protects from some attack scenarios that affect open servers +      |  like web servers.  The Convert Protocol is different and, as +      |  discussed in [RFC7413], there are different ways to protect +      |  from such attacks.  Instead of using a Fast Open Cookie inside +      |  the TCP options, which consumes precious space in the extended +      |  TCP header, the Convert Protocol supports the utilization of a +      |  Cookie that is placed in the SYN payload.  This provides the +      |  same level of protection as a Fast Open Cookie in environments +      |  were such protection is required. +      |   +      |  Implementation note 2: Error messages are not included in RST +      |  but sent in the bytestream.  Implementers have indicated that +      |  processing RST on Clients was difficult on some platforms. +      |  This design simplifies Client implementations. + +6.1.  The Convert Fixed Header + +   The Convert Protocol uses a fixed header that is 32 bits long sent by +   both the Client and the Transport Converter over each established +   connection.  This header indicates both the version of the protocol +   used and the length of the Convert message. + +   The Client and the Transport Converter MUST send the fixed-sized +   header, shown in Figure 13, as the first four bytes of the +   bytestream. + +                        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 |          Magic Number         | +   +---------------+---------------+-------------------------------+ + +                    Figure 13: The Convert Fixed Header + +   The version is encoded as an 8-bit unsigned integer value.  This +   document specifies version 1.  Version 0 is reserved by this document +   and MUST NOT be used. + +      |  Note: Early versions of this specification don't use a +      |  dedicated port number but only rely upon the IP address of the +      |  Converter.  Having a bit set in the Version field together with +      |  the Total Length field avoids misinterpreting data in a SYN as +      |  Convert TLVs.  Since the design was updated to use a specific +      |  service port, that constraint was relaxed.  Version 0 would +      |  work, but given existing implementations already use Version 1, +      |  the use of Version 0 is maintained as reserved. + +   The Total Length is the number of 32-bit words, including the header, +   of the bytestream that are consumed by the Convert messages.  Since +   Total Length is also an 8-bit 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 a +   header with such a total length. + +   The Magic Number field MUST be set to 0x2263.  This field is meant to +   further strengthen the protocol to unambiguously distinguish any data +   supplied by an application from Convert TLVs. + +   The Total Length field unambiguously marks the number of 32-bit words +   that carry Convert TLVs in the beginning of the bytestream. + +6.2.  Convert TLVs + +6.2.1.  Generic Convert TLV Format + +   The Convert Protocol uses variable length messages that are encoded +   using the generic TLV format depicted in Figure 14. + +   The length of all TLVs used by the Convert Protocol is always a +   multiple of four bytes.  All TLVs are aligned on 32-bit boundaries. +   All TLV fields are encoded using the network byte order. + +                           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    |             Value  ...        | +      +---------------+---------------+-------------------------------+ +      //              ...   (optional) Value                         // +      +---------------------------------------------------------------+ + +                   Figure 14: Convert Generic TLV Format + +   The Length field covers Type, Length, and Value fields.  It is +   expressed in units of 32-bit words.  If necessary, Value MUST be +   padded with zeroes so that the length of the TLV is a multiple of 32 +   bits. + +   A given TLV MUST only appear once on a connection.  If a Client +   receives two or more instances of the same TLV over a Convert +   connection, it MUST reset the associated TCP connection.  If a +   Converter receives two or more instances of the same TLV over a +   Convert connection, it MUST return a Malformed Message Error TLV and +   close the associated TCP connection. + +6.2.2.  Summary of Supported Convert TLVs + +   This document specifies the following Convert TLVs: + +         +======+======+==========+==============================+ +         | Type | Hex  | Length   | Description                  | +         +======+======+==========+==============================+ +         | 1    | 0x1  | 1        | Info TLV                     | +         +------+------+----------+------------------------------+ +         | 10   | 0xA  | Variable | Connect TLV                  | +         +------+------+----------+------------------------------+ +         | 20   | 0x14 | Variable | Extended TCP Header TLV      | +         +------+------+----------+------------------------------+ +         | 21   | 0x15 | Variable | Supported TCP Extensions TLV | +         +------+------+----------+------------------------------+ +         | 22   | 0x16 | Variable | Cookie TLV                   | +         +------+------+----------+------------------------------+ +         | 30   | 0x1E | Variable | Error TLV                    | +         +------+------+----------+------------------------------+ + +               Table 1: The TLVs Used by the Convert Protocol + +   Type 0x0 is a reserved value.  If a Client receives a TLV of type +   0x0, it MUST reset the associated TCP connection.  If a Converter +   receives a TLV of type 0x0, it MUST return an Unsupported Message +   Error TLV and close the associated TCP connection. + +   The Client typically sends, in the first connection it established +   with a Transport Converter, the Info TLV (Section 6.2.3) to learn its +   capabilities.  Assuming the Client is authorized to invoke the +   Transport Converter, the latter replies with the Supported TCP +   Extensions TLV (Section 6.2.4). + +   The Client can request the establishment of connections to Servers by +   using the Connect TLV (Section 6.2.5).  If the connection can be +   established with the final Server, the Transport Converter replies +   with the Extended TCP Header TLV (Section 6.2.6).  If not, the +   Transport Converter MUST return an Error TLV (Section 6.2.8) and then +   close the connection.  The Transport Converter MUST NOT send an RST +   immediately after the detection of an error to let the Error TLV +   reach the Client.  As explained later, the Client will send an RST +   regardless upon reception of the Error TLV. + +6.2.3.  The Info TLV + +   The Info TLV (Figure 15) is an optional TLV that can be 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.  Assuming a Client is entitled to invoke the Transport +   Converter, the latter replies with the Supported TCP Extensions TLV +   described in Section 6.2.4. + +                        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=0x1  |     Length    |             Zero              | +   +---------------+---------------+-------------------------------+ + +                          Figure 15: The Info TLV + +6.2.4.  Supported TCP Extensions TLV + +   The Supported TCP Extensions TLV (Figure 16) is used by a Transport +   Converter to announce the TCP options for which it provides a +   conversion service.  A Transport Converter SHOULD include in this +   list the TCP options that it supports in outgoing SYNs. + +   Each supported TCP option is encoded with its TCP option Kind listed +   in the "Transmission Control Protocol (TCP) Parameters" registry +   maintained by IANA [IANA-CONVERT].  The Unassigned field MUST be set +   to zero by the Transport Converter and ignored by the Client. + +                         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=0x15 |     Length    |           Unassigned          | +    +---------------+---------------+-------------------------------+ +    |     Kind #1   |     Kind #2   |           ...                 | +    +---------------+---------------+-------------------------------+ +    /                              ...                              / +    /                                                               / +    +---------------------------------------------------------------+ + +                Figure 16: The Supported TCP Extensions TLV + +   TCP option Kinds 1 and 2 defined in [RFC0793] are supported by all +   TCP implementations and thus, MUST NOT appear in this list. + +   The list of Supported TCP Extensions is padded with 0 to end on a +   32-bit boundary. + +   For example, if the Transport Converter supports Multipath TCP, +   Kind=30 will be present in the Supported TCP Extensions TLV that it +   returns in response to the Info TLV. + +6.2.5.  Connect TLV + +   The Connect TLV (Figure 17) is used to request the establishment of a +   connection via a Transport Converter.  This connection can be from or +   to a Client. + +   The Remote Peer Port and Remote Peer IP Address fields contain the +   destination port number and IP address of the Server, for outgoing +   connections.  For incoming connections destined to a Client serviced +   via a Transport Converter, these fields convey the source port number +   and IP address of the SYN packet received by the Transport Converter +   from the Server. + +   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 [RFC4291].  Further, the Remote Peer IP Address field MUST +   NOT include multicast, broadcast, or host loopback addresses +   [RFC6890].  If a Converter receives a Connect TLV with such invalid +   addresses, it MUST reply with a Malformed Message Error TLV and close +   the associated TCP connection. + +   We distinguish two types of Connect TLV based on their length: (1) +   the Base Connect TLV has a length set to 5 (i.e., 20 bytes) and +   contains a remote address and a remote port (Figure 17), and (2) the +   Extended Connect TLV spans more than 20 bytes and also includes the +   optional TCP Options field (Figure 18).  This field is used to +   request the advertisement of specific TCP options to the Server. + +                         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=0xA  |     Length    |      Remote Peer Port         | +    +---------------+---------------+-------------------------------+ +    |                                                               | +    |         Remote Peer IP Address (128 bits)                     | +    |                                                               | +    |                                                               | +    +---------------------------------------------------------------+ + +                      Figure 17: The Base Connect TLV + +                         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=0xA  |     Length    |      Remote Peer Port         | +    +---------------+---------------+-------------------------------+ +    |                                                               | +    |         Remote Peer IP Address (128 bits)                     | +    |                                                               | +    |                                                               | +    +---------------------------------------------------------------+ +    /                          TCP Options (Variable)               / +    /                              ...                              / +    +---------------------------------------------------------------+ + +                    Figure 18: The Extended Connect TLV + +   The TCP Options field is a variable length field that carries a list +   of TCP option fields (Figure 19).  Each TCP option field is encoded +   as a block of 2+n bytes where the first byte is the TCP option Kind +   and the second byte is the length of the TCP option as specified in +   [RFC0793].  The minimum value for the TCP option Length is 2.  The +   TCP options that do not include a length sub-field, i.e., option +   types 0 (EOL) and 1 (NOP) defined in [RFC0793] MUST NOT 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 2 indicates the absence of the Value field.  The TCP options field +   always ends on a 32-bit boundary after being padded with zeros. + +                        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 kind  | TCPOpt Length | Value  (opt)  |  ....         | +    +---------------+---------------+---------------+---------------+ +    |                             ....                              | +    +---------------------------------------------------------------+ +    |                              ...                              | +    +---------------------------------------------------------------+ + +                      Figure 19: The TCP Options Field + +   Upon reception of a Base Connect TLV, and absent any policy (e.g., +   rate-limit) or resource exhaustion conditions, a Transport Converter +   attempts to establish a connection to the address and port that it +   contains.  The Transport Converter MUST use by default the TCP +   options that correspond to its local policy to establish this +   connection. + +   Upon reception of an Extended Connect TLV, a Transport Converter +   first checks whether or not it supports the TCP Options listed in the +   TCP Options field.  If not, it returns an error TLV set to +   "Unsupported TCP Option" (Section 6.2.8).  If the above check +   succeeded, and absent any rate-limit policy or resource exhaustion +   conditions, a Transport Converter MUST attempt to establish a +   connection to the address and port that it contains.  It MUST include +   in the SYN that it sends to the Server the options listed in the TCP +   Options subfield and the TCP options that it would have used +   according to its local policies.  For the TCP options that are +   included in the TCP Options field without an optional value, the +   Transport Converter MUST generate its own value.  For the TCP options +   that are included in the TCP Options field with an optional value, it +   MUST copy the entire option in the SYN sent to the remote Server. +   This procedure is designed with TFO in mind.  Particularly, this +   procedure allows to successfully exchange a Fast Open Cookie between +   the Client and the Server.  See Section 7 for a detailed discussion +   of the different types of TCP options. + +   The Transport Converter may refuse a Connect TLV request for various +   reasons (e.g., authorization failed, out of resources, invalid +   address type, or unsupported TCP option).  An error message +   indicating the encountered error is returned to the requesting Client +   (Section 6.2.8).  In order to prevent denial-of-service attacks, +   error messages sent to a Client SHOULD be rate-limited. + +6.2.6.  Extended TCP Header TLV + +   The Extended TCP Header TLV (Figure 20) is used by the Transport +   Converter to return to the Client the TCP options that were returned +   by the Server in the SYN+ACK packet.  A Transport Converter MUST +   return this TLV if the Client sent an Extended Connect TLV and the +   connection was accepted by the Server. + +                         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=0x14 |     Length    |           Unassigned          | +    +---------------+---------------+-------------------------------+ +    /               Returned Extended TCP header                    / +    /                              ...                              / +    +---------------------------------------------------------------+ + +                   Figure 20: The Extended TCP Header TLV + +   The Returned Extended TCP header field is a copy of the TCP Options +   that were included in the SYN+ACK received by the Transport +   Converter. + +   The Unassigned field MUST be set to zero by the sender and ignored by +   the receiver. + +6.2.7.  The Cookie TLV + +   The Cookie TLV (Figure 21) is an optional TLV that is similar to the +   TCP Fast Open Cookie [RFC7413].  A Transport Converter may want to +   verify that a Client can receive the packets that it sends to prevent +   attacks from spoofed addresses.  This verification can be done by +   using a Cookie that is bound to, for example, the IP address(es) of +   the Client.  This Cookie can be configured on the Client by means +   that are outside of this document or provided by the Transport +   Converter. + +   A Transport Converter that has been configured to use the optional +   Cookie TLV MUST verify the presence of this TLV in the payload of the +   received SYN.  If this TLV is present, the Transport Converter MUST +   validate the Cookie by means similar to those in Section 4.1.2 of +   [RFC7413] (i.e., IsCookieValid).  If the Cookie is valid, the +   connection establishment procedure can continue.  Otherwise, the +   Transport Converter MUST return an Error TLV set to "Not Authorized" +   and close the connection. + +   If the received SYN did not contain a Cookie TLV, and cookie +   validation is required, the Transport Converter MAY compute a Cookie +   bound to this Client address.  In such case, the Transport Converter +   MUST return an Error TLV set to "Missing Cookie" and the computed +   Cookie and close the connection.  The Client will react to this error +   by first issuing a reset to terminate the connection.  It also stores +   the received Cookie in its cache and attempts to reestablish a new +   connection to the Transport Converter that includes the Cookie TLV. + +   The format of the Cookie TLV is shown in Figure 21. + +                         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=0x16 |     Length    |             Zero              | +    +---------------+---------------+-------------------------------+ +    /                        Opaque  Cookie                         / +    /                              ...                              / +    +---------------------------------------------------------------+ + +                         Figure 21: The Cookie TLV + +6.2.8.  Error TLV + +   The Error TLV (Figure 22) is meant to provide information about some +   errors that occurred during the processing of a Convert message. +   This TLV has a variable length.  Upon reception of an Error TLV, a +   Client MUST reset the associated connection. + +   An Error TLV can be included in the SYN+ACK or an ACK. + +                         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=0x1E |     Length    |    Error Code  |  Value       | +    +---------------+---------------+----------------+--------------+ +    //              ...   (optional) Value                         // +    +---------------------------------------------------------------+ + +                          Figure 22: The Error TLV + +   Different types of errors can occur while processing Convert +   messages.  Each error is identified by an Error Code represented as +   an unsigned integer.  Four classes of error codes are defined: + +   Message validation and processing errors (0-31 range): +      Returned upon reception of an invalid message (including valid +      messages but with invalid or unknown TLVs). + +   Client-side errors (32-63 range): +      The Client sent a request that could not be accepted by the +      Transport Converter (e.g., unsupported operation). + +   Converter-side errors (64-95 range): +      Problems encountered on the Transport Converter (e.g., lack of +      resources) that prevent it from fulfilling the Client's request. + +   Errors caused by the destination Server (96-127 range): +      The final destination could not be reached or it replied with a +      reset. + +   The following error codes are defined in this document: + +   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 peer (e.g., Transport +      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 peer. +      When multiple versions are supported by the peer, it includes the +      list of supported versions in the Value field; each version is +      encoded in 8 bits.  The list of supported versions MUST be padded +      with zeros to end on a 32-bit boundary. + +      Upon receipt of this error code, the remote peer (e.g., Client) +      checks whether it supports one of the versions returned by the +      peer.  The highest commonly supported version number MUST be used +      by the remote peer in subsequent exchanges with the peer. + +   Malformed Message (1): +      This error code is sent to indicate that a message received from a +      peer cannot be successfully parsed and validated. + +      Typically, this error code is sent by the Transport Converter if +      it receives a Connect TLV enclosing a multicast, broadcast, or +      loopback IP address. + +      To ease troubleshooting, the Value field MUST echo the received +      message using the format depicted in Figure 23.  This format +      allows keeping the original alignment of the message that +      triggered the error. + +                            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=0x1E |     Length    |    Error Code  |  Zeros       | +       +---------------+---------------+----------------+--------------+ +       //        Echo the message that triggered the error            // +       +---------------------------------------------------------------+ + +               Figure 23: Error TLV to Ease Message Correlation + +   Unsupported Message (2): +      This error code is sent to indicate that a message type received +      from a Client is not supported. + +      To ease troubleshooting, the Value field MUST echo the received +      message using the format shown in Figure 23. + +   Missing Cookie (3): +      If a Transport Converter requires the utilization of Cookies to +      prevent spoofing attacks and a Cookie TLV was not included in the +      Convert message, the Transport Converter MUST return this error to +      the requesting Client only if it computes a cookie for this +      Client.  The first byte of the Value field MUST be set to zero and +      the remaining bytes of the Error TLV contain the Cookie computed +      by the Transport Converter for this Client. + +      A Client that receives this error code SHOULD cache the received +      Cookie and include it in subsequent Convert messages sent to that +      Transport Converter. + +   Not Authorized (32): +      This error code indicates that the Transport Converter refused to +      create a connection because of a lack of authorization (e.g., +      administratively prohibited, authorization failure, or invalid +      Cookie TLV).  The Value field MUST be set to zero. + +      This error code MUST be sent by the Transport Converter when a +      request cannot be successfully processed because the authorization +      failed. + +   Unsupported TCP Option (33): +      A TCP option that the Client requested to advertise to the final +      Server cannot be safely used. + +      The Value field is set to the type of the unsupported TCP option. +      If several unsupported TCP options were specified in the Connect +      TLV, then the list of unsupported TCP options is returned.  The +      list of unsupported TCP options MUST be padded with zeros to end +      on a 32-bit boundary. + +   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 Transport Converter when it does +      not have sufficient resources to handle a new connection.  The +      Transport Converter may indicate in the Value field the suggested +      delay (in seconds) that the Client SHOULD wait before soliciting +      the Transport Converter for a new proxied connection.  A Value of +      zero corresponds to a default delay of at least 30 seconds. + +   Network Failure (65): +      This error indicates that the Transport Converter is experiencing +      a network failure to proxy the request. + +      The Transport Converter MUST send this error code when it +      experiences forwarding issues to proxy a connection.  The +      Transport Converter may indicate in the Value field the suggested +      delay (in seconds) that the Client SHOULD wait before soliciting +      the Transport Converter for a new proxied connection.  A Value of +      zero corresponds to a default delay of at least 30 seconds. + +   Connection Reset (96): +      This error indicates that the final destination responded with an +      RST segment.  The Value field MUST be set to zero. + +   Destination Unreachable (97): +      This error indicates that an ICMP message indicating a hard error +      (e.g., destination unreachable, port unreachable, or network +      unreachable) was received by the Transport Converter.  The Value +      field MUST echo the Code field of the received ICMP message. + +      As a reminder, TCP implementations are supposed to act on an ICMP +      error message passed up from the IP layer, directing it to the +      connection that triggered the error using the demultiplexing +      information included in the payload of that ICMP message.  Such a +      demultiplexing issue does not apply for handling the "Destination +      Unreachable" Error TLV because the error is sent in-band.  For +      this reason, the payload of the ICMP message is not echoed in the +      Destination Unreachable Error TLV. + +   Table 2 summarizes the different error codes. + +                +=======+======+=========================+ +                | Error | Hex  | Description             | +                +=======+======+=========================+ +                | 0     | 0x00 | Unsupported Version     | +                +-------+------+-------------------------+ +                | 1     | 0x01 | Malformed Message       | +                +-------+------+-------------------------+ +                | 2     | 0x02 | Unsupported Message     | +                +-------+------+-------------------------+ +                | 3     | 0x03 | Missing Cookie          | +                +-------+------+-------------------------+ +                | 32    | 0x20 | Not Authorized          | +                +-------+------+-------------------------+ +                | 33    | 0x21 | Unsupported TCP Option  | +                +-------+------+-------------------------+ +                | 64    | 0x40 | Resource Exceeded       | +                +-------+------+-------------------------+ +                | 65    | 0x41 | Network Failure         | +                +-------+------+-------------------------+ +                | 96    | 0x60 | Connection Reset        | +                +-------+------+-------------------------+ +                | 97    | 0x61 | Destination Unreachable | +                +-------+------+-------------------------+ + +                      Table 2: Convert Error Values + +7.  Compatibility of Specific TCP Options with the Conversion Service + +   In this section, we discuss how several deployed Standards Track TCP +   options can be supported through the Convert Protocol.  The other TCP +   options will be discussed in other documents. + +7.1.  Base TCP Options + +   Three TCP options were initially defined in [RFC0793]: End-of-Option +   List (Kind=0), No-Operation (Kind=1), and Maximum Segment Size +   (Kind=2).  The first two options are mainly used to pad the TCP +   header.  There is no reason for a Client to request a Transport +   Converter to specifically send these options towards the final +   destination. + +   The Maximum Segment Size option (Kind=2) is used by a host to +   indicate the largest segment that it can receive over each +   connection.  This value is a function of the stack that terminates +   the TCP connection.  There is no reason for a Client to request a +   Transport Converter to advertise a specific Maximum Segment Size +   (MSS) value to a remote Server. + +   A Transport Converter MUST ignore options with Kind=0, 1, or 2 if +   they appear in a Connect TLV.  It MUST NOT announce them in a +   Supported TCP Extensions TLV. + +7.2.  Window Scale (WS) + +   The Window Scale (WS) option (Kind=3) is defined in [RFC7323].  As +   for the MSS option, the window scale factor that is used for a +   connection strongly depends on the TCP stack that handles the +   connection.  When a Transport Converter opens a TCP connection +   towards a remote Server on behalf of a Client, it SHOULD use a WS +   option with a scaling factor that corresponds to the configuration of +   its stack.  A local configuration MAY allow for a WS option in the +   proxied message to be a function of the scaling factor of the +   incoming connection. + +   From a deployment viewpoint, there is no benefit in enabling a Client +   of a Transport Converter to specifically request the utilization of +   the WS option (Kind=3) with a specific scaling factor towards a +   remote Server.  For this reason, a Transport Converter MUST ignore +   option Kind=3 if it appears in a Connect TLV.  The Transport +   Converter MUST NOT announce a WS option (Kind=3) in a Supported TCP +   Extensions TLV. + +7.3.  Selective Acknowledgments + +   Two distinct TCP options were defined to support Selective +   Acknowledgment (SACK) in [RFC2018].  This first one, SACK-Permitted +   (Kind=4), is used to negotiate the utilization of Selective +   Acknowledgments during the three-way handshake.  The second one, SACK +   (Kind=5), carries the Selective Acknowledgments inside regular +   segments. + +   The SACK-Permitted option (Kind=4) MAY be advertised by a Transport +   Converter in the Supported TCP Extensions TLV.  Clients connected to +   this Transport Converter MAY include the SACK-Permitted option in the +   Connect TLV. + +   The SACK option (Kind=5) cannot be used during the three-way +   handshake.  For this reason, a Transport Converter MUST ignore option +   Kind=5 if it appears in a Connect TLV.  It MUST NOT announce it in a +   TCP Supported Extensions TLV. + +7.4.  Timestamp + +   The Timestamp option [RFC7323] can be used during the three-way +   handshake to negotiate the utilization of timestamps during the TCP +   connection.  It is notably used to improve round-trip-time +   estimations and to provide Protection Against Wrapped Sequences +   (PAWS).  As for the WS option, the timestamps are a property of a +   connection and there is limited benefit in enabling a Client to +   request a Transport Converter to use the timestamp option when +   establishing a connection to a remote Server.  Furthermore, the +   timestamps that are used by TCP stacks are specific to each stack and +   there is no benefit in enabling a Client to specify the timestamp +   value that a Transport Converter could use to establish a connection +   to a remote Server. + +   A Transport Converter MAY advertise the Timestamp option (Kind=8) in +   the TCP Supported Extensions TLV.  The Clients connected to this +   Transport Converter MAY include the Timestamp option in the Connect +   TLV but without any timestamp. + +7.5.  Multipath TCP + +   The Multipath TCP options are defined in [RFC8684], which defines one +   variable length TCP option (Kind=30) that includes a sub-type field +   to support several Multipath TCP options.  There are several +   operational use cases where Clients would like to use Multipath TCP +   through a Transport Converter [IETFJ16].  However, none of these use +   cases require the Client to specify the content of the Multipath TCP +   option that the Transport Converter should send to a remote Server. + +   A Transport Converter that supports Multipath TCP conversion service +   MUST advertise the Multipath TCP option (Kind=30) in the Supported +   TCP Extensions TLV.  Clients serviced by this Transport Converter may +   include the Multipath TCP option in the Connect TLV but without any +   content. + +7.6.  TCP Fast Open + +   The TCP Fast Open Cookie option (Kind=34) is defined in [RFC7413]. +   There are two different usages of this option that need to be +   supported by Transport Converters.  The first utilization of the TCP +   Fast Open Cookie option is to request a cookie from the Server.  In +   this case, the option is sent with an empty cookie by the Client, and +   the Server returns the cookie.  The second utilization of the TCP +   Fast Open Cookie option is to send a cookie to the Server.  In this +   case, the option contains a cookie. + +   A Transport Converter MAY advertise the TCP Fast Open Cookie option +   (Kind=34) in the Supported TCP Extensions TLV.  If a Transport +   Converter has advertised the support for TCP Fast Open in its +   Supported TCP Extensions TLV, it needs to be able to process two +   types of Connect TLV. + +   If such a Transport Converter receives a Connect TLV with the TCP +   Fast Open Cookie option that does not contain a cookie, it MUST add +   an empty TCP Fast Open Cookie option in the SYN sent to the remote +   Server.  If the remote Server supports TFO, it responds with a SYN- +   ACK according to the procedure in Section 4.1.2 of [RFC7413].  This +   SYN-ACK may contain a Fast Open option with a cookie.  Upon receipt +   of the SYN-ACK by the Converter, it relays the Fast Open option with +   the cookie to the Client. + +   If such a Transport Converter receives a Connect TLV with the TCP +   Fast Open Cookie option that contains a cookie, it MUST copy the TCP +   Fast Open Cookie option in the SYN sent to the remote Server. + +7.7.  TCP-AO + +   The TCP Authentication Option (TCP-AO) [RFC5925] provides a technique +   to authenticate all the packets exchanged over a TCP connection. +   Given the nature of this extension, it is unlikely that the +   applications that require their packets to be authenticated end to +   end would want their connections to pass through a converter.  For +   this reason, we do not recommend the support of the TCP-AO by +   Transport Converters.  The only use cases where it could make sense +   to combine TCP-AO and the solution in this document are those where +   the TCP-AO-NAT extension [RFC6978] is in use. + +   A Transport Converter MUST NOT advertise the TCP-AO (Kind=29) in the +   Supported TCP Extensions TLV.  If a Transport Converter receives a +   Connect TLV that contains the TCP-AO, it MUST reject the +   establishment of the connection with error code set to "Unsupported +   TCP Option", except if the TCP-AO-NAT option is used.  Nevertheless, +   given that TCP-AO-NAT is Experimental, its usage is not currently +   defined and must be specified by some other document before it can be +   used. + +8.  Interactions with Middleboxes + +   The Convert Protocol is designed to be used in networks that do not +   contain middleboxes that interfere with TCP.  Under such conditions, +   it is assumed that the network provider ensures that all involved on- +   path nodes are not breaking TCP signals (e.g., strip TCP options, +   discard some SYNs, etc.). + +   Nevertheless, and in order to allow for a robust service, this +   section describes how a Client can detect middlebox interference and +   stop using the Transport Converter affected by this interference. + +   Internet measurements [IMC11] have shown that middleboxes can affect +   the deployment of TCP extensions.  In this section, we focus the +   middleboxes that modify the payload since the Convert Protocol places +   its messages at the beginning of the bytestream. + +   Consider a middlebox that removes the SYN payload.  The Client can +   detect this problem by looking at the acknowledgment number field of +   the SYN+ACK if returned by the Transport Converter.  The Client MUST +   stop to use this Transport Converter given the middlebox +   interference. + +   Consider now a middlebox that drops SYN/ACKs with a payload.  The +   Client won't be able to establish a connection via the Transport +   Converter.  The case of a middlebox that removes the payload of +   SYN+ACKs or from the packet that follows the SYN+ACK (but not the +   payload of SYN) can be detected by a Client.  This is hinted by the +   absence of a valid Convert message in the response. + +   As explained in [RFC7413], some Carrier Grade NATs (CGNs) can affect +   the operation of TFO if they assign different IP addresses to the +   same end host.  Such CGNs could affect the operation of the cookie +   validation used by the Convert Protocol.  As a reminder, CGNs that +   are enabled on the path between a Client and a Transport Converter +   must adhere to the address preservation defined in [RFC6888].  See +   also the discussion in Section 7.1 of [RFC7413]. + +9.  Security Considerations + +   An implementation MUST check that the Convert TLVs are properly +   framed within the boundary indicated by the Total Length in the fixed +   header (Section 6.1). + +   Additional security considerations are discussed in the following +   subsections. + +9.1.  Privacy & Ingress Filtering + +   The Transport Converter may have access to privacy-related +   information (e.g., subscriber credentials).  The Transport Converter +   is designed to not leak such sensitive information outside a local +   domain. + +   Given its function and location in the network, a Transport Converter +   is in a position to observe all packets that it processes, to include +   payloads and metadata, and has the ability to profile and conduct +   some traffic analysis of user behavior.  The Transport Converter MUST +   be as protected as a core IP router (e.g., Section 10 of [RFC1812]). + +   Furthermore, ingress filtering policies MUST be enforced at the +   network boundaries [RFC2827]. + +   This document assumes that all network attachments are managed by the +   same administrative entity.  Therefore, enforcing anti-spoofing +   filters at these networks is a guard that hosts are not sending +   traffic with spoofed source IP addresses. + +9.2.  Authentication and Authorization Considerations + +   The Convert Protocol is RECOMMENDED for use in a managed network +   where end hosts can be securely identified by their IP address.  If +   such control is not exerted and there is a more open network +   environment, a strong mutual authentication scheme MUST be defined to +   use the Convert Protocol. + +   One possibility for mutual authentication is to use TLS to perform +   mutual authentication between the Client and the Converter.  That is, +   use TLS when a Client retrieves a Cookie from the Converter and rely +   on certificate-based, pre-shared key-based [RFC4279], or raw public +   key-based Client authentication [RFC7250] to secure this connection. +   If the authentication succeeds, the Converter returns a cookie to the +   Client.  Subsequent Connect messages will be authorized as a function +   of the content of the Cookie TLV.  An attacker from within the +   network between a Client and a Transport Converter may intercept the +   Cookie and use it to be granted access to the conversion service. +   Such an attack is only possible if the attacker spoofs the IP address +   of the Client and the network does not filter packets with source- +   spoofed IP addresses. + +   The operator that manages the various network attachments (including +   the Transport Converters) has various options for enforcing +   authentication and authorization policies.  For example, a non- +   exhaustive list of methods to achieve authorization is provided +   hereafter: + +   *  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 TCP converter 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 Transport Converter for authorization +      matters. + +   *  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 +      Transport Converter.  These ACLs may be installed as a result of +      RADIUS exchanges, e.g., [TCPM-CONVERTER].  This method does not +      require any interaction with the Transport Converter for +      authorization matters. + +   *  A device that embeds a Transport Converter may also host a RADIUS +      Client that will solicit a AAA Server to check whether or not +      connections received from a given source IP address are authorized +      [TCPM-CONVERTER]. + +   A first safeguard against the misuse of Transport Converter resources +   by illegitimate users (e.g., users with access networks that are not +   managed by the same provider that operates the Transport Converter) +   is the Transport Converter to reject Convert connections received in +   the external realm.  Only Convert connections received in the +   internal realm of a Transport Converter will be accepted. + +   In deployments where network-assisted connections are not allowed +   between hosts of a domain (i.e., hairpinning), the Converter may be +   instructed to discard such connections.  Hairpinned connections are +   thus rejected by the Transport Converter by returning an Error TLV +   set to "Not Authorized".  Otherwise, absent explicit configuration, +   hairpinning is enabled by the Converter (see Figure 24). + +             <===Network Provider===> + +      +----+ from X1:x1 to X2':x2'   +-----+ X1':x1' +      | C1 |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>--+--- +      +----+                         |  v  | +                                     |  v  | +                                     |  v  | +                                     |  v  | +      +----+ from X1':x1' to X2:x2   |  v  | X2':x2' +      | C2 |<<<<<<<<<<<<<<<<<<<<<<<<<<<<<--+--- +      +----+                         +-----+ +                                    Converter + +      Note: X2':x2' may be equal to +            X2:x2 + +                       Figure 24: Hairpinning Example + +9.3.  Denial of Service + +   Another possible risk is 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 SYNs that are significantly longer than the SYN +   received from the Client, to remote Servers.  Finally, the Transport +   Converter SHOULD only retransmit a SYN to a Server after having +   received a retransmitted SYN from the corresponding Client.  Means to +   protect against SYN flooding attacks should also be enabled (e.g., +   Section 3 of [RFC4987]). + +   Attacks from within the network between a Client and a Transport +   Converter (including attacks that change the protocol version) are +   yet another threat.  Means to ensure that illegitimate nodes cannot +   connect to a network should be implemented. + +9.4.  Traffic Theft + +   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. + +9.5.  Logging + +   If the Converter is configured to behave in the address-sharing mode +   (Section 4.4.2), the logging recommendations discussed in Section 4 +   of [RFC6888] need to be considered.  Security-related issues +   encountered in address-sharing environments are documented in +   Section 13 of [RFC6269]. + +10.  IANA Considerations + +10.1.  Convert Service Name + +   IANA has assigned a service name for the Convert Protocol from the +   "Service Name and Transport Protocol Port Number Registry" available +   at <https://www.iana.org/assignments/service-names-port-numbers>. + +   Service Name:            convert +   Port Number:             N/A +   Transport Protocol(s):   TCP +   Description:             0-RTT TCP Convert Protocol +   Assignee:                IESG <iesg@ietf.org> +   Contact:                 IETF Chair <chair@ietf.org> +   Reference:               RFC 8803 + +   Clients may use this service name to feed the procedure defined in +   [RFC2782] to discover the IP address(es) and the port number used by +   the Transport Converters of a domain. + +10.2.  The Convert Protocol (Convert) Parameters + +   IANA has created a new "TCP Convert Protocol (Convert) Parameters" +   registry. + +   The following subsections detail new registries within the "Convert +   Protocol (Convert) Parameters" registry. + +   The designated expert is expected to ascertain the existence of +   suitable documentation as described in Section 4.6 of [RFC8126] and +   to verify that the document is permanently and publicly available. +   The designated expert is also expected to check the clarity of +   purpose and use of the requested code points. + +   Also, criteria that should be applied by the designated experts +   includes determining whether the proposed registration duplicates +   existing functionality, whether it is likely to be of general +   applicability or useful only for private use, and whether the +   registration description is clear.  All requests should be directed +   to the review mailing list.  For both the "Convert TLVs" and "Convert +   Errors" subregistries, IANA must only accept registry updates in the +   128-191 range from the designated experts.  It is suggested that +   multiple designated experts be appointed.  In cases where a +   registration decision could be perceived as creating a conflict of +   interest for a particular expert, that expert should defer to the +   judgment of the other experts. + +10.2.1.  Convert Versions + +   IANA has created the "Convert Versions" subregistry.  New values are +   assigned via IETF Review (Section 4.8 of [RFC8126]). + +   The initial values of the registry are as follows: + +                   +=========+=============+===========+ +                   | Version | Description | Reference | +                   +=========+=============+===========+ +                   | 0       | Reserved    | RFC 8803  | +                   +---------+-------------+-----------+ +                   | 1       | Assigned    | RFC 8803  | +                   +---------+-------------+-----------+ + +                     Table 3: Current Convert Versions + +10.2.2.  Convert TLVs + +   IANA has created the "Convert TLVs" subregistry.  The procedures for +   assigning values from this registry are as follows: + +   1-127:    IETF Review + +   128-191:  Specification Required + +   192-255:  Private Use + +   The initial values of the registry are as follows: + +            +======+=============================+===========+ +            | Code | Name                        | Reference | +            +======+=============================+===========+ +            | 0    | Reserved                    | RFC 8803  | +            +------+-----------------------------+-----------+ +            | 1    | Info TLV                    | RFC 8803  | +            +------+-----------------------------+-----------+ +            | 10   | Connect TLV                 | RFC 8803  | +            +------+-----------------------------+-----------+ +            | 20   | Extended TCP Header TLV     | RFC 8803  | +            +------+-----------------------------+-----------+ +            | 21   | Supported TCP Extension TLV | RFC 8803  | +            +------+-----------------------------+-----------+ +            | 22   | Cookie TLV                  | RFC 8803  | +            +------+-----------------------------+-----------+ +            | 30   | Error TLV                   | RFC 8803  | +            +------+-----------------------------+-----------+ + +                      Table 4: Initial Convert TLVs + +10.2.3.  Convert Error Messages + +   IANA has created the "Convert Errors" subregistry.  Codes in this +   registry are assigned as a function of the error type.  Four types +   are defined; the following ranges are reserved for each of these +   types: + +   0-31:     Message validation and processing errors + +   32-63:    Client-side errors + +   64-95:    Transport Converter-side errors + +   96-127:   Errors caused by destination Server + +   The procedures for assigning values from this subregistry are as +   follows: + +   0-127:    IETF Review + +   128-191:  Specification Required + +   192-255:  Private Use + +   The initial values of the registry are as follows: + +              +=======+=========================+===========+ +              | Error | Description             | Reference | +              +=======+=========================+===========+ +              | 0     | Unsupported Version     | RFC 8803  | +              +-------+-------------------------+-----------+ +              | 1     | Malformed Message       | RFC 8803  | +              +-------+-------------------------+-----------+ +              | 2     | Unsupported Message     | RFC 8803  | +              +-------+-------------------------+-----------+ +              | 3     | Missing Cookie          | RFC 8803  | +              +-------+-------------------------+-----------+ +              | 32    | Not Authorized          | RFC 8803  | +              +-------+-------------------------+-----------+ +              | 33    | Unsupported TCP Option  | RFC 8803  | +              +-------+-------------------------+-----------+ +              | 64    | Resource Exceeded       | RFC 8803  | +              +-------+-------------------------+-----------+ +              | 65    | Network Failure         | RFC 8803  | +              +-------+-------------------------+-----------+ +              | 96    | Connection Reset        | RFC 8803  | +              +-------+-------------------------+-----------+ +              | 97    | Destination Unreachable | RFC 8803  | +              +-------+-------------------------+-----------+ + +                    Table 5: Initial Convert Error Codes + +11.  References + +11.1.  Normative References + +   [RFC0793]  Postel, J., "Transmission Control Protocol", STD 7, +              RFC 793, DOI 10.17487/RFC0793, September 1981, +              <https://www.rfc-editor.org/info/rfc793>. + +   [RFC2018]  Mathis, M., Mahdavi, J., Floyd, S., and A. Romanow, "TCP +              Selective Acknowledgment Options", RFC 2018, +              DOI 10.17487/RFC2018, October 1996, +              <https://www.rfc-editor.org/info/rfc2018>. + +   [RFC2119]  Bradner, S., "Key words for use in RFCs to Indicate +              Requirement Levels", BCP 14, RFC 2119, +              DOI 10.17487/RFC2119, March 1997, +              <https://www.rfc-editor.org/info/rfc2119>. + +   [RFC2827]  Ferguson, P. and D. Senie, "Network Ingress Filtering: +              Defeating Denial of Service Attacks which employ IP Source +              Address Spoofing", BCP 38, RFC 2827, DOI 10.17487/RFC2827, +              May 2000, <https://www.rfc-editor.org/info/rfc2827>. + +   [RFC4291]  Hinden, R. and S. Deering, "IP Version 6 Addressing +              Architecture", RFC 4291, DOI 10.17487/RFC4291, February +              2006, <https://www.rfc-editor.org/info/rfc4291>. + +   [RFC4787]  Audet, F., Ed. and C. Jennings, "Network Address +              Translation (NAT) Behavioral Requirements for Unicast +              UDP", BCP 127, RFC 4787, DOI 10.17487/RFC4787, January +              2007, <https://www.rfc-editor.org/info/rfc4787>. + +   [RFC4987]  Eddy, W., "TCP SYN Flooding Attacks and Common +              Mitigations", RFC 4987, DOI 10.17487/RFC4987, August 2007, +              <https://www.rfc-editor.org/info/rfc4987>. + +   [RFC5925]  Touch, J., Mankin, A., and R. Bonica, "The TCP +              Authentication Option", RFC 5925, DOI 10.17487/RFC5925, +              June 2010, <https://www.rfc-editor.org/info/rfc5925>. + +   [RFC6888]  Perreault, S., Ed., Yamagata, I., Miyakawa, S., Nakagawa, +              A., and H. Ashida, "Common Requirements for Carrier-Grade +              NATs (CGNs)", BCP 127, RFC 6888, DOI 10.17487/RFC6888, +              April 2013, <https://www.rfc-editor.org/info/rfc6888>. + +   [RFC6890]  Cotton, M., Vegoda, L., Bonica, R., Ed., and B. Haberman, +              "Special-Purpose IP Address Registries", BCP 153, +              RFC 6890, DOI 10.17487/RFC6890, April 2013, +              <https://www.rfc-editor.org/info/rfc6890>. + +   [RFC7323]  Borman, D., Braden, B., Jacobson, V., and R. +              Scheffenegger, Ed., "TCP Extensions for High Performance", +              RFC 7323, DOI 10.17487/RFC7323, September 2014, +              <https://www.rfc-editor.org/info/rfc7323>. + +   [RFC7413]  Cheng, Y., Chu, J., Radhakrishnan, S., and A. Jain, "TCP +              Fast Open", RFC 7413, DOI 10.17487/RFC7413, December 2014, +              <https://www.rfc-editor.org/info/rfc7413>. + +   [RFC8126]  Cotton, M., Leiba, B., and T. Narten, "Guidelines for +              Writing an IANA Considerations Section in RFCs", BCP 26, +              RFC 8126, DOI 10.17487/RFC8126, June 2017, +              <https://www.rfc-editor.org/info/rfc8126>. + +   [RFC8174]  Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC +              2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174, +              May 2017, <https://www.rfc-editor.org/info/rfc8174>. + +   [RFC8684]  Ford, A., Raiciu, C., Handley, M., Bonaventure, O., and C. +              Paasch, "TCP Extensions for Multipath Operation with +              Multiple Addresses", RFC 8684, DOI 10.17487/RFC8684, March +              2020, <https://www.rfc-editor.org/info/rfc8684>. + +11.2.  Informative References + +   [ANRW17]   Trammell, B., Kuehlewind, M., De Vaere, P., Learmonth, I., +              and G. Fairhurst, "Tracking transport-layer evolution with +              PATHspider", Applied Networking Research Workshop 2017 +              (ANRW17), July 2017. + +   [DHC-CONVERTER] +              Boucadair, M., Jacquenet, C., and T. Reddy.K, "DHCP +              Options for 0-RTT TCP Converters", Work in Progress, +              Internet-Draft, draft-boucadair-tcpm-dhc-converter-03, 7 +              October 2019, <https://tools.ietf.org/html/draft- +              boucadair-tcpm-dhc-converter-03>. + +   [Fukuda2011] +              Fukuda, K., "An Analysis of Longitudinal TCP Passive +              Measurements (Short Paper)", Traffic Monitoring and +              Analysis, TMA 2011, Lecture Notes in Computer Science, +              vol. 6613, 2011. + +   [HOT-MIDDLEBOX13] +              Detal, G., Paasch, C., and O. Bonaventure, "Multipath in +              the Middle(Box)", HotMiddlebox'13, +              DOI 10.1145/2535828.2535829, December 2013, +              <https://inl.info.ucl.ac.be/publications/multipath- +              middlebox>. + +   [IANA-CONVERT] +              IANA, "TCP Convert Protocol (Convert) Parameters", +              <https://www.iana.org/assignments/tcp-convert-protocol- +              parameters>. + +   [IETFJ16]  Bonaventure, O. and S. Seo, "Multipath TCP Deployments", +              IETF Journal, Vol. 12, Issue 2, November 2016. + +   [IMC11]    Honda, K., Nishida, Y., Raiciu, C., Greenhalgh, A., +              Handley, M., and T. Hideyuki, "Is it still possible to +              extend TCP?", Proceedings of the 2011 ACM SIGCOMM +              conference on Internet measurement conference, +              DOI 10.1145/2068816.2068834, November 2011, +              <https://doi.org/10.1145/2068816.2068834>. + +   [INTAREA-SOCKS] +              Olteanu, V. and D. Niculescu, "SOCKS Protocol Version 6", +              Work in Progress, Internet-Draft, draft-olteanu-intarea- +              socks-6-10, 13 July 2020, <https://tools.ietf.org/html/ +              draft-olteanu-intarea-socks-6-10>. + +   [LOW-LATENCY] +              Arkko, J. and J. Tantsura, "Low Latency Applications and +              the Internet Architecture", Work in Progress, Internet- +              Draft, draft-arkko-arch-low-latency-02, 30 October 2017, +              <https://tools.ietf.org/html/draft-arkko-arch-low-latency- +              02>. + +   [MPTCP-PLAIN] +              Boucadair, M., Jacquenet, C., Bonaventure, O., Behaghel, +              D., Secci, S., Henderickx, W., Skog, R., Vinapamula, S., +              Seo, S., Cloetens, W., Meyer, U., Contreras, L., and B. +              Peirens, "Extensions for Network-Assisted MPTCP Deployment +              Models", Work in Progress, Internet-Draft, draft- +              boucadair-mptcp-plain-mode-10, March 2017, +              <https://tools.ietf.org/html/draft-boucadair-mptcp-plain- +              mode-10>. + +   [MPTCP-TRANSPARENT] +              Peirens, B., Detal, G., Barre, S., and O. Bonaventure, +              "Link bonding with transparent Multipath TCP", Work in +              Progress, Internet-Draft, draft-peirens-mptcp-transparent- +              00, 8 July 2016, <https://tools.ietf.org/html/draft- +              peirens-mptcp-transparent-00>. + +   [RFC1812]  Baker, F., Ed., "Requirements for IP Version 4 Routers", +              RFC 1812, DOI 10.17487/RFC1812, June 1995, +              <https://www.rfc-editor.org/info/rfc1812>. + +   [RFC1919]  Chatel, M., "Classical versus Transparent IP Proxies", +              RFC 1919, DOI 10.17487/RFC1919, March 1996, +              <https://www.rfc-editor.org/info/rfc1919>. + +   [RFC1928]  Leech, M., Ganis, M., Lee, Y., Kuris, R., Koblas, D., and +              L. Jones, "SOCKS Protocol Version 5", RFC 1928, +              DOI 10.17487/RFC1928, March 1996, +              <https://www.rfc-editor.org/info/rfc1928>. + +   [RFC2782]  Gulbrandsen, A., Vixie, P., and L. Esibov, "A DNS RR for +              specifying the location of services (DNS SRV)", RFC 2782, +              DOI 10.17487/RFC2782, February 2000, +              <https://www.rfc-editor.org/info/rfc2782>. + +   [RFC3135]  Border, J., Kojo, M., Griner, J., Montenegro, G., and Z. +              Shelby, "Performance Enhancing Proxies Intended to +              Mitigate Link-Related Degradations", RFC 3135, +              DOI 10.17487/RFC3135, June 2001, +              <https://www.rfc-editor.org/info/rfc3135>. + +   [RFC4279]  Eronen, P., Ed. and H. Tschofenig, Ed., "Pre-Shared Key +              Ciphersuites for Transport Layer Security (TLS)", +              RFC 4279, DOI 10.17487/RFC4279, December 2005, +              <https://www.rfc-editor.org/info/rfc4279>. + +   [RFC5461]  Gont, F., "TCP's Reaction to Soft Errors", RFC 5461, +              DOI 10.17487/RFC5461, February 2009, +              <https://www.rfc-editor.org/info/rfc5461>. + +   [RFC6269]  Ford, M., Ed., Boucadair, M., Durand, A., Levis, P., and +              P. Roberts, "Issues with IP Address Sharing", RFC 6269, +              DOI 10.17487/RFC6269, June 2011, +              <https://www.rfc-editor.org/info/rfc6269>. + +   [RFC6296]  Wasserman, M. and F. Baker, "IPv6-to-IPv6 Network Prefix +              Translation", RFC 6296, DOI 10.17487/RFC6296, June 2011, +              <https://www.rfc-editor.org/info/rfc6296>. + +   [RFC6731]  Savolainen, T., Kato, J., and T. Lemon, "Improved +              Recursive DNS Server Selection for Multi-Interfaced +              Nodes", RFC 6731, DOI 10.17487/RFC6731, December 2012, +              <https://www.rfc-editor.org/info/rfc6731>. + +   [RFC6887]  Wing, D., Ed., Cheshire, S., Boucadair, M., Penno, R., and +              P. Selkirk, "Port Control Protocol (PCP)", RFC 6887, +              DOI 10.17487/RFC6887, April 2013, +              <https://www.rfc-editor.org/info/rfc6887>. + +   [RFC6928]  Chu, J., Dukkipati, N., Cheng, Y., and M. Mathis, +              "Increasing TCP's Initial Window", RFC 6928, +              DOI 10.17487/RFC6928, April 2013, +              <https://www.rfc-editor.org/info/rfc6928>. + +   [RFC6978]  Touch, J., "A TCP Authentication Option Extension for NAT +              Traversal", RFC 6978, DOI 10.17487/RFC6978, July 2013, +              <https://www.rfc-editor.org/info/rfc6978>. + +   [RFC7250]  Wouters, P., Ed., Tschofenig, H., Ed., Gilmore, J., +              Weiler, S., and T. Kivinen, "Using Raw Public Keys in +              Transport Layer Security (TLS) and Datagram Transport +              Layer Security (DTLS)", RFC 7250, DOI 10.17487/RFC7250, +              June 2014, <https://www.rfc-editor.org/info/rfc7250>. + +   [RFC7414]  Duke, M., Braden, R., Eddy, W., Blanton, E., and A. +              Zimmermann, "A Roadmap for Transmission Control Protocol +              (TCP) Specification Documents", RFC 7414, +              DOI 10.17487/RFC7414, February 2015, +              <https://www.rfc-editor.org/info/rfc7414>. + +   [RFC8041]  Bonaventure, O., Paasch, C., and G. Detal, "Use Cases and +              Operational Experience with Multipath TCP", RFC 8041, +              DOI 10.17487/RFC8041, January 2017, +              <https://www.rfc-editor.org/info/rfc8041>. + +   [RFC8305]  Schinazi, D. and T. Pauly, "Happy Eyeballs Version 2: +              Better Connectivity Using Concurrency", RFC 8305, +              DOI 10.17487/RFC8305, December 2017, +              <https://www.rfc-editor.org/info/rfc8305>. + +   [RFC8446]  Rescorla, E., "The Transport Layer Security (TLS) Protocol +              Version 1.3", RFC 8446, DOI 10.17487/RFC8446, August 2018, +              <https://www.rfc-editor.org/info/rfc8446>. + +   [RFC8548]  Bittau, A., Giffin, D., Handley, M., Mazieres, D., Slack, +              Q., and E. Smith, "Cryptographic Protection of TCP Streams +              (tcpcrypt)", RFC 8548, DOI 10.17487/RFC8548, May 2019, +              <https://www.rfc-editor.org/info/rfc8548>. + +   [TCPM-CONVERTER] +              Boucadair, M. and C. Jacquenet, "RADIUS Extensions for +              0-RTT TCP Converters", Work in Progress, Internet-Draft, +              draft-boucadair-opsawg-tcpm-converter-01, 28 February +              2020, <https://tools.ietf.org/html/draft-boucadair-opsawg- +              tcpm-converter-01>. + +   [TS23501]  3GPP (3rd Generation Partnership Project), "Technical +              Specification Group Services and System Aspects; System +              architecture for the 5G System; Stage 2 (Release 16)", +              2019, <https://www.3gpp.org/ftp/Specs/ +              archive/23_series/23.501/>. + +Appendix A.  Example Socket API Changes to Support the 0-RTT TCP Convert +             Protocol + +A.1.  Active Open (Client Side) + +   On the Client side, the support of the 0-RTT Converter protocol does +   not require any other changes than those identified in Appendix A of +   [RFC7413].  Those modifications are already supported by multiple TCP +   stacks. + +   As an example, on Linux, a Client can send the 0-RTT Convert message +   inside a SYN by using sendto with the MSG_FASTOPEN flag as shown in +   the example below: + +     s = socket(AF_INET, SOCK_STREAM, 0); + +     sendto(s, buffer, buffer_len, MSG_FASTOPEN, +                    (struct sockaddr *) &server_addr, addr_len); + +   The Client side of the Linux TFO can be used in two different modes +   depending on the host configuration (sysctl tcp_fastopen variable): + +   0x1:  (client) enables sending data in the opening SYN on the Client. + +   0x4:  (client) enables sending data in the opening SYN regardless of +      cookie availability and without a cookie option. + +   By setting this configuration variable to 0x5, a Linux Client using +   the above code would send data inside the SYN without using a TFO +   option. + +A.2.  Passive Open (Converter Side) + +   The Converter needs to enable the reception of data inside the SYN +   independently of the utilization of the TFO option.  This implies +   that the Transport Converter application cannot rely on the Fast Open +   Cookies to validate the reachability of the IP address that sent the +   SYN.  It must rely on other techniques, such as the Cookie TLV +   described in this document, to verify this reachability. + +   [RFC7413] suggested the utilization of a TCP_FASTOPEN socket option +   to enable the reception of SYNs containing data.  Later, Appendix A +   of [RFC7413] mentioned: + +   |  Traditionally, accept() returns only after a socket is connected. +   |  But, for a Fast Open connection, accept() returns upon receiving a +   |  SYN with a valid Fast Open cookie and data, and the data is +   |  available to be read through, e.g., recvmsg(), read(). + +   To support the 0-RTT TCP Convert Protocol, this behavior should be +   modified as follows: + +   |  Traditionally, accept() returns only after a socket is connected. +   |  But, for a Fast Open connection, accept() returns upon receiving a +   |  SYN with data, and the data is available to be read through, e.g., +   |  recvmsg(), read().  The application that receives such SYNs with +   |  data must be able to validate the reachability of the source of +   |  the SYN and also deal with replayed SYNs. + +   The Linux Server side can be configured with the following sysctls: + +   0x2:  (server) enables the Server support, i.e., allowing data in a +      SYN packet to be accepted and passed to the application before a +      3-way handshake finishes. + +   0x200:  (server) accepts data-in-SYN w/o any cookie option present. + +   However, this configuration is system wide.  This is convenient for +   typical Transport Converter deployments where no other applications +   relying on TFO are collocated on the same device. + +   Recently, the TCP_FASTOPEN_NO_COOKIE socket option has been added to +   provide the same behavior on a per-socket basis.  This enables a +   single host to support both Servers that require the Fast Open Cookie +   and Servers that do not use it. + +Acknowledgments + +   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. + +   We would like to thank Raphael Bauduin, Stefano Secci, Anandatirtha +   Nandugudi, and Gregory Vander Schueren for their help in preparing +   this document.  Nandini Ganesh provided valuable feedback about the +   handling of TFO and the error codes.  Yuchung Cheng and Praveen +   Balasubramanian helped to clarify the discussion on supplying data in +   SYNs.  Phil Eardley and Michael Scharf helped to clarify different +   parts of the text.  Thanks to Éric Vyncke, Roman Danyliw, Benjamin +   Kaduk, and Alexey Melnikov for the IESG review, and Christian Huitema +   for the Security Directorate review. + +   Many thanks to Mirja Kühlewind for the detailed AD review. + +   This document builds upon earlier documents that proposed various +   forms of Multipath TCP proxies: [MPTCP-PLAIN], [MPTCP-TRANSPARENT], +   and [HOT-MIDDLEBOX13]. + +   From [MPTCP-PLAIN]: + +   Many thanks to Chi Dung Phung, Mingui Zhang, Rao Shoaib, Yoshifumi +   Nishida, and Christoph Paasch for their valuable comments. + +   Thanks to Ian Farrer, Mikael Abrahamsson, Alan Ford, Dan Wing, and +   Sri Gundavelli for the fruitful discussions at IETF 95 (Buenos +   Aires). + +   Special thanks to Pierrick Seite, Yannick Le Goff, Fred Klamm, and +   Xavier Grall for their input. + +   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 their input. + +Contributors + +   Bart Peirens contributed to an early draft version of this document. + +   As noted above, this document builds on two previous documents. + +   The authors of [MPTCP-PLAIN] 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 + +   The authors of [MPTCP-TRANSPARENT] were: + +   *  Bart Peirens + +   *  Gregory Detal + +   *  Sebastien Barre + +   *  Olivier Bonaventure + +Authors' Addresses + +   Olivier Bonaventure (editor) +   Tessares +   Avenue Jean Monnet 1 +   B-1348 Louvain-la-Neuve +   Belgium + +   Email: Olivier.Bonaventure@tessares.net + + +   Mohamed Boucadair (editor) +   Orange +   Clos Courtel +   35000 Rennes +   France + +   Email: mohamed.boucadair@orange.com + + +   Sri Gundavelli +   Cisco +   170 West Tasman Drive +   San Jose, CA 95134 +   United States of America + +   Email: sgundave@cisco.com + + +   SungHoon Seo +   Korea Telecom +   151 Taebong-ro +   Seocho-gu, Seoul, 06763 +   Republic of Korea + +   Email: sh.seo@kt.com + + +   Benjamin Hesmans +   Tessares +   Avenue Jean Monnet 1 +   B-1348 Louvain-la-Neuve +   Belgium + +   Email: Benjamin.Hesmans@tessares.net |