<?xml version='1.0' encoding='utf-8'?>
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" version="3" category="info" consensus="true" docName="draft-ietf-rmcat-rtp-cc-feedback-12" indexInclude="true" ipr="trust200902" number="9392" prepTime="2023-04-26T17:11:26" scripts="Common,Latin" sortRefs="true" submissionType="IETF" symRefs="true" tocDepth="3" tocInclude="true" xml:lang="en">
  <link href="https://datatracker.ietf.org/doc/draft-ietf-rmcat-rtp-cc-feedback-12" rel="prev"/>
  <link href="https://dx.doi.org/10.17487/rfc9392" rel="alternate"/>
  <link href="urn:issn:2070-1721" rel="alternate"/>
  <front>
    <title abbrev="RTCP Feedback for Congestion Control">Sending RTP Control Protocol (RTCP) Feedback for Congestion Control in Interactive Multimedia Conferences</title>
    <seriesInfo name="RFC" value="9392" stream="IETF"/>
    <author fullname="Colin Perkins" initials="C." surname="Perkins">
      <organization showOnFrontPage="true">University of Glasgow</organization>
      <address>
        <postal>
          <extaddr>School of Computing Science</extaddr>
          <city>Glasgow</city>
          <code>G12 8QQ</code>
          <country>United Kingdom</country>
        </postal>
        <email>csp@csperkins.org</email>
      </address>
    </author>
    <date month="04" year="2023"/>
    <area>tsv</area>
    <workgroup>rmcat</workgroup>
    <keyword>RTP</keyword>
    <keyword>Congestion Control</keyword>
    <keyword>VoIP</keyword>
    <keyword>Video Conferencing</keyword>
    <abstract pn="section-abstract">
      <t indent="0" pn="section-abstract-1">
	This memo discusses the rate at which congestion control feedback can
	be sent using the RTP Control Protocol (RTCP) and the suitability of RTCP for
	implementing congestion control for unicast multimedia applications.
      </t>
    </abstract>
    <boilerplate>
      <section anchor="status-of-memo" numbered="false" removeInRFC="false" toc="exclude" pn="section-boilerplate.1">
        <name slugifiedName="name-status-of-this-memo">Status of This Memo</name>
        <t indent="0" pn="section-boilerplate.1-1">
            This document is not an Internet Standards Track specification; it is
            published for informational purposes.  
        </t>
        <t indent="0" pn="section-boilerplate.1-2">
            This document is a product of the Internet Engineering Task Force
            (IETF).  It represents the consensus of the IETF community.  It has
            received public review and has been approved for publication by the
            Internet Engineering Steering Group (IESG).  Not all documents
            approved by the IESG are candidates for any level of Internet
            Standard; see Section 2 of RFC 7841. 
        </t>
        <t indent="0" pn="section-boilerplate.1-3">
            Information about the current status of this document, any
            errata, and how to provide feedback on it may be obtained at
            <eref target="https://www.rfc-editor.org/info/rfc9392" brackets="none"/>.
        </t>
      </section>
      <section anchor="copyright" numbered="false" removeInRFC="false" toc="exclude" pn="section-boilerplate.2">
        <name slugifiedName="name-copyright-notice">Copyright Notice</name>
        <t indent="0" pn="section-boilerplate.2-1">
            Copyright (c) 2023 IETF Trust and the persons identified as the
            document authors. All rights reserved.
        </t>
        <t indent="0" pn="section-boilerplate.2-2">
            This document is subject to BCP 78 and the IETF Trust's Legal
            Provisions Relating to IETF Documents
            (<eref target="https://trustee.ietf.org/license-info" brackets="none"/>) in effect on the date of
            publication of this document. Please review these documents
            carefully, as they describe your rights and restrictions with
            respect to this document. Code Components extracted from this
            document must include Revised BSD License text as described in
            Section 4.e of the Trust Legal Provisions and are provided without
            warranty as described in the Revised BSD License.
        </t>
      </section>
    </boilerplate>
    <toc>
      <section anchor="toc" numbered="false" removeInRFC="false" toc="exclude" pn="section-toc.1">
        <name slugifiedName="name-table-of-contents">Table of Contents</name>
        <ul bare="true" empty="true" indent="2" spacing="compact" pn="section-toc.1-1">
          <li pn="section-toc.1-1.1">
            <t indent="0" keepWithNext="true" pn="section-toc.1-1.1.1"><xref derivedContent="1" format="counter" sectionFormat="of" target="section-1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-introduction">Introduction</xref></t>
            <ul bare="true" empty="true" indent="2" spacing="compact" pn="section-toc.1-1.1.2">
              <li pn="section-toc.1-1.1.2.1">
                <t indent="0" keepWithNext="true" pn="section-toc.1-1.1.2.1.1"><xref derivedContent="1.1" format="counter" sectionFormat="of" target="section-1.1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-terminology">Terminology</xref></t>
              </li>
            </ul>
          </li>
          <li pn="section-toc.1-1.2">
            <t indent="0" keepWithNext="true" pn="section-toc.1-1.2.1"><xref derivedContent="2" format="counter" sectionFormat="of" target="section-2"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-considerations-for-rtcp-fee">Considerations for RTCP Feedback</xref></t>
          </li>
          <li pn="section-toc.1-1.3">
            <t indent="0" pn="section-toc.1-1.3.1"><xref derivedContent="3" format="counter" sectionFormat="of" target="section-3"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-what-feedback-is-achievable">What Feedback is Achievable with RTCP?</xref></t>
            <ul bare="true" empty="true" indent="2" spacing="compact" pn="section-toc.1-1.3.2">
              <li pn="section-toc.1-1.3.2.1">
                <t indent="0" pn="section-toc.1-1.3.2.1.1"><xref derivedContent="3.1" format="counter" sectionFormat="of" target="section-3.1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-scenario-1-voice-telephony">Scenario 1: Voice Telephony</xref></t>
              </li>
              <li pn="section-toc.1-1.3.2.2">
                <t indent="0" pn="section-toc.1-1.3.2.2.1"><xref derivedContent="3.2" format="counter" sectionFormat="of" target="section-3.2"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-scenario-2-point-to-point-v">Scenario 2: Point-to-Point Video Conference</xref></t>
              </li>
            </ul>
          </li>
          <li pn="section-toc.1-1.4">
            <t indent="0" pn="section-toc.1-1.4.1"><xref derivedContent="4" format="counter" sectionFormat="of" target="section-4"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-discussion-and-conclusions">Discussion and Conclusions</xref></t>
          </li>
          <li pn="section-toc.1-1.5">
            <t indent="0" pn="section-toc.1-1.5.1"><xref derivedContent="5" format="counter" sectionFormat="of" target="section-5"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-security-considerations">Security Considerations</xref></t>
          </li>
          <li pn="section-toc.1-1.6">
            <t indent="0" pn="section-toc.1-1.6.1"><xref derivedContent="6" format="counter" sectionFormat="of" target="section-6"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-iana-considerations">IANA Considerations</xref></t>
          </li>
          <li pn="section-toc.1-1.7">
            <t indent="0" pn="section-toc.1-1.7.1"><xref derivedContent="7" format="counter" sectionFormat="of" target="section-7"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-normative-references">Normative References</xref></t>
          </li>
          <li pn="section-toc.1-1.8">
            <t indent="0" pn="section-toc.1-1.8.1"><xref derivedContent="8" format="counter" sectionFormat="of" target="section-8"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-informative-references">Informative References</xref></t>
          </li>
          <li pn="section-toc.1-1.9">
            <t indent="0" pn="section-toc.1-1.9.1"><xref derivedContent="" format="none" sectionFormat="of" target="section-appendix.a"/><xref derivedContent="" format="title" sectionFormat="of" target="name-acknowledgements">Acknowledgements</xref></t>
          </li>
          <li pn="section-toc.1-1.10">
            <t indent="0" pn="section-toc.1-1.10.1"><xref derivedContent="" format="none" sectionFormat="of" target="section-appendix.b"/><xref derivedContent="" format="title" sectionFormat="of" target="name-authors-address">Author's Address</xref></t>
          </li>
        </ul>
      </section>
    </toc>
  </front>
  <middle>
    <section numbered="true" removeInRFC="false" toc="include" pn="section-1">
      <name slugifiedName="name-introduction">Introduction</name>
      <t indent="0" pn="section-1-1">
        The deployment of WebRTC systems <xref target="RFC8825" format="default" sectionFormat="of" derivedContent="RFC8825"/> has resulted 
        in high-quality video conferencing seeing extremely wide use.  To ensure 
        the stability of the network in the face of this use, WebRTC systems 
        need to use some form of congestion control for their RTP-based media
        traffic <xref target="RFC2914" format="default" sectionFormat="of" derivedContent="RFC2914"/> <xref target="RFC8083" format="default" sectionFormat="of" derivedContent="RFC8083"/>
        <xref target="RFC8085" format="default" sectionFormat="of" derivedContent="RFC8085"/> <xref target="RFC8834" format="default" sectionFormat="of" derivedContent="RFC8834"/>, allowing them to
        adapt and adjust the media data they send to match
        changes in the available network capacity. In addition to ensuring
        the stable operation of the network, such adaptation is critical to
        ensuring a good user experience, since it allows the sender to match
        the media to the network capacity, rather than forcing the receiver
        to compensate for uncontrolled packet loss when the available capacity
        is exceeded.
      </t>
      <t indent="0" pn="section-1-2">
        To develop such congestion control, it is necessary to
        understand the sort of congestion feedback that can be provided within
        the framework of RTP <xref target="RFC3550" format="default" sectionFormat="of" derivedContent="RFC3550"/> and the RTP Control 
        Protocol (RTCP). It then becomes possible to determine if this is 
        sufficient for congestion control or if some form of RTP extension
        is needed.
      </t>
      <t indent="0" pn="section-1-3">
        As this memo will show, if it is desired to use RTCP in something
        close to its current form for congestion feedback, the multimedia
        congestion control algorithm needs to be designed to work with
        detailed feedback sent every few frames, rather than per-frame
        acknowledgement, to match the constraints of RTCP.
      </t>
      <t indent="0" pn="section-1-4">
        This memo considers unicast congestion feedback that can be sent using
        RTCP under the RTP/SAVPF profile <xref target="RFC5124" format="default" sectionFormat="of" derivedContent="RFC5124"/> (the secure
        version of the RTP/AVPF profile <xref target="RFC4585" format="default" sectionFormat="of" derivedContent="RFC4585"/>).
	This
        profile was chosen because it forms the basis for media transport in WebRTC
        <xref target="RFC8834" format="default" sectionFormat="of" derivedContent="RFC8834"/> systems. However, nothing in this memo is specific to
        the secure version of the profile or to WebRTC. It is also
        assumed that the congestion control feedback mechanism described in
        <xref target="RFC8888" format="default" sectionFormat="of" derivedContent="RFC8888"/> and common RTCP extensions for efficient feedback
        <xref target="RFC5506" format="default" sectionFormat="of" derivedContent="RFC5506"/> <xref target="RFC8108" format="default" sectionFormat="of" derivedContent="RFC8108"/>
        <xref target="RFC8861" format="default" sectionFormat="of" derivedContent="RFC8861"/> <xref target="RFC8872" format="default" sectionFormat="of" derivedContent="RFC8872"/> are used.
      </t>
      <section numbered="true" removeInRFC="false" toc="include" pn="section-1.1">
        <name slugifiedName="name-terminology">Terminology</name>
        <dl newline="false" spacing="normal" indent="3" pn="section-1.1-1">
          <dt pn="section-1.1-1.1">Nr:</dt>
          <dd pn="section-1.1-1.2">number of frames between feedback reports</dd>
          <dt pn="section-1.1-1.3">Nrs:</dt>
          <dd pn="section-1.1-1.4">number of reduced-size RTCP packets send for every compound RTCP packet</dd>
          <dt pn="section-1.1-1.5">Na:</dt>
          <dd pn="section-1.1-1.6">number of audio packets per report</dd>
          <dt pn="section-1.1-1.7">Nv:</dt>
          <dd pn="section-1.1-1.8">number of video packets per reports</dd>
          <dt pn="section-1.1-1.9">Sc:</dt>
          <dd pn="section-1.1-1.10">size of a compound RTCP packet</dd>
          <dt pn="section-1.1-1.11">Srs:</dt>
          <dd pn="section-1.1-1.12">size of a reduced-size RTCP packet</dd>
          <dt pn="section-1.1-1.13">Tf:</dt>
          <dd pn="section-1.1-1.14">duration of a media frame in seconds </dd>
          <dt pn="section-1.1-1.15">Rf:</dt>
          <dd pn="section-1.1-1.16">frame rate 1/Tf</dd>
        </dl>
      </section>
    </section>
    <section numbered="true" removeInRFC="false" toc="include" pn="section-2">
      <name slugifiedName="name-considerations-for-rtcp-fee">Considerations for RTCP Feedback</name>
      <t indent="0" pn="section-2-1">
        Several questions need to be answered when providing RTCP 
        feedback for congestion control purposes. These include:
      </t>
      <ul bare="false" empty="false" indent="3" spacing="normal" pn="section-2-2">
        <li pn="section-2-2.1"> How often is feedback needed? </li>
        <li pn="section-2-2.2"> How much overhead is acceptable? </li>
        <li pn="section-2-2.3"> How much and what data does each report contain? </li>
      </ul>
      <t indent="0" pn="section-2-3">
	However, the key question is as follows: how often does the receiver need
	to send feedback on the reception quality it is experiencing and hence the
	congestion state of the network?
      </t>
      <t indent="0" pn="section-2-4">
        Widely used transport protocols, such as TCP, send acknowledgements
        frequently. For example, a TCP receiver will send an acknowledgement
        at least once every 0.5 seconds or when new data equal to twice the maximum
        segment size has been received <xref target="RFC9293" format="default" sectionFormat="of" derivedContent="RFC9293"/>.
        That has relatively low overhead when traffic is bidirectional
        and acknowledgements can be piggybacked onto return path data packets.
        It can also be acceptable, and can have reasonable overhead, to send
        separate acknowledgement packets when those packets are much smaller
        than data packets.
      </t>
      <t indent="0" pn="section-2-5">
        Frequent acknowledgements can become a problem, however, when there
        is no return traffic on which to piggyback feedback or if separate
        feedback and data packets are sent and the feedback is similar in
        size to the data being acknowledged. This can be the case for some
        forms of media traffic, especially for Voice over IP (VoIP) flows, leading
        to high overhead when using a transport protocol that sends frequent
        feedback. Approaches like in-network filtering of acknowledgements
        that have been proposed to reduce acknowledgement overheads on highly
        asymmetric links (e.g., as mentioned in <xref target="RFC3449" format="default" sectionFormat="of" derivedContent="RFC3449"/>)
        can also reduce the feedback frequency and overhead for multimedia traffic, but this
        so-called "stretch-ACK" behavior is nonstandard and not guaranteed.
      </t>
      <t indent="0" pn="section-2-6">
        Accordingly, when implementing congestion control for RTP-based multimedia traffic,
        it might make sense to give the option of sending congestion feedback less often
        than TCP does.  For example, it might be possible to send a feedback packet
        once per video frame, every few frames, or once per network round-trip
        time (RTT). This could still give sufficiently frequent feedback for
        the congestion control loop to be stable and responsive while keeping
        the overhead reasonable when the feedback cannot be piggybacked onto
        returning data. In this case, it is important to note that RTCP can
        send much more detailed feedback than simple acknowledgements.
	For example, if it were useful, it could be possible to use an RTCP extended
	report (XR) packet <xref target="RFC3611" format="default" sectionFormat="of" derivedContent="RFC3611"/> to send feedback once per RTT;
	the feedback could comprise a
	bitmap of lost and received packets, with reception times, over that
	RTT. As long as feedback is sent
        frequently enough that the control loop is stable and the sender is
        kept informed when data leaves the network (to provide an equivalent
        to acknowledgement (ACK) clocking in TCP), it is not necessary to report on every packet
        at the instant it is received. Indeed, it is unlikely that a video
        codec can react instantly to a rate change, and there is little 
        point in providing feedback more often than the codec can adapt.
        This suggests that an RTP receiver needs to be configured to provide
        feedback at a rate that matches the rate of adaptation of the sender.
        In the best case, this will match the media frame rate but might
        often be slower.
      </t>
      <t indent="0" pn="section-2-7">
        Reducing the feedback frequency compared to TCP will reduce feedback
        overhead but will lead multimedia flows to adapt to congestion more
        slowly than TCP, raising concerns about inter-flow fairness. Similar
        concerns are noted in <xref target="RFC5348" format="default" sectionFormat="of" derivedContent="RFC5348"/>, and accordingly, the
        congestion control algorithm described therein aims for "reasonable"
        fairness and a sending rate that is "generally within a factor of
        two" of what TCP would achieve under the same conditions.  It is
        to be noted, however, that TCP exhibits inter-flow unfairness when
        flows with differing round-trip times compete, and stretch
        acknowledgements due to in-network traffic manipulation are not
        uncommon and also raise fairness concerns. Implementations need
        to balance potential unfairness against feedback overhead.
      </t>
      <t indent="0" pn="section-2-8">
        Generating and processing feedback consumes resources at the sender
        and receiver. The feedback packets also incur forwarding costs, contribute
        to link utilization, and can affect the timing of other traffic on the
        network. This can affect performance on some types of networks that can be
        impacted by the rate, timing, and size of feedback packets, as well as
        the overall volume of feedback bytes.
      </t>
      <t indent="0" pn="section-2-9">
        The amount of overhead due to congestion control feedback that is
        considered acceptable has to be determined.  RTCP feedback is sent in
        separate packets to RTP data, and this has some cost in terms of
        additional header overhead compared to protocols that piggyback
        feedback on return path data packets. The RTP standards have long said
        that a 5% overhead for RTCP traffic is generally acceptable. Is this still
	the case
        for congestion control feedback? Is there a desire to provide
        more responsive feedback and congestion control, possibly with a
        higher overhead? Or is lower overhead wanted, accepting that this
        might reduce responsiveness of the congestion control algorithm?
      </t>
      <t indent="0" pn="section-2-10">
        Finally, the details of how much and what data is to be sent in 
        each report will affect the frequency and/or overhead of feedback.
        There is a fundamental trade-off that the more frequently feedback
        packets are sent, the less data can be included in each packet to
        keep the overhead constant. Does the congestion control need a high
        rate but simple feedback (e.g., like TCP acknowledgements), or is
        it acceptable to send more complex feedback less often? 
        Is it useful for the congestion control to receive frequent feedback,
        perhaps to provide more accurate round-trip time estimates, or to
        provide robustness in case feedback packets are lost, even if the
        media sending rate cannot quickly be changed? Or is low-rate feedback,
        resulting in slowly responsive changes to the sending rate, acceptable?
        Different combinations of the congestion control algorithm and media
        codec might require different trade-offs, and the correct trade-off
        for interactive, self-paced, real-time multimedia traffic might not
        be the same as that for TCP congestion control.
      </t>
    </section>
    <section numbered="true" removeInRFC="false" toc="include" pn="section-3">
      <name slugifiedName="name-what-feedback-is-achievable">What Feedback is Achievable with RTCP?</name>
      <t indent="0" pn="section-3-1">
        The following sections illustrate how the RTCP congestion control
        feedback report <xref target="RFC8888" format="default" sectionFormat="of" derivedContent="RFC8888"/> can be used in different
        scenarios and illustrate the overheads of this approach.
      </t>
      <section anchor="sec-p2p-audio" numbered="true" removeInRFC="false" toc="include" pn="section-3.1">
        <name slugifiedName="name-scenario-1-voice-telephony">Scenario 1: Voice Telephony</name>
        <t indent="0" pn="section-3.1-1">
          In many ways, point-to-point voice telephony is the simplest
          scenario for congestion control, since there is only a single
          media stream to control. It's complicated, however, by severe 
          bandwidth constraints on the feedback, to keep the overhead 
          manageable. 
        </t>
        <t indent="0" pn="section-3.1-2">
          Assume a two-party, point-to-point VoIP call, using RTP
          over UDP/IP. A rate-adaptive speech codec, such as Opus, is used,
          encoded into RTP packets in frames of a duration of Tf seconds (Tf =
          0.020 s in many cases, but values up to 0.060 s are not uncommon). The
          congestion control algorithm requires feedback every Nr frames,
          i.e., every Nr * Tf seconds, to ensure effective control.  Both
          parties in the call send speech data or comfort noise with
          sufficient frequency that they are counted as senders for the
          purpose of the RTCP reporting interval calculation.
        </t>
        <t indent="0" pn="section-3.1-3">
          RTCP feedback packets can be full (compound) RTCP feedback
          packets or reduced-size RTCP packets <xref target="RFC5506" format="default" sectionFormat="of" derivedContent="RFC5506"/>. 
          A compound RTCP packet is sent once for every Nrs reduced-size
          RTCP packets. 
        </t>
        <t indent="0" pn="section-3.1-4">
          Compound RTCP packets contain a Sender Report (SR) packet, a
          Source Description (SDES) packet, and an RTP Congestion Control 
          Feedback (CCFB) packet <xref target="RFC8888" format="default" sectionFormat="of" derivedContent="RFC8888"/>. Reduced-size
          RTCP packets contain only the CCFB packet. Since each participant
          sends only a single RTP media stream, the extensions for RTCP report
          aggregation <xref target="RFC8108" format="default" sectionFormat="of" derivedContent="RFC8108"/> and reporting group optimization 
          <xref target="RFC8861" format="default" sectionFormat="of" derivedContent="RFC8861"/> are not used. 
        </t>
        <t indent="0" pn="section-3.1-5">
          Within each compound RTCP packet, the SR packet will contain a
          sender information block (28 octets) and a single reception
          report block (24 octets), for a total of 52 octets.  A minimal
          SDES packet will contain a header (4 octets), a single chunk
          containing a synchronization source (SSRC) (4 octets), and a CNAME item, and if the
          recommendations for choosing the CNAME <xref target="RFC7022" format="default" sectionFormat="of" derivedContent="RFC7022"/>
          are followed, the CNAME item will comprise a 2-octet header, 16
          octets of data, and 2 octets of padding, for a total SDES packet
          size of 28 octets.
	  The CCFB packets contain an RTCP header
          and SSRC (8 octets), a report timestamp (4 octets), the other party's
          SSRC, beginning and ending sequence numbers (8 octets), and 2 * Nr
          octets of reports, for a total of 20 + (2 * Nr) octets.
          The compound Secure RTCP (SRTCP) packet will include 4 octets of trailer,
          followed by an 80-bit (10-octet) authentication tag if HMAC-SHA1
          authentication is used.
          If IPv4 is used, with no IP options, the UDP/IP header will be
          28 octets in size. This gives a total compound RTCP packet size
          of Sc = 142 + (2 * Nr) octets.
        </t>
        <t indent="0" pn="section-3.1-6">
          The reduced-size RTCP packets will comprise just the CCFB packet,
          SRTCP trailer and authentication tag, and a UDP/IP header. It can
          be seen that these packets will be Srs = 62 + (2 * Nr) octets in size.
        </t>
        <t indent="0" pn="section-3.1-7">
          The RTCP reporting interval calculation (Sections <xref target="RFC3550" section="6.2" sectionFormat="bare" format="default" derivedLink="https://rfc-editor.org/rfc/rfc3550#section-6.2" derivedContent="RFC3550"/> and <xref target="RFC3550" section="6.3" sectionFormat="bare" format="default" derivedLink="https://rfc-editor.org/rfc/rfc3550#section-6.3" derivedContent="RFC3550"/> of <xref target="RFC3550" format="default" sectionFormat="of" derivedContent="RFC3550"/> and <xref target="RFC4585" format="default" sectionFormat="of" derivedContent="RFC4585"/>) for a two-party session where both participants 
          are senders reduces to:
        </t>
        <artwork name="" type="" align="left" pn="section-3.1-8">
   Trtcp = n * Srtcp / Brtcp
        </artwork>
        <t indent="0" pn="section-3.1-9">
          where Srtcp = (Sc + Nrs * Srs) / (1 + Nrs) is the average RTCP packet
          size in octets, Brtcp is the bandwidth allocated to RTCP in octets
          per second, and n is the number of participants in the RTP session
          (in this scenario, n = 2).
        </t>
        <t indent="0" pn="section-3.1-10">
          To ensure an RTCP report containing congestion control feedback is
          sent after every Nr frames of audio, it is necessary to set the RTCP
          reporting interval to Trtcp = Nr * Tf, which when substituted into the
          previous, gives Nr * Tf = n * Srtcp / Brtcp.
          Solving this to give the RTCP bandwidth (Brtcp) and expanding the
          definition of Srtcp gives:
        </t>
        <artwork name="" type="" align="left" pn="section-3.1-11">
   Brtcp = (n * (Sc + Nrs * Srs)) / (Nr * Tf * (1 + Nrs))
        </artwork>
        <t indent="0" pn="section-3.1-12">
          If we assume every report is a compound RTCP packet (i.e., Nrs = 0),
          the frame duration is Tf = 20 ms, and an RTCP report is sent for every
          second frame (i.e., 25 RTCP reports per second), this gives an RTCP
          feedback bandwidth of Brtcp = 57 kbps. Increasing the frame duration
          or reducing the frequency of reports will reduce the RTCP bandwidth,
          as shown in <xref target="voip_rtcp_bw" format="default" sectionFormat="of" derivedContent="Table 1"/>.
        </t>
        <table anchor="voip_rtcp_bw" align="center" pn="table-1">
          <name slugifiedName="name-rtcp-bandwidth-needed-for-v">RTCP Bandwidth Needed for VoIP Feedback (Compound Reports Only)</name>
          <thead>
            <tr>
              <th align="center" colspan="1" rowspan="1">Tf (seconds)</th>
              <th align="center" colspan="1" rowspan="1">Nr (frames)</th>
              <th align="center" colspan="1" rowspan="1">rtcp_bw (kbps)</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left" colspan="1" rowspan="1"> 0.020 </td>
              <td align="left" colspan="1" rowspan="1">  2 </td>
              <td align="left" colspan="1" rowspan="1"> 57.0 </td>
            </tr>
            <tr>
              <td align="left" colspan="1" rowspan="1"> 0.020 </td>
              <td align="left" colspan="1" rowspan="1">  4 </td>
              <td align="left" colspan="1" rowspan="1"> 29.3 </td>
            </tr>
            <tr>
              <td align="left" colspan="1" rowspan="1"> 0.020 </td>
              <td align="left" colspan="1" rowspan="1">  8 </td>
              <td align="left" colspan="1" rowspan="1"> 15.4 </td>
            </tr>
            <tr>
              <td align="left" colspan="1" rowspan="1"> 0.020 </td>
              <td align="left" colspan="1" rowspan="1"> 16 </td>
              <td align="left" colspan="1" rowspan="1">  8.5 </td>
            </tr>
            <tr>
              <td align="left" colspan="1" rowspan="1"> 0.060 </td>
              <td align="left" colspan="1" rowspan="1">  2 </td>
              <td align="left" colspan="1" rowspan="1"> 19.0 </td>
            </tr>
            <tr>
              <td align="left" colspan="1" rowspan="1"> 0.060 </td>
              <td align="left" colspan="1" rowspan="1">  4 </td>
              <td align="left" colspan="1" rowspan="1">  9.8 </td>
            </tr>
            <tr>
              <td align="left" colspan="1" rowspan="1"> 0.060 </td>
              <td align="left" colspan="1" rowspan="1">  8 </td>
              <td align="left" colspan="1" rowspan="1">  5.1 </td>
            </tr>
            <tr>
              <td align="left" colspan="1" rowspan="1"> 0.060 </td>
              <td align="left" colspan="1" rowspan="1"> 16 </td>
              <td align="left" colspan="1" rowspan="1">  2.8 </td>
            </tr>
          </tbody>
        </table>
        <t indent="0" pn="section-3.1-14">
          The final row of <xref target="voip_rtcp_bw" format="default" sectionFormat="of" derivedContent="Table 1"/> (60 ms frames, reporting
          every 16 frames) sends RTCP reports once per second, giving an RTCP
          bandwidth overhead of 2.8 kbps.
        </t>
        <t indent="0" pn="section-3.1-15">
          The overhead can be reduced by sending some reports in reduced-size
          RTCP packets <xref target="RFC5506" format="default" sectionFormat="of" derivedContent="RFC5506"/>. For example, if we alternate
          compound and reduced-size RTCP packets, i.e., Nrs = 1, the calculation
          gives the results shown in <xref target="voip_rtcp_bw_non-compound" format="default" sectionFormat="of" derivedContent="Table 2"/>.
        </t>
        <table anchor="voip_rtcp_bw_non-compound" align="center" pn="table-2">
          <name slugifiedName="name-required-rtcp-bandwidth-for">Required RTCP Bandwidth for VoIP Feedback (Alternating Compound and Reduced-Size Reports)</name>
          <thead>
            <tr>
              <th align="center" colspan="1" rowspan="1">Tf (seconds)</th>
              <th align="center" colspan="1" rowspan="1">Nr (frames)</th>
              <th align="center" colspan="1" rowspan="1">rtcp_bw (kbps)</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left" colspan="1" rowspan="1"> 0.020 </td>
              <td align="left" colspan="1" rowspan="1">  2 </td>
              <td align="left" colspan="1" rowspan="1"> 41.4 </td>
            </tr>
            <tr>
              <td align="left" colspan="1" rowspan="1"> 0.020 </td>
              <td align="left" colspan="1" rowspan="1">  4 </td>
              <td align="left" colspan="1" rowspan="1"> 21.5 </td>
            </tr>
            <tr>
              <td align="left" colspan="1" rowspan="1"> 0.020 </td>
              <td align="left" colspan="1" rowspan="1">  8 </td>
              <td align="left" colspan="1" rowspan="1"> 11.5 </td>
            </tr>
            <tr>
              <td align="left" colspan="1" rowspan="1"> 0.020 </td>
              <td align="left" colspan="1" rowspan="1"> 16 </td>
              <td align="left" colspan="1" rowspan="1">  6.5 </td>
            </tr>
            <tr>
              <td align="left" colspan="1" rowspan="1"> 0.060 </td>
              <td align="left" colspan="1" rowspan="1">  2 </td>
              <td align="left" colspan="1" rowspan="1"> 13.8 </td>
            </tr>
            <tr>
              <td align="left" colspan="1" rowspan="1"> 0.060 </td>
              <td align="left" colspan="1" rowspan="1">  4 </td>
              <td align="left" colspan="1" rowspan="1">  7.2 </td>
            </tr>
            <tr>
              <td align="left" colspan="1" rowspan="1"> 0.060 </td>
              <td align="left" colspan="1" rowspan="1">  8 </td>
              <td align="left" colspan="1" rowspan="1">  3.8 </td>
            </tr>
            <tr>
              <td align="left" colspan="1" rowspan="1"> 0.060 </td>
              <td align="left" colspan="1" rowspan="1"> 16 </td>
              <td align="left" colspan="1" rowspan="1">  2.2 </td>
            </tr>
          </tbody>
        </table>
        <t indent="0" pn="section-3.1-17">
          The RTCP bandwidth needed for 60 ms frames, reporting every 16 
          frames (once per second), can be seen to drop to 2.2 kbps. This
          calculation can be repeated for other patterns of compound and
          reduced-size RTCP packets, feedback frequency, and frame duration,
          as needed.
        </t>
        <aside pn="section-3.1-18">
          <t indent="0" pn="section-3.1-18.1">
          Note: To achieve the RTCP transmission intervals above, the
          RTP/SAVPF profile with T_rr_interval=0 is used, since even when
          using the reduced minimal transmission interval, the RTP/SAVP
          profile would only allow sending RTCP at most every 0.11 s (every
          third frame of video). Using RTP/SAVPF with T_rr_interval=0,
	  however, enables full utilization of the configured 5% RTCP bandwidth
	  fraction.
          </t>
        </aside>
        <t indent="0" pn="section-3.1-19">
          The use of IPv6 will increase the overhead by 20 octets per packet,
          due to the increased size of the IPv6 header compared to IPv4,
          assuming no IP options in either case. This increases the size
          of compound packets to Sc = 162 + (2 * Nr) octets and reduced-size
          packets to Srs = 82 + (2 * Nr). Rerunning the calculations from
          <xref target="voip_rtcp_bw" format="default" sectionFormat="of" derivedContent="Table 1"/> with these packet sizes gives the
          results shown in <xref target="voip_rtcp_bw_ipv6" format="default" sectionFormat="of" derivedContent="Table 3"/>.
          As can be seen, there is a significant increase in overhead
          due to the use of IPv6.
        </t>
        <table anchor="voip_rtcp_bw_ipv6" align="center" pn="table-3">
          <name slugifiedName="name-rtcp-bandwidth-needed-for-vo">RTCP Bandwidth Needed for VoIP Feedback (Compound Reports Only) Using IPv6</name>
          <thead>
            <tr>
              <th align="center" colspan="1" rowspan="1">Tf (seconds)</th>
              <th align="center" colspan="1" rowspan="1">Nr (frames)</th>
              <th align="center" colspan="1" rowspan="1">rtcp_bw (kbps)</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left" colspan="1" rowspan="1"> 0.020 </td>
              <td align="left" colspan="1" rowspan="1">  2 </td>
              <td align="left" colspan="1" rowspan="1"> 64.8 </td>
            </tr>
            <tr>
              <td align="left" colspan="1" rowspan="1"> 0.020 </td>
              <td align="left" colspan="1" rowspan="1">  4 </td>
              <td align="left" colspan="1" rowspan="1"> 33.2 </td>
            </tr>
            <tr>
              <td align="left" colspan="1" rowspan="1"> 0.020 </td>
              <td align="left" colspan="1" rowspan="1">  8 </td>
              <td align="left" colspan="1" rowspan="1"> 17.4 </td>
            </tr>
            <tr>
              <td align="left" colspan="1" rowspan="1"> 0.020 </td>
              <td align="left" colspan="1" rowspan="1"> 16 </td>
              <td align="left" colspan="1" rowspan="1">  9.5 </td>
            </tr>
            <tr>
              <td align="left" colspan="1" rowspan="1"> 0.060 </td>
              <td align="left" colspan="1" rowspan="1">  2 </td>
              <td align="left" colspan="1" rowspan="1"> 21.6 </td>
            </tr>
            <tr>
              <td align="left" colspan="1" rowspan="1"> 0.060 </td>
              <td align="left" colspan="1" rowspan="1">  4 </td>
              <td align="left" colspan="1" rowspan="1"> 11.1 </td>
            </tr>
            <tr>
              <td align="left" colspan="1" rowspan="1"> 0.060 </td>
              <td align="left" colspan="1" rowspan="1">  8 </td>
              <td align="left" colspan="1" rowspan="1">  5.8 </td>
            </tr>
            <tr>
              <td align="left" colspan="1" rowspan="1"> 0.060 </td>
              <td align="left" colspan="1" rowspan="1"> 16 </td>
              <td align="left" colspan="1" rowspan="1">  3.2 </td>
            </tr>
          </tbody>
        </table>
        <t indent="0" pn="section-3.1-21">
          Repeating the calculations from <xref target="voip_rtcp_bw_non-compound" format="default" sectionFormat="of" derivedContent="Table 2"/>
          using IPv6 gives the results shown in <xref target="voip_rtcp_bw_non-compound_ipv6" format="default" sectionFormat="of" derivedContent="Table 4"/>.
          As can be seen, the overhead still increases with IPv6 when 
          a mix of compound and reduced-size reports is used, but the
          effect is less pronounced than with compound reports only.
        </t>
        <table anchor="voip_rtcp_bw_non-compound_ipv6" align="center" pn="table-4">
          <name slugifiedName="name-required-rtcp-bandwidth-for-">Required RTCP Bandwidth for VoIP Feedback (Alternating Compound and Reduced-Size Reports) Using IPv6</name>
          <thead>
            <tr>
              <th align="center" colspan="1" rowspan="1">Tf (seconds)</th>
              <th align="center" colspan="1" rowspan="1">Nr (frames)</th>
              <th align="center" colspan="1" rowspan="1">rtcp_bw (kbps)</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left" colspan="1" rowspan="1"> 0.020 </td>
              <td align="left" colspan="1" rowspan="1">  2 </td>
              <td align="left" colspan="1" rowspan="1"> 49.2 </td>
            </tr>
            <tr>
              <td align="left" colspan="1" rowspan="1"> 0.020 </td>
              <td align="left" colspan="1" rowspan="1">  4 </td>
              <td align="left" colspan="1" rowspan="1"> 25.4 </td>
            </tr>
            <tr>
              <td align="left" colspan="1" rowspan="1"> 0.020 </td>
              <td align="left" colspan="1" rowspan="1">  8 </td>
              <td align="left" colspan="1" rowspan="1"> 13.5 </td>
            </tr>
            <tr>
              <td align="left" colspan="1" rowspan="1"> 0.020 </td>
              <td align="left" colspan="1" rowspan="1"> 16 </td>
              <td align="left" colspan="1" rowspan="1">  7.5 </td>
            </tr>
            <tr>
              <td align="left" colspan="1" rowspan="1"> 0.060 </td>
              <td align="left" colspan="1" rowspan="1">  2 </td>
              <td align="left" colspan="1" rowspan="1"> 16.4 </td>
            </tr>
            <tr>
              <td align="left" colspan="1" rowspan="1"> 0.060 </td>
              <td align="left" colspan="1" rowspan="1">  4 </td>
              <td align="left" colspan="1" rowspan="1">  8.5 </td>
            </tr>
            <tr>
              <td align="left" colspan="1" rowspan="1"> 0.060 </td>
              <td align="left" colspan="1" rowspan="1">  8 </td>
              <td align="left" colspan="1" rowspan="1">  4.5 </td>
            </tr>
            <tr>
              <td align="left" colspan="1" rowspan="1"> 0.060 </td>
              <td align="left" colspan="1" rowspan="1"> 16 </td>
              <td align="left" colspan="1" rowspan="1">  2.5 </td>
            </tr>
          </tbody>
        </table>
      </section>
      <section anchor="sec-p2p-video" numbered="true" removeInRFC="false" toc="include" pn="section-3.2">
        <name slugifiedName="name-scenario-2-point-to-point-v">Scenario 2: Point-to-Point Video Conference</name>
        <t indent="0" pn="section-3.2-1">
          Consider a point-to-point
          video call between two end systems. There will be four RTP flows in 
          this scenario (two audio and two video), with all four flows being
          active for essentially all the time (the audio flows will likely
          use voice activity detection and comfort noise to reduce the packet 
          rate during silent periods, but this does not cause the transmissions to
          stop). 
        </t>
        <t indent="0" pn="section-3.2-2">
          Assume all four flows are sent in a single RTP session, each using
          a separate SSRC. The RTCP reports from the co-located audio and video 
          SSRCs at each end point are aggregated <xref target="RFC8108" format="default" sectionFormat="of" derivedContent="RFC8108"/>,
          the optimizations in <xref target="RFC8861" format="default" sectionFormat="of" derivedContent="RFC8861"/> are used, and RTCP
          congestion control feedback is sent <xref target="RFC8888" format="default" sectionFormat="of" derivedContent="RFC8888"/>.
        </t>
        <t indent="0" pn="section-3.2-3">
          As in <xref target="sec-p2p-audio" format="default" sectionFormat="of" derivedContent="Section 3.1"/>, when all members are senders,
          the RTCP reporting interval calculation in Sections <xref target="RFC3550" section="6.2" sectionFormat="bare" format="default" derivedLink="https://rfc-editor.org/rfc/rfc3550#section-6.2" derivedContent="RFC3550"/> and <xref target="RFC3550" section="6.3" sectionFormat="bare" format="default" derivedLink="https://rfc-editor.org/rfc/rfc3550#section-6.3" derivedContent="RFC3550"/>
          <xref target="RFC3550" format="default" sectionFormat="of" derivedContent="RFC3550"/> and in <xref target="RFC4585" format="default" sectionFormat="of" derivedContent="RFC4585"/> reduces to:
        </t>
        <artwork name="" type="" align="left" pn="section-3.2-4">
   Trtcp = n * Srtcp / Brtcp
        </artwork>
        <t indent="0" pn="section-3.2-5">
          where n is the number of members in the session, Srtcp is the
          average RTCP packet size in octets, and Brtcp is the RTCP
          bandwidth in octets per second.
        </t>
        <t indent="0" pn="section-3.2-6">
          The average RTCP packet size (Srtcp) depends on the amount of feedback
          sent in each RTCP packet, the number of members in the
          session, the size of source description (RTCP SDES) information
          sent, and the amount of congestion control feedback sent in each
          packet.
        </t>
        <t indent="0" pn="section-3.2-7">
          As a baseline, each RTCP packet will be a compound RTCP packet that
          contains an aggregate of a compound RTCP packet generated by the 
          video SSRC and a compound RTCP packet generated by the audio SSRC.
          When the RTCP reporting group extensions are used, one of these
          SSRCs will be a reporting SSRC, to which the other SSRC will have
          delegated its reports. No reduced-size RTCP packets are sent.
        </t>
        <t indent="0" pn="section-3.2-8">
          The aggregated compound RTCP packet from the non-reporting SSRC
          will contain an RTCP SR packet, an RTCP SDES packet, and an RTCP
          Reporting Group Reporting Sources (RGRS) packet. The RTCP SR packet
	  contains the 28-octet UDP/IP header 
          (assuming IPv4 with no options) and 
          sender information but no report blocks (since the reporting is
          delegated). The RTCP SDES packet will comprise a header (4 octets),
          the originating SSRC (4 octets), a CNAME chunk, a terminating chunk, 
          and any padding.  If the CNAME follows <xref target="RFC7022" format="default" sectionFormat="of" derivedContent="RFC7022"/> and
          <xref target="RFC8834" format="default" sectionFormat="of" derivedContent="RFC8834"/>, the CNAME chunk will be 18 octets in
          size and will be followed by one octet of padding and one terminating
          null octet to align the SDES packet to a 32-bit boundary
          (<xref target="RFC3550" sectionFormat="comma" section="6.5" format="default" derivedLink="https://rfc-editor.org/rfc/rfc3550#section-6.5" derivedContent="RFC3550"/>), making the SDES packet 28
          octets in size. The RTCP RGRS packet will be 12 octets in size. 
          This gives a total of 28 + 28 + 12 = 68 octets.
        </t>
        <t indent="0" pn="section-3.2-9">
          The aggregated compound RTCP packet from the reporting SSRC will
          contain an RTCP SR packet, an RTCP SDES packet, and an RTCP 
          congestion control feedback packet. 
          The RTCP SR packet will contain two report blocks, one for each of
          the remote SSRCs (the report for the other local SSRC is suppressed
          by the reporting group extension), for a total of 28 + (2 * 24) =
          76 octets. The RTCP SDES packet will
	  comprise a header (4 octets), originating SSRC (4 octets), a CNAME
	  chunk, a Reporting Group (RGRP) chunk, a terminating chunk, and any
	  padding.  If the CNAME follows <xref target="RFC7022" format="default" sectionFormat="of" derivedContent="RFC7022"/> and <xref target="RFC8834" format="default" sectionFormat="of" derivedContent="RFC8834"/>, it will be 18 octets in size.
	  The RGRP chunk similarly comprises 18 octets, the terminating
	  chunk is comprised of 1 octet, and 3 octets of padding are needed,
	  for a total of 48 octets.
          The RTCP congestion control feedback (CCFB) report comprises an 8-octet
          RTCP header and SSRC, a 4-octet report timestamp, and for
	  each of the remote audio and video SSRCs, an 8-octet report header, 2 octets per packet
          reported upon, and padding to a 4-octet boundary if needed; that is, 
          8 + 4 + 8 + (2 * Nv) + 8 + (2 * Na), where Nv is the number of video
          packets per report and Na is the number of audio packets per report.
        </t>
        <t indent="0" pn="section-3.2-10">
          The complete compound RTCP packet contains the RTCP packets from
          both the reporting and non-reporting SSRCs, an SRTCP trailer and authentication
          tag, and a UDP/IPv4 header. The size of this RTCP packet is therefore
          262 + (2 * Nv) + (2 * Na) octets.
          Since the aggregate RTCP packet contains reports from two SSRCs, the
          RTCP packet size is halved before use <xref target="RFC8108" format="default" sectionFormat="of" derivedContent="RFC8108"/>.
          Accordingly, the size of the RTCP packets is:
        </t>
        <artwork name="" type="" align="left" pn="section-3.2-11">
   Srtcp = (262 + (2 * Nv) + (2 * Na)) / 2
        </artwork>
        <t indent="0" pn="section-3.2-12">
          How many RTP packets does the RTCP XR congestion control feedback
          packet, included in these compound RTCP packets, report on? That is,
          what are the values of Nv and Na?
          This depends on the RTCP reporting interval (Trtcp), the video bit
          rate and frame rate (Rf), the audio bit rate and framing interval,
          and whether the receiver chooses to send congestion control feedback
          in each RTCP packet it sends.
        </t>
        <t indent="0" pn="section-3.2-13">
          To simplify the calculation, assume it is desired to send one RTCP
          report for each frame of video received (i.e., Trtcp = 1 / Rf) and
          to include a congestion control feedback packet in each report.
          Assume that video has a constant bit rate and frame rate and that
          each frame of video has to fit into a 1500-octet MTU. Further,
          assume that the audio takes negligible bandwidth and that the
          audio framing interval can be varied within reasonable bounds, so
          that an integral number of audio frames align with video frame
          boundaries.
        </t>
        <t indent="0" pn="section-3.2-14">
          <xref target="scenario2-compound" format="default" sectionFormat="of" derivedContent="Table 5"/> shows the resulting values of
          Nv and Na (the number of video and audio packets covered by each
          congestion control feedback report) for a range of data rates and
          video frame rates, assuming congestion control feedback is sent
          once per video frame.
          The table also shows the result of inverting the RTCP reporting
          interval calculation to find the corresponding RTCP bandwidth
          (Brtcp). The RTCP bandwidth is given in kbps and as a fraction of
          the data rate.
        </t>
        <t indent="0" pn="section-3.2-15">
          It can be seen that, for example, with a data rate of 1024 kbps
          and a video sent at 30 frames per second, the RTCP congestion control
          feedback report sent for each video frame will include reports on
          3 video packets and 2 audio packets. The RTCP bandwidth needed to
          sustain this reporting rate is 127.5 kbps (12% of the data rate).
          This assumes an audio framing interval of 16.67 ms, so that 2
          audio packets are sent for each video frame.
        </t>
        <table anchor="scenario2-compound" align="center" pn="table-5">
          <name slugifiedName="name-required-rtcp-bandwidth-rep">Required RTCP Bandwidth, Reporting on Every Frame</name>
          <thead>
            <tr>
              <th align="center" colspan="1" rowspan="1"> Data Rate (kbps) </th>
              <th align="center" colspan="1" rowspan="1"> Video Frame Rate: Rf </th>
              <th align="center" colspan="1" rowspan="1"> Video Packets per Report: Nv </th>
              <th align="center" colspan="1" rowspan="1"> Audio Packets per Report: Na </th>
              <th align="center" colspan="1" rowspan="1"> Required RTCP Bandwidth: Brtcp (kbps) </th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left" colspan="1" rowspan="1"> 100 </td>
              <td align="left" colspan="1" rowspan="1"> 8 </td>
              <td align="left" colspan="1" rowspan="1"> 1 </td>
              <td align="left" colspan="1" rowspan="1"> 6 </td>
              <td align="left" colspan="1" rowspan="1"> 34.5 (34%) </td>
            </tr>
            <tr>
              <td align="left" colspan="1" rowspan="1"> 200 </td>
              <td align="left" colspan="1" rowspan="1"> 16 </td>
              <td align="left" colspan="1" rowspan="1"> 1 </td>
              <td align="left" colspan="1" rowspan="1"> 3 </td>
              <td align="left" colspan="1" rowspan="1"> 67.5 (33%) </td>
            </tr>
            <tr>
              <td align="left" colspan="1" rowspan="1"> 350 </td>
              <td align="left" colspan="1" rowspan="1"> 30 </td>
              <td align="left" colspan="1" rowspan="1"> 1 </td>
              <td align="left" colspan="1" rowspan="1"> 2 </td>
              <td align="left" colspan="1" rowspan="1"> 125.6 (35%) </td>
            </tr>
            <tr>
              <td align="left" colspan="1" rowspan="1"> 700 </td>
              <td align="left" colspan="1" rowspan="1"> 30 </td>
              <td align="left" colspan="1" rowspan="1"> 2 </td>
              <td align="left" colspan="1" rowspan="1"> 2 </td>
              <td align="left" colspan="1" rowspan="1"> 126.6 (18%) </td>
            </tr>
            <tr>
              <td align="left" colspan="1" rowspan="1"> 700 </td>
              <td align="left" colspan="1" rowspan="1"> 60 </td>
              <td align="left" colspan="1" rowspan="1"> 1 </td>
              <td align="left" colspan="1" rowspan="1"> 1 </td>
              <td align="left" colspan="1" rowspan="1"> 249.4 (35%) </td>
            </tr>
            <tr>
              <td align="left" colspan="1" rowspan="1"> 1024 </td>
              <td align="left" colspan="1" rowspan="1"> 30 </td>
              <td align="left" colspan="1" rowspan="1"> 3 </td>
              <td align="left" colspan="1" rowspan="1"> 2 </td>
              <td align="left" colspan="1" rowspan="1"> 127.5 (12%) </td>
            </tr>
            <tr>
              <td align="left" colspan="1" rowspan="1"> 1400 </td>
              <td align="left" colspan="1" rowspan="1"> 60 </td>
              <td align="left" colspan="1" rowspan="1"> 2 </td>
              <td align="left" colspan="1" rowspan="1"> 1 </td>
              <td align="left" colspan="1" rowspan="1"> 251.2 (17%) </td>
            </tr>
            <tr>
              <td align="left" colspan="1" rowspan="1"> 2048 </td>
              <td align="left" colspan="1" rowspan="1"> 30 </td>
              <td align="left" colspan="1" rowspan="1"> 6 </td>
              <td align="left" colspan="1" rowspan="1"> 2 </td>
              <td align="left" colspan="1" rowspan="1"> 130.3 ( 6%) </td>
            </tr>
            <tr>
              <td align="left" colspan="1" rowspan="1"> 2048 </td>
              <td align="left" colspan="1" rowspan="1"> 60 </td>
              <td align="left" colspan="1" rowspan="1"> 3 </td>
              <td align="left" colspan="1" rowspan="1"> 1 </td>
              <td align="left" colspan="1" rowspan="1"> 253.1 (12%) </td>
            </tr>
            <tr>
              <td align="left" colspan="1" rowspan="1"> 4096 </td>
              <td align="left" colspan="1" rowspan="1"> 30 </td>
              <td align="left" colspan="1" rowspan="1"> 12 </td>
              <td align="left" colspan="1" rowspan="1"> 2 </td>
              <td align="left" colspan="1" rowspan="1"> 135.9 ( 3%) </td>
            </tr>
            <tr>
              <td align="left" colspan="1" rowspan="1"> 4096 </td>
              <td align="left" colspan="1" rowspan="1"> 60 </td>
              <td align="left" colspan="1" rowspan="1"> 6 </td>
              <td align="left" colspan="1" rowspan="1"> 1 </td>
              <td align="left" colspan="1" rowspan="1"> 258.8 ( 6%) </td>
            </tr>
          </tbody>
        </table>
        <t indent="0" pn="section-3.2-17">
          Use of reduced-size RTCP <xref target="RFC5506" format="default" sectionFormat="of" derivedContent="RFC5506"/> would allow the SR
          and SDES packets to be omitted from some reports. These reduced-size
          RTCP packets would
          contain an RTCP RGRS packet from the non-reporting SSRC and an RTCP 
          SDES RGRP packet and a congestion control feedback packet from the 
          reporting SSRC. This will be 12 + 28 + 12 + 8 + (2 * Nv) + 8 + (2 * Na) octets, 
          plus the SRTCP trailer and authentication tag and a UDP/IP header.
          That is, the size of the reduced-size packets would be (110 + (2 * Nv) + (2 * Na)) / 2
          octets. Repeating the analysis above,
          but alternating compound and reduced-size reports, gives the results shown
          in <xref target="scenario2-compound-noncompound" format="default" sectionFormat="of" derivedContent="Table 6"/>.
        </t>
        <table anchor="scenario2-compound-noncompound" align="center" pn="table-6">
          <name slugifiedName="name-required-rtcp-bandwidth-repo">Required RTCP Bandwidth, Reporting on Every Frame, with Reduced-Size Reports</name>
          <thead>
            <tr>
              <th align="center" colspan="1" rowspan="1"> Data Rate (kbps) </th>
              <th align="center" colspan="1" rowspan="1"> Video Frame Rate: Rf </th>
              <th align="center" colspan="1" rowspan="1"> Video Packets per Report: Nv </th>
              <th align="center" colspan="1" rowspan="1"> Audio Packets per Report: Na </th>
              <th align="center" colspan="1" rowspan="1"> Required RTCP Bandwidth: Brtcp (kbps) </th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left" colspan="1" rowspan="1"> 100 </td>
              <td align="left" colspan="1" rowspan="1"> 8 </td>
              <td align="left" colspan="1" rowspan="1"> 1 </td>
              <td align="left" colspan="1" rowspan="1"> 6 </td>
              <td align="left" colspan="1" rowspan="1"> 25.0 (25%) </td>
            </tr>
            <tr>
              <td align="left" colspan="1" rowspan="1"> 200 </td>
              <td align="left" colspan="1" rowspan="1"> 16 </td>
              <td align="left" colspan="1" rowspan="1"> 1 </td>
              <td align="left" colspan="1" rowspan="1"> 3 </td>
              <td align="left" colspan="1" rowspan="1"> 48.5 (24%) </td>
            </tr>
            <tr>
              <td align="left" colspan="1" rowspan="1"> 350 </td>
              <td align="left" colspan="1" rowspan="1"> 30 </td>
              <td align="left" colspan="1" rowspan="1"> 1 </td>
              <td align="left" colspan="1" rowspan="1"> 2 </td>
              <td align="left" colspan="1" rowspan="1"> 90.0 (25%) </td>
            </tr>
            <tr>
              <td align="left" colspan="1" rowspan="1"> 700 </td>
              <td align="left" colspan="1" rowspan="1"> 30 </td>
              <td align="left" colspan="1" rowspan="1"> 2 </td>
              <td align="left" colspan="1" rowspan="1"> 2 </td>
              <td align="left" colspan="1" rowspan="1"> 90.9 (12%) </td>
            </tr>
            <tr>
              <td align="left" colspan="1" rowspan="1"> 700 </td>
              <td align="left" colspan="1" rowspan="1"> 60 </td>
              <td align="left" colspan="1" rowspan="1"> 1 </td>
              <td align="left" colspan="1" rowspan="1"> 1 </td>
              <td align="left" colspan="1" rowspan="1"> 178.1 (25%) </td>
            </tr>
            <tr>
              <td align="left" colspan="1" rowspan="1"> 1024 </td>
              <td align="left" colspan="1" rowspan="1"> 30 </td>
              <td align="left" colspan="1" rowspan="1"> 3 </td>
              <td align="left" colspan="1" rowspan="1"> 2 </td>
              <td align="left" colspan="1" rowspan="1"> 91.9 ( 8%) </td>
            </tr>
            <tr>
              <td align="left" colspan="1" rowspan="1"> 1400 </td>
              <td align="left" colspan="1" rowspan="1"> 60 </td>
              <td align="left" colspan="1" rowspan="1"> 2 </td>
              <td align="left" colspan="1" rowspan="1"> 1 </td>
              <td align="left" colspan="1" rowspan="1"> 180.0 (12%) </td>
            </tr>
            <tr>
              <td align="left" colspan="1" rowspan="1"> 2048 </td>
              <td align="left" colspan="1" rowspan="1"> 30 </td>
              <td align="left" colspan="1" rowspan="1"> 6 </td>
              <td align="left" colspan="1" rowspan="1"> 2 </td>
              <td align="left" colspan="1" rowspan="1"> 94.7 ( 4%) </td>
            </tr>
            <tr>
              <td align="left" colspan="1" rowspan="1"> 2048 </td>
              <td align="left" colspan="1" rowspan="1"> 60 </td>
              <td align="left" colspan="1" rowspan="1"> 3 </td>
              <td align="left" colspan="1" rowspan="1"> 1 </td>
              <td align="left" colspan="1" rowspan="1"> 181.9 ( 8%) </td>
            </tr>
            <tr>
              <td align="left" colspan="1" rowspan="1"> 4096 </td>
              <td align="left" colspan="1" rowspan="1"> 30 </td>
              <td align="left" colspan="1" rowspan="1"> 12 </td>
              <td align="left" colspan="1" rowspan="1"> 2 </td>
              <td align="left" colspan="1" rowspan="1"> 100.3 ( 2%) </td>
            </tr>
            <tr>
              <td align="left" colspan="1" rowspan="1"> 4096 </td>
              <td align="left" colspan="1" rowspan="1"> 60 </td>
              <td align="left" colspan="1" rowspan="1"> 6 </td>
              <td align="left" colspan="1" rowspan="1"> 1 </td>
              <td align="left" colspan="1" rowspan="1"> 187.5 ( 4%) </td>
            </tr>
          </tbody>
        </table>
        <t indent="0" pn="section-3.2-19">
          The use of reduced-size RTCP gives a noticeable reduction in the 
          needed RTCP bandwidth and can be combined with reporting every
          few frames, rather than every frame. Overall, it is clear that
          the RTCP overhead can be reasonable across the range of data and
          frame rates if RTCP is configured carefully.
        </t>
        <t indent="0" pn="section-3.2-20">
          As discussed in <xref target="sec-p2p-audio" format="default" sectionFormat="of" derivedContent="Section 3.1"/>, the reporting overhead will
          increase if IPv6 is used, due to the increased size of the IPv6
          header. <xref target="scenario2-compound-noncompound-ipv6" format="default" sectionFormat="of" derivedContent="Table 7"/> shows
          the overhead in this case, compared to 
          <xref target="scenario2-compound-noncompound" format="default" sectionFormat="of" derivedContent="Table 6"/>. As can be seen,
          the increase in overhead due to IPv6 rapidly becomes less significant as the data
          rate increases.
        </t>
        <table anchor="scenario2-compound-noncompound-ipv6" align="center" pn="table-7">
          <name slugifiedName="name-required-rtcp-bandwidth-repor">Required RTCP Bandwidth, Reporting on Every Frame, with Reduced-Size Reports, Using IPv6</name>
          <thead>
            <tr>
              <th align="center" colspan="1" rowspan="1"> Data Rate (kbps) </th>
              <th align="center" colspan="1" rowspan="1"> Video Frame Rate: Rf </th>
              <th align="center" colspan="1" rowspan="1"> Video Packets per Report: Nv </th>
              <th align="center" colspan="1" rowspan="1"> Audio Packets per Report: Na </th>
              <th align="center" colspan="1" rowspan="1"> Required RTCP Bandwidth: Brtcp (kbps) </th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left" colspan="1" rowspan="1"> 100 </td>
              <td align="left" colspan="1" rowspan="1"> 8 </td>
              <td align="left" colspan="1" rowspan="1"> 1 </td>
              <td align="left" colspan="1" rowspan="1"> 6 </td>
              <td align="left" colspan="1" rowspan="1"> 27.5 (27%) </td>
            </tr>
            <tr>
              <td align="left" colspan="1" rowspan="1"> 200 </td>
              <td align="left" colspan="1" rowspan="1"> 16 </td>
              <td align="left" colspan="1" rowspan="1"> 1 </td>
              <td align="left" colspan="1" rowspan="1"> 3 </td>
              <td align="left" colspan="1" rowspan="1"> 53.5 (26%) </td>
            </tr>
            <tr>
              <td align="left" colspan="1" rowspan="1"> 350 </td>
              <td align="left" colspan="1" rowspan="1"> 30 </td>
              <td align="left" colspan="1" rowspan="1"> 1 </td>
              <td align="left" colspan="1" rowspan="1"> 2 </td>
              <td align="left" colspan="1" rowspan="1"> 99.4 (28%) </td>
            </tr>
            <tr>
              <td align="left" colspan="1" rowspan="1"> 700 </td>
              <td align="left" colspan="1" rowspan="1"> 30 </td>
              <td align="left" colspan="1" rowspan="1"> 2 </td>
              <td align="left" colspan="1" rowspan="1"> 2 </td>
              <td align="left" colspan="1" rowspan="1"> 100.3 (14%) </td>
            </tr>
            <tr>
              <td align="left" colspan="1" rowspan="1"> 700 </td>
              <td align="left" colspan="1" rowspan="1"> 60 </td>
              <td align="left" colspan="1" rowspan="1"> 1 </td>
              <td align="left" colspan="1" rowspan="1"> 1 </td>
              <td align="left" colspan="1" rowspan="1"> 196.9 (28%) </td>
            </tr>
            <tr>
              <td align="left" colspan="1" rowspan="1"> 1024 </td>
              <td align="left" colspan="1" rowspan="1"> 30 </td>
              <td align="left" colspan="1" rowspan="1"> 3 </td>
              <td align="left" colspan="1" rowspan="1"> 2 </td>
              <td align="left" colspan="1" rowspan="1"> 101.2 ( 9%) </td>
            </tr>
            <tr>
              <td align="left" colspan="1" rowspan="1"> 1400 </td>
              <td align="left" colspan="1" rowspan="1"> 60 </td>
              <td align="left" colspan="1" rowspan="1"> 2 </td>
              <td align="left" colspan="1" rowspan="1"> 1 </td>
              <td align="left" colspan="1" rowspan="1"> 198.8 (14%) </td>
            </tr>
            <tr>
              <td align="left" colspan="1" rowspan="1"> 2048 </td>
              <td align="left" colspan="1" rowspan="1"> 30 </td>
              <td align="left" colspan="1" rowspan="1"> 6 </td>
              <td align="left" colspan="1" rowspan="1"> 2 </td>
              <td align="left" colspan="1" rowspan="1"> 104.1 ( 5%) </td>
            </tr>
            <tr>
              <td align="left" colspan="1" rowspan="1"> 2048 </td>
              <td align="left" colspan="1" rowspan="1"> 60 </td>
              <td align="left" colspan="1" rowspan="1"> 3 </td>
              <td align="left" colspan="1" rowspan="1"> 1 </td>
              <td align="left" colspan="1" rowspan="1"> 200.6 ( 9%) </td>
            </tr>
            <tr>
              <td align="left" colspan="1" rowspan="1"> 4096 </td>
              <td align="left" colspan="1" rowspan="1"> 30 </td>
              <td align="left" colspan="1" rowspan="1"> 12 </td>
              <td align="left" colspan="1" rowspan="1"> 2 </td>
              <td align="left" colspan="1" rowspan="1"> 109.7 ( 2%) </td>
            </tr>
            <tr>
              <td align="left" colspan="1" rowspan="1"> 4096 </td>
              <td align="left" colspan="1" rowspan="1"> 60 </td>
              <td align="left" colspan="1" rowspan="1"> 6 </td>
              <td align="left" colspan="1" rowspan="1"> 1 </td>
              <td align="left" colspan="1" rowspan="1"> 206.2 ( 5%) </td>
            </tr>
          </tbody>
        </table>
      </section>
    </section>
    <section numbered="true" removeInRFC="false" toc="include" pn="section-4">
      <name slugifiedName="name-discussion-and-conclusions">Discussion and Conclusions</name>
      <t indent="0" pn="section-4-1">
        Practical systems will generally send some non-media traffic on the
        same path as the media traffic. This can include Session Traversal Utilities for NAT (STUN) / Traversal Using Relays around NAT (TURN) packets
        to keep alive NAT bindings <xref target="RFC8445" format="default" sectionFormat="of" derivedContent="RFC8445"/>, WebRTC data
        channel packets <xref target="RFC8831" format="default" sectionFormat="of" derivedContent="RFC8831"/>, etc. Such traffic also
        needs congestion control, but the means by which this is achieved
        is out of the scope of this memo. 
      </t>
      <t indent="0" pn="section-4-2">
        RTCP, as it is currently specified, cannot be used to send per-packet
        congestion feedback with reasonable overhead. 
      </t>
      <t indent="0" pn="section-4-3">
        RTCP can, however, be used to send congestion 
        feedback on each frame of video sent, provided the session bandwidth
        exceeds a couple of megabits per second (the exact rate depends on
        the number of session participants, the RTCP bandwidth fraction,
        what RTCP extensions are enabled, and how much detail of feedback is 
        needed). For lower-rate sessions, the overhead of reporting on every
        frame becomes high but can be reduced to something reasonable by
        sending reports once per N frames (e.g., every second frame) or by
        sending reduced-size RTCP reports in between the regular reports.
        The improved compression of new video codecs exacerbates the
        reporting overhead for a given video quality level, although this
        is to some extent countered by the use of higher-quality video
        over time.
      </t>
      <t indent="0" pn="section-4-4">
        If it is desired to use RTCP in something close to its current form 
        for congestion feedback in WebRTC, the multimedia congestion control 
        algorithm needs to be designed to work with feedback sent every few
        frames, since that fits within the limitations of RTCP. The provided feedback
        will be more detailed than just an acknowledgement, however, and will provide
        a loss bitmap, relative arrival time, and received Explicit Congestion Notification (ECN) marks for each
        packet sent. This will allow congestion control 
        that is effective, if slowly responsive, to be implemented (there is
        guidance on providing effective congestion control in <xref target="RFC8085" section="3.1" sectionFormat="of" format="default" derivedLink="https://rfc-editor.org/rfc/rfc8085#section-3.1" derivedContent="RFC8085"/>). 
      </t>
      <t indent="0" pn="section-4-5">
        The format described in <xref target="RFC8888" format="default" sectionFormat="of" derivedContent="RFC8888"/>
        seems sufficient for the needs of congestion control feedback. There
        is little point optimizing this format; the main overhead comes from
        the UDP/IP headers and the other RTCP packets included in the compound
        packets and can be lowered by using the extensions described in 
        <xref target="RFC5506" format="default" sectionFormat="of" derivedContent="RFC5506"/> and sending reports less frequently. The use of header
        compression <xref target="RFC2508" format="default" sectionFormat="of" derivedContent="RFC2508"/> <xref target="RFC3545" format="default" sectionFormat="of" derivedContent="RFC3545"/>
        <xref target="RFC5795" format="default" sectionFormat="of" derivedContent="RFC5795"/> can also be beneficial.
      </t>
      <t indent="0" pn="section-4-6">
        Further study of the scenarios of interest is needed to ensure that
        the analysis presented is applicable to other media topologies
        <xref target="RFC7667" format="default" sectionFormat="of" derivedContent="RFC7667"/> and to sessions with different data rates
        and sizes of membership.
      </t>
    </section>
    <section numbered="true" removeInRFC="false" toc="include" pn="section-5">
      <name slugifiedName="name-security-considerations">Security Considerations</name>
      <t indent="0" pn="section-5-1">
        An attacker that can modify or spoof RTCP congestion control feedback
        packets can manipulate the sender behavior to cause denial of service. 
        This can be prevented by authentication and integrity protection of
        RTCP packets, for example, using the secure RTP profile 
        <xref target="RFC3711" format="default" sectionFormat="of" derivedContent="RFC3711"/> <xref target="RFC5124" format="default" sectionFormat="of" derivedContent="RFC5124"/> or other means
        as discussed in <xref target="RFC7201" format="default" sectionFormat="of" derivedContent="RFC7201"/>.
      </t>
    </section>
    <section numbered="true" removeInRFC="false" toc="include" pn="section-6">
      <name slugifiedName="name-iana-considerations">IANA Considerations</name>
      <t indent="0" pn="section-6-1">
	This document has no IANA actions.
      </t>
    </section>
  </middle>
  <back>
    <references pn="section-7">
      <name slugifiedName="name-normative-references">Normative References</name>
      <reference anchor="RFC2914" target="https://www.rfc-editor.org/info/rfc2914" quoteTitle="true" derivedAnchor="RFC2914">
        <front>
          <title>Congestion Control Principles</title>
          <author fullname="S. Floyd" initials="S." surname="Floyd"/>
          <date month="September" year="2000"/>
          <abstract>
            <t indent="0">The goal of this document is to explain the need for congestion control in the Internet, and to discuss what constitutes correct congestion control.  This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
          </abstract>
        </front>
        <seriesInfo name="BCP" value="41"/>
        <seriesInfo name="RFC" value="2914"/>
        <seriesInfo name="DOI" value="10.17487/RFC2914"/>
      </reference>
      <reference anchor="RFC3550" target="https://www.rfc-editor.org/info/rfc3550" quoteTitle="true" derivedAnchor="RFC3550">
        <front>
          <title>RTP: A Transport Protocol for Real-Time Applications</title>
          <author fullname="H. Schulzrinne" initials="H." surname="Schulzrinne"/>
          <author fullname="S. Casner" initials="S." surname="Casner"/>
          <author fullname="R. Frederick" initials="R." surname="Frederick"/>
          <author fullname="V. Jacobson" initials="V." surname="Jacobson"/>
          <date month="July" year="2003"/>
          <abstract>
            <t indent="0">This 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]</t>
          </abstract>
        </front>
        <seriesInfo name="STD" value="64"/>
        <seriesInfo name="RFC" value="3550"/>
        <seriesInfo name="DOI" value="10.17487/RFC3550"/>
      </reference>
      <reference anchor="RFC3711" target="https://www.rfc-editor.org/info/rfc3711" quoteTitle="true" derivedAnchor="RFC3711">
        <front>
          <title>The Secure Real-time Transport Protocol (SRTP)</title>
          <author fullname="M. Baugher" initials="M." surname="Baugher"/>
          <author fullname="D. McGrew" initials="D." surname="McGrew"/>
          <author fullname="M. Naslund" initials="M." surname="Naslund"/>
          <author fullname="E. Carrara" initials="E." surname="Carrara"/>
          <author fullname="K. Norrman" initials="K." surname="Norrman"/>
          <date month="March" year="2004"/>
          <abstract>
            <t indent="0">This document describes the Secure Real-time Transport Protocol (SRTP), a profile of the Real-time Transport Protocol (RTP), which can provide confidentiality, message authentication, and replay protection to the RTP traffic and to the control traffic for RTP, the Real-time Transport Control Protocol (RTCP). [STANDARDS-TRACK]</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="3711"/>
        <seriesInfo name="DOI" value="10.17487/RFC3711"/>
      </reference>
      <reference anchor="RFC4585" target="https://www.rfc-editor.org/info/rfc4585" quoteTitle="true" derivedAnchor="RFC4585">
        <front>
          <title>Extended RTP Profile for Real-time Transport Control Protocol (RTCP)-Based Feedback (RTP/AVPF)</title>
          <author fullname="J. Ott" initials="J." surname="Ott"/>
          <author fullname="S. Wenger" initials="S." surname="Wenger"/>
          <author fullname="N. Sato" initials="N." surname="Sato"/>
          <author fullname="C. Burmeister" initials="C." surname="Burmeister"/>
          <author fullname="J. Rey" initials="J." surname="Rey"/>
          <date month="July" year="2006"/>
          <abstract>
            <t indent="0">Real-time media streams that use RTP are, to some degree, resilient against packet losses.  Receivers may use the base mechanisms of the Real-time Transport Control Protocol (RTCP) to report packet reception statistics and thus allow a sender to adapt its transmission behavior in the mid-term.  This is the sole means for feedback and feedback-based error repair (besides a few codec-specific mechanisms).  This document defines an extension to the Audio-visual Profile (AVP) that enables receivers to provide, statistically, more immediate feedback to the senders and thus allows for short-term adaptation and efficient feedback-based repair mechanisms to be implemented.  This early feedback profile (AVPF) maintains the AVP bandwidth constraints for RTCP and preserves scalability to large groups. [STANDARDS-TRACK]</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="4585"/>
        <seriesInfo name="DOI" value="10.17487/RFC4585"/>
      </reference>
      <reference anchor="RFC5124" target="https://www.rfc-editor.org/info/rfc5124" quoteTitle="true" derivedAnchor="RFC5124">
        <front>
          <title>Extended Secure RTP Profile for Real-time Transport Control Protocol (RTCP)-Based Feedback (RTP/SAVPF)</title>
          <author fullname="J. Ott" initials="J." surname="Ott"/>
          <author fullname="E. Carrara" initials="E." surname="Carrara"/>
          <date month="February" year="2008"/>
          <abstract>
            <t indent="0">An RTP profile (SAVP) for secure real-time communications and another profile (AVPF) to provide timely feedback from the receivers to a sender are defined in RFC 3711 and RFC 4585, respectively.  This memo specifies the combination of both profiles to enable secure RTP communications with feedback. [STANDARDS-TRACK]</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="5124"/>
        <seriesInfo name="DOI" value="10.17487/RFC5124"/>
      </reference>
      <reference anchor="RFC5506" target="https://www.rfc-editor.org/info/rfc5506" quoteTitle="true" derivedAnchor="RFC5506">
        <front>
          <title>Support for Reduced-Size Real-Time Transport Control Protocol (RTCP): Opportunities and Consequences</title>
          <author fullname="I. Johansson" initials="I." surname="Johansson"/>
          <author fullname="M. Westerlund" initials="M." surname="Westerlund"/>
          <date month="April" year="2009"/>
          <abstract>
            <t indent="0">This memo discusses benefits and issues that arise when allowing Real-time Transport Protocol (RTCP) packets to be transmitted with reduced size.  The size can be reduced if the rules on how to create compound packets outlined in RFC 3550 are removed or changed.  Based on that analysis, this memo defines certain changes to the rules to allow feedback messages to be sent as Reduced-Size RTCP packets under certain conditions when using the RTP/AVPF (Real-time Transport Protocol / Audio-Visual Profile with Feedback) profile (RFC 4585).  This document updates RFC 3550, RFC 3711, and RFC 4585. [STANDARDS-TRACK]</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="5506"/>
        <seriesInfo name="DOI" value="10.17487/RFC5506"/>
      </reference>
      <reference anchor="RFC7022" target="https://www.rfc-editor.org/info/rfc7022" quoteTitle="true" derivedAnchor="RFC7022">
        <front>
          <title>Guidelines for Choosing RTP Control Protocol (RTCP) Canonical Names (CNAMEs)</title>
          <author fullname="A. Begen" initials="A." surname="Begen"/>
          <author fullname="C. Perkins" initials="C." surname="Perkins"/>
          <author fullname="D. Wing" initials="D." surname="Wing"/>
          <author fullname="E. Rescorla" initials="E." surname="Rescorla"/>
          <date month="September" year="2013"/>
          <abstract>
            <t indent="0">The RTP Control Protocol (RTCP) Canonical Name (CNAME) is a persistent transport-level identifier for an RTP endpoint. While the Synchronization Source (SSRC) identifier of an RTP endpoint may change if a collision is detected or when the RTP application is restarted, its RTCP CNAME is meant to stay unchanged, so that RTP endpoints can be uniquely identified and associated with their RTP media streams.</t>
            <t indent="0">For proper functionality, RTCP CNAMEs should be unique within the participants of an RTP session. However, the existing guidelines for choosing the RTCP CNAME provided in the RTP standard (RFC 3550) are insufficient to achieve this uniqueness. RFC 6222 was published to update those guidelines to allow endpoints to choose unique RTCP CNAMEs. Unfortunately, later investigations showed that some parts of the new algorithms were unnecessarily complicated and/or ineffective. This document addresses these concerns and replaces RFC 6222.</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="7022"/>
        <seriesInfo name="DOI" value="10.17487/RFC7022"/>
      </reference>
      <reference anchor="RFC7201" target="https://www.rfc-editor.org/info/rfc7201" quoteTitle="true" derivedAnchor="RFC7201">
        <front>
          <title>Options for Securing RTP Sessions</title>
          <author fullname="M. Westerlund" initials="M." surname="Westerlund"/>
          <author fullname="C. Perkins" initials="C." surname="Perkins"/>
          <date month="April" year="2014"/>
          <abstract>
            <t indent="0">The Real-time Transport Protocol (RTP) is used in a large number of different application domains and environments.  This heterogeneity implies that different security mechanisms are needed to provide services such as confidentiality, integrity, and source authentication of RTP and RTP Control Protocol (RTCP) packets suitable for the various environments.  The range of solutions makes it difficult for RTP-based application developers to pick the most suitable mechanism.  This document provides an overview of a number of security solutions for RTP and gives guidance for developers on how to choose the appropriate security mechanism.</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="7201"/>
        <seriesInfo name="DOI" value="10.17487/RFC7201"/>
      </reference>
      <reference anchor="RFC8083" target="https://www.rfc-editor.org/info/rfc8083" quoteTitle="true" derivedAnchor="RFC8083">
        <front>
          <title>Multimedia Congestion Control: Circuit Breakers for Unicast RTP Sessions</title>
          <author fullname="C. Perkins" initials="C." surname="Perkins"/>
          <author fullname="V. Singh" initials="V." surname="Singh"/>
          <date month="March" year="2017"/>
          <abstract>
            <t indent="0">The Real-time Transport Protocol (RTP) is widely used in telephony, video conferencing, and telepresence applications. Such applications are often run on best-effort UDP/IP networks. If congestion control is not implemented in these applications, then network congestion can lead to uncontrolled packet loss and a resulting deterioration of the user's multimedia experience. The congestion control algorithm acts as a safety measure by stopping RTP flows from using excessive resources and protecting the network from overload. At the time of this writing, however, while there are several proprietary solutions, there is no standard algorithm for congestion control of interactive RTP flows.</t>
            <t indent="0">This document does not propose a congestion control algorithm. It instead defines a minimal set of RTP circuit breakers: conditions under which an RTP sender needs to stop transmitting media data to protect the network from excessive congestion. It is expected that, in the absence of long-lived excessive congestion, RTP applications running on best-effort IP networks will be able to operate without triggering these circuit breakers. To avoid triggering the RTP circuit breaker, any Standards Track congestion control algorithms defined for RTP will need to operate within the envelope set by these RTP circuit breaker algorithms.</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="8083"/>
        <seriesInfo name="DOI" value="10.17487/RFC8083"/>
      </reference>
      <reference anchor="RFC8085" target="https://www.rfc-editor.org/info/rfc8085" quoteTitle="true" derivedAnchor="RFC8085">
        <front>
          <title>UDP Usage Guidelines</title>
          <author fullname="L. Eggert" initials="L." surname="Eggert"/>
          <author fullname="G. Fairhurst" initials="G." surname="Fairhurst"/>
          <author fullname="G. Shepherd" initials="G." surname="Shepherd"/>
          <date month="March" year="2017"/>
          <abstract>
            <t indent="0">The 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 Explicit Congestion Notification (ECN), Differentiated Services Code Points (DSCPs), and ports.</t>
            <t indent="0">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.</t>
            <t indent="0">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.</t>
            <t indent="0">This document obsoletes RFC 5405 and adds guidelines for multicast UDP usage.</t>
          </abstract>
        </front>
        <seriesInfo name="BCP" value="145"/>
        <seriesInfo name="RFC" value="8085"/>
        <seriesInfo name="DOI" value="10.17487/RFC8085"/>
      </reference>
      <reference anchor="RFC8108" target="https://www.rfc-editor.org/info/rfc8108" quoteTitle="true" derivedAnchor="RFC8108">
        <front>
          <title>Sending Multiple RTP Streams in a Single RTP Session</title>
          <author fullname="J. Lennox" initials="J." surname="Lennox"/>
          <author fullname="M. Westerlund" initials="M." surname="Westerlund"/>
          <author fullname="Q. Wu" initials="Q." surname="Wu"/>
          <author fullname="C. Perkins" initials="C." surname="Perkins"/>
          <date month="March" year="2017"/>
          <abstract>
            <t indent="0">This memo expands and clarifies the behavior of Real-time Transport Protocol (RTP) endpoints that use multiple synchronization sources (SSRCs).  This occurs, for example, when an endpoint sends multiple RTP streams in a single RTP session.  This memo updates RFC 3550 with regard to handling multiple SSRCs per endpoint in RTP sessions, with a particular focus on RTP Control Protocol (RTCP) behavior.  It also updates RFC 4585 to change and clarify the calculation of the timeout of SSRCs and the inclusion of feedback messages.</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="8108"/>
        <seriesInfo name="DOI" value="10.17487/RFC8108"/>
      </reference>
      <reference anchor="RFC8825" target="https://www.rfc-editor.org/info/rfc8825" quoteTitle="true" derivedAnchor="RFC8825">
        <front>
          <title>Overview: Real-Time Protocols for Browser-Based Applications</title>
          <author fullname="H. Alvestrand" initials="H." surname="Alvestrand"/>
          <date month="January" year="2021"/>
          <abstract>
            <t indent="0">This document gives an overview and context of a protocol suite intended for use with real-time applications that can be deployed in browsers -- "real-time communication on the Web".</t>
            <t indent="0">It intends to serve as a starting and coordination point to make sure that (1) all the parts that are needed to achieve this goal are findable and (2) the parts that belong in the Internet protocol suite are fully specified and on the right publication track.</t>
            <t indent="0">This document is an applicability statement -- it does not itself specify any protocol, but it specifies which other specifications implementations are supposed to follow to be compliant with Web Real-Time Communication (WebRTC).</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="8825"/>
        <seriesInfo name="DOI" value="10.17487/RFC8825"/>
      </reference>
      <reference anchor="RFC8834" target="https://www.rfc-editor.org/info/rfc8834" quoteTitle="true" derivedAnchor="RFC8834">
        <front>
          <title>Media Transport and Use of RTP in WebRTC</title>
          <author fullname="C. Perkins" initials="C." surname="Perkins"/>
          <author fullname="M. Westerlund" initials="M." surname="Westerlund"/>
          <author fullname="J. Ott" initials="J." surname="Ott"/>
          <date month="January" year="2021"/>
          <abstract>
            <t indent="0">The framework for Web Real-Time Communication (WebRTC) provides support for direct interactive rich communication using audio, video, text, collaboration, games, etc.  between two peers' web browsers.  This memo describes the media transport aspects of the WebRTC framework.  It specifies how the Real-time Transport Protocol (RTP) is used in the WebRTC context and gives requirements for which RTP features, profiles, and extensions need to be supported.</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="8834"/>
        <seriesInfo name="DOI" value="10.17487/RFC8834"/>
      </reference>
      <reference anchor="RFC8861" target="https://www.rfc-editor.org/info/rfc8861" quoteTitle="true" derivedAnchor="RFC8861">
        <front>
          <title>Sending Multiple RTP Streams in a Single RTP Session: Grouping RTP Control Protocol (RTCP) Reception Statistics and Other Feedback</title>
          <author fullname="J. Lennox" initials="J." surname="Lennox"/>
          <author fullname="M. Westerlund" initials="M." surname="Westerlund"/>
          <author fullname="Q. Wu" initials="Q." surname="Wu"/>
          <author fullname="C. Perkins" initials="C." surname="Perkins"/>
          <date month="January" year="2021"/>
          <abstract>
            <t indent="0">RTP allows multiple RTP streams to be sent in a single session but requires each Synchronization Source (SSRC) to send RTP Control Protocol (RTCP) reception quality reports for every other SSRC visible in the session.  This causes the number of RTCP reception reports to grow with the number of SSRCs, rather than the number of endpoints.  In many cases, most of these RTCP reception reports are unnecessary, since all SSRCs of an endpoint are normally co-located and see the same reception quality.  This memo defines a Reporting Group extension to RTCP to reduce the reporting overhead in such scenarios.</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="8861"/>
        <seriesInfo name="DOI" value="10.17487/RFC8861"/>
      </reference>
      <reference anchor="RFC8872" target="https://www.rfc-editor.org/info/rfc8872" quoteTitle="true" derivedAnchor="RFC8872">
        <front>
          <title>Guidelines for Using the Multiplexing Features of RTP to Support Multiple Media Streams</title>
          <author fullname="M. Westerlund" initials="M." surname="Westerlund"/>
          <author fullname="B. Burman" initials="B." surname="Burman"/>
          <author fullname="C. Perkins" initials="C." surname="Perkins"/>
          <author fullname="H. Alvestrand" initials="H." surname="Alvestrand"/>
          <author fullname="R. Even" initials="R." surname="Even"/>
          <date month="January" year="2021"/>
          <abstract>
            <t indent="0">The Real-time Transport Protocol (RTP) is a flexible protocol that can be used in a wide range of applications, networks, and system topologies.  That flexibility makes for wide applicability but can complicate the application design process.  One particular design question that has received much attention is how to support multiple media streams in RTP.  This memo discusses the available options and design trade-offs, and provides guidelines on how to use the multiplexing features of RTP to support multiple media streams.</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="8872"/>
        <seriesInfo name="DOI" value="10.17487/RFC8872"/>
      </reference>
      <reference anchor="RFC8888" target="https://www.rfc-editor.org/info/rfc8888" quoteTitle="true" derivedAnchor="RFC8888">
        <front>
          <title>RTP Control Protocol (RTCP) Feedback for Congestion Control</title>
          <author fullname="Z. Sarker" initials="Z." surname="Sarker"/>
          <author fullname="C. Perkins" initials="C." surname="Perkins"/>
          <author fullname="V. Singh" initials="V." surname="Singh"/>
          <author fullname="M. Ramalho" initials="M." surname="Ramalho"/>
          <date month="January" year="2021"/>
          <abstract>
            <t indent="0">An effective RTP congestion control algorithm requires more fine-grained feedback on packet loss, timing, and Explicit Congestion Notification (ECN) marks than is provided by the standard RTP Control Protocol (RTCP) Sender Report (SR) and Receiver Report (RR) packets.  This document describes an RTCP feedback message intended to enable congestion control for interactive real-time traffic using RTP.  The feedback message is designed for use with a sender-based congestion control algorithm, in which the receiver of an RTP flow sends back to the sender RTCP feedback packets containing the information the sender needs to perform congestion control.</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="8888"/>
        <seriesInfo name="DOI" value="10.17487/RFC8888"/>
      </reference>
    </references>
    <references pn="section-8">
      <name slugifiedName="name-informative-references">Informative References</name>
      <reference anchor="RFC2508" target="https://www.rfc-editor.org/info/rfc2508" quoteTitle="true" derivedAnchor="RFC2508">
        <front>
          <title>Compressing IP/UDP/RTP Headers for Low-Speed Serial Links</title>
          <author fullname="S. Casner" initials="S." surname="Casner"/>
          <author fullname="V. Jacobson" initials="V." surname="Jacobson"/>
          <date month="February" year="1999"/>
          <abstract>
            <t indent="0">This document describes a method for compressing the headers of IP/UDP/RTP datagrams to reduce overhead on low-speed serial links. [STANDARDS-TRACK]</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="2508"/>
        <seriesInfo name="DOI" value="10.17487/RFC2508"/>
      </reference>
      <reference anchor="RFC3449" target="https://www.rfc-editor.org/info/rfc3449" quoteTitle="true" derivedAnchor="RFC3449">
        <front>
          <title>TCP Performance Implications of Network Path Asymmetry</title>
          <author fullname="H. Balakrishnan" initials="H." surname="Balakrishnan"/>
          <author fullname="V. Padmanabhan" initials="V." surname="Padmanabhan"/>
          <author fullname="G. Fairhurst" initials="G." surname="Fairhurst"/>
          <author fullname="M. Sooriyabandara" initials="M." surname="Sooriyabandara"/>
          <date month="December" year="2002"/>
          <abstract>
            <t indent="0">This document describes TCP performance problems that arise because of asymmetric effects.  These problems arise in several access networks, including bandwidth-asymmetric networks and packet radio subnetworks, for different underlying reasons.  However, the end result on TCP performance is the same in both cases: performance often degrades significantly because of imperfection and variability in the ACK feedback from the receiver to the sender.  The document details several mitigations to these effects, which have either been proposed or evaluated in the literature, or are currently deployed in networks.  These solutions use a combination of local link- layer techniques, subnetwork, and end-to-end mechanisms, consisting of: (i) techniques to manage the channel used for the upstream bottleneck link carrying the ACKs, typically using header compression or reducing the frequency of TCP ACKs, (ii) techniques to handle this reduced ACK frequency to retain the TCP sender's acknowledgment-triggered self- clocking and (iii) techniques to schedule the data and ACK packets in the reverse direction to improve performance in the presence of two-way traffic.  Each technique is described, together with known issues, and recommendations for use.  A summary of the recommendations is provided at the end of the document.  This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
          </abstract>
        </front>
        <seriesInfo name="BCP" value="69"/>
        <seriesInfo name="RFC" value="3449"/>
        <seriesInfo name="DOI" value="10.17487/RFC3449"/>
      </reference>
      <reference anchor="RFC3545" target="https://www.rfc-editor.org/info/rfc3545" quoteTitle="true" derivedAnchor="RFC3545">
        <front>
          <title>Enhanced Compressed RTP (CRTP) for Links with High Delay, Packet Loss and Reordering</title>
          <author fullname="T. Koren" initials="T." surname="Koren"/>
          <author fullname="S. Casner" initials="S." surname="Casner"/>
          <author fullname="J. Geevarghese" initials="J." surname="Geevarghese"/>
          <author fullname="B. Thompson" initials="B." surname="Thompson"/>
          <author fullname="P. Ruddy" initials="P." surname="Ruddy"/>
          <date month="July" year="2003"/>
          <abstract>
            <t indent="0">This document describes a header compression scheme for point to point links with packet loss and long delays.  It is based on Compressed Real-time Transport Protocol (CRTP), the IP/UDP/RTP header compression described in RFC 2508.  CRTP does not perform well on such links: packet loss results in context corruption and due to the long delay, many more packets are discarded before the context is repaired.  To correct the behavior of CRTP over such links, a few extensions to the protocol are specified here.  The extensions aim to reduce context corruption by changing the way the compressor updates the context at the decompressor: updates are repeated and include updates to full and differential context parameters.  With these extensions, CRTP performs well over links with packet loss, packet reordering and long delays. [STANDARDS-TRACK]</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="3545"/>
        <seriesInfo name="DOI" value="10.17487/RFC3545"/>
      </reference>
      <reference anchor="RFC3611" target="https://www.rfc-editor.org/info/rfc3611" quoteTitle="true" derivedAnchor="RFC3611">
        <front>
          <title>RTP Control Protocol Extended Reports (RTCP XR)</title>
          <author fullname="T. Friedman" initials="T." role="editor" surname="Friedman"/>
          <author fullname="R. Caceres" initials="R." role="editor" surname="Caceres"/>
          <author fullname="A. Clark" initials="A." role="editor" surname="Clark"/>
          <date month="November" year="2003"/>
          <abstract>
            <t indent="0">This document defines the Extended Report (XR) packet type for the RTP Control Protocol (RTCP), and defines how the use of XR packets can be signaled by an application if it employs the Session Description Protocol (SDP).  XR packets are composed of report blocks, and seven block types are defined here.  The purpose of the extended reporting format is to convey information that supplements the six statistics that are contained in the report blocks used by RTCP's Sender Report (SR) and Receiver Report (RR) packets.  Some applications, such as multicast inference of network characteristics (MINC) or voice over IP (VoIP) monitoring, require other and more detailed statistics.  In addition to the block types defined here, additional block types may be defined in the future by adhering to the framework that this document provides.</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="3611"/>
        <seriesInfo name="DOI" value="10.17487/RFC3611"/>
      </reference>
      <reference anchor="RFC5348" target="https://www.rfc-editor.org/info/rfc5348" quoteTitle="true" derivedAnchor="RFC5348">
        <front>
          <title>TCP Friendly Rate Control (TFRC): Protocol Specification</title>
          <author fullname="S. Floyd" initials="S." surname="Floyd"/>
          <author fullname="M. Handley" initials="M." surname="Handley"/>
          <author fullname="J. Padhye" initials="J." surname="Padhye"/>
          <author fullname="J. Widmer" initials="J." surname="Widmer"/>
          <date month="September" year="2008"/>
          <abstract>
            <t indent="0">This document specifies TCP Friendly Rate Control (TFRC). TFRC is a congestion control mechanism for unicast flows operating in a best-effort Internet environment. It is reasonably fair when competing for bandwidth with TCP flows, but has a much lower variation of throughput over time compared with TCP, making it more suitable for applications such as streaming media where a relatively smooth sending rate is of importance.</t>
            <t indent="0">This document obsoletes RFC 3448 and updates RFC 4342. [STANDARDS-TRACK]</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="5348"/>
        <seriesInfo name="DOI" value="10.17487/RFC5348"/>
      </reference>
      <reference anchor="RFC5795" target="https://www.rfc-editor.org/info/rfc5795" quoteTitle="true" derivedAnchor="RFC5795">
        <front>
          <title>The RObust Header Compression (ROHC) Framework</title>
          <author fullname="K. Sandlund" initials="K." surname="Sandlund"/>
          <author fullname="G. Pelletier" initials="G." surname="Pelletier"/>
          <author fullname="L-E. Jonsson" surname="L-E. Jonsson"/>
          <date month="March" year="2010"/>
          <abstract>
            <t indent="0">The Robust Header Compression (ROHC) protocol provides an efficient, flexible, and future-proof header compression concept. It is designed to operate efficiently and robustly over various link technologies with different characteristics.</t>
            <t indent="0">The ROHC framework, along with a set of compression profiles, was initially defined in RFC 3095. To improve and simplify the ROHC specifications, this document explicitly defines the ROHC framework and the profile for uncompressed separately. More specifically, the definition of the framework does not modify or update the definition of the framework specified by RFC 3095.</t>
            <t indent="0">This specification obsoletes RFC 4995. It fixes one interoperability issue that was erroneously introduced in RFC 4995, and adds some minor clarifications. [STANDARDS-TRACK]</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="5795"/>
        <seriesInfo name="DOI" value="10.17487/RFC5795"/>
      </reference>
      <reference anchor="RFC7667" target="https://www.rfc-editor.org/info/rfc7667" quoteTitle="true" derivedAnchor="RFC7667">
        <front>
          <title>RTP Topologies</title>
          <author fullname="M. Westerlund" initials="M." surname="Westerlund"/>
          <author fullname="S. Wenger" initials="S." surname="Wenger"/>
          <date month="November" year="2015"/>
          <abstract>
            <t indent="0">This document discusses point-to-point and multi-endpoint topologies used in environments based on the Real-time Transport Protocol (RTP).  In particular, centralized topologies commonly employed in the video conferencing industry are mapped to the RTP terminology.</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="7667"/>
        <seriesInfo name="DOI" value="10.17487/RFC7667"/>
      </reference>
      <reference anchor="RFC8445" target="https://www.rfc-editor.org/info/rfc8445" quoteTitle="true" derivedAnchor="RFC8445">
        <front>
          <title>Interactive Connectivity Establishment (ICE): A Protocol for Network Address Translator (NAT) Traversal</title>
          <author fullname="A. Keranen" initials="A." surname="Keranen"/>
          <author fullname="C. Holmberg" initials="C." surname="Holmberg"/>
          <author fullname="J. Rosenberg" initials="J." surname="Rosenberg"/>
          <date month="July" year="2018"/>
          <abstract>
            <t indent="0">This document describes a protocol for Network Address Translator (NAT) traversal for UDP-based communication. This protocol is called Interactive Connectivity Establishment (ICE). ICE makes use of the Session Traversal Utilities for NAT (STUN) protocol and its extension, Traversal Using Relay NAT (TURN).</t>
            <t indent="0">This document obsoletes RFC 5245.</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="8445"/>
        <seriesInfo name="DOI" value="10.17487/RFC8445"/>
      </reference>
      <reference anchor="RFC8831" target="https://www.rfc-editor.org/info/rfc8831" quoteTitle="true" derivedAnchor="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 indent="0">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="RFC9293" target="https://www.rfc-editor.org/info/rfc9293" quoteTitle="true" derivedAnchor="RFC9293">
        <front>
          <title>Transmission Control Protocol (TCP)</title>
          <author fullname="W. Eddy" initials="W." role="editor" surname="Eddy"/>
          <date month="August" year="2022"/>
          <abstract>
            <t indent="0">This document specifies the Transmission Control Protocol (TCP).  TCP is an important transport-layer protocol in the Internet protocol stack, and it has continuously evolved over decades of use and growth of the Internet.  Over this time, a number of changes have been made to TCP as it was specified in RFC 793, though these have only been documented in a piecemeal fashion.  This document collects and brings those changes together with the protocol specification from RFC 793.  This document obsoletes RFC 793, as well as RFCs 879, 2873, 6093, 6429, 6528, and 6691 that updated parts of RFC 793.  It updates RFCs 1011 and 1122, and it should be considered as a replacement for the portions of those documents dealing with TCP requirements.  It also updates RFC 5961 by adding a small clarification in reset handling while in the SYN-RECEIVED state.  The TCP header control bits from RFC 793 have also been updated based on RFC 3168.</t>
          </abstract>
        </front>
        <seriesInfo name="STD" value="7"/>
        <seriesInfo name="RFC" value="9293"/>
        <seriesInfo name="DOI" value="10.17487/RFC9293"/>
      </reference>
    </references>
    <section anchor="Acknowledgements" numbered="false" removeInRFC="false" toc="include" pn="section-appendix.a">
      <name slugifiedName="name-acknowledgements">Acknowledgements</name>
      <t indent="0" pn="section-appendix.a-1">
        Thanks to <contact fullname="Bernard Aboba"/>, <contact fullname="Martin Duke"/>, <contact fullname="Linda Dunbar"/>,
        <contact fullname="Gorry Fairhurst"/>, <contact fullname="Ingemar Johansson"/>, <contact fullname="Shuping         Peng"/>, <contact fullname="Alvaro Retana"/>, <contact fullname="Zahed Sarker"/>, <contact fullname="John Scudder"/>,
        <contact fullname="Éric Vyncke"/>, <contact fullname="Magnus Westerlund"/>, and the members of the RMCAT
        feedback design team for their feedback.
      </t>
    </section>
    <section anchor="authors-addresses" numbered="false" removeInRFC="false" toc="include" pn="section-appendix.b">
      <name slugifiedName="name-authors-address">Author's Address</name>
      <author fullname="Colin Perkins" initials="C." surname="Perkins">
        <organization showOnFrontPage="true">University of Glasgow</organization>
        <address>
          <postal>
            <extaddr>School of Computing Science</extaddr>
            <city>Glasgow</city>
            <code>G12 8QQ</code>
            <country>United Kingdom</country>
          </postal>
          <email>csp@csperkins.org</email>
        </address>
      </author>
    </section>
  </back>
</rfc>
