Internet DRAFT - draft-vvv-webtransport-quic

draft-vvv-webtransport-quic







Network Working Group                                        V. Vasiliev
Internet-Draft                                                    Google
Intended status: Standards Track                           June 30, 2020
Expires: January 1, 2021


                         WebTransport over QUIC
                     draft-vvv-webtransport-quic-02

Abstract

   WebTransport [OVERVIEW] is a protocol framework that enables clients
   constrained by the Web security model to communicate with a remote
   server using a secure multiplexed transport.  This document describes
   QuicTransport, a transport protocol that uses a dedicated QUIC [QUIC]
   connection and provides support for unidirectional streams,
   bidirectional streams and datagrams.

Note to Readers

   Discussion of this draft takes place on the WebTransport mailing list
   (webtransport@ietf.org), which is archived at
   <https://mailarchive.ietf.org/arch/search/?email_list=webtransport>.

   The repository tracking the issues for this draft can be found at
   <https://github.com/vasilvv/webtransport/issues>.  The web API draft
   corresponding to this document can be found at
   <https://wicg.github.io/web-transport/>.

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 January 1, 2021.






Vasiliev                 Expires January 1, 2021                [Page 1]

Internet-Draft                QuicTransport                    June 2020


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  . . . . . . . . . . . . . . . . . . . . . . . .   2
     1.1.  Terminology . . . . . . . . . . . . . . . . . . . . . . .   3
   2.  Protocol Overview . . . . . . . . . . . . . . . . . . . . . .   3
   3.  Connection Establishment  . . . . . . . . . . . . . . . . . .   4
     3.1.  Identifying as QuicTransport  . . . . . . . . . . . . . .   4
     3.2.  Client Indication . . . . . . . . . . . . . . . . . . . .   4
       3.2.1.  Origin Field  . . . . . . . . . . . . . . . . . . . .   5
       3.2.2.  Path Field  . . . . . . . . . . . . . . . . . . . . .   6
     3.3.  0-RTT . . . . . . . . . . . . . . . . . . . . . . . . . .   6
   4.  Streams . . . . . . . . . . . . . . . . . . . . . . . . . . .   6
   5.  Datagrams . . . . . . . . . . . . . . . . . . . . . . . . . .   7
   6.  QuicTransport URI Scheme  . . . . . . . . . . . . . . . . . .   7
   7.  Transport Properties  . . . . . . . . . . . . . . . . . . . .   8
   8.  Security Considerations . . . . . . . . . . . . . . . . . . .   8
   9.  IANA Considerations . . . . . . . . . . . . . . . . . . . . .   9
     9.1.  ALPN Value Registration . . . . . . . . . . . . . . . . .   9
     9.2.  Client Indication Fields Registry . . . . . . . . . . . .   9
     9.3.  URI Scheme Registration . . . . . . . . . . . . . . . . .  10
   10. References  . . . . . . . . . . . . . . . . . . . . . . . . .  10
     10.1.  Normative References . . . . . . . . . . . . . . . . . .  10
     10.2.  Informative References . . . . . . . . . . . . . . . . .  12
     10.3.  URIs . . . . . . . . . . . . . . . . . . . . . . . . . .  12
   Author's Address  . . . . . . . . . . . . . . . . . . . . . . . .  12

1.  Introduction

   WebTransport [OVERVIEW] is a protocol framework that enables clients
   constrained by the Web security model to communicate with a remote
   server using a secure multiplexed transport.  This document describes
   QuicTransport, a transport protocol that uses a dedicated QUIC [QUIC]




Vasiliev                 Expires January 1, 2021                [Page 2]

Internet-Draft                QuicTransport                    June 2020


   connection and provides support for unidirectional streams,
   bidirectional streams and datagrams.

   QUIC [QUIC] is a UDP-based multiplexed secure transport.  It is the
   underlying protocol for HTTP/3 [I-D.ietf-quic-http], and as such is
   reasonably expected to be available in web browsers and server-side
   web frameworks.  This makes it a compelling transport to base a
   WebTransport protocol on.

   This document defines QuicTransport, a protocol conforming to the
   WebTransport protocol framework.  QuicTransport is an application
   protocol running directly over QUIC.  The protocol is designed to
   have low implementation overhead on the server side, meaning that
   server software that already has a working QUIC implementation
   available would not require large amounts of code to implement
   QuicTransport.  Where possible, WebTransport concepts are mapped
   directly to the corresponding QUIC concepts.

