TAPS Working Group                                              T. Pauly
Internet-Draft                                                     Apple
Intended status: Standards Track                           19 March 2022
Expires: 20 September 2022


                 A Transport Services Mapping for QUIC
                       draft-taps-quic-mapping-00

Abstract

   This document defines a Transport Services API mapping for QUIC
   streams.

Discussion Venues

   This note is to be removed before publishing as an RFC.

   Discussion of this document takes place on the QUIC Working Group
   mailing list (quic@ietf.org), which is archived at
   https://mailarchive.ietf.org/arch/browse/quic/.

   Source for this draft and an issue tracker can be found at
   https://github.com/tfpauly/draft-taps-quic-mapping.

Status of This Memo

   This Internet-Draft is submitted in full conformance with the
   provisions of BCP 78 and BCP 79.

   Internet-Drafts are working documents of the Internet Engineering
   Task Force (IETF).  Note that other groups may also distribute
   working documents as Internet-Drafts.  The list of current Internet-
   Drafts is at https://datatracker.ietf.org/drafts/current/.

   Internet-Drafts are draft documents valid for a maximum of six months
   and may be updated, replaced, or obsoleted by other documents at any
   time.  It is inappropriate to use Internet-Drafts as reference
   material or to cite them other than as "work in progress."

   This Internet-Draft will expire on 20 September 2022.

Copyright Notice

   Copyright (c) 2022 IETF Trust and the persons identified as the
   document authors.  All rights reserved.





Pauly                   Expires 20 September 2022               [Page 1]


Internet-Draft                QUIC Mapping                    March 2022


   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 Revised BSD License text as
   described in Section 4.e of the Trust Legal Provisions and are
   provided without warranty as described in the Revised BSD License.

Table of Contents

   1.  Introduction  . . . . . . . . . . . . . . . . . . . . . . . .   2
   2.  Conventions and Definitions . . . . . . . . . . . . . . . . .   2
   3.  QUIC Stream Mapping . . . . . . . . . . . . . . . . . . . . .   2
   4.  Security Considerations . . . . . . . . . . . . . . . . . . .   4
   5.  IANA Considerations . . . . . . . . . . . . . . . . . . . . .   4
   6.  Normative References  . . . . . . . . . . . . . . . . . . . .   4
   Author's Address  . . . . . . . . . . . . . . . . . . . . . . . .   5

1.  Introduction

   This document defines a Transport Services mapping, as defined in
   [I-D.ietf-taps-impl] for the QUIC protocol [RFC9000].  This mapping,
   presented in Section 3, allows QUIC to be used with the calls defined
   in the Transport Services API [I-D.ietf-taps-interface].

   This mapping treats a single QUIC stream as a Transport Services
   Connection object, since this is an equivalent abstraction to the
   byte-stream abstractions offered by TCP or TLS over TCP.  QUIC
   streams are multiplexed within QUIC connections; a QUIC connection is
   represented in the Transport Services API as a Connection Group.

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.  QUIC Stream Mapping

   Connectedness: Multiplexing Connected

   Data Unit: Byte-stream

   Connection Object:  A Connection object in the Transport Services API




Pauly                   Expires 20 September 2022               [Page 2]


