Internet DRAFT - draft-thomson-webtrans-hwtq
draft-thomson-webtrans-hwtq
WEBTRANS M. Thomson
Internet-Draft Mozilla
Intended status: Informational 12 July 2021
Expires: 13 January 2022
Generic HTTP Binding for WebTransport using QUIC
draft-thomson-webtrans-hwtq-00
Abstract
The WebTransport API provides an interface to HTTP resources that
provides transport-layer capabilities. This document describes how a
subset of the QUIC protocol can be used to provide these transport
capabilities.
Discussion Venues
This note is to be removed before publishing as an RFC.
Discussion of this document takes place on the WebTransport Working
Group mailing list (webtransport@ietf.org), which is archived at
https://mailarchive.ietf.org/arch/browse/webtransport/.
Source for this draft and an issue tracker can be found at
https://github.com/martinthomson/webtransport-hwtq.
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 13 January 2022.
Copyright Notice
Copyright (c) 2021 IETF Trust and the persons identified as the
document authors. All rights reserved.
Thomson Expires 13 January 2022 [Page 1]
Internet-Draft WebTransport over QUIC over HTTP July 2021
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
2. Conventions and Definitions . . . . . . . . . . . . . . . . . 3
3. Overview . . . . . . . . . . . . . . . . . . . . . . . . . . 3
3.1. Open Design Questions . . . . . . . . . . . . . . . . . . 4
4. Comparison to an HTTP/2-Only Design . . . . . . . . . . . . . 4
4.1. Session Control and Resource Management . . . . . . . . . 4
4.2. Stream States . . . . . . . . . . . . . . . . . . . . . . 5
4.3. HTTP/1.1 . . . . . . . . . . . . . . . . . . . . . . . . 5
4.4. Additional Framing . . . . . . . . . . . . . . . . . . . 5
4.5. RESET_STREAM Redundancies . . . . . . . . . . . . . . . . 6
5. Security Considerations . . . . . . . . . . . . . . . . . . . 6
6. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 6
7. Normative References . . . . . . . . . . . . . . . . . . . . 6
Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . . . 7
Author's Address . . . . . . . . . . . . . . . . . . . . . . . . 7
1. Introduction
This document is input to discussion of the design of [WTH2] and --
to a lesser extent -- [WTH3]. The author has no intent of pursuing
publication of this document, it exists only to provide a more
complete exploration of an alternative design.
This document describes a means of providing a WebTransport-capable
mapping to any HTTP version, with a specific goal of providing a TCP-
based design that fulfills all of the basic WebTransport
requirements.
The proposed design transplants the design of QUIC streams [QUIC]
almost directly, saving specification effort. This might also save
implementation and validation effort through reuse.
Thomson Expires 13 January 2022 [Page 2]
Internet-Draft WebTransport over QUIC over HTTP July 2021
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. Overview
The WebTransport API depends on three basic functions: bidirectional
and unidirectional streams, plus datagrams. When using a QUIC
transport, using native QUIC support for these capabilities ([QUIC],
[QD]) provides the best performance. However, the need to provide a
TCP-based protocol means finding a protocol that works with -- at a
minimum -- HTTP/2.
This document proposes that an extended CONNECT [EXT-CONNECT] be used
to establish a new connection using a new protocol identifier (with
an identifier to be decided). Using CONNECT results in a
bidirectional communications medium with stream characteristics
between client and server.
Once established, this document proposes using a subset of QUIC
frames to carry the control messages, stream data, and datagrams.
The following frames would be permitted:
* PADDING
* RESET_STREAM
* STOP_SENDING
* STREAM (with the 0x02 bit set only)
* MAX_DATA
* MAX_STREAM_DATA
* MAX_STREAMS
* DATA_BLOCKED
* STREAM_DATA_BLOCKED
* STREAMS_BLOCKED
* DATAGRAM (0x31 only; from [QD])
Thomson Expires 13 January 2022 [Page 3]
Internet-Draft WebTransport over QUIC over HTTP July 2021
This set of frames is sufficient to carry data for streams of the
necessary types. It also provides a complete set of resource
management functions that operate within the scope of the
bidirectional WebTransport communication.
This would use a subset of the stream states in [QUIC]. This ensures
that the API is able to present a very similar interface to streams
as that provided in QUIC. Implementations might be simplified
slightly as some state transitions are not possible in a context
where ordered delivery can be guaranteed.
Endpoints MUST NOT send stream data that is not contiguous or out of
order. The underlying transport provides reliable, ordered delivery.
Implementations will still need to buffer stream data, but the
implementation of that buffering does not need to handle gaps in
incoming flow.
3.1. Open Design Questions
It is not clear whether "connection"-level flow control (the QUIC
MAX_DATA frame) is necessary in the context of this integration. TCP
or HTTP/2 flow control mechanisms already exist to control the flow
of information on the request and response, which makes the control
redundant in some circumstances. The inclusion is justified by the
potential for DATAGRAM frames and other control frames to be
exchanged independent of this limit.
A connection close signal at the level of the WebTransport is
possible. The QUIC application CONNECTION_CLOSE (0x1d) might be used
for this purpose.
4. Comparison to an HTTP/2-Only Design
The main claim made here is that this design is comparatively simpler
than the design in [WTH2]. However, there are other consequences
that are worth consideration. This section attempts to document
these more fully.
4.1. Session Control and Resource Management
The QUIC binding in [WTH3] is complicated by the need to manage the
total number of WebTransport sessions on the one connection.
Furthermore, the use of shared resources at the level of the
connection (streams especially) means that it is necessary to
carefully manage the commitment of resources to a
Thomson Expires 13 January 2022 [Page 4]
Internet-Draft WebTransport over QUIC over HTTP July 2021
[WTH2] has similar constraints on operation. This proposal avoids
using a shared resource for its functions, avoiding that problem.
The cost is that sessions are exposed to additional head-of-line
blocking performance costs. As the goal of the protocol is to
support TCP-based HTTP versions, the marginal impact of head-of-line
blocking is expected to be minimal.
4.2. Stream States
[WTH2] describes a design that integrates with the HTTP/2 stream
state machine. This is challenging as it results in the details of
the HTTP/2 stream state machine being visible in the API. In
particular, the closing of send and receive parts of HTTP/2 streams
are coupled, where they are independent in QUIC.
As a protocol extension, this difference could be addressed with
adjustments to the state machine, but this results in the
implementation of an entirely new state management logic, which
increases implementation complexity.
The other way to resolve this discrepancy is to require the same sort
of close-state coupling when QUIC is used so that behavior is
consistent across different protocol versions.
4.3. HTTP/1.1
Though not a hard requirement of the design, the ability to support
HTTP/1.1 is an advantage of this design.
It is also possible to use this design with HTTP/3, albeit with worse
performance characteristics than the more complete design of [WTH3].
This is offered merely as an observation.
4.4. Additional Framing
This proposal adds an additional layer of framing, which increases
overheads in HTTP/2. This is less efficient in terms of overheads
than native use of HTTP/2 layer constructs. This is partially
mitigated by the relatively good efficiency of QUIC framing and the
potential to send larger frames with the HTTP/2 stream. The QUIC-
derived frames this uses do not need to be limited in size in the
same way as those at the HTTP/2 layer.
Thomson Expires 13 January 2022 [Page 5]
Internet-Draft WebTransport over QUIC over HTTP July 2021
4.5. RESET_STREAM Redundancies
There is a small bit of redundancy in the RESET_STREAM frame. With a
reliable substrate, there is no need to signal the number of bytes
that were consumed by the stream in a RESET_STREAM frame. This field
could be safely removed, if reuse of the QUIC encodings was deemed to
be unimportant.
In the current design, endpoints are required to provide an accurate
value for the Final Size field of RESET_STREAM frames they send and
to validate the value they received.
5. Security Considerations
Relatively few of the security considerations of QUIC apply, though a
small few are relevant, such as Section 21.6 of [QUIC].
6. IANA Considerations
This document has no IANA actions. Currently. It might be necessary
to work out how the framing layer might be extended in a way that can
avoid collisions between frames used in QUIC and this design. A few
options seem plausible:
* Register WebTransport extensions in the QUIC registry. After all,
there is tons of space over there. The main cost there is
recording what context each frame type applies to.
* Make a clone of the registry for WebTransport that only contains
WebTransport frames. This is relatively simple, but might result
in collisions as both protocols independently evolve.
* Forego extensibility, at least in the short term, and require a
revision or update to the protocol to define new frames or to add
the use of a registry.
7. Normative References
[EXT-CONNECT]
McManus, P., "Bootstrapping WebSockets with HTTP/2",
RFC 8441, DOI 10.17487/RFC8441, September 2018,
<https://www.rfc-editor.org/rfc/rfc8441>.
[QD] Pauly, T., Kinnear, E., and D. Schinazi, "An Unreliable
Datagram Extension to QUIC", Work in Progress, Internet-
Draft, draft-ietf-quic-datagram-02, 16 February 2021,
<https://datatracker.ietf.org/doc/html/draft-ietf-quic-
datagram-02>.
Thomson Expires 13 January 2022 [Page 6]
Internet-Draft WebTransport over QUIC over HTTP July 2021
[QUIC] 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>.
[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>.
[WTH2] Frindell, A., Kinnear, E., Pauly, T., Vasiliev, V., and G.
Xie, "WebTransport using HTTP/2", Work in Progress,
Internet-Draft, draft-ietf-webtrans-http2-00, 3 July 2021,
<https://datatracker.ietf.org/doc/html/draft-ietf-
webtrans-http2-00>.
[WTH3] Vasiliev, V., "WebTransport over HTTP/3", Work in
Progress, Internet-Draft, draft-ietf-webtrans-http3-01, 19
May 2021, <https://datatracker.ietf.org/doc/html/draft-
ietf-webtrans-http3-01>.
Acknowledgments
Alan Frindell probably doesn't like this proposal all that much, but
he at a minimum deserves some credit for it being written down.
Author's Address
Martin Thomson
Mozilla
Email: mt@lowentropy.net
Thomson Expires 13 January 2022 [Page 7]