Hypertext Transfer Protocol (HTTP) over multicast QUICBBC Research & Developmentlucas.pardue@bbc.co.ukBBC Research & Developmentrichard.bradbury@bbc.co.ukThis document specifies a profile of the QUIC protocol and the HTTP/QUIC mapping that facilitates the transfer of HTTP resources over multicast IP using the QUIC transport as its framing and packetisation layer. Compatibility with the QUIC protocol’s syntax and semantics is maintained as far as practical and additional features are specified where this is not possible.The means to bulk transfer resources over multicast IP using HTTP semantics presents an opportunity to more efficiently deliver services at scale, while leveraging the wealth of existing HTTP-related standards, tools and applications. Audio-visual segmented media, in particular, would benefit from this mode of transmission.The carriage of HTTP over multicast IP may be satisfied using existing technologies, for example the Real-time Transport Protocol (RTP) . However, such protocols typically require the translation or encapsulation of HTTP. This introduces concerns for providers of services, such as defining the translation, additional workload, complication of workflows, manageability issues, versioning issues, and so on.In contrast, this document describes a simpler and more direct expression of HTTP semantics over multicast IP. HTTP over multicast QUIC is a profile of the QUIC protocol () and the HTTP/QUIC mapping (). This includes the repurposing of certain QUIC packet fields and changes to some protocol procedures (e.g. prohibition of the usage of certain frame types) which, in turn, change the behavioural expectations of endpoints. However, the profile purposely limits the scope of change in order to preserve maximum compatibility with conventional QUIC.This profile prohibits the transmission of QUIC packets from receiver to sender via multicast IP. The use of side-channel or out-of-band feedback mechanisms is not prohibited by this specification, but is out of scope and these are not considered further by the present document.Experience indicates that a generally available multicast deployment is difficult to achieve on the Internet notwithstanding the improvements that IPv6 makes in this area. There is evidence that discretely referenced multicast “islands” can more pragmatically be deployed. Discovery of such islands by receivers, as they become available, is typically difficult, however. To address the problem, this document describes an HTTP-based discovery mechanism that uses HTTP Alternative Services to advertise the existence of multicast QUIC sessions (). This provides the means for multicast-capable endpoints to learn about and make use of them in an opportunistic and user-imperceptible manner. This mechanism results in a common HTTP application layer for both the discovery and delivery of services across unicast and multicast networks. This provides support for users and devices accessing services over a heterogeneous network. This is a departure from conventional multicast discovery technologies such as SDP and SAP .The discovery mechanism also addresses some of the issues related to using QUIC over a unidirectional network association by replacing connection establishment aspects that depend on a bidirectional transport.The present document includes a number of optional features. It is anticipated that further specifications will define interoperability profiles suited to particular application domains.The key words “MUST”, “MUST NOT”, “REQUIRED”, “SHALL”, “SHALL NOT”, “SHOULD”, “SHOULD NOT”,
“RECOMMENDED”, “MAY”, and “OPTIONAL” in this document are to be interpreted as described in .This document uses the Augmented BNF defined in and updated by along with the “#rule” extension defined in Section 7 of . The rules below are defined in , , and :quoted-string = <quoted-string, see , Section 3.2.6>token = <token, see , Section 3.2.6>uri-host = <uri-host, see , Section 2.7>Definitions of terms that are used in this document:endpoint: A host capable of being a participant in a multicast QUIC session.multicast QUIC session: A logical unidirectional flow of metadata and data over multicast IP, framed according to this specification. The lifetime of a session is independent of any endpoint.participant: A sender or receiver that is taking part in a multicast QUIC session.sender: A participant sending multicast traffic according to this specification.receiver: A participant receiving multicast traffic according to this specification.session: See multicast QUIC session.session ID: The identifier for a multicast QUIC session.session parameter: Characteristic of a multicast QUIC session.An HTTP/QUIC connection carried over bidirectional unicast is defined as a conversation between two QUIC endpoints that multiplexes several logical streams within a single encryption context. This is a one-to-one relationship. Furthermore, QUIC connections achieve decoupling from the underlying network (IP and port) by means of a Connection ID. Use of a consistent connection identifier allows QUIC connections to survive changes to the network connectivity. The establishment of a QUIC connection relies upon an up-front, in-band exchange (and possible negotiation) of cryptographic and transport parameters (conveyed in QUIC handshake messages) and HTTP-specific settings (conveyed in HTTP/2 SETTINGS frames). Such parameters may be required or optional and may be used by either endpoint to control the characteristics of connection usage.This concept of a connection does not suit the carriage of HTTP/QUIC over unidirectional network associations such as multicast IP. In fact, there is no requirement for either endpoint (multicast sender or receiver) to be in existence in order for the other to start or join this one-sided conversation. The term “connection” is misleading in this context; therefore we introduce an alternative term “multicast QUIC session” or simply “session”, which is defined as the logical entity describing the characteristics of the anticipated unidirectional flow of metadata and data. Such characteristics are expressed as “session parameters”, described in . Advertisement of multicast QUIC sessions, specified in , allows for the senders and receivers to discover a session and to form multicast IP network associations that permit traffic flow.The lifecycle of a multicast QUIC session is decoupled from the lifecycle of any particular endpoint. Multicast receivers or senders that take part in a session are called participants. The state of a session is influenced by the actions of participants. The loose coupling of participants means that they are unlikely to have a consistent shared view of the current state of a session. There is no requirement for a participant to know the session state and the present document does not define a method to explicitly determine it. The definitions of session states provided below are intended to assist higher-level operational treatment of sessions:Idle: the session has no participants and is ready to accept them.Half-established: the session has a participant.Fully-established: the session has a sender and at least one receiver participant.Finished: the session has ended, and there are no participants.Permitted states transitions are shown in below.The transmission of QUIC packets is expected to occur only during the Half-Established and Fully-Established states.A session begins in the Idle state. A typical session establishment sequence would see the transition from Idle to Half-Established when a sender joins the session. The transition from Half-Established to Fully-Established occurs when at least one receiver joins the session.It is equally valid for a receiver to join a session in the Idle state, triggering the transition to Half-Established. In this case, the transition to Fully-Established takes place only when a sender joins the session.A session enters the Finished state when all participants leave it. The methods for leaving a session are either explicit shutdown (), implicit shutdown (i.e. idle timeout, ) or migration away (described in the next section).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 explicit shutdown messages to the multicast group and subsequently stops transmitting packets. This causes the session to transition from Fully-Established to Half-Established. In the second stage, receivers that have received explicit shutdown messages leave the multicast group. Once all receivers have left the session it transitions from Half-Established to Finished.The transition from Idle to Finished could also occur in response to out-of-band actions, for example the availability of a session being withdrawn without any participants having made use of it.Endpoints MAY migrate between multicast QUIC sessions (for example, to make use of alternate session parameters that are preferred). Session migration requires participants to leave the current session and join the new session. These actions affect the state of the respective sessions as explained above.The discovery of multicast QUIC sessions is described in .The characteristics of multicast QUIC sessions are expressed as session parameters, which cover cryptographic and transport parameters, HTTP-specific settings and multicast-specific configuration.Session parameter exchange over IP multicast is difficult:In-band exchanges are one-way, and so the client does not have the means to send session parameters.The lifecycle of any multicast sender is independent of the multicast receiver. It is therefore unlikely that all receivers will have joined a session in time to receive parameters sent at the start of a multicast session.A range of strategies exists to mitigate these points. However, each has the possibility to add complexity to deployment and manageability, transmission overhead, or other such concerns. This document defines a solution that relies on the one-way announcement of session parameters in advance of session establishment. This is achieved using HTTP Alternative Services and is explained in . Other advertisement solutions are not prohibited but are not explored in this document.Session parameters MUST NOT change during the lifetime of a session. This restriction also applies to HTTP-level settings (see ).This document defines a 64-bit session identifier used to identify a session. This “Session ID” affords independence from multicast IP, creating the possibility for a session to span multiple multicast groups, or to migrate a session to a different multicast group. Assignment of Session ID is considered out of this document’s scope.The Session ID is carried in the Connection ID field of the QUIC packet (see ).A multicast sender participating in a session MUST send QUIC packets with a matching Session ID. A multicast receiver participating in a session MUST validate that the Session ID of received QUIC packets matches that advertised in the session parameters (, ) before any HTTP-level processing is done. In the case of validation failure, the receiver SHOULD leave the session in order to protect itself from denial-of-service attacks.Authors’ Note: Security handshake (as described in WG documents) is in flux. This section will track developments and will be updated accordingly.The QUIC Crypto and Transport handshake (see , and ) sets out methods to achieve the goals of authenticated key exchange and record protection between two endpoints forming a QUIC connection. The design facilitates low-latency connection; 1-RTT or 0-RTT. The Crypto handshake reserves QUIC stream 1 for TLS handshake messages.This specification replaces the in-band security handshake, achieving similar goals through the use of session parameters described in . For the purpose of compatibility, the use of QUIC stream 1 (see ) is reserved.Integrity and authenticity concerns are addressed in and respectively. In order to protect themselves from attack vectors, endpoints SHOULD NOT participate in sessions for which they cannot establish reasonable confidence over the cipher suite or key in use for that session. Participants SHOULD leave any session that fails to successfully match anticipated security characteristics.In this specification, connection negotiation is replaced with a session advertisement mechanism based on HTTP Alternative Services (Alt-Svc) . This document specifies how the parameters of a multicast QUIC session are expressed as Alt-Svc parameters. The following sections provide a high-level view of these; further details are provided in , with examples provided in . QUIC connection parameters not defined as, or related to, Alt-Svc parameters are not used.The definition of a session (including the session ID and its parameters) is not the responsibility of any endpoint. Rather, endpoints SHOULD use session advertisements to determine if they are capable of participating in a given session. This document does not specify which party is responsible for defining and/or advertising multicast QUIC sessions.The freshness of Alt-Svc multicast QUIC session advertisements is as described in section 2.2 of .It is RECOMMENDED that session advertisements are carried over a secure transport (such as HTTPS) which can guarantee the authenticity and integrity of the Alt-Svc information. This addresses some of the concerns around the protection of session establishment described in .Authors’ Note: We invite review comments on mandating the use of a secure transport for advertising sessions.Senders MAY also advertise the availability of alternative sessions by carrying Alt-Svc in a multicast QUIC session.Authors’ Note: Version negotiation (as described in WG documents) is in flux. This section will track developments and will be updated accordingly.Conventional QUIC connection establishment begins with version negotiation. In a unidirectional multicast environment, there is no reasonable way to negotiate in such a manner. defines an Alt-Svc “quic” parameter that can be advertised to clients for use as a version negotiation hint. This specification uses “quic” as a session parameter for a similar purpose but with the additional constraint that the parameter MUST appear exactly once: it is not optional and the parameter MUST NOT be repeated.This mechanism replaces the use of the Version field in the QUIC packet (see ).A multicast sender participating in a session MUST send HTTP messages in the format corresponding to the advertised version. If the sender does not support the advertised version it MUST NOT send any data. A receiver MUST NOT join a session where the “quic” parameter is absent. A receiver SHOULD NOT join a session for which it does not support the advertised version, in order to avoid wasting processing resources.Authors’ Note: Security handshake (as described in WG documents) is in flux. This section will track developments and will be updated accordingly.This specification replaces the in-band security handshake:Cipher suite negotiation is replaced with a “cipher suite” session parameter, which is advertised as the Alt-Svc parameter cipher-suite (). If present, this parameter MUST contain only one value that corresponds to an entry in the TLS Cipher Suite Registry (see http://www.iana.org/assignments/tls-parameters/tls-parameters.xhtml#tls-parameters-4). If absent, the multicast QUIC session is assumed to be operating with cipher suite 0x00,0x00 (NULL_WITH_NULL_NULL).Key exchange is replaced with a “key” session parameter, which is advertised as the Alt-Svc parameter key (). The parameter carries a variable-length hex-encoded key for use with the session cipher suite. In the absence of the key parameter, the key may be available via an out-of-band method not described in this document.In order to protect themselves, endpoints SHOULD NOT participate in sessions for which they cannot establish reasonable confidence over the cipher suite or key in use for that session. Endpoints SHOULD leave any sessions which fail to successfully match anticipated security characteristics. specifies how the QUIC Connection ID is used, in particular the client-side generation of this value. In a unidirectional multicast environment, there is no meaningful way for a client to generate a Connection ID and use it. This document defines a “session identifier” session parameter, which is advertised as the Alt-Svc parameter “session-id” (). The requirements for the usage of session identifiers have already been described in .Conventional QUIC connections may be implicitly terminated following a period of idleness (lack of network activity). The QUIC ICSL required negotiation parameter provides a means for endpoints to define a timeout period, the default period being 30 seconds. This document defines a “session idle timeout” session parameter, which is advertised as the Alt-Svc parameter “session-idle-timeout” (). This session parameter mimics the behaviour of ICSL, providing a means for multicast QUIC sessions to define their own idle timeout periods.Receiving participants SHOULD leave multicast QUIC sessions when the session idle timeout period has elapsed (). Leaving participants MUST use the silent close method, in which no CONNECTION_CLOSE QUIC frame is sent. specifies a credit-based stream- and connection-level flow control scheme which prevents a fast sender from overwhelming a slow receiver. Window size connection parameters are exchanged on connection establishment using the required QUIC parameters SFCW and CFCW. In a unidirectional multicast environment, such a scheme is infeasible. This document defines a “peak flow rate” session parameter, expressed in units of bits per second, which is advertised as the Alt-Svc parameter “peak-flow-rate” (). This replaces CFCW and indicates the maximum bit rate of STREAM QUIC frame payloads transmitted on all multicast groups comprising the session.A multicast sender SHOULD NOT cause the advertised peak flow rate of a session to be exceeded. A receiver MAY leave any session where the advertised peak flow rate is exceeded.The QUIC handshake required parameter MSPC defines the maximum number of concurrent streams a conventional QUIC endpoint can initiate per connection. In a unidirectional multicast environment, there is no way for a receiver to specify the limit. This document specifies a new “maximum concurrent resources” session parameter, which is advertised as the Alt-Svc parameter “max-concurrent-resources” (). This parameter replaces MSPC. It advertises the maximum number of concurrent active resources generated by a sender in a given multicast QUIC session.A multicast sender participating in a session MUST NOT cause the advertised max-concurrent-resources to be exceeded. A receiver SHOULD leave any session where the advertised limit is exceeded, in order to protect itself from denial-of-service attacks.Authors’ Note: Conventional QUIC Connection Options (COPTs) are to be defined in WG documents. This section will track developments and will be updated accordingly.Authors’ Note: The QUIC transport document is subject to change. This section is based on draft-ietf-quic-transport-01. The authors will track developments and will update this section accordingly.The profile of is presented in this section. In order to preserve compatibility with conventional QUIC, the specification works with a limited scope of change. However, the nature of unidirectional multicast communications means that some protocol procedures or behaviours need to be modified.The means for determining an appropriate size for QUIC packets are described in Section 8 of . Implementations of this specification SHOULD bear in mind that the Path Maximum Transmission Unit (PTMU) may be affected by multicast IP technologies such as Automatic Multicast Tunneling (AMT) . Additionally, considerations should be given towards the applicability of maximum transmission unit discovery methods (such as PLPMTUD and PMTUD ) to multicast IP.Endpoints implementing this specification MUST NOT send QUIC packets containing a Version field and MUST NOT set the VERSION flag in the QUIC packet header.The Connection ID field MUST be present in every QUIC packet, and the corresponding flag in the packet header MUST be set to indicate that the Connection ID field is present.Senders MUST NOT send any QUIC frames on QUIC stream 1. Receivers MUST ignore QUIC frames sent on stream 1.Conventional QUIC provides stream- and connection-level flow control and endpoints manage this by sending the WINDOW_UPDATE QUIC frame. When a sender is blocked from sending flow-controlled frames, it sends an informational BLOCKED QUIC frame.In a unidirectional environment, the sender never has a receive window and the receiver cannot send in-band updates. Therefore, the management of flow-control windows and transmission of blockage information is not supported by this profile. The WINDOW_UPDATE and BLOCKED QUIC frames are prohibited by this profile. Participants MUST NOT send these frame types. Reception of these frame types MUST be handled as described in .A sender MAY prematurely terminate the transmission on any unreserved QUIC stream ID by setting the FIN bit of a STREAM QUIC frame, or by sending a RST_STREAM QUIC frame (as specified in and ).Receiving participants MUST NOT make any attempt to send RST_STREAM to the multicast group.Explicit shutdown of a multicast QUIC session using QUIC methods is not supported by this profile. The GOAWAY and CONNECTION_CLOSE QUIC frames, and the Public Reset packet are prohibited. Participants MUST NOT send these and reception MUST be handled as described in .Explicit session tear-down using HTTP semantics is allowed, as described in .Implicit shutdown by means of silent close is also supported, as described in .The flow of traffic in a multicast QUIC session is driven by a sender. There may be periods where the sender has no data to send for a period longer than the session idle timeout. This profile repurposes the PING QUIC frame to act as a unidirectional keep-alive message that may be sent in order to inform receivers that the session should remain in the Fully-established state.Senders MAY send a PING frame at any time in order to inform receivers that the session traffic flow has not fallen idle. This frame MUST NOT be acknowledged. (Indeed ACK frames are banned by .)Receiving participants MUST NOT make any attempt to send PING frames.Receivers implementing this profile MUST NOT make any attempt to acknowledge the reception of QUIC packets. The ACK QUIC frame is prohibited for both senders and receivers. Reception of this frame MUST be handled as described in .The STOP_WAITING QUIC frame is also prohibited by this profile. Participants MUST NOT make any attempt to send this frame type. Reception of this frame MUST be handled as described in .{#loss-recovery} specifies alternative strategies for loss recovery.The following QUIC packets MUST NOT be transmitted by participants: Public Reset, Version Negotiation.The following QUIC frames MUST NOT be transmitted by participants: ACK, BLOCKED, CONNECTION_CLOSE, GOAWAY, STOP_WAITING, WINDOW_UPDATE.The following QUIC frames MUST NOT be transmitted by receivers: RST_STREAM.Reception of a prohibited QUIC frame or packet is a protocol error. Receivers MUST ignore all prohibited QUIC frames and packets.Authors’ Note: The HTTP/QUIC mapping document is subject to change. This section is based on draft-ietf-quic-http-01. The authors will track developments and will update this section accordingly.HTTP over multicast QUIC depends on HTTP server push, as described in Section 4.5 of . below applies an additional constraint on the use of server push. A multicast sender participating in a session pushes resources as a series of QUIC STREAM frames carrying HTTP/2 PUSH_PROMISE, HEADERS and body data. Examples of this are provided in . Senders MUST comply with the requirements of the session parameters, as described earlier in .The profile of HTTP/QUIC specified in this section places additional constrains on the use of metadata compression () and prioritisation ().The SETTINGS HTTP/2 frame is prohibited by this profile. Participants MUST NOT make any attempt to send this frame type. Reception of this frame MUST be handled as described in .Server push is, by default, enabled for HTTP/QUIC connections. A conventional HTTP/QUIC client may disable server push via an HTTP/2 SETTINGS frame but the use of that frame is prohibited by this profile (). This profile mandates the use of server push, and specifies no means to disable it.Conventionally, pushed responses are associated with an explicit request from a client. This is not possible when using a unidirectional transport such as multicast IP. This profile reserves the HTTP/2 stream ID that would normally be used for the first client request. PUSH_PROMISE frames MUST reference this reserved ID.Authors’ Note: The exact value of this stream ID is currently in flux. This section will track developments and will be updated accordingly.The compression of HTTP header fields is considered in HPACK , which describes two methods for the compression of HTTP header fields: indexing (via static or dynamic tables) and Huffman encoding. In the context of QUIC, QPACK considers changes to the mapping of HPACK that allow for better leverage of the transport.A multicast QUIC session, as described in the present document, does not provide the assurances (receiver participation, transport reliability) required to sufficiently maintain the dynamic decoding context. Therefore, this document requires that endpoints SHALL NOT use dynamic indexing. It is RECOMMENDED that endpoints use static indexing and/or Huffman encoding in order to benefit from the remaining compression methods available.The PRIORITY HTTP/2 frame is prohibited by this profile. Participants MUST NOT make any attempt to send this frame type. Reception of this frame MUST be handled as described in .A multicast QUIC session MAY be explicitly torn down by means of the Connection: close HTTP header described in section 6.6 of . A sender intending to leave the session SHOULD include the Connection: close header in its response metadata. A sender SHOULD transmit all outstanding frames related to remaining request/response exchanges before ending transmission to the multicast group. A receiver SHOULD continue to receive and process frames until all outstanding request/response exchanges are complete.HTTP/2 extension frames (e.g. ALTSVC) are prohibited by this profile. Participants MUST NOT make any attempt to send extension frame types. Reception of these MUST be handled as described in .The following HTTP/2 frames MUST NOT be transmitted by participants: PRIORITY, SETTINGS.In addition, all HTTP/2 extension frame types MUST NOT be transmitted by participants.Reception of a prohibited HTTP/2 frame is a protocol error. Receivers MUST ignore prohibited HTTP/2 frames.As already described in , the implicit cipher suite used by a multicast QUIC session makes very limited provision for security in the transport and session layers. This section profiles the use of some additional features to provide equivalent functionality at the application-layer.In many applications, it is important to ensure that an HTTP representation has been received intact and has not suffered from transmission loss, random bit errors or malicious substitution before passing the received object on to the receiving application. A mechanism is therefore specified here to provide end-to-end content integrity protection for HTTP representations in transit. The use of this content integrity mechanism is RECOMMENDED.Authors’ Note: We invite review comments on mandating the use of this content integrity mechanism. specifies an instance digest HTTP header called Digest. A sender MAY include this header in the HEADERS frame of any representation it transmits and a receiver MAY use this header to validate the integrity of the received representation once it has been reassembled. Where this validation fails, the receiver SHOULD discard the representation without processing it further.Note that the digest value protects a whole HTTP instance (i.e. the representation of a resource at the point of transmission as opposed to the body of a particular HTTP message). In cases where partial representations are fragmented over one or more HTTP response messages, the digest value is computed over the complete representation prior to fragmentation into partial responses.In cases where the complete representation is not available at the start of multicast transmission, the Digest header MAY be conveyed as a trailing header field after the body data of the representation, in accordance with Section 8.1 of .Any of the algorithms specified in the IANA registry of digest algorithms (http://www.iana.org/assignments/http-dig-alg/http-dig-alg.xhtml#http-dig-alg-1) MAY be used in conjunction with the Digest header. There is no requirement for participants to support the full set of algorithms.In some applications, it is important for a receiver to reassure itself that an HTTP representation has been received from an authentic source. It is also sometimes useful for a receiver to know that the information has not been tampered with in transit by a malicious intermediate actor. A mechanism is therefore specified here to prove the authenticity of HTTP messages in transit. The use of this content authenticity mechanism is RECOMMENDED for senders implementing this specification.Authors’ Note: We invite review comments on mandating the use of this content authenticity mechanism. specifies a means of securely signing metadata associated with any HTTP message. The resulting digital signature is conveyed in the Signature header of the message itself. The Signature header also conveys a list of HTTP header fields over which the signature was computed. A receiver MAY verify the Signature header in order to validate the authenticity of received metadata. Where this validation fails, the receiver SHOULD discard or ignore any related metadata and/or data without processing it further.Note that the signature proves the authenticity of the metadata in a single HTTP message. A Signature header MAY be included separately in the PUSH_PROMISE frame (protecting the request metadata) and in the final (or only) HEADERS frame relating to a particular resource (protecting the response metadata). In order to provide an additional level of protection, however, it is RECOMMENDED that the signature be computed over the combined request metadata (from the PUSH_PROMISE frame) and the corresponding response metadata (from the HEADERS frames) of the same resource. This binds the request metadata and response metadata together, providing the receiver with additional reassurance of authenticity. In this latter case, the combined digital signature SHALL be conveyed in the final (or only) HEADERS frame.In cases where not all metadata is known at the start of transmission, the Signature header MAY be conveyed as a trailing header field after the body data of the representation, in accordance with Section 8.1 of .In applications where the detection of replay attacks is a requirement, it is RECOMMENDED that the Date header be included in the scope of the signature. It is RECOMMENDED that receivers use the value of the Date header for replay detection using appropriate strategies (e.g. checking for freshness). The definition of such strategies is beyond the scope of this document.In applications where the authenticity and integrity of the transmission are both important, it is RECOMMENDED that the Digest header specified in above is included in the scope of the signature. By signing the instance digest, the authenticity and integrity of the HTTP message body are also assured in addition to that of the metadata.Any of the algorithms specified in the IANA registry of signature algorithms (http://www.iana.org/assignments/signature-algorithms) MAY be used in conjunction with the Signature header. There is no requirement for participants to support the full set of algorithms.In applications where there is a requirement for the content itself to remain confidential, appropriate steps SHOULD be taken to protect the application payload, for example by encrypting it. This document does not preclude the use of application-level encryption, but does not specify a mechanism for the distribution of content decryption keys.Because the acknowledgement of received packets to multicast groups is prohibited by this specification () the detection of discarded or corrupted packets is the sole responsibility of the receiver, and such losses must be recovered by means other than the retransmission mechanism specified in and .Authors’ Note: A simple parity-based Forward Error Correction scheme was removed from the experimental QUIC wire protocol specification in version Q032. The IETF’s QUIC Working Group is chartered to specify one (or more) new FEC schemes in the future. This section will track developments in this area, and will be updated accordingly.A sender MAY make use of a suitable Forward Error Correction scheme to allow a receiver to reconstruct lost packets from those that have been successfully received.In the case where a lost QUIC packet cannot be recovered using Forward Error Correction, either because the number of packets lost exceeds the scheme’s threshold for reconstruction, or because FEC is not in use on the multicast QUIC session, a receiver MAY instead recover the missing payload data using conventional unicast HTTP requests to an origin server.The total size of the resource is indicated in the content-length response header carried in the HEADERS HTTP/2 frame.The location of the missing data can be determined by examining the Offset field in the STREAM QUIC frame headers of successfully received QUIC packets.Using this information, a receiver MAY compose an efficient HTTP range request to the origin server indicated in the URL. Several disjoint ranges MAY be combined into a single HTTP request. A receiver MAY direct its request to an alternative server using Alt-Svc information received on the multicast QUIC session, or else received as part of a previous unicast HTTP response according to the rules in .Under certain circumstances, a sender may not be in full possession of a resource body when transmission begins, or may not be able to guarantee that a transmission will complete. In such cases, the sender MAY employ the syntax of an HTTP range request to indicate partial content, as specified below. All receivers SHALL implement support for such HTTP range requests.If partial content is to be transmitted:The range header (Section 3.1 of ) SHALL be present in the PUSH_PROMISE HTTP/2 frame.The corresponding HEADERS HTTP/2 frame SHALL indicate HTTP status code 206.
The range being transmitted SHALL be indicated in a content-range header field and the size of the complete resource indicated in a content-length header field. Either or both of these headers fields MAY be transmitted in a trailing HEADERS frame if their values are not known at the start of transmission.The HTTP over multicast QUIC protocol specified in this document is identified by the application-layer protocol negotiation (ALPN) identifier “hqm”. The IANA registration of this protocol identifier can be found in . This reserves the ALPN identifier space but describes a protocol that does not use TLS. The usage of the “hqm” identifier for discoverability is described in .RFC Editor’s Note: Please remove this section prior to publication of a final version of this document.Only implementations of the final, published RFC can identify themselves as “hqm”. Until such an RFC exists, implementations MUST NOT identify themselves using this string.Implementations of draft versions of the protocol MUST add the string “-“ and the corresponding draft number to the identifier. For example, draft-pardue-quic-http-mcast-00 is identified using the string “hqm-00”.Non-compatible experiments that are based on these draft versions MUST append the string “-“ and an experiment name to the identifier. For example, an experimental implementation based on draft-pardue-quic-http-mcast-09 which removes the requirement to ensure version matches might identify itself as “hqm-09-version-ignorant”. Note that any label MUST conform to the “token” syntax defined in Section 3.2.6 of . Experimenters are encouraged to coordinate their experiments.The announcement and discovery of services operating over multicast IP has previously been specified by the Session Description Protocol (SDP) , Session Announcement Protocol and Session Initiation Protocol . These are typically deployed together and in conjunction with a multicast-friendly transport such as the Real-time Transport Protocol (RTP) .In contrast, the present document specifies a mechanism for advertising services that is built into HTTP metadata and is consistent across unicast and multicast resource delivery modes. This means that a single application-layer can be used for service advertisement/discovery, and for bulk data transmission/reception. Specifically, the Alt-Svc HTTP header is specified as the means to advertise multicast services from a unicast service. A unicast HTTP response MAY be decorated with an Alt-Svc value that hints to the client about the availability of the resource via a multicast QUIC session. A client that supports such a multicast QUIC session MAY then transparently switch to it.Symmetrically, the Alt-Svc header can also be used to advertise the unicast service from a multicast service. A resource transmitted as part of a multicast QUIC session MAY be decorated with an Alt-Svc value that hints to the client about the availability of the resource via an alternative unicast HTTP server. A receiver MAY then use this HTTP server for unicast resource patching ().Where HTTP over multicast QUIC sessions are advertised using Alt-Svc, the protocol identifier SHALL be “hqm”, as specified in .Source-specific multicast (SSM) MAY be used for the delivery of multicast services.Authors’ Note: We invite review comments on mandating the use of source-specific multicast only.This document specifies the “source-address” parameter for Alt-Svc, which is used to provide the SSM source address to endpoints.Syntax:For example:When a multicast QUIC session is provided using SSM, the source-address parameter MUST be advertised.The concept of session parameters is introduced in . This section details how the session parameters are expressed as Alt-Svc parameters.The version of QUIC supported in a multicast QUIC session is advertised with the quic parameter. The requirements for endpoint usage of quic are specified in .This document specifies the “cipher-suite” parameter for Alt-Svc, which carries the cipher suite in use by a multicast QUIC session. cipher-suite MUST be contain one of the values contained in the TLS Cipher Suite Registry (http://www.iana.org/assignments/tls-parameters/tls-parameters.xhtml#tls-parameters-4):Syntax:For example, the following specifies cipher suite 0x13,0x01 (TLS_AES_128_GCM_SHA256):The requirements for endpoint usage of cipher-suite are described in .This document specifies the “key” parameter for Alt-Svc, which carries the cryptographic key in use by the multicast QUIC session.Syntax:For example:The requirements for endpoint usage of key are described in .This document defines the “session-id” parameter for Alt-Svc, which carries the multicast QUIC session identifier.Syntax:For example, the following specifies session 101 (0x65 hexadecimal):The requirements for endpoint usage of session-id are described in .This document specifies the “session-idle-timeout” parameter for Alt-Svc, which carries the idle timeout period of a multicast QUIC session.Syntax:For example, the following specifies a one-minute session idle timeout period:The requirements for endpoint usage of session-idle-timeout are described in .This document specifies the “max-concurrent-resources” parameter for Alt-Svc, which expresses the maximum number of concurrent active resources from the sender in a multicast QUIC session.For example, the following specifies that no more than 12 (decimal) resources will be concurrently active in the session:The requirements for endpoint usage of max-concurrent-streams are described in .This parameter expresses the expected maximum transfer rate of data from all sources of the multicast QUIC session.For example, the following specifies a peak flow rate of 550 kbits/s in the session:The requirements for endpoint usage of peak-flow-rate are described in .This document specifies a profile of QUIC and HTTP/QUIC that changes the security model. In order to address this, application-level security methods are described in . This document does not preclude the use of secure multicast approaches that may provide additional security assurances required for certain use cases.The use of side-channel or out-of-band technologies (potentially bidirectional interactions) to support multicast QUIC sessions are considered out of this document’s scope. Services using such technologies should apply their security considerations accordingly.Certain multicast deployment architectures may require the use of a session decryption key shared by all participants. Furthermore, the discovery mechanism described in this document provides a means for a receiver to obtain a session decryption key without joining the session. The act of removing packet protection in order to inspect or modify application contents may, in certain deployments, be trivial. The exploration of restricting key learning or session joining to authorised participants goes beyond the scope of this document.Because in-band multicast interactions are unidirectional, the impact of Pervasive Monitoring on in-band traffic flows is inherently reduced. Actors can only inspect or modify sender-initiated traffic. Additional measures for content confidentiality may mitigate the impact further. This is discussed in .Further Pervasive Monitoring concerns are addressed in the following sections.Multicast QUIC sessions decouple sending and receiving participants. Session participation is subject to operations that allow an endpoint to join or leave a multicast group, typically IGMP or MLD . The propagation intent of these messages travelling deeper through a network hierarchy generally leads to the anonymisation of data if implemented as specified. It may be possible to gather user-identifiable messages close to the network edge, for example a router logging such messages. However, this would require wide-ranging access across Internet Service Provider networks. Therefore, while such attacks are feasible, it can be asserted that gathering and correlating user-identifiable traffic is difficult to perform covertly and at scale.Sessions that use a symmetric key for packet protection are subject to the possibility of a malicious actor modifying traffic at some point in the network between a legitimate sender and one (or more) receivers. Receiver-side validation, as specified in of the present document, and also in , allows for the detection of such modification. Two approaches help mitigate the impact of modification; the first is application-level methods that protect data () and metadata (); the second is reduction of the QUIC packet attack surface by means of removal of many frame types ( and ).Multicast QUIC session advertisements SHOULD be conveyed over a secure transport that guarantees authenticity and integrity in order to mitigate attacks related to a malicious service advertisement, for example a “man in the middle” directing endpoints to a service that may lead to other attacks or exploitations.Authors’ Note: We invite review comments on mandating the use of a secure transport for advertising sessions.Endpoints that make use of multicast QUIC session advertisements SHOULD have reasonable assurance that the alternative service is under control of, and valid for, the whole origin, as described in Section 2.1 of . discusses measures that may be used to fulfil this requirement.The Spoofed ACK attack described in Section 12.1 of is out of scope because use of the ACK frame is prohibited () by the present document.A malicious actor may be able to stage a spoof attack by sending fake QUIC packets to a multicast QUIC session. This could affect the operation or behaviour of receivers. In a multicast scenario, this form of attack has the potential to scale massively.The feasibility of spoofing a multicast sender is governed by the characteristics of the multicast deployment and network infrastructure. The use of source-specific multicast may reduce the feasibility. The use of content authenticity () may mitigate concerns for the application-level messages. However, there remains the possibility for transport-level messages to be spoofed. Multicast applications should consider further mitigations to address this concern.Client source address concerns discussed in Section 6.2.2 of are out of scope because the connection establishment is replaced with session establishment in the present document. Further, the impact that spoofed receivers would have on the sender is minimal. The impact of malicious participants on the network is discussed in .Conventional QUIC strategies for protecting against replay attacks apply similarly here.Certain multicast QUIC sessions may use a shared key for transport-level encryption, which would allow an attacker to record, decrypt, repackage and replay QUIC packets. discusses how the application-level contents may be protected from replay (by signing the Date HTTP header), which provides some mitigation to the success rate or effects of replay attacks.Since HTTP over multicast QUIC is designed to tolerate unreliable delivery, the impacts of message deletion attacks are presumed to be small. Deletion of packets carrying HTTP headers will cause a receiver to ignore subsequent packets carrying body data. Furthermore, the use of multicast QUIC sessions is opportunistic; disruption in service (for example, deleting packets and causing a receiver to fail in construction of a content object) is mitigated by falling back to a unicast service. Considerations for how this may affect the performance of the unicast service are given in .The handling of unprotected QUIC packets is discussed in section 7.1.4 of . The profile described in the present document provides the means for a multicast sender to protect QUIC packets with a shared key, which is not a strong protection. The weak protection of QUIC packets could present a denial-of-service risk. To mitigate the impact of handling such QUIC packets, certain frames and packets are prohibited as described in ( and ).The frame types that are allowed by this profile do not present a risk of denial of service. Concerns over authenticity and integrity are addressed by the application-layer protection mechanisms described in .The possibility for malfunctioning or malicious participants to degrade the network is a broad issue and considered out of scope for this document. Guidelines and concerns discussed in UDP Best Practices and other sources apply equally here. This specification does not preclude the use of network performance degradation mitigation solutions such as network circuit breakers.Deployments that support the unicast repair mechanism described in should be aware that a triggering of this behaviour (either deliberate, planned or unplanned) in a large population of multicast receivers may cause a stampeding herd of client requests to the unicast repair service. Service operators SHOULD mitigate the impact of stampeding herd on their deployment.The application of receiver-side validation, as defined in the present document and in , adds some protection against allocating resource to the processing of bad data.The unicast repair mechanism may lead to the leakage of user behaviour data. An attacker could gain insight into any receiver participating in a multicast QUIC session, for example by monitoring the TCP port of the unicast alternative. This alone is no worse than current abilities to monitor unicast interactions, for example observing the SNI field contained in a TLS ClientHello. The complete protection of unicast interactions is beyond the scope of this document. However, knowledge that a user (or group of users) has participated in a session is sensitive and may be obtained by correlation between with observable multicast and unicast traffic.To give an example, a malicious “man in the middle” could purposely cause all receivers to perform a unicast repair (by disrupting the QUIC traffic flow in some way). The disruption is untargeted and may be simple to orchestrate, but the correlation of user activity data, especially across a distributed repair service (e.g. a CDN), requires resources that may reduce the attractiveness of such an attack.The ability for an attacker to disrupt multicast QUIC sessions is mitigated by this profile (mainly the prohibition of frames and packets). Application-layer security measures described in reduce the feasibility further.Multicast receivers concerned about this form of leakage can eliminate this risk completely by disabling support for unicast repair, at the potential cost of reduced service quality.This document creates a new registration for the identification of the HTTP over multicast QUIC protocol in the “Application-Layer Protocol Negotiation (ALPN) Protocol IDs” registry established by .The “hqm” string identifies HTTP semantics expressed as HTTP mapped to a QUIC layer and carried over IP multicast:
Bulk data transport using HTTP over multicast QUIC
0x68 0x71 0x6D (“hqm”)
This document, This entry reserves an identifier that is not allowed to appear in TLS Application-Layer Protocol Negotiation.This document creates seven registrations for the identification of parameters for the “Hypertext Transfer Protocol (HTTP) Alt-Svc Parameter Registry” established by (http://www.iana.org/assignments/tls-extensiontype-values/tls-extensiontype-values.xhtml#alpn-protocol-ids).
source-address
This document,
cipher-suite
This document,
key
This document,
session-id
This document,
session-idle-timeout
This document,
max-concurrent-resources
This document,
peak-flow-rate
This document, Hypertext Transfer Protocol (HTTP) over QUICMicrosoftUsing Transport Layer Security (TLS) to Secure QUICMozillasn3rdQUIC: A UDP-Based Multiplexed and Secure TransportGoogleMozillaQUIC Loss Detection and Congestion ControlGoogleGoogleHTTP Alternative ServicesThis document specifies "Alternative Services" for HTTP, which allow an origin's resources to be authoritatively available at a separate network location, possibly accessed with a different protocol configuration.Key words for use in RFCs to Indicate Requirement LevelsIn many standards track documents several words are used to signify the requirements in the specification. These words are often capitalized. This document defines these words as they should be interpreted in IETF documents. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.Augmented BNF for Syntax Specifications: ABNFInternet technical specifications often need to define a formal syntax. Over the years, a modified version of Backus-Naur Form (BNF), called Augmented BNF (ABNF), has been popular among many Internet specifications. The current specification documents ABNF. It balances compactness and simplicity with reasonable representational power. The differences between standard BNF and ABNF involve naming rules, repetition, alternatives, order-independence, and value ranges. This specification also supplies additional rule definitions and encoding for a core lexical analyzer of the type common to several Internet specifications. [STANDARDS-TRACK]Case-Sensitive String Support in ABNFThis document extends the base definition of ABNF (Augmented Backus-Naur Form) to include a way to specify US-ASCII string literals that are matched in a case-sensitive manner.Hypertext Transfer Protocol (HTTP/1.1): Message Syntax and RoutingThe Hypertext Transfer Protocol (HTTP) is a stateless application-level protocol for distributed, collaborative, hypertext information systems. This document provides an overview of HTTP architecture and its associated terminology, defines the "http" and "https" Uniform Resource Identifier (URI) schemes, defines the HTTP/1.1 message syntax and parsing requirements, and describes related security concerns for implementations.Hypertext Transfer Protocol (HTTP/1.1): CachingThe Hypertext Transfer Protocol (HTTP) is a stateless \%application- level protocol for distributed, collaborative, hypertext information systems. This document defines HTTP caches and the associated header fields that control cache behavior or indicate cacheable response messages.Instance Digests in HTTPHTTP/1.1 defines a Content-MD5 header that allows a server to include a digest of the response body. However, this is specifically defined to cover the body of the actual message, not the contents of the full file (which might be quite different, if the response is a Content-Range, or uses a delta encoding). Also, the Content-MD5 is limited to one specific digest algorithm; other algorithms, such as SHA-1 (Secure Hash Standard), may be more appropriate in some circumstances. Finally, HTTP/1.1 provides no explicit mechanism by which a client may request a digest. This document proposes HTTP extensions that solve these problems. [STANDARDS-TRACK]Hypertext Transfer Protocol Version 2 (HTTP/2)This specification describes an optimized expression of the semantics of the Hypertext Transfer Protocol (HTTP), referred to as HTTP version 2 (HTTP/2). HTTP/2 enables a more efficient use of network resources and a reduced perception of latency by introducing header field compression and allowing multiple concurrent exchanges on the same connection. It also introduces unsolicited push of representations from servers to clients.This specification is an alternative to, but does not obsolete, the HTTP/1.1 message syntax. HTTP's existing semantics remain unchanged.Signing HTTP MessagesWhen communicating over the Internet using the HTTP protocol, it can be desirable for a server or client to authenticate the sender of a particular message. It can also be desirable to ensure that the message was not tampered with during transit. This document describes a way for servers and clients to simultaneously add authentication and message integrity to HTTP messages by using a digital signature.Hypertext Transfer Protocol (HTTP/1.1): Range RequestsThe Hypertext Transfer Protocol (HTTP) is a stateless application- level protocol for distributed, collaborative, hypertext information systems. This document defines range requests and the rules for constructing and combining responses to those requests.Transport Layer Security (TLS) Application-Layer Protocol Negotiation ExtensionThis document describes a Transport Layer Security (TLS) extension for application-layer protocol negotiation within the TLS handshake. For instances in which multiple application protocols are supported on the same TCP or UDP port, this extension allows the application layer to negotiate which protocol will be used within the TLS connection.Source-Specific Multicast for IPIP version 4 (IPv4) addresses in the 232/8 (232.0.0.0 to 232.255.255.255) range are designated as source-specific multicast (SSM) destination addresses and are reserved for use by source-specific applications and protocols. For IP version 6 (IPv6), the address prefix FF3x::/32 is reserved for source-specific multicast use. This document defines an extension to the Internet network service that applies to datagrams sent to SSM addresses and defines the host and router requirements to support this extension. [STANDARDS-TRACK]QUIC CryptoHTTP over QUIC - Mapping and Header CompressionMicrosoftHost extensions for IP multicastingThis memo specifies the extensions required of a host implementation of the Internet Protocol (IP) to support multicasting. Recommended procedure for IP multicasting in the Internet. This RFC obsoletes RFCs 998 and 1054. [STANDARDS-TRACK]RTP: A Transport Protocol for Real-Time ApplicationsThis memorandum describes RTP, the real-time transport protocol. RTP provides end-to-end network transport functions suitable for applications transmitting real-time data, such as audio, video or simulation data, over multicast or unicast network services. RTP does not address resource reservation and does not guarantee quality-of- service for real-time services. The data transport is augmented by a control protocol (RTCP) to allow monitoring of the data delivery in a manner scalable to large multicast networks, and to provide minimal control and identification functionality. RTP and RTCP are designed to be independent of the underlying transport and network layers. The protocol supports the use of RTP-level translators and mixers. Most of the text in this memorandum is identical to RFC 1889 which it obsoletes. There are no changes in the packet formats on the wire, only changes to the rules and algorithms governing how the protocol is used. The biggest change is an enhancement to the scalable timer algorithm for calculating when to send RTCP packets in order to minimize transmission in excess of the intended rate when many participants join a session simultaneously. [STANDARDS-TRACK]Internet Protocol, Version 6 (IPv6) SpecificationThis document specifies version 6 of the Internet Protocol (IPv6), also sometimes referred to as IP Next Generation or IPng. [STANDARDS-TRACK]SDP: Session Description ProtocolThis memo defines the Session Description Protocol (SDP). SDP is intended for describing multimedia sessions for the purposes of session announcement, session invitation, and other forms of multimedia session initiation. [STANDARDS-TRACK]Session Announcement ProtocolThis document describes version 2 of the multicast session directory announcement protocol, Session Announcement Protocol (SAP), and the related issues affecting security and scalability that should be taken into account by implementors. This memo defines an Experimental Protocol for the Internet community.Automatic Multicast TunnelingThis document describes Automatic Multicast Tunneling (AMT), a protocol for delivering multicast traffic from sources in a multicast-enabled network to receivers that lack multicast connectivity to the source network. The protocol uses UDP encapsulation and unicast replication to provide this functionality.The AMT protocol is specifically designed to support rapid deployment by requiring minimal changes to existing network infrastructure.Packetization Layer Path MTU DiscoveryThis document describes a robust method for Path MTU Discovery (PMTUD) that relies on TCP or some other Packetization Layer to probe an Internet path with progressively larger packets. This method is described as an extension to RFC 1191 and RFC 1981, which specify ICMP-based Path MTU Discovery for IP versions 4 and 6, respectively. [STANDARDS-TRACK]Path MTU discoveryThis memo describes a technique for dynamically discovering the maximum transmission unit (MTU) of an arbitrary internet path. It specifies a small change to the way routers generate one type of ICMP message. For a path that passes through a router that has not been so changed, this technique might not discover the correct Path MTU, but it will always choose a Path MTU as accurate as, and in many cases more accurate than, the Path MTU that would be chosen by current practice. [STANDARDS-TRACK]HPACK: Header Compression for HTTP/2This specification defines HPACK, a compression format for efficiently representing HTTP header fields, to be used in HTTP/2.SIP: Session Initiation ProtocolThis document describes Session Initiation Protocol (SIP), an application-layer control (signaling) protocol for creating, modifying, and terminating sessions with one or more participants. These sessions include Internet telephone calls, multimedia distribution, and multimedia conferences. [STANDARDS-TRACK]Pervasive Monitoring Is an AttackPervasive monitoring is a technical attack that should be mitigated in the design of IETF protocols, where possible.Internet Group Management Protocol, Version 3Multicast Listener Discovery Version 2 (MLDv2) for IPv6This document updates RFC 2710, and it specifies Version 2 of the ulticast Listener Discovery Protocol (MLDv2). MLD is used by an IPv6 router to discover the presence of multicast listeners on directly attached links, and to discover which multicast addresses are of interest to those neighboring nodes. MLDv2 is designed to be interoperable with MLDv1. MLDv2 adds the ability for a node to report interest in listening to packets with a particular multicast address only from specific source addresses or from all sources except for specific source addresses. [STANDARDS-TRACK]UDP Usage GuidelinesThe User Datagram Protocol (UDP) provides a minimal message-passing transport that has no inherent congestion control mechanisms. This document provides guidelines on the use of UDP for the designers of applications, tunnels and other protocols that use UDP. Congestion control guidelines are a primary focus, but the document also provides guidance on other topics, including message sizes, reliability, checksums, middlebox traversal, the use of ECN, DSCPs, and ports. Because congestion control is critical to the stable operation of the Internet, applications and other protocols that choose to use UDP as an Internet transport must employ mechanisms to prevent congestion collapse and to establish some degree of fairness with concurrent traffic. They may also need to implement additional mechanisms, depending on how they use UDP. Some guidance is also applicable to the design of other protocols (e.g., protocols layered directly on IP or via IP-based tunnels), especially when these protocols do not themselves provide congestion control. This document obsoletes RFC5405 and adds guidelines for multicast UDP usage.IPv4 Address Blocks Reserved for DocumentationThree IPv4 unicast address blocks are reserved for use in examples in specifications and other documents. This document describes the use of these blocks. This document is not an Internet Standards Track specification; it is published for informational purposes.Multicast Addresses for DocumentationThis document discusses which multicast addresses should be used for documentation purposes and reserves multicast addresses for such use. Some multicast addresses are derived from AS numbers or unicast addresses. This document also explains how these can be used for documentation purposes. This document is not an Internet Standards Track specification; it is published for informational purposes.The authors would like to thank the following for their contributions to the design described in the present document: Brandon Butterworth, Sam Hurst, Chris Poole, Craig Taylor and David Waring.This appendix contains examples of multicast QUIC session advertisement and resource transfer (with and without application-layer content security).This section shows several different examples of an HTTP service advertising a multicast QUIC session. Examples are given in IPv4 form, using reserved address ranges as specified in and .Advertisement of a multicast QUIC session operating on the source-specific multicast group address 232.0.0.1 on port 2000 with the source address 192.0.2.1. The session ID is 16 (0x10) and the idle timeout is one minute. At most 10 resources may be concurrently active in the session and the flow rate should not exceed 10 kbits/s. The multicast transport is unencrypted.HTTP Alternative Service header field:Advertisement of a multicast QUIC session operating on the IPv6 globally-scoped source-specific multicast group address ff3e::1234 on port 2000 with the source address 2001:db8::1. The session ID is 16 (0x10) and the idle timeout is one minute. At most 10 resources may be concurrently active in the session and the flow rate should not exceed 10 kbits/s. The multicast transport is encrypted using the AEAD cipher suite 0x13,0x01 (TLS_AES_128_GCM_SHA256) and the shared session key provided.HTTP Alternative Service header field:This section shows several different examples of the HTTP message patterns for a single resource.Examples that show PUSH_PROMISE or HEADERS HTTP/2 frames describe the contents of enclosed header block fragments.PUSH_PROMISE HTTP/2 frame:HEADERS HTTP/2 frame;QUIC STREAM frame containing 100 bytes of response body data:In this example, partial content is transferred as described in . The Range request header is used to indicate the sender’s intention to transfer all 100 bytes of the representation, but the Content-Range trailing response header indicates that only the first 50 bytes were actually transferred.PUSH_PROMISE HTTP/2 frame:Leading HEADERS HTTP/2 frame:STREAM QUIC frame containing 50 bytes of response body data:Trailing HEADERS HTTP/2 frame indicating the range of bytes sent:In this example, content integrity is assured by the inclusion of the Digest response header, as described in .PUSH_PROMISE HTTP/2 frame:HEADERS HTTP/2 frame including the Digest header:STREAM QUIC frame containing 100 bytes of response body data:In this example, partial content is transferred as described in . The Range request header is used to indicate the sender’s intention to transfer all 100 bytes of the representation, but the Content-Range trailing response header indicates that only the first 50 bytes were actually transferred. Content integrity is assured by the inclusion of the Digest response header, as described in .PUSH_PROMISE HTTP/2 frame:Leading HEADERS HTTP/2 frame including the Digest header:STREAM QUIC frame containing 50 bytes of response body data:Trailing HEADERS HTTP/2 frame indicating the range of bytes sent:In this example, content integrity is assured by the inclusion of the Digest response header, as described in . Content authenticity is assured separately for the request and the response messages by the Signature header which protects the header fields described in further detail below. The Signature header parameter keyId contains the URL of a file containing the public key related to the multicast sender’s private key used to create the digital signature.PUSH_PROMISE HTTP/2 frame including a Signature header protecting the :method and :path (the request target), as well as the :scheme and :authority of the pseudo-request:HEADERS HTTP/2 frame including a Signature header protecting the :method, :path, :scheme and :authority of the pseudo-request above, plus the Date and Digest of the response:STREAM QUIC frame containing response body data:In this example, partial content is transferred and the Range header (as described in ) is used to indicate that 50 bytes out of 100 bytes were transferred. Content integrity is provided by the inclusion of the Digest header, as described in . Authenticity is provided by the Signature header which protects the header fields described in further detail. The Signature header parameter keyId contains the URL of a file containing the public key related to the multicast sender’s private key used to create the digital signature.PUSH_PROMISE HTTP/2 frame:Leading HEADERS HTTP/2 frame:QUIC STREAM frame containing response body data:Trailing HEADERS HTTP/2 frame protecting the :method, :path, :scheme and :authority of the pseudo-request above, plus the Date, Digest and Content-Range of the response::