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

<!DOCTYPE rfc SYSTEM "rfc2629.dtd" [
<!ENTITY RFC2119 SYSTEM "https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.2119.xml">
]>


<rfc ipr="trust200902" docName="draft-peon-pinner-quic-abstractions-00" category="info">

  <front>
    <title abbrev="I-D">Proposal for QUIC Abstractions</title>

    <author initials="R." surname="Peon" fullname="Roberto Peon">
      <organization>Facebook, Inc.</organization>
      <address>
        <email>fenix@fb.com</email>
      </address>
    </author>
    <author initials="J." surname="Pinner" fullname="Jeff Pinner">
      <organization>Lyft, Inc.</organization>
      <address>
        <email>jpinner@lyft.com</email>
      </address>
    </author>

    <date year="2018" month="January" day="15"/>

    
    
    

    <abstract>


<t>Proposes abstraction layers for QUIC and proposes recommendations for draft v1.</t>



    </abstract>


    <note title="Note to Readers">


<t>Discussion of this draft takes place on the QUIC working group mailing list
(quic@ietf.org), which is archived at
<eref target="https://mailarchive.ietf.org/arch/search/?email_list=quic">https://mailarchive.ietf.org/arch/search/?email_list=quic</eref>.</t>

<t>Working Group information can be found at <eref target="https://github.com/quicwg">https://github.com/quicwg</eref>; source
code and issues list for this draft can be found at
<eref target="https://github.com/quicwg/base-drafts/labels/-http">https://github.com/quicwg/base-drafts/labels/-http</eref>.</t>


    </note>


  </front>

  <middle>


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

<t>This document proposes 5 layers of abstraction for QUIC: QUIC, Connections, Streams, H3, and HTTP.</t>

</section>
<section anchor="abstractions" title="Abstractions">

<section anchor="quic-provides" title="QUIC provides:">
<t><list style="symbols">
  <t>Packets</t>
  <t>MTU discovery (packet sizing)</t>
  <t>Version negotiation</t>
  <t>Packet loss detection</t>
  <t>A cryptographic context enabling data encryption within a packet</t>
  <t>Zero-RTT connection establishment with limited data payload</t>
  <t>One-RTT connection establishment</t>
  <t>QUIC Connections provide:</t>
</list></t>

</section>
<section anchor="identification-of-the-connection-including-a-connection-id-in-addition-to-the-5-tuple" title="Identification of the connection including a Connection ID in addition to the 5-tuple">
<t><list style="symbols">
  <t>Alternate connection IDs/connID ‘renaming’ without requiring connection re-establishment</t>
  <t>Multiplexed, non HoL blocking, streams</t>
  <t>Congestion control on a per-path basis</t>
  <t>Data (not packet) retransmission</t>
  <t>Flow control on a per-connection basis</t>
  <t>Mechanisms to prove liveness, measure-RTT.</t>
</list></t>

</section>
<section anchor="quic-streams-provide" title="QUIC Streams provide:">
<t><list style="symbols">
  <t>Flow control on a per-stream basis</t>
  <t>Ordered but necessarily in-order bytestreams</t>
  <t>Grouping- a statement that streams should be delivered to the same endpoint through proxies.</t>
  <t>Data frames</t>
  <t>Support for non-data frames.</t>
</list></t>

</section>
<section anchor="h3-provides" title="‘H3’ provides:">
<t><list style="symbols">
  <t>Flow-controlled headers frames on streams.</t>
  <t>Compression for headers data in a robust way which trades off HoL blocking and compression efficiency</t>
</list></t>

</section>
<section anchor="http-on-quic" title="HTTP on QUIC:">
<t><list style="symbols">
  <t>Maps requests â†’ streams using H3.</t>
  <t>Defines restrictions on header/data frame sequencing in line with HTTP semantics</t>
</list></t>

</section>
<section anchor="apis-above-these-layers" title="APIs above these layers:">

<t>APIs above these layers will then determine how and when data is presented to the application, including decisions about whether to present ordered data as in-order (i.e. socket-like), or to present it as if a file (ordered but not necessarily in-order), and when to request retransmissions or discards (‘reliable’ or partially reliable).</t>

<t>Note that HTTP does not imply reliable. HTTP implies request-response</t>

</section>
</section>
<section anchor="deeper-explanations" title="Deeper explanations">

<section anchor="quic-packets" title="QUIC (Packets):">

<t>In order to establish connections QUIC sends packets before QUIC connections can be confirmed to be established. The QUIC-layer abstraction thus includes all parts necessary to operate on a per-packet basis without already being in the context of a QUIC connection.</t>

<t>QUIC packets are UDP datagrams. These may or may not have a 1:1 correspondence to IP packets based on path MTU estimation and IP fragmentation.</t>

