<?xml version='1.0' encoding='utf-8'?>
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" version="3" category="exp" consensus="true" docName="draft-ietf-rmcat-nada-13" indexInclude="true" ipr="trust200902" number="8698" prepTime="2020-02-06T12:50:02" 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-nada-13" rel="prev"/>
  <link href="https://dx.doi.org/10.17487/rfc8698" rel="alternate"/>
  <link href="urn:issn:2070-1721" rel="alternate"/>
  <front>
    <title abbrev="NADA">Network-Assisted Dynamic Adaptation (NADA): A Unified Congestion Control Scheme for Real-Time Media</title>
    <seriesInfo name="RFC" value="8698" stream="IETF"/>
    <author fullname="Xiaoqing Zhu" initials="X" surname="Zhu">
      <organization showOnFrontPage="true">Cisco Systems</organization>
      <address>
        <postal>
          <street>12515 Research Blvd., Building 4</street>
          <city>Austin</city>
          <region>TX</region>
          <code>78759</code>
          <country>United States of America</country>
        </postal>
        <email>xiaoqzhu@cisco.com</email>
      </address>
    </author>
    <author fullname="Rong Pan" initials="R" surname="Pan">
      <organization showOnFrontPage="true">Intel Corporation</organization>
      <address>
        <postal>
          <street>2200 Mission College Blvd</street>
          <city>Santa Clara</city>
          <region>CA</region>
          <code>95054</code>
          <country>United States of America</country>
        </postal>
        <email>rong.pan@intel.com</email>
      </address>
    </author>
    <author fullname="Michael A. Ramalho" initials="M." surname="Ramalho">
      <organization abbrev="AcousticComms" showOnFrontPage="true">AcousticComms Consulting</organization>
      <address>
        <postal>
          <street>6310 Watercrest Way Unit 203</street>
          <city>Lakewood Ranch</city>
          <region>FL</region>
          <code>34202-5211</code>
          <country>United States of America</country>
        </postal>
        <phone>+1 732 832 9723</phone>
        <email>mar42@cornell.edu</email>
        <uri>http://ramalho.webhop.info/</uri>
      </address>
    </author>
    <author fullname="Sergio Mena" initials="S." surname="Mena">
      <organization showOnFrontPage="true">Cisco Systems</organization>
      <address>
        <postal>
          <street>EPFL, Quartier de l'Innovation, Batiment E</street>
          <city>Ecublens</city>
          <region>Vaud</region>
          <code>1015</code>
          <country>Switzerland</country>
        </postal>
        <email>semena@cisco.com</email>
      </address>
    </author>
    <date month="02" year="2020"/>
    <area>TSV</area>
    <keyword>Multimedia</keyword>
    <keyword>Congestion Control</keyword>
    <abstract pn="section-abstract">
      <t pn="section-abstract-1">This document describes Network-Assisted Dynamic Adaptation (NADA), a
      novel congestion control scheme for interactive real-time media
      applications such as video conferencing. In the proposed scheme, the
      sender regulates its sending rate, based on either implicit or explicit
      congestion signaling, in a unified approach. The scheme can benefit from
      Explicit Congestion Notification (ECN) markings from network nodes. It
      also maintains consistent sender behavior in the absence of such
      markings by reacting to queuing delays and packet losses instead. </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 pn="section-boilerplate.1-1">
            This document is not an Internet Standards Track specification; it is
            published for examination, experimental implementation, and
            evaluation.
        </t>
        <t pn="section-boilerplate.1-2">
            This document defines an Experimental Protocol for the Internet
            community.  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 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/rfc8698" 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 pn="section-boilerplate.2-1">
            Copyright (c) 2020 IETF Trust and the persons identified as the
            document authors. All rights reserved.
        </t>
        <t 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 Simplified BSD License text as described in
            Section 4.e of the Trust Legal Provisions and are provided without
            warranty as described in the Simplified 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 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>
          </li>
          <li pn="section-toc.1-1.2">
            <t 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-terminology">Terminology</xref></t>
          </li>
          <li pn="section-toc.1-1.3">
            <t keepWithNext="true" 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-system-overview">System Overview</xref></t>
          </li>
          <li pn="section-toc.1-1.4">
            <t keepWithNext="true" 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-core-congestion-control-alg">Core Congestion Control Algorithm</xref></t>
            <ul bare="true" empty="true" indent="2" spacing="compact" pn="section-toc.1-1.4.2">
              <li pn="section-toc.1-1.4.2.1">
                <t keepWithNext="true" pn="section-toc.1-1.4.2.1.1"><xref derivedContent="4.1" format="counter" sectionFormat="of" target="section-4.1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-mathematical-notations">Mathematical Notations</xref></t>
              </li>
              <li pn="section-toc.1-1.4.2.2">
                <t keepWithNext="true" pn="section-toc.1-1.4.2.2.1"><xref derivedContent="4.2" format="counter" sectionFormat="of" target="section-4.2"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-receiver-side-algorithm">Receiver-Side Algorithm</xref></t>
              </li>
              <li pn="section-toc.1-1.4.2.3">
                <t keepWithNext="true" pn="section-toc.1-1.4.2.3.1"><xref derivedContent="4.3" format="counter" sectionFormat="of" target="section-4.3"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-sender-side-algorithm">Sender-Side Algorithm</xref></t>
              </li>
            </ul>
          </li>
          <li pn="section-toc.1-1.5">
            <t keepWithNext="true" 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-practical-implementation-of">Practical Implementation of NADA</xref></t>
            <ul bare="true" empty="true" indent="2" spacing="compact" pn="section-toc.1-1.5.2">
              <li pn="section-toc.1-1.5.2.1">
                <t keepWithNext="true" pn="section-toc.1-1.5.2.1.1"><xref derivedContent="5.1" format="counter" sectionFormat="of" target="section-5.1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-receiver-side-operation">Receiver-Side Operation</xref></t>
                <ul bare="true" empty="true" indent="2" spacing="compact" pn="section-toc.1-1.5.2.1.2">
                  <li pn="section-toc.1-1.5.2.1.2.1">
                    <t keepWithNext="true" pn="section-toc.1-1.5.2.1.2.1.1"><xref derivedContent="5.1.1" format="counter" sectionFormat="of" target="section-5.1.1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-estimation-of-one-way-delay">Estimation of One-Way Delay and Queuing Delay</xref></t>
                  </li>
                  <li pn="section-toc.1-1.5.2.1.2.2">
                    <t keepWithNext="true" pn="section-toc.1-1.5.2.1.2.2.1"><xref derivedContent="5.1.2" format="counter" sectionFormat="of" target="section-5.1.2"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-estimation-of-packet-loss-m">Estimation of Packet Loss/Marking Ratio</xref></t>
                  </li>
                  <li pn="section-toc.1-1.5.2.1.2.3">
                    <t keepWithNext="true" pn="section-toc.1-1.5.2.1.2.3.1"><xref derivedContent="5.1.3" format="counter" sectionFormat="of" target="section-5.1.3"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-estimation-of-receiving-rat">Estimation of Receiving Rate</xref></t>
                  </li>
                </ul>
              </li>
              <li pn="section-toc.1-1.5.2.2">
                <t keepWithNext="true" pn="section-toc.1-1.5.2.2.1"><xref derivedContent="5.2" format="counter" sectionFormat="of" target="section-5.2"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-sender-side-operation">Sender-Side Operation</xref></t>
                <ul bare="true" empty="true" indent="2" spacing="compact" pn="section-toc.1-1.5.2.2.2">
                  <li pn="section-toc.1-1.5.2.2.2.1">
                    <t keepWithNext="true" pn="section-toc.1-1.5.2.2.2.1.1"><xref derivedContent="5.2.1" format="counter" sectionFormat="of" target="section-5.2.1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-rate-shaping-buffer">Rate-Shaping Buffer</xref></t>
                  </li>
                  <li pn="section-toc.1-1.5.2.2.2.2">
                    <t keepWithNext="true" pn="section-toc.1-1.5.2.2.2.2.1"><xref derivedContent="5.2.2" format="counter" sectionFormat="of" target="section-5.2.2"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-adjusting-video-target-rate">Adjusting Video Target Rate and Sending Rate</xref></t>
                  </li>
                </ul>
              </li>
              <li pn="section-toc.1-1.5.2.3">
                <t keepWithNext="true" pn="section-toc.1-1.5.2.3.1"><xref derivedContent="5.3" format="counter" sectionFormat="of" target="section-5.3"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-feedback-message-requiremen">Feedback Message Requirements</xref></t>
              </li>
            </ul>
          </li>
          <li pn="section-toc.1-1.6">
            <t keepWithNext="true" 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-discussions-and-further-inv">Discussions and Further Investigations</xref></t>
            <ul bare="true" empty="true" indent="2" spacing="compact" pn="section-toc.1-1.6.2">
              <li pn="section-toc.1-1.6.2.1">
                <t keepWithNext="true" pn="section-toc.1-1.6.2.1.1"><xref derivedContent="6.1" format="counter" sectionFormat="of" target="section-6.1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-choice-of-delay-metrics">Choice of Delay Metrics</xref></t>
              </li>
              <li pn="section-toc.1-1.6.2.2">
                <t keepWithNext="true" pn="section-toc.1-1.6.2.2.1"><xref derivedContent="6.2" format="counter" sectionFormat="of" target="section-6.2"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-method-for-delay-loss-and-m">Method for Delay, Loss, and Marking Ratio Estimation</xref></t>
              </li>
              <li pn="section-toc.1-1.6.2.3">
                <t keepWithNext="true" pn="section-toc.1-1.6.2.3.1"><xref derivedContent="6.3" format="counter" sectionFormat="of" target="section-6.3"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-impact-of-parameter-values">Impact of Parameter Values</xref></t>
              </li>
              <li pn="section-toc.1-1.6.2.4">
                <t keepWithNext="true" pn="section-toc.1-1.6.2.4.1"><xref derivedContent="6.4" format="counter" sectionFormat="of" target="section-6.4"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-sender-based-vs-receiver-ba">Sender-Based vs. Receiver-Based Calculation</xref></t>
              </li>
              <li pn="section-toc.1-1.6.2.5">
                <t keepWithNext="true" pn="section-toc.1-1.6.2.5.1"><xref derivedContent="6.5" format="counter" sectionFormat="of" target="section-6.5"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-incremental-deployment">Incremental Deployment</xref></t>
              </li>
            </ul>
          </li>
          <li pn="section-toc.1-1.7">
            <t keepWithNext="true" 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-reference-implementations">Reference Implementations</xref></t>
          </li>
          <li pn="section-toc.1-1.8">
            <t keepWithNext="true" 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-suggested-experiments">Suggested Experiments</xref></t>
          </li>
          <li pn="section-toc.1-1.9">
            <t keepWithNext="true" pn="section-toc.1-1.9.1"><xref derivedContent="9" format="counter" sectionFormat="of" target="section-9"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-iana-considerations">IANA Considerations</xref></t>
          </li>
          <li pn="section-toc.1-1.10">
            <t keepWithNext="true" pn="section-toc.1-1.10.1"><xref derivedContent="10" format="counter" sectionFormat="of" target="section-10"/>. <xref derivedContent="" format="title" sectionFormat="of" target="name-security-considerations">Security Considerations</xref></t>
          </li>
          <li pn="section-toc.1-1.11">
            <t keepWithNext="true" pn="section-toc.1-1.11.1"><xref derivedContent="11" format="counter" sectionFormat="of" target="section-11"/>. <xref derivedContent="" format="title" sectionFormat="of" target="name-references">References</xref></t>
            <ul bare="true" empty="true" indent="2" spacing="compact" pn="section-toc.1-1.11.2">
              <li pn="section-toc.1-1.11.2.1">
                <t keepWithNext="true" pn="section-toc.1-1.11.2.1.1"><xref derivedContent="11.1" format="counter" sectionFormat="of" target="section-11.1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-normative-references">Normative References</xref></t>
              </li>
              <li pn="section-toc.1-1.11.2.2">
                <t keepWithNext="true" pn="section-toc.1-1.11.2.2.1"><xref derivedContent="11.2" format="counter" sectionFormat="of" target="section-11.2"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-informative-references">Informative References</xref></t>
              </li>
            </ul>
          </li>
          <li pn="section-toc.1-1.12">
            <t keepWithNext="true" pn="section-toc.1-1.12.1"><xref derivedContent="Appendix A" format="default" sectionFormat="of" target="section-appendix.a"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-network-node-operations">Network Node Operations</xref></t>
            <ul bare="true" empty="true" indent="2" spacing="compact" pn="section-toc.1-1.12.2">
              <li pn="section-toc.1-1.12.2.1">
                <t keepWithNext="true" pn="section-toc.1-1.12.2.1.1"><xref derivedContent="A.1" format="counter" sectionFormat="of" target="section-a.1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-default-behavior-of-drop-ta">Default Behavior of Drop-Tail Queues</xref></t>
              </li>
              <li pn="section-toc.1-1.12.2.2">
                <t keepWithNext="true" pn="section-toc.1-1.12.2.2.1"><xref derivedContent="A.2" format="counter" sectionFormat="of" target="section-a.2"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-red-based-ecn-marking">RED-Based ECN Marking</xref></t>
              </li>
              <li pn="section-toc.1-1.12.2.3">
                <t keepWithNext="true" pn="section-toc.1-1.12.2.3.1"><xref derivedContent="A.3" format="counter" sectionFormat="of" target="section-a.3"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-random-early-marking-with-v">Random Early Marking with Virtual Queues</xref></t>
              </li>
            </ul>
          </li>
          <li pn="section-toc.1-1.13">
            <t keepWithNext="true" pn="section-toc.1-1.13.1"><xref derivedContent="" format="none" sectionFormat="of" target="section-appendix.b"/><xref derivedContent="" format="title" sectionFormat="of" target="name-acknowledgments">Acknowledgments</xref></t>
          </li>
          <li pn="section-toc.1-1.14">
            <t keepWithNext="true" pn="section-toc.1-1.14.1"><xref derivedContent="" format="none" sectionFormat="of" target="section-appendix.c"/><xref derivedContent="" format="title" sectionFormat="of" target="name-contributors">Contributors</xref></t>
          </li>
          <li pn="section-toc.1-1.15">
            <t keepWithNext="true" pn="section-toc.1-1.15.1"><xref derivedContent="" format="none" sectionFormat="of" target="section-appendix.d"/><xref derivedContent="" format="title" sectionFormat="of" target="name-authors-addresses">Authors' Addresses</xref></t>
          </li>
        </ul>
      </section>
    </toc>
  </front>
  <middle>
    <section anchor="sec-intro" numbered="true" toc="include" removeInRFC="false" pn="section-1">
      <name slugifiedName="name-introduction">Introduction</name>
      <t pn="section-1-1">Interactive real-time media applications introduce a unique set of
      challenges for congestion control. Unlike TCP, the mechanism used for
      real-time media needs to adapt quickly to instantaneous bandwidth
      changes, accommodate fluctuations in the output of video encoder rate
      control, and cause low queuing delay over the network. An ideal scheme
      should also make effective use of all types of congestion signals,
      including packet loss, queuing delay, and explicit congestion
      notification (ECN) <xref target="RFC3168" format="default" sectionFormat="of" derivedContent="RFC3168"/>
      markings. The requirements for the congestion control algorithm are
      outlined in <xref target="I-D.ietf-rmcat-cc-requirements" format="default" sectionFormat="of" derivedContent="RMCAT-CC"/>.

    The requirements highlight that the desired congestion control scheme
    should 1) avoid flow starvation and attain a reasonable fair share of
    bandwidth when competing against other flows, 2) adapt quickly, and 3)
    operate in a stable manner. </t>
      <t pn="section-1-2">This document describes an experimental congestion control scheme
    called Network-Assisted Dynamic Adaptation (NADA). The design of NADA
    benefits from explicit congestion control signals (e.g., ECN markings)
    from the network, yet also operates when only implicit congestion
    indicators (delay and/or loss) are available. Such a unified sender
    behavior distinguishes NADA from other congestion control schemes for
    real-time media. In addition, its core congestion control algorithm is
    designed to guarantee stability for path round-trip times (RTTs) below
    a prescribed bound (e.g., 250 ms with default parameter choices). It
    further supports weighted bandwidth sharing among competing video flows
    with different priorities. The signaling mechanism consists of standard
    Real-time Transport Protocol (RTP) timestamp <xref target="RFC3550" format="default" sectionFormat="of" derivedContent="RFC3550"/> and Real-time
    Transport Control Protocol (RTCP) feedback reports.
    The definition of the desired RTCP feedback message is described in
    detail in <xref target="I-D.ietf-avtcore-cc-feedback-message" format="default" sectionFormat="of" derivedContent="RTCP-FEEDBACK"/>
    so as to support the successful operation of several congestion control
    schemes for real-time interactive media. </t>
    </section>
    <section anchor="sec-term" numbered="true" toc="include" removeInRFC="false" pn="section-2">
      <name slugifiedName="name-terminology">Terminology</name>
      <t pn="section-2-1">
    The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>",
    "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>",
    "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>",
    "<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are
    to be interpreted as described in BCP 14 <xref target="RFC2119" format="default" sectionFormat="of" derivedContent="RFC2119"/>
        <xref target="RFC8174" format="default" sectionFormat="of" derivedContent="RFC8174"/> when, and only when, they appear in all capitals,
    as shown here.
      </t>
    </section>
    <section anchor="sec-system-overview" numbered="true" toc="include" removeInRFC="false" pn="section-3">
      <name slugifiedName="name-system-overview">System Overview</name>
      <t pn="section-3-1"><xref target="fig-system-overview" format="default" sectionFormat="of" derivedContent="Figure 1"/> shows the
      end-to-end
    system for real-time media transport that NADA operates in. Note that
    there also exist network nodes along the reverse (potentially uncongested)
    path that the RTCP feedback reports traverse. Those network nodes are not
    shown in the figure for the sake of brevity.</t>
      <figure anchor="fig-system-overview" align="left" suppress-title="false" pn="figure-1">
        <name slugifiedName="name-system-overview-2">System Overview</name>
        <artwork name="" type="" align="left" alt="" pn="section-3-2.1">
  +---------+  r_vin  +--------+        +--------+     +----------+
  |  Media  |&lt;--------|  RTP   |        |Network |     |   RTP    |
  | Encoder |========&gt;| Sender |=======&gt;|  Node  |====&gt;| Receiver |  
  +---------+  r_vout +--------+ r_send +--------+     +----------+
                          /|\                                |
                           |                                 |
                           +---------------------------------+
                                 RTCP Feedback Report