Internet-Draft                QUIC Mapping                    March 2022


      maps to a single QUIC stream between two hosts.  This stream can
      be bidirectional or unidirectional.

   Initiate:  Calling Initiate on a QUIC stream Connection causes the
      implementation to prepare a new QUIC stream to the Remote
      Endpoint.  If there is already a QUIC connection to the Remote
      Endpoint, Initiate simply prepares a new stream by allocating a
      stream ID.  If there is not already a QUIC connection established,
      the implementation will establish a connection first.

   InitiateWithSend:  Early data sent in InitiateWithSend will be used
      for 0-RTT QUIC connection establishment, if the QUIC connection to
      the Remote Endpoint is not already established and the local
      device has previously negotiated support for 0-RTT establishment
      with the Remote Endpoint.

   Ready:  A QUIC stream Connection is ready once the underlying QUIC
      connection is established, and once a stream ID can be allocated.
      This may be delayed if stream creation is blocked due to reaching
      the maximum streams limit.

   InitiateError:  QUIC can throw various errors during connection setup
      (handshake failure, timeouts, etc).  Errors for Initiate will
      represent QUIC connection-level errors.  Once a QUIC connection is
      established, allocation of a QUIC stream ID may be delayed, but
      will not generate an error.

   ConnectionError:  Once created, a QUIC stream Connection throws an
      error whenever the stream is disconnected, such as when a
      RESET_STREAM frame is receieved.

   Listen:  Calling Listen for QUIC binds to a local UDP port and
      prepare to receive inbound QUIC connections and streams.

   ConnectionReceived:  QUIC listeners will deliver each inbound QUIC
      stream as a Connection object.  The relationship of inbound
      streams to other streams in a single QUIC connection can be
      detected by checking Connection.GroupedConnections().

   Clone:  Cloning a QUIC stream Connection creates a new stream on an
      existing QUIC connection.  This new stream will inherently share
      all parameters with the original stream.

   Send:  Sending data will generate a STREAM frame using the stream ID
      assigned to the Connection object.

   Receive:  Calling Receive will indicate that the caller is ready to




Pauly                   Expires 20 September 2022               [Page 3]


Internet-Draft                QUIC Mapping                    March 2022


      receive data from this stream, which is sent by the peer in STREAM
      frames using the stream ID assigned to the Connection object.
      Data is delivered in either the Recieved or RecievedPartial event.

   Close:  Calling Close on a QUIC stream Connection indicates that the
      stream should gracefully closed by setting the FIN bit on the
      stream.

   Abort:  Calling Close on a QUIC stream Connection indicates that the
      stream should closed immediately, by sending a RESET_STREAM frame.

   CloseGroup:  Calling CloseGroup on any QUIC stream in a Connection
      Group indicates that the shared QUIC connection should be closed
      using a CONNECTION_CLOSE frame once all open streams have
      completed.

   AbortGroup:  Calling AbortGroup on any QUIC stream in a Connection
      Group indicates that the shared QUIC connection should be closed
      immediately using a CONNECTION_CLOSE frame.

4.  Security Considerations

   The security properties of a QUIC connection are expressed in the
   QUIC handshake, and thus are shared amongst all streams on a single
   QUIC connection.  When used with the Transport Services API, security
   parameters are expressed in the Preconnection object.  Connection
   objects used for QUIC streams MUST only be grouped with other QUIC
   streams when the security parameters defined in the Preconnection
   objects are identical or equivalent.

5.  IANA Considerations

   This document has no IANA actions.

6.  Normative References

   [I-D.ietf-taps-impl]
              Brunstrom, A., Pauly, T., Enghardt, T., Tiesel, P. S., and
              M. Welzl, "Implementing Interfaces to Transport Services",
              Work in Progress, Internet-Draft, draft-ietf-taps-impl-12,
              7 March 2022, <https://datatracker.ietf.org/doc/html/
              draft-ietf-taps-impl-12>.

   [I-D.ietf-taps-interface]
              Trammell, B., Welzl, M., Enghardt, T., Fairhurst, G.,
              Kuehlewind, M., Perkins, C., Tiesel, P. S., and T. Pauly,
              "An Abstract Application Layer Interface to Transport
              Services", Work in Progress, Internet-Draft, draft-ietf-



Pauly                   Expires 20 September 2022               [Page 4]


Internet-Draft                QUIC Mapping                    March 2022


              taps-interface-15, 7 March 2022,
              <https://datatracker.ietf.org/doc/html/draft-ietf-taps-
              interface-15>.

   [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/rfc/rfc2119>.

   [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/rfc/rfc8174>.

   [RFC9000]  Iyengar, J., Ed. and M. Thomson, Ed., "QUIC: A UDP-Based
              Multiplexed and Secure Transport", RFC 9000,
              DOI 10.17487/RFC9000, May 2021,
              <https://www.rfc-editor.org/rfc/rfc9000>.

Author's Address

   Tommy Pauly
   Apple
   Email: tpauly@apple.com




























Pauly                   Expires 20 September 2022               [Page 5]