<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc version 1.7.1 (Ruby 3.2.2) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-engelbart-multiplex-roq-qdc-00" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.18.2 -->
  <front>
    <title abbrev="Multiplexing RoQ and QDC">Multiplexing RTP and Data Channels over QUIC</title>
    <seriesInfo name="Internet-Draft" value="draft-engelbart-multiplex-roq-qdc-00"/>
    <author initials="M." surname="Engelbart" fullname="Mathis Engelbart">
      <organization>Technical University Munich</organization>
      <address>
        <email>mathis.engelbart@gmail.com</email>
      </address>
    </author>
    <author initials="J." surname="Ott" fullname="Jörg Ott">
      <organization>Technical University Munich</organization>
      <address>
        <email>ott@in.tum.de</email>
      </address>
    </author>
    <date/>
    <area>Applications and Real-Time</area>
    <workgroup/>
    <keyword>Internet-Draft</keyword>
    <abstract>
      <?line 31?>

<t>This document defines a multiplexing scheme for using RTP over QUIC and QUIC
Data Channels in a single QUIC connection.</t>
    </abstract>
    <note removeInRFC="true">
      <name>Discussion Venues</name>
      <t>Source for this draft and an issue tracker can be found at
    <eref target="https://github.com/mengelbart/draft-engelbart-multiplex-roq-qdc"/>.</t>
    </note>
  </front>
  <middle>
    <?line 36?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>One of the requirements in the development of RTP over QUIC (RoQ)
(<xref target="I-D.draft-ietf-avtcore-rtp-over-quic"/>) was the ability to share a QUIC
connection for RTP, RTCP, and other protocols. RoQ uses a flow identifier to
multiplex different RTP streams, RTCP, and possibly other protocols. However,
RoQ does not describe which protocol can be multiplexed with RoQ on the same
QUIC connection. <xref target="I-D.draft-engelbart-quic-data-channels"/> describes a simple
protocol similar to WebRTC data channels (<xref target="RFC8831"/>) called QUIC Data
Channels (QDC). QDC uses QUIC instead of SCTP over DTLS and also uses an
identifier similar to the one used by RoQ. This document describes how the two
protocols can be multiplexed in one QUIC connection.</t>
    </section>
    <section anchor="connection-establishment">
      <name>Connection Establishment</name>
      <t>QUIC requires the use of ALPN <xref target="RFC7301"/> during connection setup. Connections
multiplexing RoQ and QDC use the "roq-qdc-mux" token during the TLS handshake.</t>
      <section anchor="draft-version-identification">
        <name>Draft version identification</name>
        <ul empty="true">
          <li>
            <t><strong>RFC Editor's note:</strong> Please remove this section prior to publication of a
final version of this document.</t>
          </li>
        </ul>
        <t>Only implementations of the final, published RFC can identify themselves as
"roq-qdc-mux". Until such an RFC exists, implementations MUST NOT identify
themselves using this string.</t>
        <t>Implementations of draft versions of the protocol MUST add the string "-" and
the corresponding draft number to the identifier. For example,
draft-engelbart-multiplex-roq-qdc-04 is identified using the string
"roq-qdc-mux-04".</t>
        <t>Non-compatible experiments based on these draft versions MUST append the string
"-" and an experiment name to the identifier.</t>
      </section>
    </section>
    <section anchor="multiplexing">
      <name>Multiplexing</name>
      <t>The two protocols for which this document describes a multiplexing scheme use a
variable length integer as the first element on every QUIC stream and datagram.
In RoQ, this integer is called a flow identifier, and it is used to multiplex
different RTP streams and RTCP. In QDC, the integer is called a channel
identifier and is used to multiplex multiple data channels.</t>
      <t>This document describes two options for multiplexing RoQ and QDC. The first
option builds upon the external signaling that is required by RoQ
(<xref target="external-signaling"/>). The second one works without any external signaling
but places some restrictions on the chosen flow and channel identifiers
(<xref target="no-signaling"/>).</t>
      <ul empty="true">
        <li>
          <t><strong>TODO:</strong> If we define two methods, we also need to say how to choose between
them. This could involve more external signaling, e.g., SDP, or we could use
two different ALPNs. It might be easier to just settle on one single way to do
it.</t>
        </li>
      </ul>
      <section anchor="external-signaling">
        <name>Multiplexing using External Signaling</name>
        <t>RoQ requires using an external signaling protocol like the one described in
