< draft-pardue-quic-http-mcast-06.txt   draft-pardue-quic-http-mcast-07.txt >
Network Working Group L. Pardue Network Working Group L. Pardue
Internet-Draft Internet-Draft
Intended status: Informational R. Bradbury Intended status: Informational R. Bradbury
Expires: August 10, 2020 S. Hurst Expires: February 8, 2021 S. Hurst
BBC Research & Development BBC Research & Development
February 7, 2020 August 7, 2020
Hypertext Transfer Protocol (HTTP) over multicast QUIC Hypertext Transfer Protocol (HTTP) over multicast QUIC
draft-pardue-quic-http-mcast-06 draft-pardue-quic-http-mcast-07
Abstract Abstract
This document specifies a profile of the QUIC protocol and the HTTP/3 This document specifies a profile of the QUIC protocol and the HTTP/3
mapping that facilitates the transfer of HTTP resources over mapping that facilitates the transfer of HTTP resources over
multicast IP using the QUIC transport as its framing and multicast IP using the QUIC transport as its framing and
packetisation layer. Compatibility with the QUIC protocol's syntax packetisation layer. Compatibility with the QUIC protocol's syntax
and semantics is maintained as far as practical and additional and semantics is maintained as far as practical and additional
features are specified where this is not possible. features are specified where this is not possible.
skipping to change at page 1, line 37 skipping to change at page 1, line 37
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 August 10, 2020. This Internet-Draft will expire on February 8, 2021.
Copyright Notice Copyright Notice
Copyright (c) 2020 IETF Trust and the persons identified as the Copyright (c) 2020 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 Provisions Relating to IETF Documents
(https://trustee.ietf.org/license-info) in effect on the date of (https://trustee.ietf.org/license-info) in effect on the date of
publication of this document. Please review these documents publication of this document. Please review these documents
skipping to change at page 2, line 49 skipping to change at page 2, line 49
4.4. Stream Identifier . . . . . . . . . . . . . . . . . . . . 19 4.4. Stream Identifier . . . . . . . . . . . . . . . . . . . . 19
4.5. Flow Control . . . . . . . . . . . . . . . . . . . . . . 19 4.5. Flow Control . . . . . . . . . . . . . . . . . . . . . . 19
4.6. Stream Termination . . . . . . . . . . . . . . . . . . . 20 4.6. Stream Termination . . . . . . . . . . . . . . . . . . . 20
4.7. Connection Shutdown . . . . . . . . . . . . . . . . . . . 20 4.7. Connection Shutdown . . . . . . . . . . . . . . . . . . . 20
4.8. Connection Migration . . . . . . . . . . . . . . . . . . 20 4.8. Connection Migration . . . . . . . . . . . . . . . . . . 20
4.9. Explicit Congestion Notification . . . . . . . . . . . . 21 4.9. Explicit Congestion Notification . . . . . . . . . . . . 21
4.10. Session Keep-alive . . . . . . . . . . . . . . . . . . . 21 4.10. Session Keep-alive . . . . . . . . . . . . . . . . . . . 21
4.11. Loss Detection and Recovery . . . . . . . . . . . . . . . 21 4.11. Loss Detection and Recovery . . . . . . . . . . . . . . . 21
4.12. Prohibited QUIC Frames and Packets . . . . . . . . . . . 22 4.12. Prohibited QUIC Frames and Packets . . . . . . . . . . . 22
5. HTTP/3 Profile . . . . . . . . . . . . . . . . . . . . . . . 22 5. HTTP/3 Profile . . . . . . . . . . . . . . . . . . . . . . . 22
5.1. HTTP Connection Settings . . . . . . . . . . . . . . . . 22 5.1. HTTP Connection Settings . . . . . . . . . . . . . . . . 23
5.2. Server Push . . . . . . . . . . . . . . . . . . . . . . . 23 5.2. Server Push . . . . . . . . . . . . . . . . . . . . . . . 23
5.3. Metadata Compression . . . . . . . . . . . . . . . . . . 23 5.3. Metadata Compression . . . . . . . . . . . . . . . . . . 23
5.4. Session Tear-down . . . . . . . . . . . . . . . . . . . . 24 5.4. Session Tear-down . . . . . . . . . . . . . . . . . . . . 24
5.5. HTTP/3 Extension frames . . . . . . . . . . . . . . . . . 24 5.5. HTTP/3 Extension frames . . . . . . . . . . . . . . . . . 24
5.6. Prohibited HTTP/3 Frames . . . . . . . . . . . . . . . . 24 5.6. Prohibited HTTP/3 Frames . . . . . . . . . . . . . . . . 24
6. Application-Layer Security . . . . . . . . . . . . . . . . . 24 6. Application-Layer Security . . . . . . . . . . . . . . . . . 24
6.1. Content Integrity . . . . . . . . . . . . . . . . . . . . 25 6.1. Content Integrity . . . . . . . . . . . . . . . . . . . . 25
6.2. Content Authenticity . . . . . . . . . . . . . . . . . . 25 6.2. Content Authenticity . . . . . . . . . . . . . . . . . . 25
6.3. Content Confidentiality . . . . . . . . . . . . . . . . . 26 6.3. Content Confidentiality . . . . . . . . . . . . . . . . . 27
7. Loss Recovery . . . . . . . . . . . . . . . . . . . . . . . . 27 7. Loss Recovery . . . . . . . . . . . . . . . . . . . . . . . . 27
7.1. Forward Error Correction . . . . . . . . . . . . . . . . 27 7.1. Forward Error Correction . . . . . . . . . . . . . . . . 27
7.2. Unicast Repair . . . . . . . . . . . . . . . . . . . . . 27 7.2. Unicast Repair . . . . . . . . . . . . . . . . . . . . . 27
8. Transmission of Partial Content . . . . . . . . . . . . . . . 28 8. Transmission of Partial Content . . . . . . . . . . . . . . . 28
9. Protocol Identifier . . . . . . . . . . . . . . . . . . . . . 28 9. Protocol Identifier . . . . . . . . . . . . . . . . . . . . . 28
9.1. Draft Version Identification . . . . . . . . . . . . . . 28 9.1. Draft Version Identification . . . . . . . . . . . . . . 28
10. Discovery of Multicast QUIC Sessions . . . . . . . . . . . . 29 10. Discovery of Multicast QUIC Sessions . . . . . . . . . . . . 29
10.1. Source-specific Multicast Advertisement . . . . . . . . 29 10.1. Source-specific Multicast Advertisement . . . . . . . . 30
10.2. Session Parameter Advertisement . . . . . . . . . . . . 30 10.2. Session Parameter Advertisement . . . . . . . . . . . . 30
10.2.1. Cipher Suite . . . . . . . . . . . . . . . . . . . . 30 10.2.1. Cipher Suite . . . . . . . . . . . . . . . . . . . . 30
10.2.2. Session Key . . . . . . . . . . . . . . . . . . . . 30 10.2.2. Session Key . . . . . . . . . . . . . . . . . . . . 31
10.2.3. Session Cipher Initialization Vector . . . . . . . . 31 10.2.3. Session Cipher Initialization Vector . . . . . . . . 31
10.2.4. Session Identification . . . . . . . . . . . . . . . 31 10.2.4. Session Identification . . . . . . . . . . . . . . . 31
10.2.5. Session Idle Timeout Period . . . . . . . . . . . . 31 10.2.5. Session Idle Timeout Period . . . . . . . . . . . . 32
10.2.6. Resource Concurrency . . . . . . . . . . . . . . . . 32 10.2.6. Resource Concurrency . . . . . . . . . . . . . . . . 32
10.2.7. Session Peak Flow Rate . . . . . . . . . . . . . . . 32 10.2.7. Session Peak Flow Rate . . . . . . . . . . . . . . . 32
10.2.8. Digest Algorithm . . . . . . . . . . . . . . . . . . 33 10.2.8. Digest Algorithm . . . . . . . . . . . . . . . . . . 33
10.2.9. Signature Algorithm . . . . . . . . . . . . . . . . 33 10.2.9. Signature Algorithm . . . . . . . . . . . . . . . . 33
10.2.10. Extensions . . . . . . . . . . . . . . . . . . . . . 33 10.2.10. Extensions . . . . . . . . . . . . . . . . . . . . . 34
11. Security and Privacy Considerations . . . . . . . . . . . . . 34 11. Security and Privacy Considerations . . . . . . . . . . . . . 34
11.1. Pervasive Monitoring . . . . . . . . . . . . . . . . . . 34 11.1. Pervasive Monitoring . . . . . . . . . . . . . . . . . . 34
11.1.1. Large-scale Data Gathering and Correlation . . . . . 35 11.1.1. Large-scale Data Gathering and Correlation . . . . . 35
11.1.2. Changing Content . . . . . . . . . . . . . . . . . . 35 11.1.2. Changing Content . . . . . . . . . . . . . . . . . . 35
11.2. Protection of Discovery Mechanism . . . . . . . . . . . 35 11.2. Protection of Discovery Mechanism . . . . . . . . . . . 35
11.3. Spoofing . . . . . . . . . . . . . . . . . . . . . . . . 36 11.3. Spoofing . . . . . . . . . . . . . . . . . . . . . . . . 36
11.3.1. Spoofed Ack Attacks . . . . . . . . . . . . . . . . 36 11.3.1. Spoofed Ack Attacks . . . . . . . . . . . . . . . . 36
11.3.2. Sender Spoofing . . . . . . . . . . . . . . . . . . 36 11.3.2. Sender Spoofing . . . . . . . . . . . . . . . . . . 36
11.3.3. Receiver Spoofing . . . . . . . . . . . . . . . . . 36 11.3.3. Receiver Spoofing . . . . . . . . . . . . . . . . . 36
11.4. Replay Attacks . . . . . . . . . . . . . . . . . . . . . 36 11.4. Replay Attacks . . . . . . . . . . . . . . . . . . . . . 36
11.5. Message Deletion . . . . . . . . . . . . . . . . . . . . 37 11.5. Message Deletion . . . . . . . . . . . . . . . . . . . . 37
11.6. Denial of Service . . . . . . . . . . . . . . . . . . . 37 11.6. Denial of Service . . . . . . . . . . . . . . . . . . . 37
11.6.1. Unprotected Frames and Packets . . . . . . . . . . . 37 11.6.1. Unprotected Frames and Packets . . . . . . . . . . . 37
11.6.2. Network Performance Degradation . . . . . . . . . . 37 11.6.2. Network Performance Degradation . . . . . . . . . . 37
11.6.3. Unicast Repair Stampeding Herd . . . . . . . . . . . 37 11.6.3. Unicast Repair Stampeding Herd . . . . . . . . . . . 38
11.7. Receiver Resource Usage . . . . . . . . . . . . . . . . 38 11.7. Receiver Resource Usage . . . . . . . . . . . . . . . . 38
11.8. Unicast Repair Information Leakage . . . . . . . . . . . 38 11.8. Unicast Repair Information Leakage . . . . . . . . . . . 38
12. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 38 12. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 39
12.1. Registration of Protocol Identification String . . . . . 38 12.1. Registration of Protocol Identification String . . . . . 39
12.2. Registration of Alt-Svc parameters . . . . . . . . . . . 39 12.2. Registration of Alt-Svc parameters . . . . . . . . . . . 39
12.2.1. Source Address . . . . . . . . . . . . . . . . . . . 39 12.2.1. Source Address . . . . . . . . . . . . . . . . . . . 39
12.2.2. Cipher Suite . . . . . . . . . . . . . . . . . . . . 39 12.2.2. Cipher Suite . . . . . . . . . . . . . . . . . . . . 39
12.2.3. Key . . . . . . . . . . . . . . . . . . . . . . . . 39 12.2.3. Key . . . . . . . . . . . . . . . . . . . . . . . . 39
12.2.4. Initialization Vector . . . . . . . . . . . . . . . 39 12.2.4. Initialization Vector . . . . . . . . . . . . . . . 40
12.2.5. Session Identifier . . . . . . . . . . . . . . . . . 39 12.2.5. Session Identifier . . . . . . . . . . . . . . . . . 40
12.2.6. Session Idle Timeout . . . . . . . . . . . . . . . . 40 12.2.6. Session Idle Timeout . . . . . . . . . . . . . . . . 40
12.2.7. Maximum Concurrent Resources . . . . . . . . . . . . 40 12.2.7. Maximum Concurrent Resources . . . . . . . . . . . . 40
12.2.8. Peak Flow Rate . . . . . . . . . . . . . . . . . . . 40 12.2.8. Peak Flow Rate . . . . . . . . . . . . . . . . . . . 40
12.2.9. Digest Algorithm . . . . . . . . . . . . . . . . . . 40 12.2.9. Digest Algorithm . . . . . . . . . . . . . . . . . . 40
12.2.10. Signature Algorithm . . . . . . . . . . . . . . . . 40 12.2.10. Signature Algorithm . . . . . . . . . . . . . . . . 40
12.2.11. Extension . . . . . . . . . . . . . . . . . . . . . 40 12.2.11. Extension . . . . . . . . . . . . . . . . . . . . . 40
13. References . . . . . . . . . . . . . . . . . . . . . . . . . 40 13. References . . . . . . . . . . . . . . . . . . . . . . . . . 41
13.1. Normative References . . . . . . . . . . . . . . . . . . 40 13.1. Normative References . . . . . . . . . . . . . . . . . . 41
13.2. Informative References . . . . . . . . . . . . . . . . . 42 13.2. Informative References . . . . . . . . . . . . . . . . . 42
Appendix A. Acknowledgements . . . . . . . . . . . . . . . . . . 44 Appendix A. Acknowledgements . . . . . . . . . . . . . . . . . . 44
Appendix B. Examples . . . . . . . . . . . . . . . . . . . . . . 44 Appendix B. Examples . . . . . . . . . . . . . . . . . . . . . . 44
B.1. Session Advertisement . . . . . . . . . . . . . . . . . . 44 B.1. Session Advertisement . . . . . . . . . . . . . . . . . . 44
B.1.1. Source-specific Multicast QUIC Session . . . . . . . 44 B.1.1. Source-specific Multicast QUIC Session . . . . . . . 45
B.1.2. Source-specific Multicast QUIC Session with Transport B.1.2. Source-specific Multicast QUIC Session with Transport
Encryption using a Symmetric Key . . . . . . . . . . 45 Encryption using a Symmetric Key . . . . . . . . . . 45
B.1.3. Source-specific Multicast QUIC Session with Transport B.1.3. Source-specific Multicast QUIC Session with Transport
Encryption, Content Integrity and Authenticity . . . 45 Encryption, Content Integrity and Authenticity . . . 45
B.2. Resource Transfer . . . . . . . . . . . . . . . . . . . . 46 B.2. Resource Transfer . . . . . . . . . . . . . . . . . . . . 46
B.2.1. Transfer without Content Integrity or Authenticity . 46 B.2.1. Transfer without Content Integrity or Authenticity . 46
B.2.2. Transfer of Partial Content without Content Integrity B.2.2. Transfer of Partial Content without Content Integrity
or Authenticity . . . . . . . . . . . . . . . . . . . 46 or Authenticity . . . . . . . . . . . . . . . . . . . 46
B.2.3. Transfer with Content Integrity and without B.2.3. Transfer with Content Integrity and without
Authenticity . . . . . . . . . . . . . . . . . . . . 47 Authenticity . . . . . . . . . . . . . . . . . . . . 47
B.2.4. Partial Transfer with Content Integrity and without B.2.4. Partial Transfer with Content Integrity and without
Authenticity . . . . . . . . . . . . . . . . . . . . 47 Authenticity . . . . . . . . . . . . . . . . . . . . 48
B.2.5. Transfer with Content Integrity and Authenticity . . 48 B.2.5. Transfer with Content Integrity and Authenticity . . 48
B.2.6. Partial Transfer with Content Integrity and B.2.6. Partial Transfer with Content Integrity and
Authenticity . . . . . . . . . . . . . . . . . . . . 49 Authenticity . . . . . . . . . . . . . . . . . . . . 49
Appendix C. Summary of differences from unicast QUIC and HTTP/3 50 Appendix C. Summary of differences from unicast QUIC and HTTP/3 50
Appendix D. Changelog . . . . . . . . . . . . . . . . . . . . . 61 Appendix D. Changelog . . . . . . . . . . . . . . . . . . . . . 61
D.1. Since draft-pardue-quic-http-mcast-05 . . . . . . . . . . 61 D.1. Since draft-pardue-quic-http-mcast-06 . . . . . . . . . . 61
D.2. Since draft-pardue-quic-http-mcast-04 . . . . . . . . . . 62 D.2. Since draft-pardue-quic-http-mcast-05 . . . . . . . . . . 62
D.3. Since draft-pardue-quic-http-mcast-03 . . . . . . . . . . 62 D.3. Since draft-pardue-quic-http-mcast-04 . . . . . . . . . . 63
D.4. Since draft-pardue-quic-http-mcast-02 . . . . . . . . . . 63 D.4. Since draft-pardue-quic-http-mcast-03 . . . . . . . . . . 63
D.5. Since draft-pardue-quic-http-mcast-01 . . . . . . . . . . 63 D.5. Since draft-pardue-quic-http-mcast-02 . . . . . . . . . . 64
D.6. Since draft-pardue-quic-http-mcast-00 . . . . . . . . . . 64 D.6. Since draft-pardue-quic-http-mcast-01 . . . . . . . . . . 64
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 64 D.7. Since draft-pardue-quic-http-mcast-00 . . . . . . . . . . 64
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 65
1. Introduction 1. Introduction
The means to bulk transfer resources over multicast IP [RFC1112] The means to bulk transfer resources over multicast IP [RFC1112]
using HTTP semantics presents an opportunity to more efficiently using HTTP semantics presents an opportunity to more efficiently
deliver services at scale, while leveraging the wealth of existing deliver services at scale, while leveraging the wealth of existing
HTTP-related standards, tools and applications. Audio-visual HTTP-related standards, tools and applications. Audio-visual
segmented media, in particular, would benefit from this mode of segmented media, in particular, would benefit from this mode of
transmission. transmission.
skipping to change at page 7, line 21 skipping to change at page 7, line 21
o session parameter: Characteristic of a multicast QUIC session. o session parameter: Characteristic of a multicast QUIC session.
2. Multicast QUIC Sessions 2. Multicast QUIC Sessions
A QUIC connection [QUIC-TRANSPORT] carried over bidirectional unicast A QUIC connection [QUIC-TRANSPORT] carried over bidirectional unicast
is defined as a conversation between two QUIC endpoints that is defined as a conversation between two QUIC endpoints that
multiplexes several logical streams within a single encryption multiplexes several logical streams within a single encryption
context. This is a one-to-one relationship. Furthermore, QUIC context. This is a one-to-one relationship. Furthermore, QUIC
connections achieve decoupling from the underlying network (IP and connections achieve decoupling from the underlying network (IP and
port) by means of a pair of Connection IDs, each uniquely identifying port) by means of a set of Connection IDs, with each endpoint
the flow in one direction. Use of a consistent connection identifier generating these IDs and using them to identify the direction of
allows QUIC connections to survive changes to the network flow. Use of a consistent connection identifier allows QUIC
connectivity. The establishment of a QUIC connection relies upon an connections to survive changes to the network connectivity. The
up-front, in-band exchange (and possible negotiation) of establishment of a QUIC connection relies upon an up-front, in-band
cryptographic and transport parameters (conveyed in QUIC handshake exchange (and possible negotiation) of cryptographic and transport
messages). parameters (conveyed in QUIC handshake messages).
The mapping of HTTP semantics over the QUIC transport protocol The mapping of HTTP semantics over the QUIC transport protocol
[QUIC-HTTP] facilitates the transfer of hypermedia over QUIC [QUIC-HTTP] facilitates the transfer of hypermedia over QUIC
connections. The establishment of a HTTP/3 connection relies upon connections. The establishment of a HTTP/3 connection relies upon
all the requirements stipulated for the transport, as well as all the requirements stipulated for the transport, as well as
communication of HTTP-specific settings (conveyed in HTTP/3 communication of HTTP-specific settings (conveyed in HTTP/3
"SETTINGS" frames). Such parameters may be required or optional and "SETTINGS" frames). Such parameters may be required or optional and
may be used by either endpoint to control the characteristics of may be used by either endpoint to control the characteristics of
connection usage. connection usage.
skipping to change at page 9, line 14 skipping to change at page 9, line 14
from Half-Established to Fully-Established occurs when at least one from Half-Established to Fully-Established occurs when at least one
receiver joins the session. receiver joins the session.
It is equally valid for a receiver to join a session in the Quiescent It is equally valid for a receiver to join a session in the Quiescent
state, triggering the transition to Half-Established. In this case, state, triggering the transition to Half-Established. In this case,
the transition to Fully-Established takes place only when a sender the transition to Fully-Established takes place only when a sender
joins the session. joins the session.
2.1.2. Session Termination 2.1.2. Session Termination
A session enters the Finished state when all participants leave it. Participants MAY leave a session at any time. A session enters the
The methods for leaving a session are either explicit shutdown Finished state when all participants have left it. Senders MAY
(Section 5.4), implicit shutdown (i.e. idle timeout, Section 3.3) or signal their intent to leave using explicit session tear-down
migration away (described in the next section). (Section 5.4). Receivers can detect that a sender has left via idle
timeout (Section 3.3) and take that as a signal to leave, or
receivers may leave as part of session migration (described in the
next section).
In a typical case, a session that is in the Fully-Established state In a typical case, a session that is in the Fully-Established state
would be closed in two stages. In the first stage the sender sends would be closed in two stages. In the first stage the sender sends
explicit shutdown messages to the multicast group and subsequently explicit shutdown messages to the multicast group and subsequently
stops transmitting packets. This causes the session to transition stops transmitting packets. This causes the session to transition
from Fully-Established to Half-Established. In the second stage, from Fully-Established to Half-Established. In the second stage,
receivers that have received explicit shutdown messages leave the receivers that have received explicit shutdown messages leave the
multicast group. Once all receivers have left the session it multicast group. Once all receivers have left the session it
transitions from Half-Established to Finished. transitions from Half-Established to Finished.
skipping to change at page 10, line 43 skipping to change at page 10, line 45
The Session ID is carried in the Destination Connection ID field of The Session ID is carried in the Destination Connection ID field of
the QUIC packet (see Section 4.3). Source Connection IDs are not the QUIC packet (see Section 4.3). Source Connection IDs are not
used. used.
The maximum size of a Session ID is 160 bits. The size of the The maximum size of a Session ID is 160 bits. The size of the
Destination Connection ID field used to convey the Session ID SHALL Destination Connection ID field used to convey the Session ID SHALL
be the smallest number of full bytes required to represent the full be the smallest number of full bytes required to represent the full
Session ID value advertised in the "session-id" session parameter Session ID value advertised in the "session-id" session parameter
(Section 10.2.4). If no "session-id" parameter is advertised, then (Section 10.2.4). If no "session-id" parameter is advertised, then
this session has no explicit session ID, and the Destination this session has a zero-length session ID, and the Destination
Connection ID field SHALL be omitted from all QUIC packets related to Connection ID field SHALL be omitted from all QUIC packets related to
the session. the session.
A multicast sender participating in a session with an advertised A multicast sender participating in a session with an advertised
"session-id" session parameter MUST send QUIC packets with a matching "session-id" session parameter MUST send QUIC packets with a matching
Session ID. Conversely, a multicast sender participating in a Session ID. Conversely, a multicast sender participating in a
session without an advertised "session-id" session parameter MUST NOT session without an advertised "session-id" session parameter MUST NOT
send QUIC packets with a Destination Connection ID field. send QUIC packets with a non-zero-length Destination Connection ID
field.
A multicast receiver participating in a session with an advertised A multicast receiver participating in a session with an advertised
"session-id" session parameter MUST validate that the Session ID of "session-id" session parameter MUST validate that the Session ID of
received QUIC packets matches that advertised in the session received QUIC packets matches that advertised in the session
parameters (Section 10.2.4) before any HTTP-level processing is done. parameters (Section 10.2.4) before any HTTP-level processing is done.
In the case of validation failure, the receiver SHOULD ignore the In the case of validation failure, the receiver SHOULD ignore the
packet in order to protect itself from denial-of-service attacks. packet in order to protect itself from denial-of-service attacks.
2.4. Session Security 2.4. Session Security
skipping to change at page 18, line 9 skipping to change at page 18, line 9
A multicast sender participating in a session MUST NOT use algorithms A multicast sender participating in a session MUST NOT use algorithms
outside the signalled signature algorithm set. A receiver MAY leave outside the signalled signature algorithm set. A receiver MAY leave
any session where an algorithm outside the signature algorithm set is any session where an algorithm outside the signature algorithm set is
used. used.
4. QUIC Profile 4. QUIC Profile
*Authors' Note:* The QUIC transport document is subject to change. *Authors' Note:* The QUIC transport document is subject to change.
This section is based on our best understanding of draft-ietf- This section is based on our best understanding of draft-ietf-
quic-transport-25. The authors will track developments and will quic-transport-29. The authors will track developments and will
update this section accordingly. update this section accordingly.
The profile of [QUIC-TRANSPORT] is presented in this section. In The profile of [QUIC-TRANSPORT] is presented in this section. In
order to preserve compatibility with conventional QUIC, the order to preserve compatibility with conventional QUIC, the
specification works with a limited scope of change. However, the specification works with a limited scope of change. However, the
nature of unidirectional multicast communications means that some nature of unidirectional multicast communications means that some
protocol procedures or behaviours need to be modified. protocol procedures or behaviours need to be modified.
Section 5.4 of [QUIC-TRANSPORT] defines a set of required actions Section 5.4 of [QUIC-TRANSPORT] defines a set of required actions
that a QUIC server and QUIC client must be able to perform. Due to that a QUIC server and QUIC client must be able to perform. Due to
skipping to change at page 18, line 34 skipping to change at page 18, line 34
each type is described in Section 3.5. each type is described in Section 3.5.
o Multicast QUIC senders may still send "PING" frames to stop a o Multicast QUIC senders may still send "PING" frames to stop a
session from expiring as described in Section 4.10. session from expiring as described in Section 4.10.
4.1. Packet Size 4.1. Packet Size
The means for determining an appropriate size for QUIC packets are The means for determining an appropriate size for QUIC packets are
described in Section 14 of [QUIC-TRANSPORT]. Implementations of this described in Section 14 of [QUIC-TRANSPORT]. Implementations of this
specification SHOULD bear in mind that the Path Maximum Transmission specification SHOULD bear in mind that the Path Maximum Transmission
Unit (PTMU) may be affected by multicast IP technologies such as Unit (PMTU) may be affected by multicast IP technologies such as
Automatic Multicast Tunneling (AMT) [RFC7450]. Additionally, Automatic Multicast Tunneling (AMT) [RFC7450]. Additionally,
consideration should be given toward the applicability of maximum consideration should be given toward the applicability of maximum
transmission unit discovery methods (such as PLPMTUD [RFC4821] and transmission unit discovery methods (such as PLPMTUD [RFC4821] and
PMTUD [RFC1191]) to multicast IP. PMTUD [RFC1191]) to multicast IP.
4.2. Packet Format 4.2. Packet Format
Endpoints implementing this specification MUST only send QUIC packets Endpoints implementing this specification MUST only send QUIC packets
with the short header form. As short header packets do not include a with the short header form. As short header packets do not include a
length, senders MUST NOT attempt to coalesce any QUIC packets in the length, senders MUST NOT attempt to coalesce any QUIC packets in the
skipping to change at page 19, line 28 skipping to change at page 19, line 28
latency between a client and a server. This mechanism is not usable latency between a client and a server. This mechanism is not usable
in a unidirectional multicast packet flow. Senders SHALL set the in a unidirectional multicast packet flow. Senders SHALL set the
spin bit to zero in all packets. Receivers SHOULD ignore the spin spin bit to zero in all packets. Receivers SHOULD ignore the spin
bit. bit.
*Authors' Note:* The authors welcome suggestions for the use of *Authors' Note:* The authors welcome suggestions for the use of
the spin bit in a multicast context. the spin bit in a multicast context.
4.3. Connection Identifier 4.3. Connection Identifier
The Destination Connection ID field MUST be present in every QUIC The Destination Connection ID field MUST be non-zero-length in every
packet if the session was advertised with a "session-id" session QUIC packet if the session was advertised with a "session-id" session
parameter (Section 10.2.4). If there is no Session ID session parameter (Section 10.2.4). If the multicast QUIC session
parameter, then the Destination Connection ID MUST NOT be present in advertisement does not carry a "session identifier" session
parameter, then the Destination Connection ID MUST be zero-length in
any QUIC packet for that session. In the case where multiple any QUIC packet for that session. In the case where multiple
sessions are multiplexed on the same 5-tuple network association, the sessions are multiplexed on the same 5-tuple network association, the
Destination Connection ID field MUST be present in every QUIC packet Destination Connection ID field MUST be non-zero-length in every QUIC
and must be distinct for each session. packet and must be distinct for each session.
4.4. Stream Identifier 4.4. Stream Identifier
The maximum Stream ID of a multicast QUIC session is 2^62, as The maximum Stream ID of a multicast QUIC session is 2^62, as
explained in Section 3.5. With the exception of the first client- explained in Section 3.5. With the exception of the first client-
initiated request Stream ID, which is reserved as described in initiated request Stream ID, which is reserved as described in
Section 5.2, all Stream ID values SHALL be of the server-initiated Section 5.2, all Stream ID values SHALL be of the server-initiated
unidirectional stream type. unidirectional stream type.
4.5. Flow Control 4.5. Flow Control
Conventional QUIC provides stream- and connection-level flow control, Conventional QUIC provides stream- and connection-level flow control,
and endpoints manage this by sending QUIC "MAX_DATA" or and endpoints manage this by sending QUIC "MAX_DATA" or
"MAX_STREAM_DATA" frames as required. When a sender is blocked from "MAX_STREAM_DATA" frames as required. When a sender is blocked from
sending flow-controlled frames, it sends an informational QUIC sending flow-controlled frames, it sends an informational QUIC
"BLOCKED" or "STREAM_BLOCKED" frame. "DATA_BLOCKED" or "STREAM_DATA_BLOCKED" frame.
In a unidirectional environment, the sender never has a receive In a unidirectional environment, the sender never has a receive
window and the receiver cannot send in-band updates. Therefore, the window and the receiver cannot send in-band updates. Therefore, the
management of flow-control windows and transmission of blockage management of flow-control windows and transmission of blockage
information is not supported by this profile. The QUIC "MAX_DATA", information is not supported by this profile. The QUIC "MAX_DATA",
"MAX_STREAM_DATA", "BLOCKED" and "STREAM_BLOCKED" frames are "MAX_STREAM_DATA", "DATA_BLOCKED" and "STREAM_DATA_BLOCKED" frames
prohibited by this profile. Participants MUST NOT send these frame are prohibited by this profile. Participants MUST NOT send these
types. Reception of these frame types MUST be handled as described frame types. Reception of these frame types MUST be handled as
in Section 4.12. described in Section 4.12.
4.6. Stream Termination 4.6. Stream Termination
A sender MAY prematurely terminate the transmission on any unreserved A sender MAY prematurely terminate the transmission on any unreserved
QUIC Stream ID by setting the "FIN" bit of a QUIC "STREAM" frame, or QUIC Stream ID by setting the "FIN" bit of a QUIC "STREAM" frame, or
by sending a QUIC "RESET_STREAM" frame (as specified in by sending a QUIC "RESET_STREAM" frame (as specified in
[QUIC-TRANSPORT] and [QUIC-HTTP]). [QUIC-TRANSPORT] and [QUIC-HTTP]).
Receiving participants MUST NOT make any attempt to send QUIC Receiving participants MUST NOT make any attempt to send QUIC
"RESET_STREAM" frames to the multicast group. "RESET_STREAM" frames to the multicast group.
4.7. Connection Shutdown 4.7. Connection Shutdown
Explicit shutdown of a multicast QUIC session using QUIC methods is Explicit shutdown of a multicast QUIC session using QUIC methods is
not supported by this profile. not supported by this profile.
The QUIC "APPLICATION_CLOSE" and "CONNECTION_CLOSE" frames, and the The QUIC "CONNECTION_CLOSE" frames and the Stateless Reset packet are
Stateless Reset packet are prohibited. Participants MUST NOT send prohibited. Participants MUST NOT send these and reception MUST be
these and reception MUST be handled as described in Section 4.12. handled as described in Section 4.12.
Explicit session tear-down using HTTP semantics is allowed, as Explicit session tear-down using HTTP semantics is allowed, as
described in Section 5.4. described in Section 5.4.
Implicit shutdown by means of silent close is also supported, as Implicit shutdown by means of silent close is also supported, as
described in Section 3.3. described in Section 3.3.
4.8. Connection Migration 4.8. Connection Migration
[QUIC-TRANSPORT] has a connection migration feature that allows a [QUIC-TRANSPORT] has a connection migration feature that allows a
skipping to change at page 22, line 32 skipping to change at page 22, line 34
"PING", "RESET_STREAM". "PING", "RESET_STREAM".
Reception of a prohibited or non-advertised QUIC frame or packet is a Reception of a prohibited or non-advertised QUIC frame or packet is a
protocol error. Receivers MUST ignore all prohibited QUIC frames and protocol error. Receivers MUST ignore all prohibited QUIC frames and
packets. packets.
5. HTTP/3 Profile 5. HTTP/3 Profile
*Authors' Note:* The HTTP/3 mapping document is subject to change. *Authors' Note:* The HTTP/3 mapping document is subject to change.
This section is based on our best understanding of draft-ietf- This section is based on our best understanding of draft-ietf-
quic-http-25. The authors will track developments and will update quic-http-29. The authors will track developments and will update
this section accordingly. this section accordingly.
HTTP over multicast QUIC depends on HTTP server push, as described in HTTP over multicast QUIC depends on HTTP server push, as described in
Section 4.4 of [QUIC-HTTP]. Section 5.2 below applies an additional Section 4.4 of [QUIC-HTTP]. Section 5.2 below applies an additional
constraint on the use of server push. A multicast sender constraint on the use of server push. A multicast sender
participating in a session pushes resources as a series of QUIC participating in a session pushes resources as a series of QUIC
"STREAM" frames carrying HTTP/3 "PUSH_PROMISE", "HEADERS" and "DATA" "STREAM" frames carrying HTTP/3 "PUSH_PROMISE", "HEADERS" and "DATA"
frames. Examples of this are provided in Appendix B.2. Senders MUST frames. Examples of this are provided in Appendix B.2. Senders MUST
comply with the requirements of the session parameters, as described comply with the requirements of the session parameters, as described
earlier in Section 3. earlier in Section 3.
skipping to change at page 23, line 39 skipping to change at page 23, line 45
Receiving participants MUST NOT make any attempt to send HTTP/3 Receiving participants MUST NOT make any attempt to send HTTP/3
"CANCEL_PUSH" frames to the multicast group. "CANCEL_PUSH" frames to the multicast group.
Conventionally, pushed responses are associated with an explicit Conventionally, pushed responses are associated with an explicit
request from a client. This is not possible when using a request from a client. This is not possible when using a
unidirectional transport such as multicast IP. This profile reserves unidirectional transport such as multicast IP. This profile reserves
the first client-initiated, bidirectional QUIC stream. HTTP/3 the first client-initiated, bidirectional QUIC stream. HTTP/3
"PUSH_PROMISE" frames MUST be sent on this reserved Stream ID. "PUSH_PROMISE" frames MUST be sent on this reserved Stream ID.
*Authors' Note:* The exact value of this Stream ID is currently in
flux. This section will track developments and will be updated
accordingly. It is currently expected to be Stream ID 0.
5.3. Metadata Compression 5.3. Metadata Compression
The compression of HTTP header fields is considered in QPACK The compression of HTTP header fields is considered in QPACK
[QUIC-QPACK], which describes two methods for the compression of HTTP [QUIC-QPACK], which describes two methods for the compression of HTTP
header fields: indexing (via static or dynamic tables) and Huffman header fields: indexing (via static or dynamic tables) and Huffman
encoding. encoding.
A multicast QUIC session, as described in the present document, does A multicast QUIC session, as described in the present document, does
not provide the assurances (receiver participation, transport not provide the assurances (receiver participation, transport
reliability) required to sufficiently maintain the dynamic decoding reliability) required to sufficiently maintain the dynamic decoding
context. Therefore, this document requires that endpoints SHALL NOT context. Therefore, this document requires that endpoints SHALL NOT
use dynamic indexing. It is RECOMMENDED that endpoints use static use dynamic table indexing. It is RECOMMENDED that endpoints use
indexing and/or Huffman encoding in order to benefit from the static table indexing and/or Huffman encoding in order to benefit
remaining compression methods available. from the remaining compression methods available.
5.4. Session Tear-down 5.4. Session Tear-down
A multicast QUIC session MAY be explicitly torn down by means of the A multicast QUIC session MAY be explicitly torn down by means of the
"Connection: close" HTTP header described in section 6.6 of "Connection: close" HTTP header described in section 6.6 of
[RFC7230]. A sender intending to leave the session SHOULD include [RFC7230]. A sender intending to leave the session SHOULD include
the "Connection: close" header in its response metadata. A sender the "Connection: close" header in its response metadata. A sender
SHOULD transmit all outstanding frames related to remaining request/ SHOULD transmit all outstanding frames related to remaining request/
response exchanges before ending transmission to the multicast group. response exchanges before ending transmission to the multicast group.
A receiver SHOULD continue to receive and process frames until all A receiver SHOULD continue to receive and process frames until all
skipping to change at page 24, line 33 skipping to change at page 24, line 37
5.5. HTTP/3 Extension frames 5.5. HTTP/3 Extension frames
HTTP/3 extension frames (e.g. "ALTSVC") are prohibited by this HTTP/3 extension frames (e.g. "ALTSVC") are prohibited by this
profile. Participants MUST NOT make any attempt to send extension profile. Participants MUST NOT make any attempt to send extension
frame types. Reception of these MUST be handled as described in frame types. Reception of these MUST be handled as described in
Section 5.6. Section 5.6.
5.6. Prohibited HTTP/3 Frames 5.6. Prohibited HTTP/3 Frames
The following HTTP/3 frames MUST NOT be transmitted by participants: The following HTTP/3 frames MUST NOT be transmitted by participants:
"DUPLICATE_PUSH", "GOAWAY", "MAX_PUSH_ID", "SETTINGS". "GOAWAY", "MAX_PUSH_ID", "SETTINGS".
In addition, all HTTP/3 extension frame types MUST NOT be transmitted In addition, all HTTP/3 extension frame types MUST NOT be transmitted
by participants. by participants.
The following HTTP/3 frames MUST NOT be transmitted by receivers: The following HTTP/3 frames MUST NOT be transmitted by receivers:
"CANCEL_PUSH". "CANCEL_PUSH".
Reception of a prohibited HTTP/3 frame is a protocol error. Reception of a prohibited HTTP/3 frame is a protocol error.
Receivers MUST ignore prohibited HTTP/3 frames. Receivers MUST ignore prohibited HTTP/3 frames.
skipping to change at page 30, line 14 skipping to change at page 30, line 22
This document specifies the "source-address" parameter for Alt-Svc, This document specifies the "source-address" parameter for Alt-Svc,
which is used to provide the SSM source address to endpoints. which is used to provide the SSM source address to endpoints.
Syntax: Syntax:
source-address = uri-host; see RFC7230, Section 2.7 source-address = uri-host; see RFC7230, Section 2.7
For example: For example:
source-address="192.0.2.1" source-address=192.0.2.1
When a multicast QUIC session is provided using SSM, the "source- When a multicast QUIC session is provided using SSM, the "source-
address" parameter MUST be advertised. address" parameter MUST be advertised. If the parameter is repeated,
the first occurrence MUST be used and subsequent occurrences MUST be
ignored.
10.2. Session Parameter Advertisement 10.2. Session Parameter Advertisement
The concept of session parameters is introduced in Section 2.2. This The concept of session parameters is introduced in Section 2.2. This
section details how the session parameters are expressed as Alt-Svc section details how the session parameters are expressed as Alt-Svc
parameters. parameters.
10.2.1. Cipher Suite 10.2.1. Cipher Suite
This document specifies the "cipher-suite" parameter for Alt-Svc, This document specifies the "cipher-suite" parameter for Alt-Svc,
skipping to change at page 31, line 40 skipping to change at page 32, line 4
This document defines the "session-id" parameter for Alt-Svc, which This document defines the "session-id" parameter for Alt-Svc, which
carries the multicast QUIC session identifier. carries the multicast QUIC session identifier.
Syntax: Syntax:
session-id = *HEXDIG session-id = *HEXDIG
For example, the following specifies session 101 (0x65 hexadecimal): For example, the following specifies session 101 (0x65 hexadecimal):
session-id=65 session-id=65
The requirements for endpoint usage of "session-id" are described in The requirements for endpoint usage of "session-id" are described in
Section 2.3. In the above example, the Destination Connection ID Section 2.3. In the above example, the Destination Connection ID
field in every QUIC packet header would be one byte in size. For a field in every QUIC packet header would be one byte in size. For a
session-id of BADBEEF then then Destintation Connection ID field in session-id of BADBEEF then then Destintation Connection ID field in
every QUIC packet header would be four bytes in size. every QUIC packet header would be four bytes in size.
10.2.5. Session Idle Timeout Period 10.2.5. Session Idle Timeout Period
This document specifies the "session-idle-timeout" parameter for Alt- This document specifies the "session-idle-timeout" parameter for Alt-
Svc, which carries the idle timeout period of a multicast QUIC Svc, which carries the idle timeout period in milliseconds of a
session. multicast QUIC session.
Syntax: Syntax:
session-idle-timeout = *DIGIT ; number of seconds between 0 and 600 session-idle-timeout = *DIGIT ; integer milliseconds
For example, the following specifies a one-minute session idle For example, the following specifies a one-minute session idle
timeout period: timeout period:
session-idle-timeout=60 session-idle-timeout=60
The requirements for endpoint usage of "session-idle-timeout" are The requirements for endpoint usage of "session-idle-timeout" are
described in Section 3.3. described in Section 3.3.
10.2.6. Resource Concurrency 10.2.6. Resource Concurrency
skipping to change at page 33, line 41 skipping to change at page 34, line 4
(http://www.iana.org/assignments/signature-algorithms). (http://www.iana.org/assignments/signature-algorithms).
Syntax: Syntax:
signature-algorithm = token signature-algorithm = token
For example, the following specifies a signature algorithm of SHA- For example, the following specifies a signature algorithm of SHA-
256: 256:
signature-algorithm=rsa-sha256 signature-algorithm=rsa-sha256
The requirements for endpoint usage of "signature-algorithm" are The requirements for endpoint usage of "signature-algorithm" are
described in Section 3.8. described in Section 3.8.
10.2.10. Extensions 10.2.10. Extensions
This document specifies the "extensions" parameter for Alt-Svc, which This document specifies the "extensions" parameter for Alt-Svc, which
carries a list of extension types potentially in use by a multicast carries a list of extension types potentially in use by a multicast
QUIC session. "extensions" MUST only contain values from the QUIC QUIC session. "extensions" MUST only contain values from the QUIC
Transport Parameter registry ([QUIC-TRANSPORT], section 22.2) that Transport Parameter registry ([QUIC-TRANSPORT], section 22.2) that
have explicit support for multicast QUIC. Each entry in the list have explicit support for multicast QUIC. Each entry in the list
consists of a key identifying the transport parameter, and an consists of a key identifying the transport parameter, and an
optional value. Both the key and the value are hex-encoded. optional value. Both the key and the value are hex-encoded.
Syntax: Syntax:
extensions = DQUOTE ext-transport-param extensions = DQUOTE ext-transport-param *[ "," ext-transport-param ] DQUOTE
*[ "," ext-transport-param ] DQUOTE ext-transport-param = ext-key [ "=" ext-value ]
ext-transport-param = ext-key [ "=" ext-value ] ext-key = 4*4HEXDIG; Transport Parameter key
ext-key = 4*4HEXDIG; Transport Parameter key ext-value = *HEXDIG; Optional Transport Parameter value
ext-value = *HEXDIG; Optional Transport Parameter value
For example, the following specifies two extensions: For example, the following specifies two extensions:
extensions="0094,0d0d=f00" extensions="0094,0d0d=f00"
The requirements for endpoint usage of "extensions" are described in The requirements for endpoint usage of "extensions" are described in
Section 3.6 Section 3.6
11. Security and Privacy Considerations 11. Security and Privacy Considerations
skipping to change at page 39, line 4 skipping to change at page 39, line 18
This document creates a new registration for the identification of This document creates a new registration for the identification of
the HTTP over multicast QUIC protocol in the "Application-Layer the HTTP over multicast QUIC protocol in the "Application-Layer
Protocol Negotiation (ALPN) Protocol IDs" registry established by Protocol Negotiation (ALPN) Protocol IDs" registry established by
[RFC7301]. [RFC7301].
The "h3m" string identifies HTTP semantics expressed as HTTP mapped The "h3m" string identifies HTTP semantics expressed as HTTP mapped
to a QUIC layer and carried over IP multicast: to a QUIC layer and carried over IP multicast:
Protocol: Bulk data transport using HTTP over multicast QUIC Protocol: Bulk data transport using HTTP over multicast QUIC
Identification Sequence: 0x68 0x71 0x6D ("h3m")
Identification Sequence: 0x68 0x33 0x6D ("h3m")
Specification: This document, Section 9 Specification: This document, Section 9
This entry reserves an identifier that is not allowed to appear in This entry reserves an identifier that is not allowed to appear in
TLS Application-Layer Protocol Negotiation. TLS Application-Layer Protocol Negotiation.
12.2. Registration of Alt-Svc parameters 12.2. Registration of Alt-Svc parameters
This document creates seven registrations for the identification of This document creates seven registrations for the identification of
parameters for the "Hypertext Transfer Protocol (HTTP) Alt-Svc parameters for the "Hypertext Transfer Protocol (HTTP) Alt-Svc
skipping to change at page 40, line 52 skipping to change at page 41, line 16
13.1. Normative References 13.1. Normative References
[I-D.cavage-http-signatures] [I-D.cavage-http-signatures]
Cavage, M. and M. Sporny, "Signing HTTP Messages", draft- Cavage, M. and M. Sporny, "Signing HTTP Messages", draft-
cavage-http-signatures-12 (work in progress), October cavage-http-signatures-12 (work in progress), October
2019. 2019.
[QUIC-HTTP] [QUIC-HTTP]
Bishop, M., Ed., "Hypertext Transfer Protocol Version 3 Bishop, M., Ed., "Hypertext Transfer Protocol Version 3
(HTTP/3)", draft-ietf-quic-http-25 (work in progress). (HTTP/3)", draft-ietf-quic-http-29 (work in progress).
[QUIC-QPACK] [QUIC-QPACK]
Krasic, C., Ed., Bishop, M., Ed., and A. Frindell, Ed., Krasic, C., Ed., Bishop, M., Ed., and A. Frindell, Ed.,
"QPACK: Header Compression for HTTP over QUIC", draft- "QPACK: Header Compression for HTTP over QUIC", draft-
ietf-quic-qpack-12 (work in progress). ietf-quic-qpack-16 (work in progress).
[QUIC-TRANSPORT] [QUIC-TRANSPORT]
Iyengar, J., Ed. and M. Thomson, Ed., "QUIC: A UDP-Based Iyengar, J., Ed. and M. Thomson, Ed., "QUIC: A UDP-Based
Multiplexed and Secure Transport", draft-ietf-quic- Multiplexed and Secure Transport", draft-ietf-quic-
transport-25 (work in progress). transport-29 (work in progress).
[RFC2119] Bradner, S., "Key words for use in RFCs to Indicate [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate
Requirement Levels", BCP 14, RFC 2119, Requirement Levels", BCP 14, RFC 2119,
DOI 10.17487/RFC2119, March 1997, DOI 10.17487/RFC2119, March 1997,
<https://www.rfc-editor.org/info/rfc2119>. <https://www.rfc-editor.org/info/rfc2119>.
[RFC3168] Ramakrishnan, K., Floyd, S., and D. Black, "The Addition [RFC3168] Ramakrishnan, K., Floyd, S., and D. Black, "The Addition
of Explicit Congestion Notification (ECN) to IP", of Explicit Congestion Notification (ECN) to IP",
RFC 3168, DOI 10.17487/RFC3168, September 2001, RFC 3168, DOI 10.17487/RFC3168, September 2001,
<https://www.rfc-editor.org/info/rfc3168>. <https://www.rfc-editor.org/info/rfc3168>.
skipping to change at page 42, line 26 skipping to change at page 42, line 41
April 2016, <https://www.rfc-editor.org/info/rfc7838>. April 2016, <https://www.rfc-editor.org/info/rfc7838>.
[RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC [RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC
2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174, 2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174,
May 2017, <https://www.rfc-editor.org/info/rfc8174>. May 2017, <https://www.rfc-editor.org/info/rfc8174>.
13.2. Informative References 13.2. Informative References
[QUIC-RECOVERY] [QUIC-RECOVERY]
Iyengar, J., Ed. and I. Swett, Ed., "QUIC Loss Detection Iyengar, J., Ed. and I. Swett, Ed., "QUIC Loss Detection
and Congestion Control", draft-ietf-quic-recovery-25 (work and Congestion Control", draft-ietf-quic-recovery-29 (work
in progress). in progress).
[QUIC-TLS] [QUIC-TLS]
Thomson, M., Ed. and S. Turner, Ed, Ed., "Using Transport Thomson, M., Ed. and S. Turner, Ed, Ed., "Using Transport
Layer Security (TLS) to Secure QUIC", draft-ietf-quic- Layer Security (TLS) to Secure QUIC", draft-ietf-quic-
tls-22 (work in progress). tls-29 (work in progress).
[RFC1112] Deering, S., "Host extensions for IP multicasting", STD 5, [RFC1112] Deering, S., "Host extensions for IP multicasting", STD 5,
RFC 1112, DOI 10.17487/RFC1112, August 1989, RFC 1112, DOI 10.17487/RFC1112, August 1989,
<https://www.rfc-editor.org/info/rfc1112>. <https://www.rfc-editor.org/info/rfc1112>.
[RFC1191] Mogul, J. and S. Deering, "Path MTU discovery", RFC 1191, [RFC1191] Mogul, J. and S. Deering, "Path MTU discovery", RFC 1191,
DOI 10.17487/RFC1191, November 1990, DOI 10.17487/RFC1191, November 1990,
<https://www.rfc-editor.org/info/rfc1191>. <https://www.rfc-editor.org/info/rfc1191>.
[RFC2974] Handley, M., Perkins, C., and E. Whelan, "Session [RFC2974] Handley, M., Perkins, C., and E. Whelan, "Session
skipping to change at page 52, line 52 skipping to change at page 52, line 52
| | | session optionally | | | | session optionally |
| | | advertised out of | | | | advertised out of |
| | | band via Alt-Svc | | | | band via Alt-Svc |
| | | "max-concurrent- | | | | "max-concurrent- |
| | | resources" | | | | resources" |
| | | parameter. | | | | parameter. |
+----------------------------+----------------+---------------------+ +----------------------------+----------------+---------------------+
Table 2: Required Transport Parameters Table 2: Required Transport Parameters
+-------------------------+------------------+----------------------+ +------------------------------+---------------+--------------------+
| Protocol feature | Unicast QUIC | Multicast QUIC | | Protocol feature | Unicast QUIC | Multicast QUIC |
| | | profile | | | | profile |
+-------------------------+------------------+----------------------+ +------------------------------+---------------+--------------------+
| "original_connection_id | The value of the | Not used. No client | | "original_destination_connec | The value of | Not used. No |
| " | Destination | interaction. | | tion_id" | the | client |
| | Connection ID | | | | Destination | interaction. |
| | field from the | | | | Connection ID | |
| | first Initial | | | | field from | |
| | packet sent by | | | | the first | |
| | the client. | | | | Initial | |
| | | | | | packet sent | |
| "max_idle_timeout" | How long to keep | Not used. Advertised | | | by the | |
| | an idle | out of band via Alt- | | | client. | |
| | connection open | Svc "session-idle- | | | | |
| | for before | timeout" parameter; | | "max_idle_timeout" | How long to | Not used. |
| | closing. Takes a | defaults to 0 (never | | | keep an idle | Advertised out of |
| | default of 0 | close on idle) if | | | connection | band via Alt-Svc |
| | (never close on | not specified. | | | open for | "session-idle- |
| | idle) if not | | | | before | timeout" |
| | specified. | | | | closing. | parameter; |
| | | | | | Takes a | defaults to 0 |
| "stateless_reset_token" | Used in | Not used. Stateless | | | default of 0 | (never close on |
| | verifying a | reset is not used by | | | (never close | idle) if not |
| | stateless reset. | this profile. | | | on idle) if | specified. |
| | | | | | not | |
| "max_packet_size" | Limit of the | Not used. Maximum | | | specified. | |
| | size of packets | packet size for a | | | | |
| | that an endpoint | session optionally | | "stateless_reset_token" | Used in | Not used. |
| | is willing to | advertised out of | | | verifying a | Stateless reset is |
| | receive. | band via Alt-Svc | | | stateless | not used by this |
| | | "max-packet-size" | | | reset. | profile. |
| | | parameter. | | | | |
| | | | | "max_udp_payload_size" | Limit of the | Not used. Maximum |
| "ack_delay_exponent" | The exponent | Not used. "ACK" | | | size of | packet size for a |
| | used to decode | frames are | | | packets that | session optionally |
| | the ACK Delay | prohibited by this | | | an endpoint | advertised out of |
| | field in the | profile. | | | is willing to | band via Alt-Svc |
| | "ACK" frame. | | | | receive. | "max-packet-size" |
| | | | | | | parameter. |
| "max_ack_delay" | Maximum time in | Not used. "ACK" | | | | |
| | milliseconds by | frames are | | "ack_delay_exponent" | The exponent | Not used. "ACK" |
| | which an | prohibited by this | | | used to | frames are |
| | endpoint will | profile. | | | decode the | prohibited by this |
| | delay sending ac | | | | ACK Delay | profile. |
| | knowledgements. | | | | field in the | |
| | | | | | "ACK" frame. | |
| "disable_active_migrati | Signals if an | Not used. Session | | | | |
| on" | endpoint does | migration not | | "max_ack_delay" | Maximum time | Not used. "ACK" |
| | not support | currently supported | | | in | frames are |
| | connection | by this profile. | | | milliseconds | prohibited by this |
| | migration. | | | | by which an | profile. |
| | | | | | endpoint will | |
| "preferred_address" | Used to effect a | Not used. No | | | delay sending | |
| | change in server | handshake in this | | | acknowledgeme | |
| | address at the | profile. | | | nts. | |
| | end of the | | | | | |
| | handshake. | | | "disable_active_migration" | Signals if an | Not used. Session |
+-------------------------+------------------+----------------------+ | | endpoint does | migration not |
| | not support | currently |
| | connection | supported by this |
| | migration. | profile. |
| | | |
| "preferred_address" | Used to | Not used. No |
| | effect a | handshake in this |
| | change in | profile. |
| | server | |
| | address at | |
| | the end of | |
| | the | |
| | handshake. | |
| | | |
| "active_connection_id_limit" | | Not used. Only a |
| | | single session |
| | | identifier is used |
| | | in this profile. |
| | | |
| "initial_source_connection_i | The value | Not used. No |
| d" | that an | client |
| | endpoint | interaction. |
| | included in | |
| | the Source | |
| | Connection ID | |
| | field of the | |
| | first Initial | |
| | packet it | |
| | sent for the | |
| | connection | |
| | | |
| "retry_source_connection_id" | The value | Not used. Retry |
| | that the | packets are not |
| | server | used in this |
| | included in | profile. |
| | the Source | |
| | Connection ID | |
| | field of a | |
| | retry packet | |
+------------------------------+---------------+--------------------+
Table 3: Optional Transport Parameters Table 3: Optional Transport Parameters
+-------------+---------------------+-------------------------------+ +-------------+---------------------+-------------------------------+
| Protocol | Unicast QUIC | Multicast QUIC profile | | Protocol | Unicast QUIC | Multicast QUIC profile |
| feature | | | | feature | | |
+-------------+---------------------+-------------------------------+ +-------------+---------------------+-------------------------------+
| Maximum | Determined by path | Determined by path MTU | | Maximum | Determined by path | Determined by path MTU |
| packet size | MTU discovery or | discovery or other heuristic. | | packet size | MTU discovery or | discovery or other heuristic. |
| | other heuristic. | | | | other heuristic. | |
skipping to change at page 55, line 40 skipping to change at page 56, line 31
| | the network can | | | | the network can | |
| | transmit packets of | | | | transmit packets of | |
| | at least this size.) | | | | at least this size.) | |
| | | | | | | |
| "PING" frame | Used by an endpoint | Used by the | | "PING" frame | Used by an endpoint | Used by the |
| | to verify that its | multicast sender as | | | to verify that its | multicast sender as |
| | peer is still alive. | a session keep- | | | peer is still alive. | a session keep- |
| | Acknowledged using a | alive notification. | | | Acknowledged using a | alive notification. |
| | regular "ACK" frame. | Never acknowledged. | | | regular "ACK" frame. | Never acknowledged. |
| | | | | | | |
| "ACK" frame | Used by a receiver | Both "ACK" frame | | "ACK" frames | Used by a receiver | Both "ACK" frame |
| | to acknowledge | types are | | | to acknowledge | types are |
| | receipt of data from | prohibited. | | | receipt of data from | prohibited. |
| | its peer. | | | | its peer. | |
| | | | | | | |
| "RESET_STREAM" frame | Request by receiver | Indication to | | "RESET_STREAM" frame | Request by receiver | Indication to |
| | for sender to | receivers that the | | | for sender to | receivers that the |
| | terminate a stream | multicast sender | | | terminate a stream | multicast sender |
| | transmission | has prematurely | | | transmission | has prematurely |
| | prematurely. | terminated a stream | | | prematurely. | terminated a stream |
| | | transmission. | | | | transmission. |
skipping to change at page 58, line 31 skipping to change at page 59, line 22
| | | | | | | |
| "HANDSHAKE_DONE" frame | Used by a server to | Prohibited. | | "HANDSHAKE_DONE" frame | Used by a server to | Prohibited. |
| | inform a client that | | | | inform a client that | |
| | the cryptographic | | | | the cryptographic | |
| | handshake has | | | | handshake has | |
| | completed. | | | | completed. | |
+------------------------+----------------------+---------------------+ +------------------------+----------------------+---------------------+
Table 5: QUIC Framing Layer Table 5: QUIC Framing Layer
+------------------+------------------+-----------------------------+ +----------------+------------------+-------------------------------+
| Protocol feature | Unicast HTTP/3 | Multicast HTTP/3 profile | | Protocol | Unicast HTTP/3 | Multicast HTTP/3 profile |
+------------------+------------------+-----------------------------+ | feature | | |
| Stream Type | Type of | Only Server Push type is | +----------------+------------------+-------------------------------+
| | unidirectional | permitted. | | Stream Type | Type of | Only Server Push type is |
| | stream. | | | | unidirectional | permitted. |
| | | | | | stream. | |
| Push ID | Identifies a | Identifies a promised | | | | |
| | promised | resource conveyed in an | | Push ID | Identifies a | Identifies a promised |
| | resource | earlier "PUSH_PROMISE" | | | promised | resource conveyed in an |
| | conveyed in an | frame. | | | resource | earlier "PUSH_PROMISE" frame. |
| | earlier | | | | conveyed in an | |
| | "PUSH_PROMISE" | | | | earlier | |
| | frame. | | | | "PUSH_PROMISE" | |
| | | | | | frame. | |
| "DATA" frame | Carriage of HTTP | Carriage of HTTP response | | | | |
| | request/response | message body. | | "DATA" frame | Carriage of HTTP | Carriage of HTTP response |
| | message body. | | | | request/response | message body. |
| | | | | | message body. | |
| "HEADERS" frame | Carriage of HTTP | Carriage of HTTP response | | | | |
| | request/response | message metadata. Trailing | | "HEADERS" | Carriage of HTTP | Carriage of HTTP response |
| | message | "HEADERS" frame is | | frame | request/response | message metadata. Trailing |
| | metadata. | permitted. | | | message | "HEADERS" frame is permitted. |
| | Trailing | | | | metadata. | |
| | "HEADERS" frame | | | | Trailing | |
| | is permitted. | | | | "HEADERS" frame | |
| | | | | | is permitted. | |
| "CANCEL_PUSH" | Used to request | Permitted only for senders. | | | | |
| frame | cancellation of | | | "CANCEL_PUSH" | Used to request | Permitted only for senders. |
| | server push | | | frame | cancellation of | |
| | prior to the | | | | server push | |
| | push stream | | | | prior to the | |
| | being created. | | | | push stream | |
| | | | | | being created. | |
| "SETTINGS" frame | Negotiation of | Prohibited. | | | | |
| | HTTP/3 | | | "SETTINGS" | Negotiation of | Prohibited. |
| | connection | | | frame | HTTP/3 | |
| | settings. | | | | connection | |
| | | | | | settings. | |
| "PUSH_PROMISE" | Carriage of HTTP | Carriage of HTTP pseudo- | | | | |
| frame | pseudo-request | request message metadata. | | "PUSH_PROMISE" | Carriage of HTTP | Carriage of HTTP pseudo- |
| | message | All HTTP representation | | frame | pseudo-request | request message metadata. All |
| | metadata. | transfers over multicast | | | message | HTTP representation transfers |
| | | begin this way. Stream ID | | | metadata. | over multicast begin this |
| | | of the first client- | | | | way. Stream ID of the first |
| | | initiated bidirectional | | | | client-initiated |
| | | stream is reserved and all | | | | bidirectional stream is |
| | | "PUSH_PROMISE" frames | | | | reserved and all |
| | | reference this as the | | | | "PUSH_PROMISE" frames |
| | | client request from which | | | | reference this as the client |
| | | they are notionally | | | | request from which they are |
| | | derived. This stream | | | | notionally derived. This |
| | | remains open while a sender | | | | stream remains open while a |
| | | is participating in the | | | | sender is participating in |
| | | multicast QUIC session. | | | | the multicast QUIC session. |
| | | | | | | |
| "GOAWAY" frame | Early | Prohibited. Use HTTP | | "GOAWAY" frame | Early | Prohibited. Use HTTP explicit |
| | notification (by | explicit session tear-down | | | notification (by | session tear-down instead. |
| | either endpoint) | instead. | | | either endpoint) | |
| | of future | | | | of future | |
| | connection | | | | connection | |
| | closure, | | | | closure, | |
| | allowing for | | | | allowing for | |
| | orderly | | | | orderly | |
| | completion of | | | | completion of | |
| | open streams. | | | | open streams. | |
| | | | | | | |
| "MAX_PUSH_ID" | Used by a | Prohibited. | | "MAX_PUSH_ID" | Used by a | Prohibited. |
| frame | receiver to | | | frame | receiver to | |
| | control the | | | | control the | |
| | number of server | | | | number of server | |
| | pushes that a | | | | pushes that a | |
| | sender can | | | | sender can | |
| | initiate. | | | | initiate. | |
| | | | | | | |
| "DUPLICATE_PUSH" | Used by servers | Prohibited. | | "ALTSVC" | Signalling | Prohibited. |
| frame | to indicate that | | | HTTP/2 | alternative | |
| | an existing | | | extension | service for | |
| | pushed resource | | | frame | HTTP/3 session. | |
| | is related to | | | | | |
| | multiple client | | | Other HTTP/2 | | Prohibited. |
| | requests. | | | extension | | |
| | | | | frames | | |
| "ALTSVC" HTTP/2 | Signalling | Prohibited. | +----------------+------------------+-------------------------------+
| extension frame | alternative | |
| | service for | |
| | HTTP/3 session. | |
| | | |
| Other HTTP/2 | | Prohibited. |
| extension frames | | |
+------------------+------------------+-----------------------------+
Table 6: HTTP/3 Mapping Table 6: HTTP/3 Mapping
+-------------+----------------------------------+------------------+ +-------------+----------------------------------+------------------+
| Protocol | Unicast HTTP/3 | Multicast HTTP/3 | | Protocol | Unicast HTTP/3 | Multicast HTTP/3 |
| feature | | profile | | feature | | profile |
+-------------+----------------------------------+------------------+ +-------------+----------------------------------+------------------+
| Huffman | Header blocks may use Huffman | Header blocks | | Huffman | Header blocks may use Huffman | Header blocks |
| string | codes to compress literal string | may use Huffman | | string | codes to compress literal string | may use Huffman |
| compression | values. | codes to | | compression | values. | codes to |
skipping to change at page 61, line 36 skipping to change at page 61, line 44
| | 0. | | | | 0. | |
+-------------+----------------------------------+------------------+ +-------------+----------------------------------+------------------+
Table 7: HTTP Metadata Compression Layer Table 7: HTTP Metadata Compression Layer
Appendix D. Changelog Appendix D. Changelog
*RFC Editor's Note:* Please remove this section prior to *RFC Editor's Note:* Please remove this section prior to
publication of a final version of this document. publication of a final version of this document.
D.1. Since draft-pardue-quic-http-mcast-05 D.1. Since draft-pardue-quic-http-mcast-06
o Update references to QUIC I-Ds.
o Clarify that only the first source-address parameter should be
used if duplicated.
o Fix source-address example to not be a quoted string.
o Fix bytes in the ALPN identification sequence following change to
h3m.
o Update language around QUIC Connection IDs to reflect the core
specs.
o Update frame and transport parameter names throughout to match
core specifications.
o Remove Author's Note about reserved stream ID for "PUSH_PROMISE"
frames.
o Update language around QPACK static and dynamic table indexing to
more closely align with the core spec.
o Update Session Idle Timeout to match core specs, including
removing limitation of 600 seconds and expressing in milliseconds,
not seconds.
o Preface Session Termination with a statement clarifying that
participants may leave at any time.
D.2. Since draft-pardue-quic-http-mcast-05
o Update references to QUIC I-Ds. o Update references to QUIC I-Ds.
o Sender packet number size is now fixed for the duration of a o Sender packet number size is now fixed for the duration of a
session. session.
o Change how to handle multiple session IDs: sessions are now only o Change how to handle multiple session IDs: sessions are now only
allowed a single ID. allowed a single ID.
o Remove incompatible requirements set by [QUIC-TRANSPORT]'s o Remove incompatible requirements set by [QUIC-TRANSPORT]'s
skipping to change at page 62, line 14 skipping to change at page 63, line 5
o Remove HTTP Prioritization references. o Remove HTTP Prioritization references.
o Add new "extensions" Alt-Svc parameter. o Add new "extensions" Alt-Svc parameter.
o Broaden peak flow rate to QUIC payload to encompass all frame o Broaden peak flow rate to QUIC payload to encompass all frame
types. types.
o Change ALPN identifier to h3m. o Change ALPN identifier to h3m.
D.2. Since draft-pardue-quic-http-mcast-04 D.3. Since draft-pardue-quic-http-mcast-04
o Update references to QUIC I-Ds, remove QUIC-SPIN. (draft-ietf- o Update references to QUIC I-Ds, remove QUIC-SPIN. (draft-ietf-
quic-transport-20) quic-transport-20)
o Update session ID length to match new connection ID length. o Update session ID length to match new connection ID length.
(draft-ietf-quic-transport-22) (draft-ietf-quic-transport-22)
o Clarify the mapping for the new "active_connection_id_limit" o Clarify the mapping for the new "active_connection_id_limit"
session parameter. (draft-ietf-quic-transport-21) session parameter. (draft-ietf-quic-transport-21)
skipping to change at page 62, line 46 skipping to change at page 63, line 37
o Clarify difference between connection and session migration. o Clarify difference between connection and session migration.
o Move GOAWAY frame to HTTP/3 profile. o Move GOAWAY frame to HTTP/3 profile.
o Renamed Session Shutdown to Connection Shutdown to mirror concept o Renamed Session Shutdown to Connection Shutdown to mirror concept
in [QUIC-TRANSPORT]. in [QUIC-TRANSPORT].
o Clarify the layer of each frame type when referred to. o Clarify the layer of each frame type when referred to.
D.3. Since draft-pardue-quic-http-mcast-03 D.4. Since draft-pardue-quic-http-mcast-03
o Update references to QUIC I-Ds. o Update references to QUIC I-Ds.
o Change crypto handshake text now that it's no longer done on o Change crypto handshake text now that it's no longer done on
Stream ID 0. Stream ID 0.
o Update to reference Source and Destination Connection IDs. o Update to reference Source and Destination Connection IDs.
o Prohibit the use of connection coalescing, migration and ECN. o Prohibit the use of connection coalescing, migration and ECN.
skipping to change at page 63, line 30 skipping to change at page 64, line 20
o Clarify packet number space (only use application data space, not o Clarify packet number space (only use application data space, not
initial or handshake). initial or handshake).
o Add statement on QUIC latency spin bit. o Add statement on QUIC latency spin bit.
o Removed sentence stating that multiple Connection IDs cannot be o Removed sentence stating that multiple Connection IDs cannot be
used concurrently in a unicast QUIC session, in accordance with used concurrently in a unicast QUIC session, in accordance with
[QUIC-TRANSPORT] section 5.1.2. [QUIC-TRANSPORT] section 5.1.2.
D.4. Since draft-pardue-quic-http-mcast-02 D.5. Since draft-pardue-quic-http-mcast-02
o No changes. o No changes.
D.5. Since draft-pardue-quic-http-mcast-01 D.6. Since draft-pardue-quic-http-mcast-01
o Explicit guidance on maximum stream ID value permitted. o Explicit guidance on maximum stream ID value permitted.
o Updated guidance on PING (and PONG) frame. o Updated guidance on PING (and PONG) frame.
o Added a comparison table to appendix. o Added a comparison table to appendix.
o Remove invalid use of trailing headers. o Remove invalid use of trailing headers.
o Use the new HTTP/QUIC DATA frame. o Use the new HTTP/QUIC DATA frame.
skipping to change at page 64, line 10 skipping to change at page 64, line 48
o Redefine server push to reflect core document changes. o Redefine server push to reflect core document changes.
o Remove default idle time out value. o Remove default idle time out value.
o Clarify session parameter requirements (session-idle-timeout o Clarify session parameter requirements (session-idle-timeout
became mandatory). became mandatory).
o Update frame notation convention. o Update frame notation convention.
D.6. Since draft-pardue-quic-http-mcast-00 D.7. Since draft-pardue-quic-http-mcast-00
o Update references to QUIC I-Ds. o Update references to QUIC I-Ds.
o Relax session leaving requirements language. o Relax session leaving requirements language.
o Clarify handling of omitted session parameter advertisements. o Clarify handling of omitted session parameter advertisements.
o Rename "Idle" state to "Quiescent". o Rename "Idle" state to "Quiescent".
o Add digest algorithm session parameter. o Add digest algorithm session parameter.
 End of changes. 54 change blocks. 
239 lines changed or deleted 304 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/