1.1.  Terminology

   The keywords "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.

   This document follows terminology defined in Section 1.2 of
   [OVERVIEW].  The diagrams describe encoding following the conventions
   described in Section 1.3 of [QUIC].

2.  Protocol Overview

   Each instance of QuicTransport uses a single dedicated QUIC
   connection.  This allows the peers to exercise a greater level of
   control over the way their data is being transmitted.  However, this
   also means that multiple instances of QuicTransport cannot be pooled,
   and thus do not benefit from sharing a congestion controller with
   other connections.

   QuicTransport is designed to be a minimal extension of QUIC, and as
   such does not provide much higher-level functionality, such as
   pooling, exchanging metadata at session establishment, redirects, and
   other similar capabilties not provided by QUIC itself.
   Http3Transport [I-D.vvv-webtransport-http3] can be used in situations
   where these features are desired.

   When a client requests a QuicTransport session to be created, the
   user agent establishes a QUIC connection to the specified address.



Vasiliev                 Expires January 1, 2021                [Page 3]

Internet-Draft                QuicTransport                    June 2020


   It verifies that the the server is a QuicTransport endpoint using
   ALPN, and additionally sends a client indication containing the
   requested path and the origin of the initiating website to the
   server.  At that point, the connection is ready from the client's
   perspective.  The server MUST wait until the client indication is
   received before processing any application data.

   WebTransport streams are provided by creating an individual
   unidirectional or bidirectional QUIC stream.  WebTransport datagrams
   are provided through the QUIC datagram extension [QUIC-DATAGRAM].

3.  Connection Establishment

   In order to establish a QuicTransport session, a QUIC connection must
   be established.  From the client perspective, the session becomes
   established when the client both have received a TLS Finished message
   from the server and has sent a client indication.  From the server
   perspective, the session is established after the client indication
   has been successfully processed.

3.1.  Identifying as QuicTransport

   In order to identify itself as a WebTransport application,
   QuicTransport relies on TLS Application-Layer Protocol Negotiation
   [RFC7301].  The user agent MUST request the ALPN value of "wq-vvv-01"
   and it MUST close the connection unless the server confirms that ALPN
   value.

3.2.  Client Indication

   In order to verify that the client's origin is allowed to connect to
   the server in question, the user agent has to communicate the origin
   to the server.  This is accomplished by sending a special message,
   called client indication, on stream 2, which is the first client-
   initiated unidirectional stream.

   The client indication is a sequence of key-value pairs that are
   formatted in the following way:

    0                   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
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |           Key (16)            |          Length (16)          |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                           Value (*)                         ...
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

                    Figure 1: Client indication format



Vasiliev                 Expires January 1, 2021                [Page 4]

Internet-Draft                QuicTransport                    June 2020


   The pair includes the following fields:

   Key:  Indicates the field that is being expressed.

   Length:  Indicates the length of the value (the length of the key and
      the length itself are not included).

   Value:  The value of the field, the semantics of which are determined
      by the key.

   A FIN on the stream 2 SHALL indicate that the message is complete.
   The client MUST send the entirety of the client indication and a FIN
   immediately after opening the connection.  The server MUST NOT
   process any application data before receiving the entirety of the
   client indication.  The total length of the client indication MUST
   NOT exceed 65,535 bytes.

   In order to ensure that the user agent can send the client indication
   immediately, the server MUST set "initial_max_streams_uni" transport
   parameter to at least "1".  The user agent MUST close the connection
   if the server sets "initial_max_streams_uni" to "0".

   The server MUST ignore any field it does not recognize.  All of the
   fields MUST be unique; the server MAY close the connection if any of
   the keys is used more than once.

3.2.1.  Origin Field

   In order to allow the server to enforce its origin policy, the user
   agent has to communicate the origin in the client indication.  This
   can be accomplished using the "Origin" field:

   Name:  Origin

   Key:  0x0000

   Description:  The origin [RFC6454] of the client initiating the
      connection.

   The user agent MUST send the "Origin" field.  The "Origin" field MUST
   be set to the origin of the client initiating the connection,
   serialized as described in the "serializing a request origin" section
   of [FETCH].