</artwork>
      </figure>
      <dl newline="false" spacing="normal" pn="section-3-3">
        <dt pn="section-3-3.1">Media encoder with rate control capabilities:
</dt>
        <dd pn="section-3-3.2">Encodes raw media (audio and video) frames into a compressed bitstream
that is later packetized into RTP packets. As discussed in <xref target="RFC8593" format="default" sectionFormat="of" derivedContent="RFC8593"/>, the
actual output rate from the encoder r_vout may fluctuate around the target
r_vin. Furthermore, it is possible that the encoder can only react to bit rate
changes at rather coarse time intervals, e.g., once every 0.5 seconds.
</dd>
        <dt pn="section-3-3.3">RTP sender:
</dt>
        <dd pn="section-3-3.4">Responsible for calculating the NADA reference rate based on network
congestion indicators (delay, loss, or ECN marking reports from the receiver),
for updating the video encoder with a new target rate r_vin and for
regulating the actual sending rate r_send accordingly. The RTP sender also
generates a sending timestamp for each outgoing packet.
</dd>
        <dt pn="section-3-3.5">RTP receiver:
</dt>
        <dd pn="section-3-3.6">Responsible for measuring and estimating end-to-end delay (based on sender
timestamp), packet loss (based on RTP sequence number), ECN marking ratios
(based on <xref target="RFC6679" format="default" sectionFormat="of" derivedContent="RFC6679"/>), and receiving rate (r_recv) of the
flow. It calculates
the aggregated congestion signal (x_curr) that accounts for queuing delay, ECN
markings, and packet losses. The receiver also determines the mode for sender
rate adaptation (rmode) based on whether the flow has encountered any standing
non-zero congestion. The receiver sends periodic RTCP reports back to the
sender, containing values of x_curr, rmode, and r_recv.
</dd>
        <dt pn="section-3-3.7">Network node with several modes of operation:
</dt>
        <dd pn="section-3-3.8">The system can work with the default behavior of a simple drop-tail
queue. It can also benefit from advanced Active Queue Management (AQM)
features such as Proportional Integral Controller Enhanced <xref target="RFC8033" format="default" sectionFormat="of" derivedContent="RFC8033">(PIE)</xref>, Flow Queue Controlling Queue Delay <xref target="RFC8290" format="default" sectionFormat="of" derivedContent="RFC8290">(FQ-CoDel)</xref>, ECN
marking based on <xref target="RFC7567" format="default" sectionFormat="of" derivedContent="RFC7567"> Random Early Detection (RED)</xref>,
and Pre-Congestion Notification (PCN) marking using a
token bucket algorithm <xref target="RFC6660" format="default" sectionFormat="of" derivedContent="RFC6660"/>. Note that network node
operation is out of scope for the design of NADA.

</dd>
      </dl>
    </section>
    <section anchor="sec-algorithm" numbered="true" toc="include" removeInRFC="false" pn="section-4">
      <name slugifiedName="name-core-congestion-control-alg">Core Congestion Control Algorithm</name>
      <t pn="section-4-1">Like TCP-Friendly Rate Control (TFRC) <xref target="FLOYD-CCR00" format="default" sectionFormat="of" derivedContent="FLOYD-CCR00"/>
        <xref target="RFC5348" format="default" sectionFormat="of" derivedContent="RFC5348"/>, NADA is a rate-based
	congestion
  control algorithm. In its simplest form, the sender reacts to the
  collection of network congestion indicators in the form of an
  aggregated congestion signal and operates in one of two modes: 

      </t>
      <dl newline="false" spacing="normal" pn="section-4-2">
        <dt pn="section-4-2.1">Accelerated ramp up:
</dt>
        <dd pn="section-4-2.2">When the bottleneck is deemed to be underutilized, the rate increases
multiplicatively with respect to the rate of previously successful
transmissions.  The rate increase multiplier (gamma) is calculated based on
the observed round-trip time and target feedback interval, so as to limit
self-inflicted queuing delay.
</dd>
        <dt pn="section-4-2.3">Gradual rate update:
</dt>
        <dd pn="section-4-2.4">In the presence of a non-zero aggregate congestion signal, the sending
rate
is adjusted in reaction to both its value (x_curr) and its change in value
(x_diff).
</dd>
      </dl>
      <t pn="section-4-3">This section introduces the list of mathematical notations and
  describes the core congestion control algorithm at the sender and
  receiver, respectively. Additional details on recommended practical
  implementations are described in Sections <xref target="sec-receiver" format="counter" sectionFormat="of" derivedContent="5.1"/>
  and <xref target="sec-sender" format="counter" sectionFormat="of" derivedContent="5.2"/>. </t>
      <section anchor="sec-notation" numbered="true" toc="include" removeInRFC="false" pn="section-4.1">
        <name slugifiedName="name-mathematical-notations">Mathematical Notations</name>
        <t pn="section-4.1-1">This section summarizes the list of variables and parameters used
        in the NADA algorithm. <xref target="tab-parameters" format="default" sectionFormat="of" derivedContent="Table 2"/> also includes the default values for choosing the
        algorithm parameters to represent either a typical setting in
        practical applications or a setting based on theoretical and
        simulation studies.  See <xref target="sec-discussion-c" format="default" sectionFormat="of" derivedContent="Section 6.3"/> for some of the discussions on the impact of
        parameter values. Additional studies in real-world settings suggested
        in <xref target="sec-experiments" format="default" sectionFormat="of" derivedContent="Section 8"/> could gather
        further insight on how to choose and adapt these parameter values in
        practical deployment.</t>
        <table align="left" anchor="tab-variables" pn="table-1">
          <name slugifiedName="name-list-of-variables">List of Variables</name>
          <thead>
            <tr>
              <th align="left" colspan="1" rowspan="1">Notation</th>
              <th align="left" colspan="1" rowspan="1">Variable Name</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left" colspan="1" rowspan="1">t_curr</td>
              <td align="left" colspan="1" rowspan="1">Current timestamp</td>
            </tr>
            <tr>
              <td align="left" colspan="1" rowspan="1">t_last</td>
              <td align="left" colspan="1" rowspan="1">Last time sending/receiving a feedback message</td>
            </tr>
            <tr>
              <td align="left" colspan="1" rowspan="1">delta</td>
              <td align="left" colspan="1" rowspan="1">Observed interval between current and previous
      feedback reports: delta = t_curr-t_last</td>
            </tr>
            <tr>
              <td align="left" colspan="1" rowspan="1">r_ref</td>
              <td align="left" colspan="1" rowspan="1">Reference rate based on network congestion</td>
            </tr>
            <tr>
              <td align="left" colspan="1" rowspan="1">r_send</td>
              <td align="left" colspan="1" rowspan="1">Sending rate</td>
            </tr>
            <tr>
              <td align="left" colspan="1" rowspan="1">r_recv</td>
              <td align="left" colspan="1" rowspan="1">Receiving rate</td>
            </tr>
            <tr>
              <td align="left" colspan="1" rowspan="1">r_vin</td>
              <td align="left" colspan="1" rowspan="1">Target rate for video encoder</td>
            </tr>
            <tr>
              <td align="left" colspan="1" rowspan="1">r_vout</td>
              <td align="left" colspan="1" rowspan="1">Output rate from video encoder</td>
            </tr>
            <tr>
              <td align="left" colspan="1" rowspan="1">d_base</td>
              <td align="left" colspan="1" rowspan="1">Estimated baseline delay</td>
            </tr>
            <tr>
              <td align="left" colspan="1" rowspan="1">d_fwd</td>
              <td align="left" colspan="1" rowspan="1">Measured and filtered one-way delay</td>
            </tr>
            <tr>
              <td align="left" colspan="1" rowspan="1">d_queue</td>
              <td align="left" colspan="1" rowspan="1">Estimated queuing delay</td>
            </tr>
            <tr>
              <td align="left" colspan="1" rowspan="1">d_tilde</td>
              <td align="left" colspan="1" rowspan="1">Equivalent delay after non-linear warping</td>
            </tr>
            <tr>
              <td align="left" colspan="1" rowspan="1">p_mark</td>
              <td align="left" colspan="1" rowspan="1">Estimated packet ECN marking ratio</td>
            </tr>
            <tr>
              <td align="left" colspan="1" rowspan="1">p_loss</td>
              <td align="left" colspan="1" rowspan="1">Estimated packet loss ratio</td>
            </tr>
            <tr>
              <td align="left" colspan="1" rowspan="1">x_curr</td>
              <td align="left" colspan="1" rowspan="1">Aggregate congestion signal</td>
            </tr>
            <tr>
              <td align="left" colspan="1" rowspan="1">x_prev</td>
              <td align="left" colspan="1" rowspan="1">Previous value of aggregate congestion signal</td>
            </tr>
            <tr>
              <td align="left" colspan="1" rowspan="1">x_diff</td>
              <td align="left" colspan="1" rowspan="1">Change in aggregate congestion signal w.r.t. its
      previous value: x_diff = x_curr - x_prev</td>
            </tr>
            <tr>
              <td align="left" colspan="1" rowspan="1">rmode</td>
              <td align="left" colspan="1" rowspan="1">Rate update mode: (0 = accelerated ramp up; 1 =
      gradual update)</td>
            </tr>
            <tr>
              <td align="left" colspan="1" rowspan="1">gamma</td>
              <td align="left" colspan="1" rowspan="1">Rate increase multiplier in accelerated ramp-up
      mode</td>
            </tr>
            <tr>
              <td align="left" colspan="1" rowspan="1">loss_int</td>
              <td align="left" colspan="1" rowspan="1">Measured average loss interval in packet count</td>
            </tr>
            <tr>
              <td align="left" colspan="1" rowspan="1">loss_exp</td>
              <td align="left" colspan="1" rowspan="1">Threshold value for setting the last observed packet
      loss to expiration</td>
            </tr>
            <tr>
              <td align="left" colspan="1" rowspan="1">rtt</td>
              <td align="left" colspan="1" rowspan="1">Estimated round-trip time at sender</td>
            </tr>
            <tr>
              <td align="left" colspan="1" rowspan="1">buffer_len</td>
              <td align="left" colspan="1" rowspan="1">Rate-shaping buffer occupancy measured in bytes</td>
            </tr>
          </tbody>
        </table>
        <table align="left" anchor="tab-parameters" pn="table-2">
          <name slugifiedName="name-list-of-algorithm-parameter">List of Algorithm Parameters and Their Default Values</name>
          <thead>
            <tr>
              <th align="left" colspan="1" rowspan="1">Notation</th>
              <th align="left" colspan="1" rowspan="1">Parameter Name</th>
              <th align="left" colspan="1" rowspan="1">Default Value</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left" colspan="1" rowspan="1">PRIO</td>
              <td align="left" colspan="1" rowspan="1">Weight of priority of the flow</td>
              <td align="left" colspan="1" rowspan="1">1.0</td>
            </tr>
            <tr>
              <td align="left" colspan="1" rowspan="1">RMIN</td>
              <td align="left" colspan="1" rowspan="1">Minimum rate of application supported by media
      encoder</td>
              <td align="left" colspan="1" rowspan="1">150 Kbps</td>
            </tr>
            <tr>
              <td align="left" colspan="1" rowspan="1">RMAX</td>
              <td align="left" colspan="1" rowspan="1">Maximum rate of application supported by media
      encoder</td>
              <td align="left" colspan="1" rowspan="1">1.5 Mbps</td>
            </tr>
            <tr>
              <td align="left" colspan="1" rowspan="1">XREF</td>
              <td align="left" colspan="1" rowspan="1">Reference congestion level</td>
              <td align="left" colspan="1" rowspan="1">10 ms</td>
            </tr>
            <tr>
              <td align="left" colspan="1" rowspan="1">KAPPA</td>
              <td align="left" colspan="1" rowspan="1">Scaling parameter for gradual rate update
      calculation</td>
              <td align="left" colspan="1" rowspan="1">0.5</td>
            </tr>
            <tr>
              <td align="left" colspan="1" rowspan="1">ETA</td>
              <td align="left" colspan="1" rowspan="1">Scaling parameter for gradual rate update
      calculation</td>
              <td align="left" colspan="1" rowspan="1">2.0</td>
            </tr>
            <tr>
              <td align="left" colspan="1" rowspan="1">TAU</td>
              <td align="left" colspan="1" rowspan="1">Upper bound of RTT in gradual rate update
      calculation</td>
              <td align="left" colspan="1" rowspan="1">500 ms</td>
            </tr>
            <tr>
              <td align="left" colspan="1" rowspan="1">DELTA</td>
              <td align="left" colspan="1" rowspan="1">Target feedback interval</td>
              <td align="left" colspan="1" rowspan="1">100 ms</td>
            </tr>
            <tr>
              <td align="left" colspan="1" rowspan="1">LOGWIN</td>
              <td align="left" colspan="1" rowspan="1">Observation window in time for calculating packet
      summary statistics at receiver</td>
              <td align="left" colspan="1" rowspan="1">500 ms</td>
            </tr>
            <tr>
              <td align="left" colspan="1" rowspan="1">QEPS</td>
              <td align="left" colspan="1" rowspan="1">Threshold for determining queuing delay buildup at
      receiver</td>
              <td align="left" colspan="1" rowspan="1">10 ms</td>
            </tr>
            <tr>
              <td align="left" colspan="1" rowspan="1">DFILT</td>
              <td align="left" colspan="1" rowspan="1">Bound on filtering delay</td>
              <td align="left" colspan="1" rowspan="1">120 ms</td>
            </tr>
            <tr>
              <td align="left" colspan="1" rowspan="1">GAMMA_MAX</td>
              <td align="left" colspan="1" rowspan="1">Upper bound on rate increase ratio for accelerated ramp
      up</td>
              <td align="left" colspan="1" rowspan="1">0.5</td>
            </tr>
            <tr>
              <td align="left" colspan="1" rowspan="1">QBOUND</td>
              <td align="left" colspan="1" rowspan="1">Upper bound on self-inflicted queuing delay during ramp
      up</td>
              <td align="left" colspan="1" rowspan="1">50 ms</td>
            </tr>
            <tr>
              <td align="left" colspan="1" rowspan="1">MULTILOSS</td>
              <td align="left" colspan="1" rowspan="1">Multiplier for self-scaling the expiration threshold of
      the last observed loss (loss_exp) based on measured average loss
      interval (loss_int)</td>
              <td align="left" colspan="1" rowspan="1">7.0</td>
            </tr>
            <tr>
              <td align="left" colspan="1" rowspan="1">QTH</td>
              <td align="left" colspan="1" rowspan="1">Delay threshold for invoking non-linear warping</td>
              <td align="left" colspan="1" rowspan="1">50 ms</td>
            </tr>
            <tr>
              <td align="left" colspan="1" rowspan="1">LAMBDA</td>
              <td align="left" colspan="1" rowspan="1">Scaling parameter in the exponent of non-linear
      warping</td>
              <td align="left" colspan="1" rowspan="1">0.5</td>
            </tr>
            <tr>
              <td align="left" colspan="1" rowspan="1">PLRREF</td>
              <td align="left" colspan="1" rowspan="1">Reference packet loss ratio</td>
              <td align="left" colspan="1" rowspan="1">0.01</td>
            </tr>
            <tr>
              <td align="left" colspan="1" rowspan="1">PMRREF</td>
              <td align="left" colspan="1" rowspan="1">Reference packet marking ratio</td>
              <td align="left" colspan="1" rowspan="1">0.01</td>
            </tr>
            <tr>
              <td align="left" colspan="1" rowspan="1">DLOSS</td>
              <td align="left" colspan="1" rowspan="1">Reference delay penalty for loss when packet loss ratio
      is at PLRREF</td>
              <td align="left" colspan="1" rowspan="1">10 ms</td>
            </tr>
            <tr>
              <td align="left" colspan="1" rowspan="1">DMARK</td>
              <td align="left" colspan="1" rowspan="1">Reference delay penalty for ECN marking when packet
      marking is at PMRREF</td>
              <td align="left" colspan="1" rowspan="1">2 ms</td>
            </tr>
            <tr>
              <td align="left" colspan="1" rowspan="1">FPS</td>
              <td align="left" colspan="1" rowspan="1">Frame rate of incoming video</td>
              <td align="left" colspan="1" rowspan="1">30</td>
            </tr>
            <tr>
              <td align="left" colspan="1" rowspan="1">BETA_S</td>
              <td align="left" colspan="1" rowspan="1">Scaling parameter for modulating outgoing sending
      rate</td>
              <td align="left" colspan="1" rowspan="1">0.1</td>
            </tr>
            <tr>
              <td align="left" colspan="1" rowspan="1">BETA_V</td>
              <td align="left" colspan="1" rowspan="1">Scaling parameter for modulating video encoder target
      rate</td>
              <td align="left" colspan="1" rowspan="1">0.1</td>
            </tr>
            <tr>
              <td align="left" colspan="1" rowspan="1">ALPHA</td>
              <td align="left" colspan="1" rowspan="1">Smoothing factor in exponential smoothing of packet
      loss and marking ratios</td>
              <td align="left" colspan="1" rowspan="1">0.1</td>
            </tr>
          </tbody>
        </table>
      </section>
      <section anchor="subsec-receiver-algorithm" numbered="true" toc="include" removeInRFC="false" pn="section-4.2">
        <name slugifiedName="name-receiver-side-algorithm">Receiver-Side Algorithm</name>
        <t pn="section-4.2-1">The receiver-side algorithm can be outlined as below:</t>
        <ul empty="true" bare="false" spacing="normal" pn="section-4.2-2">
          <li pn="section-4.2-2.1">On initialization:</li>
          <li pn="section-4.2-2.2">
            <ul empty="true" bare="false" spacing="normal" pn="section-4.2-2.2.1">
              <li pn="section-4.2-2.2.1.1">set d_base = +INFINITY