<xref target="I-D.draft-dawkins-avtcore-sdp-rtp-quic"/>. The signaling includes the
negotiation of flow identifiers for RoQ. In this scheme, applications MUST agree
on all identifiers used by RoQ using the external signaling. Any identifier not
assigned to a RoQ flow using external signaling MUST be treated as a QDC channel
ID. Endpoints MUST NOT use an identifier for RoQ if it has not been signaled and
agreed upon by both peers using the external signaling protocol.</t>
      </section>
      <section anchor="no-signaling">
        <name>Multiplexing without Signaling</name>
        <t>When there is no external signaling for negotiation of identifiers available,
endpoints can use the second least significant bit (0x02) of the flow or channel
identifiers for multiplexing. RoQ flows have the bit set to 1, and QDC channels
have the bit set to 0.</t>
        <t>The second least significant bit is used instead of the least significant bit
because the least significant bit already has a special function in QDC.</t>
      </section>
    </section>
    <section anchor="error-handling">
      <name>Error Handling</name>
      <ul empty="true">
        <li>
          <t><strong>TODO:</strong> This looks tricky. Some error codes will be easy to demultiplex when
they are associated with a flow/channel ID. But some might not be, e.g., in
CONNECTION_CLOSE frames.</t>
        </li>
      </ul>
    </section>
    <section anchor="sec-considerations">
      <name>Security Considerations</name>
      <t>The security considerations for the QUIC protocol and datagram extension
described in <xref section="21" sectionFormat="of" target="RFC9000"/>, <xref section="9" sectionFormat="of" target="RFC9001"/>, <xref section="8" sectionFormat="of" target="RFC9002"/> and <xref section="6" sectionFormat="of" target="RFC9221"/> apply.</t>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <section anchor="registration-of-an-alpn-identification-string">
        <name>Registration of an ALPN Identification String</name>
        <t>This document creates a new registration for the identification of the protocol