Vasiliev                 Expires January 1, 2021                [Page 5]

Internet-Draft                QuicTransport                    June 2020


3.2.2.  Path Field

   In order to allow multiplexing multiple application on the same host-
   port tuple, QuicTransport allows specifying extra routing information
   in the path component of the URI.  That component is communicated
   using the "Path" field in the client indication:

   Name:  Path

   Key:  0x0001

   Description:  The path component of the QuicTransport URI.

   The user agent MUST send a non-empty "Path" field.  When the
   connection is initiated through a URI Section 6, that value SHALL be
   the "path-abempty" part, followed by a concatenation of the "?"
   literal and the "query" componenet if such is present.  In case when
   "path-abempty" is empty, the value sent SHALL be "/".

   Unlike HTTP, the "authority" portion of the URL is not communicated
   in the client indication.  As QuicTransport has its own connection
   dedicated to it, the host name portion can be retrieved from the
   "server_name" TLS extension [RFC6066].

   The server MAY use the value of the "Path" field in any way defined
   by the target application.

3.3.  0-RTT

   QuicTransport provides applications with the ability to use the 0-RTT
   feature described in [RFC8446] and [QUIC].  0-RTT allows a client to
   send data before the TLS session is fully established.  It provides
   lower latency, but has the drawback of being vulnerable to replay
   attacks.  Since only the application can make an informed decision as
   to whether some data is safe to send in that context, 0-RTT requires
   the client API to only send data over 0-RTT when specifically
   requested by the client.

   0-RTT support in QuicTransport is OPTIONAL, as it is in QUIC and TLS
   1.3.

4.  Streams

   QuicTransport unidirectional and bidirectional streams are created by
   creating a QUIC stream of the corresponding type.  All other
   operations (read, write, close) are also mapped directly to the
   operations defined in [QUIC].  The QUIC stream IDs are the stream IDs
   that are exposed to the application.



Vasiliev                 Expires January 1, 2021                [Page 6]

Internet-Draft                QuicTransport                    June 2020


5.  Datagrams

   QuicTransport uses the QUIC DATAGRAM frame [QUIC-DATAGRAM] to provide
   WebTransport datagrams.  A QuicTransport endpoint MUST negotiate and
   support the DATAGRAM frame.  The datagrams provided by the
   application are sent as-is.

6.  QuicTransport URI Scheme

   NOTE: the URI scheme definition in this section is provisional and
   subject to change, especially the name of the scheme.

   QuicTransport uses the "quic-transport" URI scheme for identifying
   QuicTransport servers.

   The syntax definition below uses Augmented Backus-Naur Form (ABNF)
   [RFC5234].  The definitions of "host", "port", "path-abempty",
   "query" and "fragment" are adopted from [RFC3986].  The syntax of a
   QuicTransport URI SHALL be:

   quic-transport-URI = "quic-transport:" "//"
                                host [ ":" port ]
                                path-abempty
                                [ "?" query ]
                                [ "#" fragment ]

   The "path-abempty" and the "query" portions of the URI are
   communicated to the server in the client indication as described in
   Section 3.2.2.  The "quic-transport" URI scheme supports the "/.well-
   known/" path prefix defined in [RFC8615].

   This document does not assign any semantics to the "fragment" portion
   of the URI.  Any QuicTransport implementation MUST ignore those until
   a subsequent specification assigns semantics to those.

   The "host" component MUST NOT be empty.  If the "port" component is
   missing, the port SHALL be assumed to be 0.

   In order to connect to a QuicTransport server identified by a given
   URI, the user agent SHALL establish a QUIC connection to the
   specified "host" and "port" as described in Section 3.  It MUST
   immediately signal an error to the client if the port value is 0.

   NOTE: this effectively requires the port number to be specified.
   This specification may include an actually usable default port number
   in the future.





Vasiliev                 Expires January 1, 2021                [Page 7]

Internet-Draft                QuicTransport                    June 2020