</li>
              <li pn="section-4.2-2.2.1.2">set p_loss = 0
</li>
              <li pn="section-4.2-2.2.1.3">set p_mark = 0
</li>
              <li pn="section-4.2-2.2.1.4">set r_recv = 0
</li>
              <li pn="section-4.2-2.2.1.5">set both t_last and t_curr as current time in milliseconds
</li>
            </ul>
          </li>
          <li pn="section-4.2-2.3">On receiving a media packet:
</li>
          <li pn="section-4.2-2.4">
            <ul empty="true" bare="false" spacing="normal" pn="section-4.2-2.4.1">
              <li pn="section-4.2-2.4.1.1">obtain current timestamp t_curr from system clock
</li>
              <li pn="section-4.2-2.4.1.2">obtain from packet header sending time stamp t_sent
</li>
              <li pn="section-4.2-2.4.1.3">obtain one-way delay measurement: d_fwd = t_curr - t_sent
</li>
              <li pn="section-4.2-2.4.1.4">update baseline delay: d_base = min(d_base, d_fwd)
</li>
              <li pn="section-4.2-2.4.1.5">update queuing delay:  d_queue = d_fwd - d_base
</li>
              <li pn="section-4.2-2.4.1.6">update packet loss ratio estimate p_loss
</li>
              <li pn="section-4.2-2.4.1.7">update packet marking ratio estimate p_mark
</li>
              <li pn="section-4.2-2.4.1.8">update measurement of receiving rate r_recv
</li>
            </ul>
          </li>
          <li pn="section-4.2-2.5">On time to send a new feedback report (t_curr - t_last &gt; DELTA):
</li>
          <li pn="section-4.2-2.6">
            <ul empty="true" bare="false" spacing="normal" pn="section-4.2-2.6.1">
              <li pn="section-4.2-2.6.1.1">calculate non-linear warping of delay d_tilde if packet loss exists
</li>
              <li pn="section-4.2-2.6.1.2">calculate current aggregate congestion signal x_curr
</li>
              <li pn="section-4.2-2.6.1.3">determine mode of rate adaptation for sender: rmode
</li>
              <li pn="section-4.2-2.6.1.4">send feedback containing values of: rmode, x_curr, and r_recv
</li>
              <li pn="section-4.2-2.6.1.5">update t_last = t_curr
</li>
            </ul>
          </li>
        </ul>
        <t pn="section-4.2-3">In order for a delay-based flow to hold its ground when competing
   against loss-based flows (e.g., loss-based TCP), it is important
   to distinguish between different levels of observed queuing delay.
   For instance, over wired connections, a moderate queuing delay value
   on the order of tens of milliseconds is likely self-inflicted or
   induced by other delay-based flows, whereas a high queuing delay
   value of several hundreds of milliseconds may indicate the presence
   of a loss-based flow that does not refrain from increased delay.</t>
        <t pn="section-4.2-4"> If the last observed packet loss is within the expiration 
window of loss_exp (measured in terms of packet counts), the
estimated queuing delay follows a non-linear warping: </t>
        <artwork name="" type="" align="left" alt="" pn="section-4.2-5">
           / d_queue,                   if d_queue &lt; QTH
           |
d_tilde = &lt;                                           (1)
           |                  (d_queue-QTH)  
           \ QTH exp(-LAMBDA ---------------) , otherwise
                                 QTH    </artwork>
        <t pn="section-4.2-6">
In Equation (1), the queuing delay value is unchanged when it is below
the first threshold QTH; otherwise, it is scaled down following
a non-linear curve. This non-linear warping is inspired by
the delay-adaptive congestion window backoff policy in
<xref target="BUDZISZ-AIMD-CC" format="default" sectionFormat="of" derivedContent="BUDZISZ-AIMD-CC"/> so as to "gradually nudge"
the controller to operate based on loss-induced congestion
signals when competing against loss-based flows. The exact form
of the non-linear function has been simplified with respect to
<xref target="BUDZISZ-AIMD-CC" format="default" sectionFormat="of" derivedContent="BUDZISZ-AIMD-CC"/>. The value of the threshold
QTH should be carefully tuned for different operational environments
so as to avoid potential risks of prematurely discounting the congestion
signal level. Typically, a higher value of QTH is required in a
noisier environment (e.g., over wireless connections or where the
video stream encounters many time-varying background competing traffic)
so as to stay robust against occasional non-congestion-induced delay
spikes. Additional insights on how this value can be tuned or auto-tuned
should be gathered from carrying out experimental studies in different
real-world deployment scenarios. 
        </t>
        <t pn="section-4.2-7">The value of loss_exp is configured to self-scale with the average
  packet loss interval loss_int with a multiplier MULTILOSS: </t>
        <artwork name="" type="" align="left" alt="" pn="section-4.2-8"> loss_exp = MULTILOSS *
loss_int.  </artwork>
        <t pn="section-4.2-9">Estimation of the average loss interval loss_int, in turn, follows
	<xref target="RFC5348" sectionFormat="of" section="5.4" format="default" derivedLink="https://rfc-editor.org/rfc/rfc5348#section-5.4" derivedContent="RFC5348">"TCP Friendly Rate Control
   (TFRC): Protocol Specification"</xref>. </t>
        <t pn="section-4.2-10">In practice, it is recommended to linearly interpolate between the
warped (d_tilde) and non-warped (d_queue) values of the queuing delay
during the transitional period lasting for the duration of loss_int. </t>
        <t pn="section-4.2-11">The aggregate congestion signal is:</t>
        <artwork name="" type="" align="left" alt="" pn="section-4.2-12">
                         / p_mark \^2        / p_loss \^2 
x_curr = d_tilde + DMARK*|--------|  + DLOSS*|--------|   (2) 
                         \ PMRREF /          \ PLRREF /         </artwork>
        <t pn="section-4.2-13">Here, DMARK is prescribed a reference delay penalty associated with
        ECN markings at the reference marking ratio of PMRREF; DLOSS is
        prescribed a reference delay penalty associated with packet losses at
        the reference packet loss ratio of PLRREF.  The value of DLOSS and
        DMARK does not depend on configurations at the network node. Since
        ECN-enabled active queue management schemes typically mark a packet
        before dropping it, the value of DLOSS <bcp14>SHOULD</bcp14> be higher
        than that of DMARK. Furthermore, the values of DLOSS and DMARK need to
        be set consistently across all NADA flows sharing the same bottleneck
        link so that they can compete fairly.</t>
        <t pn="section-4.2-14">In the absence of packet marking and losses, the value of x_curr
        reduces to the observed queuing delay d_queue. In that case, the NADA
        algorithm operates in the regime of delay-based adaptation. </t>
        <t pn="section-4.2-15">Given observed per-packet delay and loss information, the receiver
        is also in a good position to determine whether or not the network is
        underutilized and then recommend the corresponding rate adaptation
	mode for
        the sender. The criteria for operating in accelerated ramp-up mode
        are:</t>
        <ul spacing="normal" bare="false" empty="false" pn="section-4.2-16">
          <li pn="section-4.2-16.1"> No recent packet losses within the observation window LOGWIN;
          and</li>
          <li pn="section-4.2-16.2"> No buildup of queuing delay: d_fwd-d_base &lt; QEPS
          for all previous delay samples within the observation window
          LOGWIN.</li>
        </ul>
        <t pn="section-4.2-17">Otherwise, the algorithm operates in graduate update mode. </t>
      </section>
      <section anchor="subsec-sender-algorithm" numbered="true" toc="include" removeInRFC="false" pn="section-4.3">
        <name slugifiedName="name-sender-side-algorithm">Sender-Side Algorithm</name>
        <t pn="section-4.3-1">The sender-side algorithm is outlined as follows:</t>
        <ul empty="true" bare="false" spacing="normal" pn="section-4.3-2">
          <li pn="section-4.3-2.1">On initialization:</li>
          <li pn="section-4.3-2.2">
            <ul empty="true" bare="false" spacing="normal" pn="section-4.3-2.2.1">
              <li pn="section-4.3-2.2.1.1">set r_ref = RMIN
</li>
              <li pn="section-4.3-2.2.1.2">set rtt = 0
</li>
              <li pn="section-4.3-2.2.1.3">set x_prev = 0
</li>
              <li pn="section-4.3-2.2.1.4">set t_last and t_curr as current system clock time
</li>
            </ul>
          </li>
          <li pn="section-4.3-2.3">On receiving feedback report:
</li>
          <li pn="section-4.3-2.4">
            <ul empty="true" bare="false" spacing="normal" pn="section-4.3-2.4.1">
              <li pn="section-4.3-2.4.1.1">obtain current timestamp from system clock: t_curr
</li>
              <li pn="section-4.3-2.4.1.2">obtain values of rmode, x_curr, and r_recv from feedback report
</li>
              <li pn="section-4.3-2.4.1.3">update estimation of rtt
</li>
              <li pn="section-4.3-2.4.1.4">measure feedback interval: delta = t_curr - t_last
</li>
              <li pn="section-4.3-2.4.1.5">if rmode == 0:
</li>
              <li pn="section-4.3-2.4.1.6">
                <ul empty="true" bare="false" spacing="normal" pn="section-4.3-2.4.1.6.1">
                  <li pn="section-4.3-2.4.1.6.1.1">update r_ref following accelerated ramp-up rules
</li>
                </ul>
              </li>
              <li pn="section-4.3-2.4.1.7">else:
</li>
              <li pn="section-4.3-2.4.1.8">
                <ul empty="true" bare="false" spacing="normal" pn="section-4.3-2.4.1.8.1">
                  <li pn="section-4.3-2.4.1.8.1.1">update r_ref following gradual update rules
</li>
                </ul>
              </li>
              <li pn="section-4.3-2.4.1.9">clip rate r_ref within the range of minimum rate (RMIN) and maximum rate
(RMAX).
</li>
              <li pn="section-4.3-2.4.1.10">set x_prev = x_curr
</li>
              <li pn="section-4.3-2.4.1.11">set t_last = t_curr
</li>
            </ul>
          </li>
        </ul>
        <t pn="section-4.3-3">In accelerated ramp-up mode, the rate r_ref is updated as
	follows:</t>
        <artwork name="" type="" align="left" alt="" pn="section-4.3-4">
                                QBOUND
    gamma = min(GAMMA_MAX, ------------------)       (3)
                            rtt+DELTA+DFILT

			    r_ref = max(r_ref, (1+gamma) r_recv)
			    (4)    
</artwork>
        <t pn="section-4.3-5">The rate increase multiplier gamma is calculated as a function of
        the upper bound of self-inflicted queuing delay (QBOUND), round-trip
        time (rtt), and target feedback interval (DELTA); it is bound on the
        filtering delay for calculating d_queue (DFILT). It has a maximum
        value of GAMMA_MAX. The rationale behind Equations (3)-(4) is that the
        longer it takes for the sender to observe self-inflicted queuing delay
        buildup, the more conservative the sender should be in increasing its
        rate and, hence, the smaller the rate increase multiplier. </t>
        <t pn="section-4.3-6">In gradual update mode, the rate r_ref is updated as:</t>
        <artwork name="" type="" align="left" alt="" pn="section-4.3-7">
    x_offset = x_curr - PRIO*XREF*RMAX/r_ref          (5)

    x_diff   = x_curr - x_prev                        (6) 

                           delta    x_offset
    r_ref = r_ref - KAPPA*-------*------------*r_ref
                            TAU       TAU

                                x_diff
                  - KAPPA*ETA*---------*r_ref         (7)
                                 TAU    
</artwork>
        <t pn="section-4.3-8">The rate changes in proportion to the previous rate decision.
It is affected by two terms: the offset of the aggregate congestion
signal from its value at equilibrium (x_offset) and its change
(x_diff). The calculation of x_offset depends on the maximum rate
of the flow (RMAX), its weight of priority (PRIO), as well
as a reference congestion signal (XREF). The value of
XREF is chosen so that the maximum rate of RMAX can be achieved
when the observed congestion signal level is below PRIO*XREF. </t>
        <t pn="section-4.3-9">
At equilibrium, the aggregated congestion signal stabilizes at
x_curr = PRIO*XREF*RMAX/r_ref. This ensures that when multiple
flows share the same bottleneck and observe a common value of
x_curr, their rates at equilibrium will be proportional to their
respective priority levels (PRIO) and the range between minimum
and maximum rate. Values of the minimum rate (RMIN) and 
maximum rate (RMAX) will be provided by the media codec,
for instance, as outlined by <xref target="I-D.ietf-rmcat-cc-codec-interactions" format="default" sectionFormat="of" derivedContent="RMCAT-CC-RTP">
</xref>. In the absence of such information, the NADA sender will
choose a default value of 0 for RMIN and 3 Mbps for RMAX. </t>
        <t pn="section-4.3-10"> As mentioned in the sender-side algorithm, the final rate
is always clipped within the dynamic range specified by the
application: </t>
        <artwork name="" type="" align="left" alt="" pn="section-4.3-11">
    r_ref = min(r_ref, RMAX)                         (8)

    r_ref = max(r_ref, RMIN)                         (9)
</artwork>
        <t pn="section-4.3-12">The above operations ignore many practical issues such as clock
synchronization between sender and receiver, the filtering of noise in
delay measurements, and base delay expiration. These will be addressed
in <xref target="sec-practical-nada" format="default" sectionFormat="of" derivedContent="Section 5"/>.</t>
      </section>
    </section>
    <section anchor="sec-practical-nada" numbered="true" toc="include" removeInRFC="false" pn="section-5">
      <name slugifiedName="name-practical-implementation-of">Practical Implementation of NADA</name>
      <section anchor="sec-receiver" numbered="true" toc="include" removeInRFC="false" pn="section-5.1">
        <name slugifiedName="name-receiver-side-operation">Receiver-Side Operation</name>
        <t pn="section-5.1-1">The receiver continuously monitors end-to-end per-packet
statistics in terms of delay, loss, and/or ECN marking ratios.
It then aggregates all forms of congestion indicators into the
form of an equivalent delay and periodically reports this back
to the sender. In addition, the receiver tracks the receiving
rate of the flow and includes that in the feedback message.</t>
        <section anchor="sec-receiver-a" numbered="true" toc="include" removeInRFC="false" pn="section-5.1.1">
          <name slugifiedName="name-estimation-of-one-way-delay">Estimation of One-Way Delay and Queuing Delay</name>
          <t pn="section-5.1.1-1">
The delay estimation process in NADA follows an approach similar to that of
earlier
delay-based congestion control schemes, such as Low Extra Delay Background
Transport (LEDBAT) <xref target="RFC6817" format="default" sectionFormat="of" derivedContent="RFC6817"/>. For
experimental implementations, instead of relying on RTP timestamps and the
transmission time offset RTP header extension <xref target="RFC5450" format="default" sectionFormat="of" derivedContent="RFC5450"/>, the NADA sender can generate its own timestamp based on
the local system clock and embed that information in the transport packet
header. The NADA receiver estimates the forward delay as having a constant
base delay component plus a time-varying queuing delay component. The base
delay is estimated as the minimum value of one-way delay observed over a
relatively long period (e.g., tens of minutes), whereas the individual
queuing delay value is taken to be the difference between one-way delay and
base delay. By re-estimating the base delay periodically, one can avoid the
potential issue of base delay expiration, whereby an earlier measured base
delay value is no longer valid due to underlying route changes or a cumulative
timing difference introduced by the clock-rate skew between sender and
receiver. All delay estimations are based on sender timestamps with a
recommended granularity of 100 microseconds or finer. </t>
          <t pn="section-5.1.1-2">
The individual sample values of queuing delay should be further
filtered against various non-congestion-induced noise, such as
spikes due to a processing "hiccup" at the network nodes. Therefore,
in addition to calculating the value of queuing delay using
d_queue = d_fwd - d_base, as expressed in <xref target="sec-receiver" format="default" sectionFormat="of" derivedContent="Section 5.1"/>, 
the current implementation further employs a minimum filter with
a window size of 15 samples over per-packet queuing delay values.
          </t>
        </section>
        <section anchor="sec-receiver-b" numbered="true" toc="include" removeInRFC="false" pn="section-5.1.2">
          <name slugifiedName="name-estimation-of-packet-loss-m">Estimation of Packet Loss/Marking Ratio</name>
          <t pn="section-5.1.2-1">The receiver detects packet losses via gaps in the
RTP sequence numbers of received packets. For interactive
real-time media applications with stringent latency
constraints (e.g., video conferencing), the receiver avoids
the packet reordering delay by treating out-of-order packets
as losses. The instantaneous packet loss ratio p_inst is estimated
as the ratio between the number of missing packets over
the number of total transmitted packets within the
recent observation window LOGWIN. The packet loss ratio
p_loss is obtained after exponential smoothing: </t>
          <artwork name="" type="" align="left" alt="" pn="section-5.1.2-2">    
            p_loss = ALPHA*p_inst + (1-ALPHA)*p_loss        (10)
	    </artwork>
          <t pn="section-5.1.2-3">The filtered result is reported back to the sender as
the observed packet loss ratio p_loss. </t>
          <t pn="section-5.1.2-4">
The estimation of the packet marking ratio p_mark follows the same procedure
as above.  It is assumed that ECN marking information at the IP header
can be passed to the receiving endpoint, e.g., by following the mechanism
described in <xref target="RFC6679" format="default" sectionFormat="of" derivedContent="RFC6679"/>.</t>
        </section>
        <section anchor="sec-receiver-c" numbered="true" toc="include" removeInRFC="false" pn="section-5.1.3">
          <name slugifiedName="name-estimation-of-receiving-rat">Estimation of Receiving Rate</name>
          <t pn="section-5.1.3-1">
It is fairly straightforward to estimate the receiving rate r_recv. NADA
maintains a recent observation window with a time span of LOGWIN and simply
divides the total size of packets arriving during that window over the time
span. The receiving rate (r_recv) can be either calculated at the sender side
based on the per-packet feedback from the receiver or included as part of the
feedback report.</t>
        </section>
      </section>
      <section anchor="sec-sender" numbered="true" toc="include" removeInRFC="false" pn="section-5.2">
        <name slugifiedName="name-sender-side-operation">Sender-Side Operation</name>
        <t pn="section-5.2-1">
<xref target="fig-nada-sender" format="default" sectionFormat="of" derivedContent="Figure 2"/> provides a detailed
view of the NADA sender. Upon receipt of an RTCP feedback
report from the receiver, the NADA sender calculates the
reference rate r_ref as specified in
<xref target="subsec-sender-algorithm" format="default" sectionFormat="of" derivedContent="Section 4.3"/>.
It further adjusts both the target rate for the live video
encoder r_vin and the sending rate r_send over the network
based on the updated value of r_ref and rate-shaping buffer
occupancy buffer_len.
        </t>
        <t pn="section-5.2-2">
The NADA sender behavior stays the same in the presence
of all types of congestion indicators: delay, loss, and
ECN marking. This unified approach allows a graceful
transition of the scheme as the network shifts dynamically
between light and heavy congestion levels.
        </t>
        <figure anchor="fig-nada-sender" align="left" suppress-title="false" pn="figure-2">
          <name slugifiedName="name-nada-sender-structure">NADA Sender Structure</name>
          <artwork name="" type="" align="left" alt="" pn="section-5.2-3.1">
                   +----------------+             
                   |  Calculate     | &lt;---- RTCP report
                   | Reference Rate | 
                   -----------------+
                           | r_ref
              +------------+-------------+
              |                          |
             \|/                        \|/
      +-----------------+           +---------------+
      | Calculate Video |           |   Calculate   |
      |  Target Rate    |           | Sending Rate  |
      +-----------------+           +---------------+
          |        /|\                 /|\      |   
    r_vin |         |                   |       |
         \|/        +-------------------+       |       
      +----------+          | buffer_len        |  r_send
      |  Video   | r_vout  -----------+        \|/
      |  Encoder |--------&gt;   |||||||||=================&gt;  
      +----------+         -----------+    RTP packets     
      Rate-Shaping Buffer         
</artwork>
        </figure>
        <section anchor="sec-sender-c" numbered="true" toc="include" removeInRFC="false" pn="section-5.2.1">
          <name slugifiedName="name-rate-shaping-buffer">Rate-Shaping Buffer</name>
          <t pn="section-5.2.1-1">
The operation of the live video encoder is out of the scope
of the design for the congestion control scheme in NADA.
Instead, its behavior is treated as a black box. 
          </t>
          <t pn="section-5.2.1-2">
A rate-shaping buffer is employed to absorb any instantaneous
mismatch between the encoder rate output r_vout and the regulated sending
rate r_send. Its current level of occupancy is measured in bytes
and is denoted as buffer_len.  
          </t>
          <t pn="section-5.2.1-3">A large rate-shaping buffer contributes to higher
end-to-end delay, which may harm the performance of
real-time media communications. Therefore, the sender
has a strong incentive to prevent the rate-shaping
buffer from building up. The mechanisms adopted are:
          </t>
          <ul spacing="normal" bare="false" empty="false" pn="section-5.2.1-4">
            <li pn="section-5.2.1-4.1">To deplete the rate-shaping buffer faster by
	    increasing the sending rate r_send; and </li>
            <li pn="section-5.2.1-4.2">To limit incoming packets of the rate-shaping
	    buffer by reducing the video encoder target rate
	    r_vin. </li>
          </ul>
        </section>
        <section anchor="sec-sender-d" numbered="true" toc="include" removeInRFC="false" pn="section-5.2.2">
          <name slugifiedName="name-adjusting-video-target-rate">Adjusting Video Target Rate and Sending Rate</name>
          <t pn="section-5.2.2-1">
If the level of occupancy in the rate-shaping buffer is accessible
at the sender, such information can be leveraged to further adjust
the target rate of the live video encoder r_vin as well as the
actual sending rate r_send. The purpose of such adjustments is to
mitigate the additional latencies introduced by the rate-shaping
buffer. The amount of rate adjustment can be calculated as follows:  
          </t>
          <artwork name="" type="" align="left" alt="" pn="section-5.2.2-2">
    r_diff_v = min(0.05*r_ref, BETA_V*8*buffer_len*FPS)     (11) 
    r_diff_s = min(0.05*r_ref, BETA_S*8*buffer_len*FPS)     (12) 
    r_vin  = max(RMIN, r_ref - r_diff_v)                    (13) 
    r_send = min(RMAX, r_ref + r_diff_s)                    (14)
</artwork>
          <t pn="section-5.2.2-3"> In Equations (11) and (12), the amount of adjustment is calculated
as proportional to the size of the rate-shaping buffer but is
bounded by 5% of the reference rate r_ref calculated from network
congestion feedback alone. This ensures that the adjustment
introduced by the rate-shaping buffer will not counteract with the core
congestion control process. Equations (13) and (14) indicate
the influence of the rate-shaping buffer. A large
rate-shaping buffer nudges the encoder target rate slightly
below (and the sending rate slightly above) the reference
rate r_ref. The final video target rate (r_vin) and sending
rate (r_send) are further bounded within the original range of
[RMIN, RMAX]. </t>
          <t pn="section-5.2.2-4">
Intuitively, the amount of extra rate offset needed to completely
drain the rate-shaping buffer within the duration of a single
video frame is given by 8*buffer_len*FPS, where FPS stands
for the reference frame rate of the video. The scaling parameters
BETA_V and BETA_S can be tuned to balance between the competing
goals of maintaining a small rate-shaping buffer and deviating
from the reference rate point. Empirical observations show that
the rate-shaping buffer for a responsive live video encoder typically
stays empty and only occasionally holds a large frame (e.g., when
an intra-frame is produced) in transit. Therefore, the rate adjustment
introduced by this mechanism is expected to be minor. For instance,
a rate-shaping buffer of 2000 bytes will lead to a rate adjustment
of 48 Kbps given the recommended scaling parameters of BETA_V = 0.1
and BETA_S = 0.1, and the reference frame rate of FPS = 30. 
          </t>
        </section>
      </section>
      <section anchor="sec-feedback" numbered="true" toc="include" removeInRFC="false" pn="section-5.3">
        <name slugifiedName="name-feedback-message-requiremen">Feedback Message Requirements</name>
        <t pn="section-5.3-1">The following list of information is required for
NADA congestion control to function properly: </t>
        <dl newline="false" spacing="normal" pn="section-5.3-2">
          <dt pn="section-5.3-2.1">Recommended rate adaptation mode (rmode):
</dt>
          <dd pn="section-5.3-2.2">A 1-bit flag indicating whether the sender should operate in accelerated