in the "TLS Application-Layer Protocol Negotiation (ALPN) Protocol IDs" registry
<xref target="RFC7301"/>.</t>
        <t>The "roq-qdc-mux" string identifies RoQ:</t>
        <dl>
          <dt>Protocol:</dt>
          <dd>
            <t>Multiplexed RoQ and QDC</t>
          </dd>
          <dt>Identification Sequence:</dt>
          <dd>
            <t>TODO</t>
          </dd>
          <dt>Specification:</dt>
          <dd>
            <t>This document</t>
          </dd>
        </dl>
      </section>
    </section>
  </middle>
  <back>
    <references>
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <reference anchor="I-D.draft-ietf-avtcore-rtp-over-quic">
          <front>
            <title>RTP over QUIC (RoQ)</title>
            <author fullname="Joerg Ott" initials="J." surname="Ott">
              <organization>Technical University Munich</organization>
            </author>
            <author fullname="Mathis Engelbart" initials="M." surname="Engelbart">
              <organization>Technical University Munich</organization>
            </author>
            <author fullname="Spencer Dawkins" initials="S." surname="Dawkins">
              <organization>Tencent America LLC</organization>
            </author>
            <date day="23" month="October" year="2023"/>
            <abstract>
              <t>   This document specifies a minimal mapping for encapsulating Real-time
   Transport Protocol (RTP) and RTP Control Protocol (RTCP) packets
   within the QUIC protocol.  This mapping is called RTP over QUIC
   (RoQ).  It also discusses how to leverage state from the QUIC
   implementation in the endpoints, in order to reduce the need to
   exchange RTCP packets and how to implement congestion control and
   rate adaptation without relying on RTCP feedback.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-avtcore-rtp-over-quic-07"/>
        </reference>
        <reference anchor="I-D.draft-engelbart-quic-data-channels">
          <front>
            <title>*** BROKEN REFERENCE ***</title>
            <author>
              <organization/>
            </author>
            <date/>
          </front>
        </reference>
        <reference anchor="RFC7301">
          <front>
            <title>Transport Layer Security (TLS) Application-Layer Protocol Negotiation Extension</title>
            <author fullname="S. Friedl" initials="S." surname="Friedl"/>
            <author fullname="A. Popov" initials="A." surname="Popov"/>
            <author fullname="A. Langley" initials="A." surname="Langley"/>
            <author fullname="E. Stephan" initials="E." surname="Stephan"/>
            <date month="July" year="2014"/>
            <abstract>
              <t>This 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.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7301"/>
          <seriesInfo name="DOI" value="10.17487/RFC7301"/>
        </reference>
        <reference anchor="RFC9000">
          <front>
            <title>QUIC: A UDP-Based Multiplexed and Secure Transport</title>
            <author fullname="J. Iyengar" initials="J." role="editor" surname="Iyengar"/>
            <author fullname="M. Thomson" initials="M." role="editor" surname="Thomson"/>
            <date month="May" year="2021"/>
            <abstract>
              <t>This document defines the core of the QUIC transport protocol. QUIC provides applications with flow-controlled streams for structured communication, low-latency connection establishment, and network path migration. QUIC includes security measures that ensure confidentiality, integrity, and availability in a range of deployment circumstances. Accompanying documents describe the integration of TLS for key negotiation, loss detection, and an exemplary congestion control algorithm.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9000"/>
          <seriesInfo name="DOI" value="10.17487/RFC9000"/>
        </reference>
        <reference anchor="RFC9001">
          <front>
            <title>Using TLS to Secure QUIC</title>
            <author fullname="M. Thomson" initials="M." role="editor" surname="Thomson"/>
            <author fullname="S. Turner" initials="S." role="editor" surname="Turner"/>
            <date month="May" year="2021"/>
            <abstract>
              <t>This document describes how Transport Layer Security (TLS) is used to secure QUIC.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9001"/>
          <seriesInfo name="DOI" value="10.17487/RFC9001"/>
        </reference>
        <reference anchor="RFC9002">
          <front>
            <title>QUIC Loss Detection and Congestion Control</title>
            <author fullname="J. Iyengar" initials="J." role="editor" surname="Iyengar"/>
            <author fullname="I. Swett" initials="I." role="editor" surname="Swett"/>
            <date month="May" year="2021"/>
            <abstract>
              <t>This document describes loss detection and congestion control mechanisms for QUIC.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9002"/>
          <seriesInfo name="DOI" value="10.17487/RFC9002"/>
        </reference>
        <reference anchor="RFC9221">
          <front>
            <title>An Unreliable Datagram Extension to QUIC</title>
            <author fullname="T. Pauly" initials="T." surname="Pauly"/>
            <author fullname="E. Kinnear" initials="E." surname="Kinnear"/>
            <author fullname="D. Schinazi" initials="D." surname="Schinazi"/>
            <date month="March" year="2022"/>
            <abstract>
              <t>This document defines an extension to the QUIC transport protocol to add support for sending and receiving unreliable datagrams over a QUIC connection.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9221"/>
          <seriesInfo name="DOI" value="10.17487/RFC9221"/>
        </reference>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="RFC8831">
          <front>
            <title>WebRTC Data Channels</title>
            <author fullname="R. Jesup" initials="R." surname="Jesup"/>
            <author fullname="S. Loreto" initials="S." surname="Loreto"/>
            <author fullname="M. Tüxen" initials="M." surname="Tüxen"/>
            <date month="January" year="2021"/>
            <abstract>
              <t>The WebRTC framework specifies protocol support for direct, interactive, rich communication using audio, video, and data between two peers' web browsers. This document specifies the non-media data transport aspects of the WebRTC framework. It provides an architectural overview of how the Stream Control Transmission Protocol (SCTP) is used in the WebRTC context as a generic transport service that allows web browsers to exchange generic data from peer to peer.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8831"/>
          <seriesInfo name="DOI" value="10.17487/RFC8831"/>
        </reference>
        <reference anchor="I-D.draft-dawkins-avtcore-sdp-rtp-quic">
          <front>
            <title>SDP Offer/Answer for RTP using QUIC as Transport</title>
            <author fullname="Spencer Dawkins" initials="S." surname="Dawkins">
              <organization>Tencent America LLC</organization>
            </author>
            <date day="28" month="January" year="2022"/>
            <abstract>
              <t>   This document describes these new SDP "proto" attribute values:
   "QUIC", "QUIC/RTP/SAVP", "QUIC/RTP/AVPF", and "QUIC/RTP/SAVPF", and
   describes how SDP Offer/Answer can be used to set up an RTP
   connection using QUIC as a transport protocol.

   These proto values are necessary to allow the use of QUIC as an
   underlying transport protocol for applications such as SIP and WebRTC
   that commonly use SDP as a session signaling protocol to set up RTP
   connections.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-dawkins-avtcore-sdp-rtp-quic-00"/>
        </reference>
      </references>
    </references>
    <?line 143?>

<section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
    </section>
  </back>
  <!-- ##markdown-source:
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

-->

</rfc>