<t>Payload data is AEAD Encrypted
Minimal routing data is unencrypted
  - In particular this means that acks (and thus congestion control and loss recovery) are end-to-end instead of hop-by-hop</t>

<t>Packets are NOT reliably delivered or retransmitted. Some of the application payload carried by a packet MAY be retransmitted but that is not required.</t>

<t>Note that this does not preclude the L2 layer from doing its own retransmissions; duplicate packets may be received, even when not sent.</t>

<t>All other intermediaries must â€œparticipateâ€ in the QUIC connection â€” they must be â€œterminatingâ€ intermediaries and have the encryption keys necessary to terminate connections. Tunneling L5-over-L5 still requires an initial connection to be terminated at the proxy.</t>

<t>All packets before a the 1-RTT keys are established for a connection be versioned. The version number location in these packets must be static across all versions of the protocol.</t>

</section>
<section anchor="quic-connections" title="QUIC Connections">

<t>QUIC connections may be created between two endpoints communicating over UDP. A QUIC connection consists of a shared cryptographic context and set of multiplexed â€œstreamsâ€ . Connections are created through a combined cryptographic and transport handshake that is capable of providing 0-RTT connection establishment when communicating with a known peer. Finally, in order to be resilient to NAT re-bindings and changes in network topology, connections may persist across changes of the client or server IP and port addresses.</t>

<t>QUIC connections are identified by a set of 64-bit unsigned numbers, one chosen randomly by the client and one or more chosen by the server, in addition to the â€œ5-tupleâ€ used to identify the underlying UDP connection. The QUIC connection identifiers allow for the client and server IP address or port number (or the connection identifier itself) to change throughout the lifetime of the connection, while still allowing datagrams to be correctly routed between the two endpoints.</t>

<section anchor="rtt-connection-establishment" title="0-RTT Connection Establishment">

<t>TLS 1.3 enables 0-RTT, and QUIC endpoints should support it.</t>

<t>Since packets are not required to arrive in order (or arrive at all) an endpoint may receive 0-RTT data for a connection that has yet to be established. Implementations should make appropriate tradeoffs between buffering this data as to not render 0-RTT connection establishment infeasible in practice.</t>

<t>An endpoint can always â€œpretendâ€ it does not have decryption keys for 0-RTT content. Servers can always force a fallback to a 1-RTT establishment handshake. The existence of this fallback is important since it is the only mechanism for a server to do address validation (and thus protect itself from some classes of denial-of-service attacks.)</t>

</section>
<section anchor="l4-routing-and-connection-migration-requires-working-group-decisions" title="L4 routing and Connection migration: Requires Working Group decisions">

<t>While the protocol allows for both connection migration across changes of the endpoint’s underlying network address and for changes of the connection identifiers, it is unclear (under the current specification) that connection migration can be implemented in a scalable, interoperable manner.</t>

<t>For data within a QUIC connection to be of utility, packets intended to be associated with that connection should flow to a specific endpoint.</t>

<t>For large deployments, there are likely to be a number of L4 load balancers deployed to ensure that this happens while utilizing L7 endpoints effectively. A set of TCP load balancers in a deployment, for instance, would forward packets with the same source IP address and port number to a sole host regardless of which load balancer received the packet.</t>

<t>A QUIC connection is determined by both the network address and a set of connection identifiers. As a result, L4 load balancing which uses only IP address and port number is insufficient to ensure that packets associated with a QUIC connection actually arrive at the correct endpoint. A reasonable solution to this problem might be to hash on the connection ID instead of hashing on the network address; however, if multiple identifiers are used simultaneously throughout the lifetime of the connection however, this is insufficient given all identifiers would have to hash to the same host.</t>

<t>There are several strategies that can be employed to solve the L4 LB problem with alternate connection-IDs. The simplest and most scalable approach requires shared knowledge between the L4 LB and the endpoint of the connection, specifically an encryption key and/or cryptographic algorithm. This allows the L7 endpoint to compute a new connection ID which the L4 LB could successfully deliver to the correct L7. Other means of making this work (global NAT tables in a cluster, distributed NAT tables) require additional hops within datacenters and make successful implementations more difficult while also likely decreasing performance.</t>

<t>In order to associate multiple alternative connection IDs with the same connection, we must expose some data to the L4 load balancer to allows it to correctly map IDs to the expected L7 host. This data could take the form of some structure embedded in the connection identifier and agreed upon between all intermediaries on the path, for example choosing some number of bits to be used for routing that must be identical between all identifiers for a given connection. This is a most certainly a potential avenue for ossification.</t>

<t>The use of multiple connection IDs to identify a connection is provided as a mechanism to prevent a passive observer from correlating activity for the same connection across multiple paths during connection migration. It is worth noting that while a client may want to use a new connection identifier, it requires the server to issue new identifiers, and no mechanism is provided in the specification for the client to request them or require the server to issue them. In addition, multi-path support will arguably do a more effective job of making packet inspection difficult than having multiple connection IDs would, for those connections where multiple paths are available. For connections where multiple paths are not available, the client has the option to open multiple connections to achieve the same effect.</t>