ramp-up mode (rmode=0) or gradual update mode (rmode=1).
</dd>
          <dt pn="section-5.3-2.3">Aggregated congestion signal (x_curr):
</dt>
          <dd pn="section-5.3-2.4">The most recently updated value, calculated by the receiver according to
<xref target="subsec-receiver-algorithm" format="default" sectionFormat="of" derivedContent="Section 4.2"/>. This information
can be expressed with a unit of 100 microseconds (i.e., 1/10 of a millisecond)
in 15 bits. This allows a maximum value of x_curr at approximately 3.27
seconds.
</dd>
          <dt pn="section-5.3-2.5">Receiving rate (r_recv):
</dt>
          <dd pn="section-5.3-2.6">The most recently measured receiving rate according to <xref target="sec-receiver-c" format="default" sectionFormat="of" derivedContent="Section 5.1.3"> </xref>. This information is
expressed with a unit of bits per second (bps) in 32 bits (unsigned int). This
allows a maximum rate of approximately 4.3 Gbps, approximately 1000 times the
streaming rate of a typical high-definition (HD) video conferencing session
today. This field can be expanded further by a few more bytes if an even
higher rate needs to be specified.
</dd>
        </dl>
        <t pn="section-5.3-3">
  The above list of information can be accommodated by 48 bits,
  or 6 bytes, in total. They can be either included in the
  feedback report from the receiver or, in the case where all
  receiver-side calculations are moved to the sender, derived
  from per-packet information from the feedback message as defined
  in <xref target="I-D.ietf-avtcore-cc-feedback-message" format="default" sectionFormat="of" derivedContent="RTCP-FEEDBACK"/>. 
  Choosing the feedback message interval DELTA is discussed in
  <xref target="sec-discussion-c" format="default" sectionFormat="of" derivedContent="Section 6.3"/>. A target feedback
  interval
  of DELTA = 100 ms is recommended. 
        </t>
      </section>
    </section>
    <section anchor="sec-discussions" numbered="true" toc="include" removeInRFC="false" pn="section-6">
      <name slugifiedName="name-discussions-and-further-inv">Discussions and Further Investigations</name>
      <t pn="section-6-1">This section discusses the various design choices
made by NADA, potential alternative variants of its
implementation, and guidelines on how the key algorithm
parameters can be chosen. <xref target="sec-experiments" format="default" sectionFormat="of" derivedContent="Section 8"/>
recommends additional experimental setups to 
further explore these topics. </t>
      <section anchor="sec-discussion-a" numbered="true" toc="include" removeInRFC="false" pn="section-6.1">
        <name slugifiedName="name-choice-of-delay-metrics">Choice of Delay Metrics</name>
        <t pn="section-6.1-1">
The current design works with relative one-way delay (OWD) as the main
indication of congestion. The value of the relative OWD is obtained by
maintaining the minimum value of observed OWD over a relatively long time
horizon and subtracting that out from the observed absolute OWD value. Such an
approach cancels out the fixed difference between the sender and receiver
clocks.  It has been widely adopted by other delay-based congestion control
approaches such as <xref target="RFC6817" format="default" sectionFormat="of" derivedContent="RFC6817"/>.  As discussed in
<xref target="RFC6817" format="default" sectionFormat="of" derivedContent="RFC6817"/>, the time horizon for tracking the
minimum OWD needs to be chosen with care; it must be long enough for an
opportunity to observe the minimum OWD with zero standing queue along the
path,
and it must be sufficiently short enough to timely reflect "true" changes in
minimum OWD introduced by route changes and other rare events and
to mitigate the cumulative impact of clock rate skew over time.
        </t>
        <t pn="section-6.1-2">
The potential drawback in relying on relative OWD as the congestion
signal is that when multiple flows share the same bottleneck, the
flow arriving late at the network experiencing a non-empty queue may
mistakenly consider the standing queuing delay as part of the fixed
path propagation delay. This will lead to slightly unfair bandwidth
sharing among the flows. 
        </t>
        <t pn="section-6.1-3">Alternatively, one could move the per-packet statistical handling
to the sender instead and use relative round-trip time (RTT) in lieu
of relative OWD, assuming that per-packet acknowledgments are available.
The main drawback of an RTT-based approach is the noise in the measured delay
in the reverse direction.
        </t>
        <t pn="section-6.1-4">
Note that the choice of either delay metric (relative OWD vs. RTT) involves no
change in the proposed rate adaptation algorithm.  Therefore, comparing the
pros and cons regarding which delay metric to adopt can be kept as an
orthogonal direction of investigation.
        </t>
      </section>
      <section anchor="sec-discussion-b" numbered="true" toc="include" removeInRFC="false" pn="section-6.2">
        <name slugifiedName="name-method-for-delay-loss-and-m">Method for Delay, Loss, and Marking Ratio Estimation</name>
        <t pn="section-6.2-1">Like other delay-based congestion control schemes, performance of
        NADA depends on the accuracy of its delay measurement and estimation
        module. <xref target="RFC6817" format="default" section="A" sectionFormat="of" derivedLink="https://rfc-editor.org/rfc/rfc6817#appendix-A" derivedContent="RFC6817"/>
        provides an extensive discussion on this aspect.
        </t>
        <t pn="section-6.2-2">The current recommended practice of applying minimum filter with a
        window size of 15 samples suffices in guarding against processing
        delay outliers observed in wired connections. For wireless connections
        with a higher packet delay variation (PDV), more sophisticated
        techniques on denoising, outlier rejection, and trend analysis may be
        needed. </t>
        <t pn="section-6.2-3">
More sophisticated methods in packet loss ratio calculation,
such as that adopted by <xref target="FLOYD-CCR00" format="default" sectionFormat="of" derivedContent="FLOYD-CCR00"/>,
will likely be beneficial. These alternatives are part of
the experiments this document proposes.</t>
      </section>
      <section anchor="sec-discussion-c" numbered="true" toc="include" removeInRFC="false" pn="section-6.3">
        <name slugifiedName="name-impact-of-parameter-values">Impact of Parameter Values</name>
        <t pn="section-6.3-1">In the gradual rate update mode, the parameter TAU indicates the
        upper bound of round-trip time (RTT) in the feedback control loop.
        Typically, the observed feedback interval delta is close to the target
        feedback interval DELTA, and the relative ratio of delta/TAU versus
        ETA dictates the relative strength of influence from the aggregate
        congestion signal offset term (x_offset) versus its recent change
        (x_diff), respectively. These two terms are analogous to the integral
        and proportional terms in a proportional-integral (PI) controller. The
        recommended choice of TAU = 500 ms, DELTA = 100 ms, and ETA = 2.0
	corresponds
        to a relative ratio of 1:10 between the gains of the integral and
        proportional terms. Consequently, the rate adaptation is mostly driven
        by the change in the congestion signal with a long-term shift towards
        its equilibrium value driven by the offset term. Finally, the scaling
        parameter KAPPA determines the overall speed of the adaptation and
        needs to strike a balance between responsiveness and stability. </t>
        <t pn="section-6.3-2">                                         
The choice of the target feedback interval DELTA needs to strike the right
balance between timely feedback and low RTCP feedback message counts. A target
feedback interval of DELTA = 100 ms is recommended, corresponding to a
feedback
bandwidth of 16 Kbps with 200 bytes per feedback message -- approximately 1.6%
overhead for a 1 Mbps flow. Furthermore, both simulation studies and
frequency-domain analysis in <xref target="IETF-95" format="default" sectionFormat="of" derivedContent="IETF-95"/> have
established that a feedback interval below 250 ms (i.e., more frequently than
4
feedback messages per second) will not break up the feedback control loop of
NADA congestion control. </t>
        <t pn="section-6.3-3">In calculating the non-linear warping of delay in Equation (1), 
the current design uses fixed values of QTH for determining
whether to perform the non-linear warping. Its value should be
carefully tuned for different operational environments (e.g.,
over wired vs. wireless connections) so as to avoid the potential
risk of prematurely discounting the congestion signal level.
It is possible to adapt its value based on past observed patterns
of queuing delay in the presence of packet losses. It needs to be
noted that the non-linear warping mechanism may lead to multiple
NADA streams stuck in loss-based mode when competing against
each other. </t>
        <t pn="section-6.3-4">In calculating the aggregate congestion signal x_curr, the
choice of DMARK and DLOSS influence the steady-state packet
loss/marking ratio experienced by the flow at a given
available bandwidth. Higher values of DMARK and DLOSS result
in lower steady-state loss/marking ratios but are more 
susceptible to the impact of individual packet loss/marking
events.  While the value of DMARK and DLOSS are fixed and
predetermined in the current design, this document also encourages
further explorations of a scheme for automatically
tuning these values based on desired bandwidth sharing behavior
in the presence of other competing loss-based flows (e.g.,
loss-based TCP).</t>
      </section>
      <section anchor="sec-discussion-d" numbered="true" toc="include" removeInRFC="false" pn="section-6.4">
        <name slugifiedName="name-sender-based-vs-receiver-ba">Sender-Based vs. Receiver-Based Calculation</name>
        <t pn="section-6.4-1">In the current design, the aggregated congestion
signal x_curr is calculated at the receiver, keeping
the sender operation completely independent of the
form of actual network congestion indications (delay, 
loss, or marking) in use. </t>
        <t pn="section-6.4-2">Alternatively, one can shift receiver-side calculations
to the sender, whereby the receiver simply reports on per-packet
information via periodic feedback messages as defined in
<xref target="I-D.ietf-avtcore-cc-feedback-message" format="default" sectionFormat="of" derivedContent="RTCP-FEEDBACK"/>. 
Such an approach enables interoperability amongst senders operating
on different congestion control schemes but requires slightly
higher overhead in the feedback messages. See additional discussions
in <xref target="I-D.ietf-avtcore-cc-feedback-message" format="default" sectionFormat="of" derivedContent="RTCP-FEEDBACK"/>
regarding the desired format of the feedback messages and the
recommended feedback intervals. </t>
      </section>
      <section anchor="sec-discussion-e" numbered="true" toc="include" removeInRFC="false" pn="section-6.5">
        <name slugifiedName="name-incremental-deployment">Incremental Deployment</name>
        <t pn="section-6.5-1">
One nice property of NADA is the consistent video endpoint
behavior irrespective of network node variations. This facilitates
gradual, incremental adoption of the scheme. 
        </t>
        <t pn="section-6.5-2">
Initially, the proposed congestion control mechanism can
be implemented without any explicit support from the network and
relies solely on observed relative one-way delay measurements
and packet loss ratios as implicit congestion signals. 
        </t>
        <t pn="section-6.5-3">
When ECN is enabled at the network nodes with RED-based marking,
the receiver can fold its observations of ECN markings into the
calculation of the equivalent delay. The sender can react to these
explicit congestion signals without any modification.
        </t>
        <t pn="section-6.5-4">
Ultimately, networks equipped with proactive marking based on the level of
token bucket metering can reap the additional benefits of
zero standing queues and lower end-to-end delay and work
seamlessly with existing senders and receivers. 
        </t>
      </section>
    </section>
    <section anchor="sec-implementations" numbered="true" toc="include" removeInRFC="false" pn="section-7">
      <name slugifiedName="name-reference-implementations">Reference Implementations</name>
      <t pn="section-7-1">
The NADA scheme has been implemented in both ns-2 <xref target="NS-2" format="default" sectionFormat="of" derivedContent="NS-2"/>
and ns-3 <xref target="NS-3" format="default" sectionFormat="of" derivedContent="NS-3"/> simulation platforms.  The
implementation
in ns-2 hosts the calculations as described in
<xref target="subsec-receiver-algorithm" format="default" sectionFormat="of" derivedContent="Section 4.2"/> at the receiver
side,
whereas the implementation in ns-3 hosts these receiver-side calculations
at the sender for the sake of interoperability. Extensive ns-2 simulation
evaluations of an earlier draft version of this document are recorded in
<xref target="ZHU-PV13" format="default" sectionFormat="of" derivedContent="ZHU-PV13"/>. 
An open-source implementation of NADA as part of an ns-3 module is
available at <xref target="NS3-RMCAT" format="default" sectionFormat="of" derivedContent="NS3-RMCAT"/>.
Evaluation results of this document based on ns-3 are presented
in <xref target="IETF-90" format="default" sectionFormat="of" derivedContent="IETF-90"/> and <xref target="IETF-91" format="default" sectionFormat="of" derivedContent="IETF-91"/>
for wired test cases as documented in <xref target="I-D.ietf-rmcat-eval-test" format="default" sectionFormat="of" derivedContent="RMCAT-EVAL-TEST"/>.
Evaluation results of NADA over Wi-Fi-based test cases as defined in
<xref target="I-D.ietf-rmcat-wireless-tests" format="default" sectionFormat="of" derivedContent="WIRELESS-TESTS"/> are
presented in <xref target="IETF-93" format="default" sectionFormat="of" derivedContent="IETF-93"/>. These simulation-based
evaluations have shown that NADA flows can obtain their fair share of
bandwidth when competing against each other. They typically adapt fast
in reaction to the arrival and departure of other flows and can sustain
a reasonable throughput when competing against loss-based TCP flows. </t>
      <t pn="section-7-2"> 
<xref target="IETF-90" format="default" sectionFormat="of" derivedContent="IETF-90"/> describes the  implementation and
evaluation of NADA in a lab setting. Preliminary evaluation
results of NADA in single-flow and multi-flow test scenarios
are presented in <xref target="IETF-91" format="default" sectionFormat="of" derivedContent="IETF-91"/>. </t>
      <t pn="section-7-3">
A reference implementation of NADA has been carried out by
modifying the WebRTC module embedded in the Mozilla open-source
browser. Presentations from <xref target="IETF-103" format="default" sectionFormat="of" derivedContent="IETF-103"/>
and <xref target="IETF-105" format="default" sectionFormat="of" derivedContent="IETF-105"/> document real-world evaluations
of the modified browser driven by NADA. The experimental setting
involves remote connections with endpoints over either home or enterprise
wireless networks. These evaluations validate the effectiveness of
NADA flows in recovering quickly from throughput drops caused by
intermittent delay spikes over the last-hop wireless connections. </t>
    </section>
    <section anchor="sec-experiments" numbered="true" toc="include" removeInRFC="false" pn="section-8">
      <name slugifiedName="name-suggested-experiments">Suggested Experiments</name>
      <t pn="section-8-1">
