<?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-02" 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="16"/>

    
    
    

    <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>
</list></t>

</section>
<section anchor="quic-connections-provide" title="QUIC Connections provide:">
<t><list style="symbols">
  <t>Identification of the connection including a Connection ID in addition to the 5-tuple</t>
  <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 to 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:
H4sIAJX6XloAA41bXXfbRpJ956/AUR4snUNStpNMduTdJE7kxMo6icZSJmf3
JQcEmmSPQTQWDUhmfv3eW9UNNCB6ZvxgWyTQXV0ft25VtVar1aKzXWWustvW
Nc7nVbZ1bfa3326+z15vfNfmRWdd7Rf5ZtOah6vsZnW9KF1R5we8U7b5tls1
xtWrxta1aVf/19tilScvrp6/XJR5h4dfPn/xH6vnL1Yv/rIo8MHOtcerzNZb
t7BNe5V1be+7l8+f/xUvLPK+27v2apGtFhn+2NpfZe/X2S12kg90+/duY9rO
jR+7dpfX9s+cO19lP+SF2Tj3YZnd1MVaHjCH3FZX2dbU9uO32826cIfJHj9h
DzlIsstPZrtNP51u8u647Z5u8A9Vx7cVvpVNFrVrD3jlweBQ2fsfvn/54sVf
rxYLnn/4YrFarbKovMVCLWJ8lugzq/Kjaf1opLwusyY+2BrsdTB1KcLpU2Kj
7OHFWpevXWf++IV/de6P9yYvsdpicW190XvPDdw26/bWh/e6/APWbSqoMsOX
3d7oto+u/WDrXbZrXd9kPDR/qqzvFuf0gW+t6bZrqOpimT3ubbHPsGTeFnsc
tMzybvGf+65r/NXlJd8NX6zjS5f84NIb+ecb0ekfXPu/uPTXOMnvYfsfZftB
iZCwyOtsY3DyvuY+2bDPznb7Xix+yVUed1+/yrzr28IsClcaUaT1vsdxuZXo
LlHEbN3Fp9e93OTerOQtf1nlG1P5yxWf/jqY4GDLsjKLxWdwm651ZS+WXSzu
ZTdX9LBgNxr1y2hzWCb1hOgCV/L3MvveweU06JbZXdea/ID/vP18KUd7e39/
u+aek6hefPaZ2hO7PdjSeHrnKrvNiw+m8/L/n+9/y0q4h3sw7TE7b+SrzNs/
of8LeeLvEI4C1YjpzooZklWyynkcy3Qqm3zzOivaY9O5XZs3cI6scHVnPnaZ
qfONOBIcOMdP8hSXfoSSbZ3lmW4vi/yvad3q/f093w4Hz4zvuILfiwr5Fox5
sB18TpZs8mPl8lLe/7U2//T1UTmJZqOiVE83JZ6zW1uo70nomHRBWxdVX/JE
ebJKdnOd8TRlaeVHQBjf+3LV9Q0cQzRUdaatAZPpajfX/pI/4vVnLXR1wMLP
5JSu7xD88L+WeyWvtGY1PZSYtK86i50+mnIJQKizt+5dtqlcwZhaZl59Rx6F
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
AAA=

-->

</rfc>