7.  Transport Properties

   QuicTransport supports most WebTransport features as described in
   Table 1.

            +---------------------+--------------------------+
            | Property            | Support                  |
            +---------------------+--------------------------+
            | Stream independence | Always supported         |
            |                     |                          |
            | Partial reliability | Always supported         |
            |                     |                          |
            | Pooling support     | Not supported            |
            |                     |                          |
            | Connection mobility | Implementation-dependent |
            +---------------------+--------------------------+

              Table 1: Transport properties of QuicTransport

8.  Security Considerations

   QuicTransport satisfies all of the security requirements imposed by
   [OVERVIEW] on WebTransport protocols, thus providing a secure
   framework for client-server communication in cases when the the
   client is potentially untrusted.

   QuicTransport uses QUIC with TLS, and as such, provides the full
   range of security properties provided by TLS, including
   confidentiality, integrity and authentication of the server.

   QUIC is a client-server protocol where a client cannot send data
   until either the handshake is complete or a previously established
   session is resumed.  This ensures that clients cannot send data to a
   network endpoint that has not accepted an incoming connection.
   Furthermore, the QuicTransport session can be immediately aborted by
   the server through a connection close or a stateless reset, causing
   the user agent to stop the traffic from the client.  This provides a
   defense against potential denial-of-service attacks on the network by
   untrusted clients.

   QUIC provides a congestion control mechanism [I-D.ietf-quic-recovery]
   that limits the rate at which the traffic is sent.  This prevents
   potentially malicious clients from overloading the network.

   WebTransport requires user agents to continually verify that the
   server is still interested in talking to them.  QuicTransport
   accomplishes that by virtue of QUIC being an acknowledgement-based
   protocol; if the client is attempting to send data, and the server



Vasiliev                 Expires January 1, 2021                [Page 8]

Internet-Draft                QuicTransport                    June 2020


   does not send any ACK frames in response, the client side of the QUIC
   connection will time out.

   QuicTransport prevents WebTransport clients from connecting to
   arbitrary non-Web servers through the use of ALPN.  Unlike TLS over
   TCP, successful ALPN negotiation is mandatory in QUIC.  Thus, unless
   the server explicitly picks the QuicTransport ALPN value, the TLS
   handshake will fail.

   QuicTransport uses a unidirectional QUIC stream to provide the server
   with the origin of the client.

   In order to avoid the use of QuicTransport to scan internal networks,
   the user agents MUST NOT allow the clients to distinguish different
   connection errors before the correct ALPN is received from the
   server.

   Since each instance of QuicTransport opens a new connection, a
   malicious client can cause resource exhaustion, both on the local
   system (through depleting file descriptor space or other per-
   connection resources) and on a given remote server.  Because of that,
   user agents SHOULD limit the amount of simultaneous connections
   opened.  The server MAY limit the amount of open connections from a
   given client.

9.  IANA Considerations

9.1.  ALPN Value Registration

   The following entry is added to the "Application Layer Protocol
   Negotiation (ALPN) Protocol IDs" registry established by [RFC7301]:

   The "wq-vvv-01" label identifies QUIC used as a protocol for
   WebTransport:

   Protocol:  QuicTransport

   Identification Sequence:  0x77 0x71 0x2d 0x76 0x76 0x76 0x2d 0x30
      0x31 ("wq-vvv-01")

   Specification:  This document

9.2.  Client Indication Fields Registry

   IANA SHALL add a registry for "QuicTransport Client Indication
   Fields" registry.  Every entry in the registry SHALL include the
   following fields:




Vasiliev                 Expires January 1, 2021                [Page 9]

Internet-Draft                QuicTransport                    June 2020


   Name:  The name of the field.

   Key:  The 16-bit unique identifier that is used on the wire.

   Description:  A brief description of what the parameter does.

   Reference:  The document that describes the parameter.

   The IANA policy, as described in [RFC8126], SHALL be Standards Action
   for values between 0x0000 and 0x03ff; Specification Required for
   values between 0x0400 and 0xefff; and Private Use for values between
   0xf000 and 0xffff.