NADA has been extensively evaluated under various test scenarios, including
the collection of test cases specified by <xref target="I-D.ietf-rmcat-eval-test" format="default" sectionFormat="of" derivedContent="RMCAT-EVAL-TEST"/> and the subset of
Wi-Fi-based test cases in <xref target="I-D.ietf-rmcat-wireless-tests" format="default" sectionFormat="of" derivedContent="WIRELESS-TESTS"/>.  Additional evaluations have been carried out to
characterize how NADA interacts with various AQM
schemes such as RED, Controlling Queue Delay (CoDel), and Proportional
Integral Controller Enhanced (PIE). Most of these evaluations have been
carried out in simulators. A few key test cases have been evaluated in lab
environments with implementations embedded in video conferencing clients. It
is strongly recommended to carry out implementation and experimentation of
NADA in real-world settings. Such exercises will provide insights on how to
choose or automatically adapt the values of the key algorithm parameters (see
list in <xref target="tab-parameters" format="default" sectionFormat="of" derivedContent="Table 2"/>) as discussed in
<xref target="sec-discussions" format="default" sectionFormat="of" derivedContent="Section 6"/>. </t>
      <t pn="section-8-2">Additional experiments are suggested for the following scenarios,
      preferably over real-world networks: </t>
      <ul spacing="normal" bare="false" empty="false" pn="section-8-3">
        <li pn="section-8-3.1">Experiments reflecting the setup of a typical WAN
	connection. </li>
        <li pn="section-8-3.2">Experiments with ECN marking capability turned on at the network
  for existing test cases.</li>
        <li pn="section-8-3.3">Experiments with multiple NADA streams bearing different
  user-specified priorities.</li>
        <li pn="section-8-3.4">Experiments with additional access technologies, especially