<t>W.I.P. (The other argument for multiple connection IDs is not packet inspection but instead privacy, i.e. link-ability between IP address. If multi-path requires the ability to share connection state between multiple paths, could we extend this to the application layer to share state across multiple connections each with its own connection ID? If so, then there is no privacy concern since the client can instead open one connection per path.)
  - Recommendation: defer alternative connection IDs to the v2 specification.
Even excluding the association of multiple server selected connection IDs to a single connection, the connection still is identified by two identifiers, the one randomly selected by the client and the ID chosen by the server. Without providing mechanism for intermediaries to route the both identifiers to the same endpoint, load balancers must instead perform some form of address translation in order to associate both identifiers with the same host.</t>

</section>
<section anchor="multi-path" title="Multi-Path">

<t>Connection migration across network addresses requires the connection to (briefly) exist simultaneously across multiple paths and as such should instead be considered in the context of broader multi-path support.</t>

</section>
</section>
<section anchor="streams" title="Streams">

<t>A stream is an ordered sequence of bytes. A QUIC connection contains a multiplexed set of streams that are grouped into four different namespaces based upon two properties: if the stream is client or server initiated; and if the stream is unidirectional or bidirectional. Streams are flow controlled, both individually and in aggregate across the connection.</t>

<t><list style="symbols">
  <t>Is there / should there be a direct mapping of TCP connections to a stream â€” NO</t>
  <t>Should we provide a â€œsuggestedâ€ mapping of various BSD socket types? stream (TCP), dgram (UDP tunneling), SEQPACKET or RDS or similar?</t>
  <t>Streams really have whatever reliability is used by the two endpoints of the connection â€” intermediaries must assume unreliability and we should verify that congestion control and flow control are not dependent upon any reliability assumption</t>
  <t>Now that we have 4 stream types (unidirection and endpoint-originated) we should not make any attempt to provide a â€œmappingâ€ to TCP or Socket â€” STREAMS now need to be their own concept independent of prior art â€” let’s make this explicit</t>
  <t>Stream closure is unreliable in QUIC â€” when either endpoint closes a stream data is not required to be flushed â€” which also leads to connection-level flow control requirements (i.e. don’t block until you get the data to increase it or you gonna deadlock)</t>
</list></t>

<t>Streams are not required (at the QUIC layer) to be re-transmitted or ever transmitted in-order or in their entirety. Flow control windows are increased when a receiver decides that it is willing to accept (and possible discard) bytes from a stream up to a given offset. It is neither a signal that it the receiver has received all bytes below the flow control window nor is a receiver obligated to treat it’s flow control window as a contiguous number of bytes within the stream.</t>

<t>Because streams are flow controlled individually and in their entirety, and because there is no QUIC-layer requirement that stream data be transmitted in its entirety, there is the possibility at the application that connection deadlock may occur if the application only increases the flow control window based on receiving data encoded in streams. (rpeon to fix this statement based on compression)
  - any application that deals with out-of-order data within a stream must carefully do flow control at the QUIC layer</t>

<section anchor="grouping-of-streams" title="Grouping of Streams">

<t>As this hasn’t been discussed within the working group, this likely needs to be deferred to v2.</t>

<t>Streams may be placed within groups (by default there is only one group), in which case a different frame-type is used for data and headers within that stream. This is why the grouping is at the stream layer and not below.</t>

<t>Groups signal to the L7 routing fabric that the data on multiple streams should be routed to the same (L7) endpoint.</t>

<t>Video is a good example usecase, though pubsub and similar end up with the same problemset.
With video, there are various components of the video stream which can be interpreted separately. An example would be I-frames and P-frames. I frames are essentially JPGs and encode an image. P-frames encode a difference from some prior state (or to some other state, depending on one’s perspective). If the application presents these at the same priority within one stream, it would be substantially suboptimal. However, without groups, if the application presents these as different streams, they may not be routed to the same L7 endpoint, which would be essential for correct understanding of the data given the inherently stateful nature of video codecs (and most any compression). Breaking up the video into multiple items allows video to be transported and cached using HTTP semantics reasonably.</t>

<t>Pub-sub, as mentioned before works far better when groups exist: A subscription is established, and any number of responses may flow back to the subscriber; If the subscriber wishes to update the subscription, it sends a new request with the same group, ensuring the subscription state can be correctly managed.</t>

</section>
</section>
</section>


  </middle>

  <back>

    <references title='Normative References'>

&RFC2119;


    </references>




  </back>

<!-- ##markdown-source:
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
LDm9Xvw/NiSP2Ho5AAA=

-->

</rfc>