9.3.  URI Scheme Registration

   This document contains the request for the registration of the URI
   scheme "quic-transport".  The registration request is in accordance
   with [RFC7595].

   Scheme name:  quic-transport

   Status:  Permanent

   Applications/protocols that use this scheme name:  QuicTransport

   Contact:  IETF Chair chair@ietf.org [1]

   Change controller:  IESG iesg@ietf.org [2]

   Reference:  Section 6 of this document.

   Well-Known URI Support:  Section 6 of this document.

10.  References

10.1.  Normative References

   [FETCH]    WHATWG, "Fetch Standard", June 2020,
              <https://fetch.spec.whatwg.org/>.

   [OVERVIEW]
              Vasiliev, V., "The WebTransport Protocol Framework",
              draft-ietf-webtrans-overview-latest (work in progress).

   [QUIC]     Iyengar, J., Ed. and M. Thomson, Ed., "QUIC: A UDP-Based
              Multiplexed and Secure Transport", draft-ietf-quic-
              transport-latest (work in progress).




Vasiliev                 Expires January 1, 2021               [Page 10]

Internet-Draft                QuicTransport                    June 2020


   [QUIC-DATAGRAM]
              Pauly, T., Kinnear, E., and D. Schinazi, "An Unreliable
              Datagram Extension to QUIC", draft-pauly-quic-datagram-
              latest (work in progress).

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

   [RFC3986]  Berners-Lee, T., Fielding, R., and L. Masinter, "Uniform
              Resource Identifier (URI): Generic Syntax", STD 66,
              RFC 3986, DOI 10.17487/RFC3986, January 2005,
              <https://www.rfc-editor.org/info/rfc3986>.

   [RFC5234]  Crocker, D., Ed. and P. Overell, "Augmented BNF for Syntax
              Specifications: ABNF", STD 68, RFC 5234,
              DOI 10.17487/RFC5234, January 2008,
              <https://www.rfc-editor.org/info/rfc5234>.

   [RFC6454]  Barth, A., "The Web Origin Concept", RFC 6454,
              DOI 10.17487/RFC6454, December 2011,
              <https://www.rfc-editor.org/info/rfc6454>.

   [RFC7301]  Friedl, S., Popov, A., Langley, A., and E. Stephan,
              "Transport Layer Security (TLS) Application-Layer Protocol
              Negotiation Extension", RFC 7301, DOI 10.17487/RFC7301,
              July 2014, <https://www.rfc-editor.org/info/rfc7301>.

   [RFC7595]  Thaler, D., Ed., Hansen, T., and T. Hardie, "Guidelines
              and Registration Procedures for URI Schemes", BCP 35,
              RFC 7595, DOI 10.17487/RFC7595, June 2015,
              <https://www.rfc-editor.org/info/rfc7595>.

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

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





Vasiliev                 Expires January 1, 2021               [Page 11]

Internet-Draft                QuicTransport                    June 2020


   [RFC8615]  Nottingham, M., "Well-Known Uniform Resource Identifiers
              (URIs)", RFC 8615, DOI 10.17487/RFC8615, May 2019,
              <https://www.rfc-editor.org/info/rfc8615>.

10.2.  Informative References

   [I-D.ietf-quic-http]
              Bishop, M., "Hypertext Transfer Protocol Version 3
              (HTTP/3)", draft-ietf-quic-http-29 (work in progress),
              June 2020.

   [I-D.ietf-quic-recovery]
              Iyengar, J. and I. Swett, "QUIC Loss Detection and
              Congestion Control", draft-ietf-quic-recovery-29 (work in
              progress), June 2020.

   [I-D.vvv-webtransport-http3]
              Vasiliev, V., "WebTransport over HTTP/3", draft-vvv-
              webtransport-http3-01 (work in progress), November 2019.

   [RFC6066]  Eastlake 3rd, D., "Transport Layer Security (TLS)
              Extensions: Extension Definitions", RFC 6066,
              DOI 10.17487/RFC6066, January 2011,
              <https://www.rfc-editor.org/info/rfc6066>.

10.3.  URIs

   [1] mailto:chair@ietf.org

   [2] mailto:iesg@ietf.org

Author's Address

   Victor Vasiliev
   Google

   Email: vasilvv@google.com














Vasiliev                 Expires January 1, 2021               [Page 12]