over cellular networks such as 3G/LTE.</li>
        <li pn="section-8-3.5">Experiments with various media source contents, including audio
	only,
  audio and video, and application content sharing (e.g., slideshows). </li>
      </ul>
    </section>
    <section anchor="sec-iana" numbered="true" toc="include" removeInRFC="false" pn="section-9">
      <name slugifiedName="name-iana-considerations">IANA Considerations</name>
      <t pn="section-9-1">This document has no IANA actions.</t>
    </section>
    <section anchor="sec-security" numbered="true" toc="include" removeInRFC="false" pn="section-10">
      <name slugifiedName="name-security-considerations">Security Considerations</name>
      <t pn="section-10-1">The rate adaptation mechanism in NADA relies on feedback from the
      receiver. As such, it is vulnerable to attacks where feedback messages
      are hijacked, replaced, or intentionally injected with misleading
      information resulting in denial of service, similar to those that can
      affect TCP. Therefore, it is <bcp14>RECOMMENDED</bcp14> that the RTCP
      feedback message is at least integrity checked. In addition, <xref target="I-D.ietf-avtcore-cc-feedback-message" format="default" sectionFormat="of" derivedContent="RTCP-FEEDBACK"/>
      discusses the potential risk of a receiver providing misleading
      congestion feedback information and the mechanisms for mitigating such
      risks.</t>
      <t pn="section-10-2">The modification of the sending rate based on the sender-side
      rate-shaping
      buffer may lead to temporary excessive congestion over the network in
      the presence of an unresponsive video encoder. However, this effect can
      be mitigated by limiting the amount of rate modification introduced by
      the rate-shaping buffer, bounding the size of the rate-shaping buffer at
      the sender, and maintaining a maximum allowed sending rate by NADA.
      </t>
    </section>
  </middle>
  <back>
    <displayreference target="I-D.ietf-rmcat-cc-requirements" to="RMCAT-CC"/>
    <displayreference target="I-D.ietf-rmcat-cc-codec-interactions" to="RMCAT-CC-RTP"/>
    <displayreference target="I-D.ietf-rmcat-eval-test" to="RMCAT-EVAL-TEST"/>
    <displayreference target="I-D.ietf-rmcat-wireless-tests" to="WIRELESS-TESTS"/>
    <displayreference target="I-D.ietf-avtcore-cc-feedback-message" to="RTCP-FEEDBACK"/>
    <references pn="section-11">
      <name slugifiedName="name-references">References</name>
      <references pn="section-11.1">
        <name slugifiedName="name-normative-references">Normative References</name>
        <reference anchor="RFC2119" target="https://www.rfc-editor.org/info/rfc2119" quoteTitle="true" derivedAnchor="RFC2119">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <author initials="S." surname="Bradner" fullname="S. Bradner">
              <organization showOnFrontPage="true"/>
            </author>
            <date year="1997" month="March"/>
            <abstract>
              <t>In many standards track documents several words are used to signify the requirements in the specification.  These words are often capitalized. This document defines these words as they should be interpreted in IETF documents.  This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="2119"/>
          <seriesInfo name="DOI" value="10.17487/RFC2119"/>
        </reference>
        <reference anchor="RFC3168" target="https://www.rfc-editor.org/info/rfc3168" quoteTitle="true" derivedAnchor="RFC3168">
          <front>
            <title>The Addition of Explicit Congestion Notification (ECN) to IP</title>
            <author initials="K." surname="Ramakrishnan" fullname="K. Ramakrishnan">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="S." surname="Floyd" fullname="S. Floyd">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="D." surname="Black" fullname="D. Black">
              <organization showOnFrontPage="true"/>
            </author>
            <date year="2001" month="September"/>
            <abstract>
              <t>This memo specifies the incorporation of ECN (Explicit Congestion Notification) to TCP and IP, including ECN's use of two bits in the IP header.  [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="3168"/>
          <seriesInfo name="DOI" value="10.17487/RFC3168"/>
        </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 initials="H." surname="Schulzrinne" fullname="H. Schulzrinne">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="S." surname="Casner" fullname="S. Casner">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="R." surname="Frederick" fullname="R. Frederick">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="V." surname="Jacobson" fullname="V. Jacobson">
              <organization showOnFrontPage="true"/>
            </author>
            <date year="2003" month="July"/>
            <abstract>
              <t>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="RFC5348" target="https://www.rfc-editor.org/info/rfc5348" quoteTitle="true" derivedAnchor="RFC5348">
          <front>
            <title>TCP Friendly Rate Control (TFRC): Protocol Specification</title>
            <author initials="S." surname="Floyd" fullname="S. Floyd">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="M." surname="Handley" fullname="M. Handley">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="J." surname="Padhye" fullname="J. Padhye">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="J." surname="Widmer" fullname="J. Widmer">
              <organization showOnFrontPage="true"/>
            </author>
            <date year="2008" month="September"/>
            <abstract>
              <t>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>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="RFC6679" target="https://www.rfc-editor.org/info/rfc6679" quoteTitle="true" derivedAnchor="RFC6679">
          <front>
            <title>Explicit Congestion Notification (ECN) for RTP over UDP</title>
            <author initials="M." surname="Westerlund" fullname="M. Westerlund">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="I." surname="Johansson" fullname="I. Johansson">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="C." surname="Perkins" fullname="C. Perkins">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="P." surname="O'Hanlon" fullname="P. O'Hanlon">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="K." surname="Carlberg" fullname="K. Carlberg">
              <organization showOnFrontPage="true"/>
            </author>
            <date year="2012" month="August"/>
            <abstract>
              <t>This memo specifies how Explicit Congestion Notification (ECN) can be used with the Real-time Transport Protocol (RTP) running over UDP, using the RTP Control Protocol (RTCP) as a feedback mechanism.  It defines a new RTCP Extended Report (XR) block for periodic ECN feedback, a new RTCP transport feedback message for timely reporting of congestion events, and a Session Traversal Utilities for NAT (STUN) extension used in the optional initialisation method using Interactive Connectivity Establishment (ICE).  Signalling and procedures for negotiation of capabilities and initialisation methods are also defined.  [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6679"/>
          <seriesInfo name="DOI" value="10.17487/RFC6679"/>
        </reference>
        <reference anchor="RFC8174" target="https://www.rfc-editor.org/info/rfc8174" quoteTitle="true" derivedAnchor="RFC8174">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <author initials="B." surname="Leiba" fullname="B. Leiba">
              <organization showOnFrontPage="true"/>
            </author>
            <date year="2017" month="May"/>
            <abstract>
              <t>RFC 2119 specifies common key words that may be used in protocol  specifications.  This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the  defined special meanings.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="8174"/>
          <seriesInfo name="DOI" value="10.17487/RFC8174"/>
        </reference>
      </references>
      <references pn="section-11.2">
        <name slugifiedName="name-informative-references">Informative References</name>
        <reference anchor="BUDZISZ-AIMD-CC" target="https://doi.org/10.1109/TNET.2011.2159736" quoteTitle="true" derivedAnchor="BUDZISZ-AIMD-CC">
          <front>
            <title>On the Fair Coexistence of Loss- and Delay-Based TCP</title>
            <seriesInfo name="DOI" value="10.1109/TNET.2011.2159736"/>
            <author fullname="Lukasz Budzisz" initials="L." surname="Budzisz">
              <organization showOnFrontPage="true"/>
            </author>
            <author fullname="Rade Stanojevic" initials="R." surname="Stanojevic">
              <organization showOnFrontPage="true"/>
            </author>
            <author fullname="Arieh Schlote" initials="A." surname="Schlote">
              <organization showOnFrontPage="true"/>
            </author>
            <author fullname="Fred Baker" initials="F." surname="Baker">
              <organization showOnFrontPage="true"/>
            </author>
            <author fullname="Robert Shorten" initials="R." surname="Shorten">
              <organization showOnFrontPage="true"/>
            </author>
            <date month="December" year="2011"/>
          </front>
          <refcontent>IEEE/ACM Transactions on Networking, vol. 19, no. 6,
	  pp. 1811-1824
          </refcontent>
        </reference>
        <reference anchor="FLOYD-CCR00" target="https://doi.org/10.1145/347057.347397" quoteTitle="true" derivedAnchor="FLOYD-CCR00">
          <front>
            <title>Equation-based congestion control for unicast applications</title>
            <seriesInfo name="DOI" value="10.1145/347057.347397"/>
            <author fullname="Sally Floyd" initials="S." surname="Floyd">
              <organization showOnFrontPage="true"/>
            </author>
            <author fullname="Mark Handley" initials="M." surname="Handley">
              <organization showOnFrontPage="true"/>
            </author>
            <author fullname="Jitendra Padhye" initials="J." surname="Padhye">
              <organization showOnFrontPage="true"/>
            </author>
            <author fullname="Jörg Widmer" initials="J." surname="Widmer">
              <organization showOnFrontPage="true"/>
            </author>
            <date month="October" year="2000"/>
          </front>
          <refcontent>ACM SIGCOMM Computer Communications Review, vol. 30,
	    no. 4, pp. 43-56 
          </refcontent>
        </reference>
        <reference anchor="IETF-103" target="https://datatracker.ietf.org/meeting/103/materials/slides-103-rmcat-nada-implementation-in-mozilla-browser-00" quoteTitle="true" derivedAnchor="IETF-103">
          <front>
            <title>NADA Implementation in Mozilla Browser</title>
            <author fullname="Xiaoqing Zhu" initials="X." surname="Zhu">
              <organization showOnFrontPage="true"/>
            </author>
            <author fullname="Rong Pan" initials="R." surname="Pan">
              <organization showOnFrontPage="true"/>
            </author>
            <author fullname="Michael Ramalho" initials="M." surname="Ramalho">
              <organization showOnFrontPage="true"/>
            </author>
            <author fullname="Sergio Mena" initials="S." surname="Mena">
              <organization showOnFrontPage="true"/>
            </author>
            <author fullname="Paul E. Jones" initials="P." surname="Jones">
              <organization showOnFrontPage="true"/>
            </author>
            <author fullname="Jiantao Fu" initials="J." surname="Fu">
              <organization showOnFrontPage="true"/>
            </author>
            <author fullname="Stefano D'Aronco" initials="S." surname="D'Aronco">
              <organization showOnFrontPage="true"/>
            </author>
            <date month="November" year="2018"/>
          </front>
          <refcontent>IETF 103
          </refcontent>
        </reference>
        <reference anchor="IETF-105" target="https://datatracker.ietf.org/meeting/105/materials/slides-105-rmcat-nada-update-02.pdf" quoteTitle="true" derivedAnchor="IETF-105">
          <front>
            <title>NADA Implementation in Mozilla Browser and Draft Update</title>
            <author fullname="Xiaoqing Zhu" initials="X." surname="Zhu">
              <organization showOnFrontPage="true"/>
            </author>
            <author fullname="Rong Pan" initials="R." surname="Pan">
              <organization showOnFrontPage="true"/>
            </author>
            <author fullname="Michael Ramalho" initials="M." surname="Ramalho">
              <organization showOnFrontPage="true"/>
            </author>
            <author fullname="Sergio Mena" initials="S." surname="Mena">
              <organization showOnFrontPage="true"/>
            </author>
            <author fullname="Paul E. Jones" initials="P." surname="Jones">
              <organization showOnFrontPage="true"/>
            </author>
            <author fullname="Jiantao Fu" initials="J." surname="Fu">
              <organization showOnFrontPage="true"/>
            </author>
            <author fullname="Stefano D'Aronco" initials="S." surname="D'Aronco">
              <organization showOnFrontPage="true"/>
            </author>
            <date month="July" year="2019"/>
          </front>
          <refcontent>IETF 105
          </refcontent>
        </reference>
        <reference anchor="IETF-90" target="https://tools.ietf.org/agenda/90/slides/slides-90-rmcat-6.pdf" quoteTitle="true" derivedAnchor="IETF-90">
          <front>
            <title>NADA Update: Algorithm, Implementation, and Test Case Evaluation Results</title>
            <author fullname="Xiaoqing Zhu" initials="X." surname="Zhu">
              <organization showOnFrontPage="true"/>
            </author>
            <author fullname="Michael Ramalho" initials="M." surname="Ramalho">
              <organization showOnFrontPage="true"/>
            </author>
            <author fullname="Charles Ganzhorn" initials="C." surname="Ganzhorn">
              <organization showOnFrontPage="true"/>
            </author>
            <author fullname="Paul E. Jones" initials="P." surname="Jones">
              <organization showOnFrontPage="true"/>
            </author>
            <author fullname="Rong Pan" initials="R." surname="Pan">
              <organization showOnFrontPage="true"/>
            </author>
            <date month="July" year="2014"/>
          </front>
          <refcontent>IETF 90
          </refcontent>
        </reference>
        <reference anchor="IETF-91" target="https://www.ietf.org/proceedings/interim/2014/11/09/rmcat/slides/slides-interim-2014-rmcat-1-2.pdf" quoteTitle="true" derivedAnchor="IETF-91">
          <front>
            <title>NADA Algorithm Update and Test Case Evaluations</title>
            <author fullname="Xiaoqing Zhu" initials="X." surname="Zhu">
              <organization showOnFrontPage="true"/>
            </author>
            <author fullname="Rong Pan" initials="R." surname="Pan">
              <organization showOnFrontPage="true"/>
            </author>
            <author fullname="Michael Ramalho" initials="M." surname="Ramalho">
              <organization showOnFrontPage="true"/>
            </author>
            <author fullname="Sergio Mena" initials="S." surname="Mena">
              <organization showOnFrontPage="true"/>
            </author>
            <author fullname="Charles Ganzhorn" initials="C." surname="Ganzhorn">
              <organization showOnFrontPage="true"/>
            </author>
            <author fullname="Paul E. Jones" initials="P." surname="Jones">
              <organization showOnFrontPage="true"/>
            </author>
            <author fullname="Stefano D'Aronco" initials="S." surname="D'Aronco">
              <organization showOnFrontPage="true"/>
            </author>
            <date month="November" year="2014"/>
          </front>
          <refcontent>IETF 91
          </refcontent>
        </reference>
        <reference anchor="IETF-93" target="https://www.ietf.org/proceedings/93/slides/slides-93-rmcat-0.pdf" quoteTitle="true" derivedAnchor="IETF-93">
          <front>
            <title>Updates on NADA</title>
            <author fullname="Xiaoqing Zhu" initials="X." surname="Zhu">
              <organization showOnFrontPage="true"/>
            </author>
            <author fullname="Rong Pan" initials="R." surname="Pan">
              <organization showOnFrontPage="true"/>
            </author>
            <author fullname="Michael Ramalho" initials="M." surname="Ramalho">
              <organization showOnFrontPage="true"/>
            </author>
            <author fullname="Sergio Mena" initials="S." surname="Mena">
              <organization showOnFrontPage="true"/>
            </author>
            <author fullname="Charles Ganzhorn" initials="C." surname="Ganzhorn">
              <organization showOnFrontPage="true"/>
            </author>
            <author fullname="Paul E. Jones" initials="P." surname="Jones">
              <organization showOnFrontPage="true"/>
            </author>
            <author fullname="Stefano D'Aronco" initials="S." surname="D'Aronco">
              <organization showOnFrontPage="true"/>
            </author>
            <author fullname="Jiantao Fu" initials="J." surname="Fu">
              <organization showOnFrontPage="true"/>
            </author>
            <date month="July" year="2015"/>
          </front>
          <refcontent>IETF 93
          </refcontent>
        </reference>
        <reference anchor="IETF-95" target="https://www.ietf.org/proceedings/95/slides/slides-95-rmcat-5.pdf" quoteTitle="true" derivedAnchor="IETF-95">
          <front>
            <title>Updates on NADA: Stability Analysis and Impact of Feedback Intervals</title>
            <author fullname="Xiaoqing Zhu" initials="X." surname="Zhu">
              <organization showOnFrontPage="true"/>
            </author>
            <author fullname="Rong Pan" initials="R." surname="Pan">
              <organization showOnFrontPage="true"/>
            </author>
            <author fullname="Michael Ramalho" initials="M." surname="Ramalho">
              <organization showOnFrontPage="true"/>
            </author>
            <author fullname="Sergio Mena" initials="S." surname="Mena">
              <organization showOnFrontPage="true"/>
            </author>
            <author fullname="Paul E. Jones" initials="P." surname="Jones">
              <organization showOnFrontPage="true"/>
            </author>
            <author fullname="Jiantao Fu" initials="J." surname="Fu">
              <organization showOnFrontPage="true"/>
            </author>
            <author fullname="Stefano D'Aronco" initials="S." surname="D'Aronco">
              <organization showOnFrontPage="true"/>
            </author>
            <author fullname="Charles Ganzhorn" initials="C." surname="Ganzhorn">
              <organization showOnFrontPage="true"/>
            </author>
            <date month="April" year="2016"/>
          </front>
          <refcontent>IETF 95
          </refcontent>
        </reference>
        <reference anchor="NS-2" target="http://nsnam.sourceforge.net/wiki/index.php/Main_Page" quoteTitle="true" derivedAnchor="NS-2">
          <front>
            <title>ns-2</title>
            <author>
              <organization showOnFrontPage="true"/>
            </author>
            <date month="December" year="2014"/>
          </front>
        </reference>
        <reference anchor="NS-3" target="https://www.nsnam.org/" quoteTitle="true" derivedAnchor="NS-3">
          <front>
            <title>ns-3 Network Simulator</title>
            <author>
              <organization showOnFrontPage="true"/>
            </author>
          </front>
        </reference>
        <reference anchor="NS3-RMCAT" target="https://github.com/cisco/ns3-rmcat" quoteTitle="true" derivedAnchor="NS3-RMCAT">
          <front>
            <title>Simulator of IETF RMCAT congestion control protocols</title>
            <author fullname="Jiantao Fu" initials="J." surname="Fu">
              <organization showOnFrontPage="true"/>
            </author>
            <author fullname="Sergio Mena" initials="S." surname="Mena">
              <organization showOnFrontPage="true"/>
            </author>
            <author fullname="Xiaoqing Zhu" initials="X." surname="Zhu">
              <organization showOnFrontPage="true"/>
            </author>
            <date month="November" year="2017"/>
          </front>
        </reference>
        <reference anchor="RFC5450" target="https://www.rfc-editor.org/info/rfc5450" quoteTitle="true" derivedAnchor="RFC5450">
          <front>
            <title>Transmission Time Offsets in RTP Streams</title>
            <author initials="D." surname="Singer" fullname="D. Singer">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="H." surname="Desineni" fullname="H. Desineni">
              <organization showOnFrontPage="true"/>
            </author>
            <date year="2009" month="March"/>
            <abstract>
              <t>This document describes a method to inform Real-time Transport Protocol (RTP) clients when RTP packets are transmitted at a time other than their 'nominal' transmission time.  It also provides a mechanism to provide improved inter-arrival jitter reports from the clients, that take into account the reported transmission times.  [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="5450"/>
          <seriesInfo name="DOI" value="10.17487/RFC5450"/>
        </reference>
        <reference anchor="RFC6660" target="https://www.rfc-editor.org/info/rfc6660" quoteTitle="true" derivedAnchor="RFC6660">
          <front>
            <title>Encoding Three Pre-Congestion Notification (PCN) States in the IP Header Using a Single Diffserv Codepoint (DSCP)</title>
            <author initials="B." surname="Briscoe" fullname="B. Briscoe">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="T." surname="Moncaster" fullname="T. Moncaster">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="M." surname="Menth" fullname="M. Menth">
              <organization showOnFrontPage="true"/>
            </author>
            <date year="2012" month="July"/>
            <abstract>
              <t>The objective of Pre-Congestion Notification (PCN) is to protect the quality of service (QoS) of inelastic flows within a Diffserv domain. The overall rate of PCN-traffic is metered on every link in the PCN- domain, and PCN-packets are appropriately marked when certain configured rates are exceeded.  Egress nodes pass information about these PCN-marks to Decision Points that then decide whether to admit or block new flow requests or to terminate some already admitted flows during serious pre-congestion.</t>
              <t>This document specifies how PCN-marks are to be encoded into the IP header by reusing the Explicit Congestion Notification (ECN) codepoints within a PCN-domain.  The PCN wire protocol for non-IP protocol headers will need to be defined elsewhere.  Nonetheless, this document clarifies the PCN encoding for MPLS in an informational appendix.  The encoding for IP provides for up to three different PCN marking states using a single Diffserv codepoint (DSCP): not-marked (NM), threshold-marked (ThM), and excess-traffic-marked (ETM). Hence, it is called the 3-in-1 PCN encoding.  This document obsoletes RFC 5696.  [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6660"/>
          <seriesInfo name="DOI" value="10.17487/RFC6660"/>
        </reference>
        <reference anchor="RFC6817" target="https://www.rfc-editor.org/info/rfc6817" quoteTitle="true" derivedAnchor="RFC6817">
          <front>
            <title>Low Extra Delay Background Transport (LEDBAT)</title>
            <author initials="S." surname="Shalunov" fullname="S. Shalunov">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="G." surname="Hazel" fullname="G. Hazel">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="J." surname="Iyengar" fullname="J. Iyengar">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="M." surname="Kuehlewind" fullname="M. Kuehlewind">
              <organization showOnFrontPage="true"/>
            </author>
            <date year="2012" month="December"/>
            <abstract>
              <t>Low Extra Delay Background Transport (LEDBAT) is an experimental delay-based congestion control algorithm that seeks to utilize the available bandwidth on an end-to-end path while limiting the consequent increase in queueing delay on that path.  LEDBAT uses changes in one-way delay measurements to limit congestion that the flow itself induces in the network.  LEDBAT is designed for use by background bulk-transfer applications to be no more aggressive than standard TCP congestion control (as specified in RFC 5681) and to yield in the presence of competing flows, thus limiting interference with the network performance of competing flows.  This document defines  an Experimental Protocol for the Internet community.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6817"/>
          <seriesInfo name="DOI" value="10.17487/RFC6817"/>
        </reference>
        <reference anchor="RFC7567" target="https://www.rfc-editor.org/info/rfc7567" quoteTitle="true" derivedAnchor="RFC7567">
          <front>
            <title>IETF Recommendations Regarding Active Queue Management</title>
            <author initials="F." surname="Baker" fullname="F. Baker" role="editor">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="G." surname="Fairhurst" fullname="G. Fairhurst" role="editor">
              <organization showOnFrontPage="true"/>
            </author>
            <date year="2015" month="July"/>
            <abstract>
              <t>This memo presents recommendations to the Internet community concerning measures to improve and preserve Internet performance.  It presents a strong recommendation for testing, standardization, and widespread deployment of active queue management (AQM) in network devices to improve the performance of today's Internet.  It also urges a concerted effort of research, measurement, and ultimate deployment of AQM mechanisms to protect the Internet from flows that are not sufficiently responsive to congestion notification.</t>
              <t>Based on 15 years of experience and new research, this document replaces the recommendations of RFC 2309.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="197"/>
          <seriesInfo name="RFC" value="7567"/>
          <seriesInfo name="DOI" value="10.17487/RFC7567"/>
        </reference>
        <reference anchor="RFC8033" target="https://www.rfc-editor.org/info/rfc8033" quoteTitle="true" derivedAnchor="RFC8033">
          <front>
            <title>Proportional Integral Controller Enhanced (PIE): A Lightweight Control Scheme to Address the Bufferbloat Problem</title>
            <author initials="R." surname="Pan" fullname="R. Pan">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="P." surname="Natarajan" fullname="P. Natarajan">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="F." surname="Baker" fullname="F. Baker">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="G." surname="White" fullname="G. White">
              <organization showOnFrontPage="true"/>
            </author>
            <date year="2017" month="February"/>
            <abstract>
              <t>Bufferbloat is a phenomenon in which excess buffers in the network cause high latency and latency variation.  As more and more interactive applications (e.g., voice over IP, real-time video streaming, and financial transactions) run in the Internet, high latency and latency variation degrade application performance.  There is a pressing need to design intelligent queue management schemes that can control latency and latency variation, and hence provide desirable quality of service to users.</t>
              <t>This document presents a lightweight active queue management design called "PIE" (Proportional Integral controller Enhanced) that can effectively control the average queuing latency to a target value. Simulation results, theoretical analysis, and Linux testbed results have shown that PIE can ensure low latency and achieve high link utilization under various congestion situations.  The design does not require per-packet timestamps, so it incurs very little overhead and is simple enough to implement in both hardware and software.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8033"/>
          <seriesInfo name="DOI" value="10.17487/RFC8033"/>
        </reference>
        <reference anchor="RFC8290" target="https://www.rfc-editor.org/info/rfc8290" quoteTitle="true" derivedAnchor="RFC8290">
          <front>
            <title>The Flow Queue CoDel Packet Scheduler and Active Queue Management Algorithm</title>
            <author initials="T." surname="Hoeiland-Joergensen" fullname="T. Hoeiland-Joergensen">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="P." surname="McKenney" fullname="P. McKenney">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="D." surname="Taht" fullname="D. Taht">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="J." surname="Gettys" fullname="J. Gettys">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="E." surname="Dumazet" fullname="E. Dumazet">
              <organization showOnFrontPage="true"/>
            </author>
            <date year="2018" month="January"/>
            <abstract>
              <t>This memo presents the FQ-CoDel hybrid packet scheduler and Active Queue Management (AQM) algorithm, a powerful tool for fighting bufferbloat and reducing latency.</t>
              <t>FQ-CoDel mixes packets from multiple flows and reduces the impact of head-of-line blocking from bursty traffic.  It provides isolation for low-rate traffic such as DNS, web, and videoconferencing traffic.  It improves utilisation across the networking fabric, especially for bidirectional traffic, by keeping queue lengths short, and it can be implemented in a memory- and CPU-efficient fashion across a wide range of hardware.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8290"/>
          <seriesInfo name="DOI" value="10.17487/RFC8290"/>
        </reference>
        <reference anchor="RFC8593" target="https://www.rfc-editor.org/info/rfc8593" quoteTitle="true" derivedAnchor="RFC8593">
          <front>
            <title>Video Traffic Models for RTP Congestion Control Evaluations</title>
            <author initials="X." surname="Zhu" fullname="X. Zhu">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="S." surname="Mena" fullname="S. Mena">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="Z." surname="Sarker" fullname="Z. Sarker">
              <organization showOnFrontPage="true"/>
            </author>
            <date year="2019" month="May"/>
            <abstract>
              <t>This document describes two reference video traffic models for evaluating RTP congestion control algorithms.  The first model statistically characterizes the behavior of a live video encoder in response to changing requests on the target video rate.  The second model is trace-driven and emulates the output of actual encoded video frame sizes from a high-resolution test sequence.  Both models are designed to strike a balance between simplicity, repeatability, and authenticity in modeling the interactions between a live video traffic source and the congestion control module.  Finally, the document describes how both approaches can be combined into a hybrid model.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8593"/>
          <seriesInfo name="DOI" value="10.17487/RFC8593"/>
        </reference>
        <reference anchor="I-D.ietf-rmcat-cc-requirements" quoteTitle="true" target="https://tools.ietf.org/html/draft-ietf-rmcat-cc-requirements-09" derivedAnchor="RMCAT-CC">
          <front>
            <title>Congestion Control Requirements for Interactive Real-Time Media</title>
            <author initials="R" surname="Jesup" fullname="Randell Jesup">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="Z" surname="Sarker" fullname="Zaheduzzaman Sarker">
              <organization showOnFrontPage="true"/>
            </author>
            <date month="December" day="12" year="2014"/>
            <abstract>
              <t>Congestion control is needed for all data transported across the Internet, in order to promote fair usage and prevent congestion collapse.  The requirements for interactive, point-to-point real-time multimedia, which needs low-delay, semi-reliable data delivery, are different from the requirements for bulk transfer like FTP or bursty transfers like Web pages.  Due to an increasing amount of RTP-based real-time media traffic on the Internet (e.g. with the introduction of the Web Real-Time Communication (WebRTC)), it is especially important to ensure that this kind of traffic is congestion controlled.  This document describes a set of requirements that can be used to evaluate other congestion control mechanisms in order to figure out their fitness for this purpose, and in particular to provide a set of possible requirements for real-time media congestion avoidance technique.</t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-rmcat-cc-requirements-09"/>
          <format type="TXT" target="http://www.ietf.org/internet-drafts/draft-ietf-rmcat-cc-requirements-09.txt"/>
          <refcontent>Work in Progress</refcontent>
        </reference>
        <reference anchor="I-D.ietf-rmcat-cc-codec-interactions" quoteTitle="true" target="https://tools.ietf.org/html/draft-ietf-rmcat-cc-codec-interactions-02" derivedAnchor="RMCAT-CC-RTP">
          <front>
            <title>Congestion Control and Codec interactions in RTP Applications</title>
            <author initials="M" surname="Zanaty" fullname="Mo Zanaty">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="V" surname="Singh" fullname="Varun Singh">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="S" surname="Nandakumar" fullname="Suhas Nandakumar">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="Z" surname="Sarker" fullname="Zaheduzzaman Sarker">
              <organization showOnFrontPage="true"/>
            </author>
            <date month="March" day="18" year="2016"/>
            <abstract>
              <t>Interactive real-time media applications that use the Real-time Transport Protocol (RTP) over the User Datagram Protocol (UDP) must use congestion control techniques above the UDP layer since it provides none.  This memo describes the interactions and conceptual interfaces necessary between the application components that relate to congestion control, specifically the media codec control layer, and the components dedicated to congestion control functions.</t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-rmcat-cc-codec-interactions-02"/>
          <format type="TXT" target="http://www.ietf.org/internet-drafts/draft-ietf-rmcat-cc-codec-interactions-02.txt"/>
          <refcontent>Work in Progress</refcontent>
        </reference>
        <reference anchor="I-D.ietf-rmcat-eval-test" quoteTitle="true" target="https://tools.ietf.org/html/draft-ietf-rmcat-eval-test-10" derivedAnchor="RMCAT-EVAL-TEST">
          <front>
            <title>Test Cases for Evaluating RMCAT Proposals</title>
            <author initials="Z" surname="Sarker" fullname="Zaheduzzaman Sarker">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="V" surname="Singh" fullname="Varun Singh">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="X" surname="Zhu" fullname="Xiaoqing Zhu">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="M" surname="Ramalho" fullname="Michael Ramalho">
              <organization showOnFrontPage="true"/>
            </author>
            <date month="May" day="23" year="2019"/>
            <abstract>
              <t>The Real-time Transport Protocol (RTP) is used to transmit media in multimedia telephony applications.  These applications are typically required to implement congestion control.  This document describes the test cases to be used in the performance evaluation of such congestion control algorithms in a controlled environment.</t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-rmcat-eval-test-10"/>
          <format type="TXT" target="http://www.ietf.org/internet-drafts/draft-ietf-rmcat-eval-test-10.txt"/>
          <refcontent>Work in Progress</refcontent>
        </reference>
        <reference anchor="I-D.ietf-avtcore-cc-feedback-message" quoteTitle="true" target="https://tools.ietf.org/html/draft-ietf-avtcore-cc-feedback-message-05" derivedAnchor="RTCP-FEEDBACK">
          <front>
            <title>RTP Control Protocol (RTCP) Feedback for Congestion Control</title>
            <author initials="Z" surname="Sarker" fullname="Zaheduzzaman Sarker">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="C" surname="Perkins" fullname="Colin Perkins">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="V" surname="Singh" fullname="Varun Singh">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="M" surname="Ramalho" fullname="Michael Ramalho">
              <organization showOnFrontPage="true"/>
            </author>
            <date month="November" day="4" year="2019"/>
            <abstract>
              <t>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 RTCP feedback packets to the sender containing the information the sender needs to perform congestion control.</t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-avtcore-cc-feedback-message-05"/>
          <format type="TXT" target="http://www.ietf.org/internet-drafts/draft-ietf-avtcore-cc-feedback-message-05.txt"/>
          <refcontent>Work in Progress</refcontent>
        </reference>
        <reference anchor="I-D.ietf-rmcat-wireless-tests" quoteTitle="true" target="https://tools.ietf.org/html/draft-ietf-rmcat-wireless-tests-08" derivedAnchor="WIRELESS-TESTS">
          <front>
            <title>Evaluation Test Cases for Interactive Real-Time Media over Wireless Networks</title>
            <author initials="Z" surname="Sarker" fullname="Zaheduzzaman Sarker">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="I" surname="Johansson" fullname="Ingemar Johansson">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="X" surname="Zhu" fullname="Xiaoqing Zhu">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="J" surname="Fu" fullname="Jian Fu">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="W" surname="Tan" fullname="Wei-Tian Tan">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="M" surname="Ramalho" fullname="Michael Ramalho">
              <organization showOnFrontPage="true"/>
            </author>
            <date month="July" day="5" year="2019"/>
            <abstract>
              <t>The Real-time Transport Protocol (RTP) is a common transport choice for interactive multimedia communication applications.  The performance of such applications typically depends on a well- functioning congestion control algorithm.  To ensure seamless and robust user experience, a well-designed RTP-based congestion control algorithm should work well across all access network types.  This document describes test cases for evaluating performances of such congestion control algorithms over LTE and Wi-Fi networks.</t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-rmcat-wireless-tests-08"/>
          <format type="TXT" target="http://www.ietf.org/internet-drafts/draft-ietf-rmcat-wireless-tests-08.txt"/>
          <refcontent>Work in Progress</refcontent>
        </reference>
        <reference anchor="ZHU-PV13" target="https://doi.org/10.1109/PV.2013.6691448" quoteTitle="true" derivedAnchor="ZHU-PV13">
          <front>
            <title>NADA: A Unified Congestion Control Scheme for Low-Latency Interactive Video</title>
            <seriesInfo name="DOI" value="10.1109/PV.2013.6691448"/>
            <author fullname="Xiaoqing Zhu" initials="X." surname="Zhu">
              <organization showOnFrontPage="true"/>
            </author>
            <author fullname="Rong Pan" initials="R." surname="Pan">
              <organization showOnFrontPage="true"/>
            </author>
            <date month="December" year="2013"/>
          </front>
          <refcontent>Proc. IEEE International Packet Video Workshop, San
	  Jose, CA, USA
          </refcontent>
        </reference>
      </references>
    </references>
    <section anchor="sec-network-nodes" numbered="true" toc="include" removeInRFC="false" pn="section-appendix.a">
      <name slugifiedName="name-network-node-operations">Network Node Operations</name>
      <t pn="section-appendix.a-1">NADA can work with different network queue management
schemes and does not assume any specific network node operation.
As an example, this appendix describes three variants of queue
management behavior at the network node, leading to either
implicit or explicit congestion signals. It needs to be
acknowledged that NADA has not yet been tested with non-probabilistic
ECN marking behaviors.  
      </t>
      <t pn="section-appendix.a-2">
In all three flavors described below, the network queue
operates with the simple First In, First Out (FIFO) principle.
There is no need to maintain per-flow state. The system
can scale easily with a large number of video flows and
at high link capacity.
      </t>
      <section anchor="sec-network-droptail" numbered="true" toc="include" removeInRFC="false" pn="section-a.1">
        <name slugifiedName="name-default-behavior-of-drop-ta">Default Behavior of Drop-Tail Queues</name>
        <t pn="section-a.1-1">
In a conventional network with drop-tail or RED queues,
congestion is inferred from the estimation of end-to-end
delay and/or packet loss. Packet drops at the queue are
detected at the receiver and contribute to the calculation
of the aggregated congestion signal x_curr. No special
action is required at the network node.
        </t>
      </section>
      <section anchor="sec-network-ecn" numbered="true" toc="include" removeInRFC="false" pn="section-a.2">
        <name slugifiedName="name-red-based-ecn-marking">RED-Based ECN Marking</name>
        <t pn="section-a.2-1">In this mode, the network node randomly marks
the ECN field in the IP packet header following
the <xref target="RFC7567" format="default" sectionFormat="of" derivedContent="RFC7567">Random Early Detection
(RED) algorithm</xref>. Calculation of the marking
probability involves the following steps on packet arrival:</t>
        <ol spacing="normal" type="1" start="1" pn="section-a.2-2">
          <li pn="section-a.2-2.1" derivedCounter="1.">
            <t pn="section-a.2-2.1.1">update smoothed queue size q_avg as:</t>
            <artwork name="" type="" align="left" alt="" pn="section-a.2-2.1.2">
   q_avg = w*q + (1-w)*q_avg
</artwork>
          </li>
          <li pn="section-a.2-2.2" derivedCounter="2.">
            <t pn="section-a.2-2.2.1">calculate marking probability p as:</t>
            <artwork name="" type="" align="left" alt="" pn="section-a.2-2.2.2">
        / 0,                    if q &lt; q_lo
        |
        |        q_avg - q_lo
    p= &lt;  p_max*--------------, if q_lo &lt;= q &lt; q_hi
        |         q_hi - q_lo
        |
        \ p = 1,                if q &gt;= q_hi
</artwork>
          </li>
        </ol>
        <t pn="section-a.2-3">
Here, q_lo and q_hi correspond to the low
and high thresholds of queue occupancy.
The maximum marking probability is p_max. 
        </t>
        <t pn="section-a.2-4">
The ECN marking events will contribute
to the calculation of an equivalent delay
x_curr at the receiver. No changes are required
at the sender. 
        </t>
      </section>
      <section anchor="sec-network-pcn" numbered="true" toc="include" removeInRFC="false" pn="section-a.3">
        <name slugifiedName="name-random-early-marking-with-v">Random Early Marking with Virtual Queues</name>
        <t pn="section-a.3-1">
Advanced network nodes may support random early marking
based on a token bucket algorithm originally designed for
<xref target="RFC6660" format="default" sectionFormat="of" derivedContent="RFC6660">Pre-Congestion Notification
(PCN)</xref>. 
The early congestion notification (ECN) bit in the
IP header of packets is marked randomly.
The marking probability is calculated based on a
token bucket algorithm originally designed for
<xref target="RFC6660" format="default" sectionFormat="of" derivedContent="RFC6660">PCN</xref>.
The target link utilization is set as 90%; the marking
probability is designed to grow linearly with the token
bucket size when it varies between 1/3 and 2/3 of the
full token bucket limit.</t>
        <t pn="section-a.3-2">Calculation of the marking probability involves
the following steps upon packet arrival:</t>
        <ol spacing="normal" type="1" start="1" pn="section-a.3-3">
          <li pn="section-a.3-3.1" derivedCounter="1.">
            <t pn="section-a.3-3.1.1">meter packet against token bucket (r,b)</t>
          </li>
          <li pn="section-a.3-3.2" derivedCounter="2.">
            <t pn="section-a.3-3.2.1">update token level b_tk</t>
          </li>
          <li pn="section-a.3-3.3" derivedCounter="3.">
            <t pn="section-a.3-3.3.1">calculate the marking probability as:</t>
            <artwork name="" type="" align="left" alt="" pn="section-a.3-3.3.2">
         / 0,                     if b-b_tk &lt; b_lo 
         |
         |          b-b_tk-b_lo
    p = &lt;  p_max* --------------, if b_lo &lt;= b-b_tk &lt; b_hi
         |           b_hi-b_lo
         |
         \ 1,                     if b-b_tk &gt;= b_hi 
</artwork>
          </li>
        </ol>
        <t pn="section-a.3-4">
Here, the token bucket lower and upper limits are denoted by
b_lo and b_hi, respectively. The parameter b indicates the size
of the token bucket. The parameter r is chosen to be below
capacity, resulting in slight underutilization of the link.
The maximum marking probability is p_max. 
        </t>
        <t pn="section-a.3-5">The ECN marking events will contribute to the calculation
of an equivalent delay x_curr at the receiver. No changes are
required at the sender. The virtual queuing mechanism from
the PCN-based marking algorithm will lead to additional
benefits such as zero standing queues. 
        </t>
      </section>
    </section>
    <section anchor="sec-acknowledgments" numbered="false" toc="include" removeInRFC="false" pn="section-appendix.b">
      <name slugifiedName="name-acknowledgments">Acknowledgments</name>
      <t pn="section-appendix.b-1">
The authors would like to thank <contact fullname="Randell Jesup"/>, <contact fullname="Luca De Cicco"/>, <contact fullname="Piers O'Hanlon"/>, <contact fullname="Ingemar Johansson"/>, <contact fullname="Stefan Holmer"/>, <contact fullname="Cesar Ilharco Magalhaes"/>, <contact fullname="Safiqul Islam"/>,
<contact fullname="Michael Welzl"/>, <contact fullname="Mirja Kühlewind"/>,
<contact fullname="Karen Elisabeth Egede Nielsen"/>, <contact fullname="Julius Flohr"/>, <contact fullname="Roland Bless"/>, <contact fullname="Andreas Smas"/>, and <contact fullname="Martin Stiemerling"/> for their valuable
review comments and helpful input to this specification. </t>
    </section>
    <section anchor="sec-contributors" numbered="false" toc="include" removeInRFC="false" pn="section-appendix.c">
      <name slugifiedName="name-contributors">Contributors</name>
      <t pn="section-appendix.c-1">The following individuals contributed to the implementation
  and evaluation of the proposed scheme and, therefore, helped
  to validate and substantially improve this specification.</t>
      <t pn="section-appendix.c-2"><contact fullname="Paul E. Jones"/>
	&lt;paulej@packetizer.com&gt; of Cisco Systems implemented
    an early version of the NADA congestion control scheme and helped with its
    lab-based testbed evaluations. </t>
      <t pn="section-appendix.c-3"><contact fullname="Jiantao Fu"/> &lt;jianfu@cisco.com&gt; of Cisco
	Systems helped with the
  implementation and extensive evaluation of NADA both in Mozilla web browsers
  and in earlier simulation-based evaluation efforts. 
      </t>
      <t pn="section-appendix.c-4"><contact fullname="Stefano D'Aronco"/>
	&lt;stefano.daronco@geod.baug.ethz.ch&gt; of ETH Zurich
  (previously at Ecole Polytechnique Federale de Lausanne when contributing
   to this work) helped with the implementation and evaluation of an early
   version
   of NADA in <xref target="NS-3" format="default" sectionFormat="of" derivedContent="NS-3"/>. </t>
      <t pn="section-appendix.c-5"><contact fullname="Charles Ganzhorn"/>
	&lt;charles.ganzhorn@gmail.com&gt; contributed to the
    testbed-based evaluation of NADA during an early stage of its development.
      </t>
    </section>
    <section anchor="authors-addresses" numbered="false" removeInRFC="false" toc="include" pn="section-appendix.d">
      <name slugifiedName="name-authors-addresses">Authors' Addresses</name>
      <author fullname="Xiaoqing Zhu" initials="X" surname="Zhu">
        <organization showOnFrontPage="true">Cisco Systems</organization>
        <address>
          <postal>
            <street>12515 Research Blvd., Building 4</street>
            <city>Austin</city>
            <region>TX</region>
            <code>78759</code>
            <country>United States of America</country>
          </postal>
          <email>xiaoqzhu@cisco.com</email>
        </address>
      </author>
      <author fullname="Rong Pan" initials="R" surname="Pan">
        <organization showOnFrontPage="true">Intel Corporation</organization>
        <address>
          <postal>
            <street>2200 Mission College Blvd</street>
            <city>Santa Clara</city>
            <region>CA</region>
            <code>95054</code>
            <country>United States of America</country>
          </postal>
          <email>rong.pan@intel.com</email>
        </address>
      </author>
      <author fullname="Michael A. Ramalho" initials="M." surname="Ramalho">
        <organization abbrev="AcousticComms" showOnFrontPage="true">AcousticComms Consulting</organization>
        <address>
          <postal>
            <street>6310 Watercrest Way Unit 203</street>
            <city>Lakewood Ranch</city>
            <region>FL</region>
            <code>34202-5211</code>
            <country>United States of America</country>
          </postal>
          <phone>+1 732 832 9723</phone>
          <email>mar42@cornell.edu</email>
          <uri>http://ramalho.webhop.info/</uri>
        </address>
      </author>
      <author fullname="Sergio Mena" initials="S." surname="Mena">
        <organization showOnFrontPage="true">Cisco Systems</organization>
        <address>
          <postal>
            <street>EPFL, Quartier de l'Innovation, Batiment E</street>
            <city>Ecublens</city>
            <region>Vaud</region>
            <code>1015</code>
            <country>Switzerland</country>
          </postal>
          <email>semena@cisco.com</email>
        </address>
      </author>
    </section>
  </back>
</rfc>
