draft-ietf-masque-h3-datagram-06.txt | draft-ietf-masque-h3-datagram-07.txt | |||
---|---|---|---|---|
MASQUE D. Schinazi | MASQUE D. Schinazi | |||
Internet-Draft Google LLC | Internet-Draft Google LLC | |||
Intended status: Standards Track L. Pardue | Intended status: Standards Track L. Pardue | |||
Expires: 5 September 2022 Cloudflare | Expires: 22 September 2022 Cloudflare | |||
4 March 2022 | 21 March 2022 | |||
Using Datagrams with HTTP | Using Datagrams with HTTP | |||
draft-ietf-masque-h3-datagram-06 | draft-ietf-masque-h3-datagram-07 | |||
Abstract | Abstract | |||
The QUIC DATAGRAM extension provides application protocols running | The QUIC DATAGRAM extension provides application protocols running | |||
over QUIC with a mechanism to send unreliable data while leveraging | over QUIC with a mechanism to send unreliable data while leveraging | |||
the security and congestion-control properties of QUIC. However, | the security and congestion-control properties of QUIC. However, | |||
QUIC DATAGRAM frames do not provide a means to demultiplex | QUIC DATAGRAM frames do not provide a means to demultiplex | |||
application contexts. This document describes how to use QUIC | application contexts. This document describes how to use QUIC | |||
DATAGRAM frames with HTTP/3 by association with HTTP requests. | DATAGRAM frames with HTTP/3 by association with HTTP requests. | |||
Additionally, this document defines the Capsule Protocol that can | Additionally, this document defines the Capsule Protocol that can | |||
skipping to change at page 1, line 49 ¶ | skipping to change at page 1, line 49 ¶ | |||
Internet-Drafts are working documents of the Internet Engineering | Internet-Drafts are working documents of the Internet Engineering | |||
Task Force (IETF). Note that other groups may also distribute | Task Force (IETF). Note that other groups may also distribute | |||
working documents as Internet-Drafts. The list of current Internet- | working documents as Internet-Drafts. The list of current Internet- | |||
Drafts is at https://datatracker.ietf.org/drafts/current/. | Drafts is at https://datatracker.ietf.org/drafts/current/. | |||
Internet-Drafts are draft documents valid for a maximum of six months | Internet-Drafts are draft documents valid for a maximum of six months | |||
and may be updated, replaced, or obsoleted by other documents at any | and may be updated, replaced, or obsoleted by other documents at any | |||
time. It is inappropriate to use Internet-Drafts as reference | time. It is inappropriate to use Internet-Drafts as reference | |||
material or to cite them other than as "work in progress." | material or to cite them other than as "work in progress." | |||
This Internet-Draft will expire on 5 September 2022. | This Internet-Draft will expire on 22 September 2022. | |||
Copyright Notice | Copyright Notice | |||
Copyright (c) 2022 IETF Trust and the persons identified as the | Copyright (c) 2022 IETF Trust and the persons identified as the | |||
document authors. All rights reserved. | document authors. All rights reserved. | |||
This document is subject to BCP 78 and the IETF Trust's Legal | This document is subject to BCP 78 and the IETF Trust's Legal | |||
Provisions Relating to IETF Documents (https://trustee.ietf.org/ | Provisions Relating to IETF Documents (https://trustee.ietf.org/ | |||
license-info) in effect on the date of publication of this document. | license-info) in effect on the date of publication of this document. | |||
Please review these documents carefully, as they describe your rights | Please review these documents carefully, as they describe your rights | |||
and restrictions with respect to this document. Code Components | and restrictions with respect to this document. Code Components | |||
extracted from this document must include Revised BSD License text as | extracted from this document must include Revised BSD License text as | |||
described in Section 4.e of the Trust Legal Provisions and are | described in Section 4.e of the Trust Legal Provisions and are | |||
provided without warranty as described in the Revised BSD License. | provided without warranty as described in the Revised BSD License. | |||
Table of Contents | Table of Contents | |||
1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 3 | 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 2 | |||
1.1. Conventions and Definitions . . . . . . . . . . . . . . . 3 | 1.1. Conventions and Definitions . . . . . . . . . . . . . . . 3 | |||
2. Multiplexing . . . . . . . . . . . . . . . . . . . . . . . . 3 | 2. Multiplexing . . . . . . . . . . . . . . . . . . . . . . . . 3 | |||
3. HTTP/3 Datagram Format . . . . . . . . . . . . . . . . . . . 4 | 3. HTTP/3 Datagram Format . . . . . . . . . . . . . . . . . . . 3 | |||
3.1. The H3_DATAGRAM HTTP/3 SETTINGS Parameter . . . . . . . . 5 | 3.1. The H3_DATAGRAM HTTP/3 SETTINGS Parameter . . . . . . . . 5 | |||
3.1.1. Note About Draft Versions . . . . . . . . . . . . . . 6 | 3.1.1. Note About Draft Versions . . . . . . . . . . . . . . 5 | |||
4. Capsules . . . . . . . . . . . . . . . . . . . . . . . . . . 6 | 4. Capsules . . . . . . . . . . . . . . . . . . . . . . . . . . 6 | |||
4.1. Capsule Protocol . . . . . . . . . . . . . . . . . . . . 7 | 4.1. Capsule Protocol . . . . . . . . . . . . . . . . . . . . 7 | |||
4.2. Error Handling . . . . . . . . . . . . . . . . . . . . . 8 | 4.2. Error Handling . . . . . . . . . . . . . . . . . . . . . 8 | |||
4.3. The Capsule-Protocol Header Field . . . . . . . . . . . . 8 | 4.3. The Capsule-Protocol Header Field . . . . . . . . . . . . 8 | |||
4.4. The DATAGRAM Capsule . . . . . . . . . . . . . . . . . . 9 | 4.4. The DATAGRAM Capsule . . . . . . . . . . . . . . . . . . 9 | |||
5. Prioritization . . . . . . . . . . . . . . . . . . . . . . . 10 | 5. Prioritization . . . . . . . . . . . . . . . . . . . . . . . 10 | |||
6. Security Considerations . . . . . . . . . . . . . . . . . . . 11 | 6. Security Considerations . . . . . . . . . . . . . . . . . . . 10 | |||
7. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 11 | 7. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 11 | |||
7.1. HTTP/3 SETTINGS Parameter . . . . . . . . . . . . . . . . 11 | 7.1. HTTP/3 SETTINGS Parameter . . . . . . . . . . . . . . . . 11 | |||
7.2. HTTP/3 Error Code . . . . . . . . . . . . . . . . . . . . 11 | 7.2. HTTP/3 Error Code . . . . . . . . . . . . . . . . . . . . 11 | |||
7.3. HTTP Header Field Name . . . . . . . . . . . . . . . . . 12 | 7.3. HTTP Header Field Name . . . . . . . . . . . . . . . . . 11 | |||
7.4. Capsule Types . . . . . . . . . . . . . . . . . . . . . . 12 | 7.4. Capsule Types . . . . . . . . . . . . . . . . . . . . . . 12 | |||
8. References . . . . . . . . . . . . . . . . . . . . . . . . . 13 | 8. References . . . . . . . . . . . . . . . . . . . . . . . . . 12 | |||
8.1. Normative References . . . . . . . . . . . . . . . . . . 13 | 8.1. Normative References . . . . . . . . . . . . . . . . . . 12 | |||
8.2. Informative References . . . . . . . . . . . . . . . . . 14 | 8.2. Informative References . . . . . . . . . . . . . . . . . 14 | |||
Appendix A. Examples . . . . . . . . . . . . . . . . . . . . . . 14 | Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . . . 14 | |||
A.1. CONNECT-UDP . . . . . . . . . . . . . . . . . . . . . . . 14 | Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 14 | |||
A.2. WebTransport . . . . . . . . . . . . . . . . . . . . . . 15 | ||||
Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . . . 16 | ||||
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 16 | ||||
1. Introduction | 1. Introduction | |||
The QUIC DATAGRAM extension [DGRAM] provides application protocols | The QUIC DATAGRAM extension [DGRAM] provides application protocols | |||
running over QUIC [QUIC] with a mechanism to send unreliable data | running over QUIC [QUIC] with a mechanism to send unreliable data | |||
while leveraging the security and congestion-control properties of | while leveraging the security and congestion-control properties of | |||
QUIC. However, QUIC DATAGRAM frames do not provide a means to | QUIC. However, QUIC DATAGRAM frames do not provide a means to | |||
demultiplex application contexts. This document describes how to use | demultiplex application contexts. This document describes how to use | |||
QUIC DATAGRAM frames with HTTP/3 [H3] by association with HTTP | QUIC DATAGRAM frames with HTTP/3 [H3] by association with HTTP | |||
requests. Additionally, this document defines the Capsule Protocol | requests. Additionally, this document defines the Capsule Protocol | |||
skipping to change at page 10, line 31 ¶ | skipping to change at page 10, line 21 ¶ | |||
on that connection is too low), the intermediary SHOULD drop the HTTP | on that connection is too low), the intermediary SHOULD drop the HTTP | |||
Datagram instead of converting it to a DATAGRAM capsule. This | Datagram instead of converting it to a DATAGRAM capsule. This | |||
preserves the end-to-end unreliability characteristic that methods | preserves the end-to-end unreliability characteristic that methods | |||
such as Datagram Packetization Layer Path MTU Discovery (DPLPMTUD) | such as Datagram Packetization Layer Path MTU Discovery (DPLPMTUD) | |||
depend on [DPLPMTUD]. An intermediary that converts QUIC DATAGRAM | depend on [DPLPMTUD]. An intermediary that converts QUIC DATAGRAM | |||
frames to DATAGRAM capsules allows HTTP Datagrams to be arbitrarily | frames to DATAGRAM capsules allows HTTP Datagrams to be arbitrarily | |||
large without suffering any loss; this can misrepresent the true path | large without suffering any loss; this can misrepresent the true path | |||
properties, defeating methods such as DPLPMTUD. | properties, defeating methods such as DPLPMTUD. | |||
While DATAGRAM capsules can theoretically carry a payload of length | While DATAGRAM capsules can theoretically carry a payload of length | |||
2^62-1, most applications will have their own limits on what datagran | 2^62-1, most applications will have their own limits on what datagram | |||
payload sizes are practical. Implementations SHOULD take those | payload sizes are practical. Implementations SHOULD take those | |||
limits into account when parsing DATAGRAM capsules: if an incoming | limits into account when parsing DATAGRAM capsules: if an incoming | |||
DATAGRAM capsule has a length that is known to be so large as to not | DATAGRAM capsule has a length that is known to be so large as to not | |||
be usable, the implementation SHOULD discard the capsule without | be usable, the implementation SHOULD discard the capsule without | |||
buffering its contents into memory. | buffering its contents into memory. | |||
5. Prioritization | 5. Prioritization | |||
Data streams (see Section 4.1) can be prioritized using any means | Data streams (see Section 4.1) can be prioritized using any means | |||
suited to stream or request prioritization. For example, see | suited to stream or request prioritization. For example, see | |||
skipping to change at page 13, line 5 ¶ | skipping to change at page 12, line 32 ¶ | |||
Reference: An optional reference to a specification for the type. | Reference: An optional reference to a specification for the type. | |||
This field MAY be empty. | This field MAY be empty. | |||
Registrations follow the "First Come First Served" policy (see | Registrations follow the "First Come First Served" policy (see | |||
Section 4.4 of [IANA-POLICY]) where two registrations MUST NOT have | Section 4.4 of [IANA-POLICY]) where two registrations MUST NOT have | |||
the same Type. | the same Type. | |||
This registry initially contains the following entry: | This registry initially contains the following entry: | |||
+==============+==========+===============+ | Capsule Type: DATAGRAM | |||
| Capsule Type | Value | Specification | | ||||
+==============+==========+===============+ | ||||
| DATAGRAM | 0xff37a5 | This Document | | ||||
+--------------+----------+---------------+ | ||||
Table 1: Initial Capsule Types Registry | Value: 0xff37a5 (note that this will switch to a lower value before | |||
publication) | ||||
Reference: This document | ||||
Capsule types with a value of the form 41 * N + 23 for integer values | Capsule types with a value of the form 41 * N + 23 for integer values | |||
of N are reserved to exercise the requirement that unknown capsule | of N are reserved to exercise the requirement that unknown capsule | |||
types be ignored. These capsules have no semantics and can carry | types be ignored. These capsules have no semantics and can carry | |||
arbitrary values. These values MUST NOT be assigned by IANA and MUST | arbitrary values. These values MUST NOT be assigned by IANA and MUST | |||
NOT appear in the listing of assigned values. | NOT appear in the listing of assigned values. | |||
8. References | 8. References | |||
8.1. Normative References | 8.1. Normative References | |||
skipping to change at page 14, line 43 ¶ | skipping to change at page 14, line 23 ¶ | |||
Völker, "Packetization Layer Path MTU Discovery for | Völker, "Packetization Layer Path MTU Discovery for | |||
Datagram Transports", RFC 8899, DOI 10.17487/RFC8899, | Datagram Transports", RFC 8899, DOI 10.17487/RFC8899, | |||
September 2020, <https://www.rfc-editor.org/rfc/rfc8899>. | September 2020, <https://www.rfc-editor.org/rfc/rfc8899>. | |||
[PRIORITY] Oku, K. and L. Pardue, "Extensible Prioritization Scheme | [PRIORITY] Oku, K. and L. Pardue, "Extensible Prioritization Scheme | |||
for HTTP", Work in Progress, Internet-Draft, draft-ietf- | for HTTP", Work in Progress, Internet-Draft, draft-ietf- | |||
httpbis-priority-12, 17 January 2022, | httpbis-priority-12, 17 January 2022, | |||
<https://datatracker.ietf.org/doc/html/draft-ietf-httpbis- | <https://datatracker.ietf.org/doc/html/draft-ietf-httpbis- | |||
priority-12>. | priority-12>. | |||
Appendix A. Examples | ||||
[[RFC editor: please remove this appendix before publication.]] | ||||
A.1. CONNECT-UDP | ||||
Client Server | ||||
STREAM(44): HEADERS --------> | ||||
:method = CONNECT | ||||
:protocol = connect-udp | ||||
:scheme = https | ||||
:path = /target.example.org/443/ | ||||
:authority = proxy.example.org:443 | ||||
capsule-protocol = ?1 | ||||
DATAGRAM --------> | ||||
Quarter Stream ID = 11 | ||||
Payload = Encapsulated UDP Payload | ||||
<-------- STREAM(44): HEADERS | ||||
:status = 200 | ||||
capsule-protocol = ?1 | ||||
/* Wait for target server to respond to UDP packet. */ | ||||
<-------- DATAGRAM | ||||
Quarter Stream ID = 11 | ||||
Payload = Encapsulated UDP Payload | ||||
A.2. WebTransport | ||||
Client Server | ||||
STREAM(44): HEADERS --------> | ||||
:method = CONNECT | ||||
:scheme = https | ||||
:protocol = webtransport | ||||
:path = /hello | ||||
:authority = webtransport.example.org:443 | ||||
origin = https://www.example.org:443 | ||||
<-------- STREAM(44): HEADERS | ||||
:status = 200 | ||||
/* Both endpoints can now send WebTransport datagrams. */ | ||||
Acknowledgments | Acknowledgments | |||
Portions of this document were previously part of the QUIC DATAGRAM | Portions of this document were previously part of the QUIC DATAGRAM | |||
frame definition itself, the authors would like to acknowledge the | frame definition itself, the authors would like to acknowledge the | |||
authors of that document and the members of the IETF MASQUE working | authors of that document and the members of the IETF MASQUE working | |||
group for their suggestions. Additionally, the authors would like to | group for their suggestions. Additionally, the authors would like to | |||
thank Martin Thomson for suggesting the use of an HTTP/3 SETTINGS | thank Martin Thomson for suggesting the use of an HTTP/3 SETTINGS | |||
parameter. Furthermore, the authors would like to thank Ben Schwartz | parameter. Furthermore, the authors would like to thank Ben Schwartz | |||
for writing the first proposal that used two layers of indirection. | for writing the first proposal that used two layers of indirection. | |||
The final design in this document came out of the HTTP Datagrams | The final design in this document came out of the HTTP Datagrams | |||
End of changes. 14 change blocks. | ||||
69 lines changed or deleted | 19 lines changed or added | |||
This html diff was produced by rfcdiff 1.48. The latest version is available from http://tools.ietf.org/tools/rfcdiff/ |