rfc8698xml2.original.xml | rfc8698.xml | |||
---|---|---|---|---|
<?xml version="1.0" encoding="US-ASCII"?> | <?xml version='1.0' encoding='utf-8'?> | |||
<!DOCTYPE rfc SYSTEM "rfc2629.dtd" [ | <!DOCTYPE rfc SYSTEM "rfc2629-xhtml.ent"> | |||
<!ENTITY rfc2119 SYSTEM "http://xml2rfc.tools.ietf.org/public/rfc/bibxml/referen | ||||
ce.RFC.2119.xml"> | <rfc number="8698" xmlns:xi="http://www.w3.org/2001/XInclude" category="exp" | |||
<!ENTITY rfc3168 SYSTEM "http://xml2rfc.tools.ietf.org/public/rfc/bibxml/referen | docName="draft-ietf-rmcat-nada-13" ipr="trust200902" obsoletes="" | |||
ce.RFC.3168.xml"> | updates="" submissionType="IETF" consensus="true" xml:lang="en" | |||
<!ENTITY rfc3550 SYSTEM "http://xml2rfc.tools.ietf.org/public/rfc/bibxml/referen | tocInclude="true" | |||
ce.RFC.3550.xml"> | sortRefs="true" symRefs="true" version="3"> | |||
<!ENTITY rfc5348 SYSTEM "http://xml2rfc.tools.ietf.org/public/rfc/bibxml/referen | ||||
ce.RFC.5348.xml"> | ||||
<!ENTITY rfc5450 SYSTEM "http://xml2rfc.tools.ietf.org/public/rfc/bibxml/referen | ||||
ce.RFC.5450.xml"> | ||||
<!ENTITY rfc6660 SYSTEM "http://xml2rfc.tools.ietf.org/public/rfc/bibxml/referen | ||||
ce.RFC.6660.xml"> | ||||
<!ENTITY rfc6679 SYSTEM "http://xml2rfc.tools.ietf.org/public/rfc/bibxml/referen | ||||
ce.RFC.6679.xml"> | ||||
<!ENTITY rfc6817 SYSTEM "http://xml2rfc.tools.ietf.org/public/rfc/bibxml/referen | ||||
ce.RFC.6817.xml"> | ||||
<!ENTITY rfc7567 SYSTEM "http://xml2rfc.tools.ietf.org/public/rfc/bibxml/referen | ||||
ce.RFC.7567.xml"> | ||||
<!ENTITY rfc8033 SYSTEM "http://xml2rfc.tools.ietf.org/public/rfc/bibxml/referen | ||||
ce.RFC.8033.xml"> | ||||
<!ENTITY rfc8290 SYSTEM "http://xml2rfc.tools.ietf.org/public/rfc/bibxml/referen | ||||
ce.RFC.8290.xml"> | ||||
<!ENTITY rfc8174 SYSTEM "http://xml2rfc.tools.ietf.org/public/rfc/bibxml/referen | ||||
ce.RFC.8174.xml"> | ||||
<!ENTITY rfc8593 SYSTEM "http://xml2rfc.tools.ietf.org/public/rfc/bibxml/referen | ||||
ce.RFC.8593.xml"> | ||||
<!ENTITY I-D.ietf-avtcore-cc-feedback-message SYSTEM "http://xml2rfc.tools.ietf. | ||||
org/public/rfc/bibxml3/reference.I-D.ietf-avtcore-cc-feedback-message.xml"> | ||||
<!ENTITY I-D.ietf-rmcat-cc-requirements SYSTEM "http://xml2rfc.tools.ietf.org/pu | ||||
blic/rfc/bibxml3/reference.I-D.ietf-rmcat-cc-requirements.xml"> | ||||
<!ENTITY I-D.ietf-rmcat-eval-test SYSTEM "http://xml2rfc.tools.ietf.org/public/r | ||||
fc/bibxml3/reference.I-D.ietf-rmcat-eval-test.xml"> | ||||
<!ENTITY I-D.ietf-rmcat-wireless-tests SYSTEM "http://xml2rfc.tools.ietf.org/pub | ||||
lic/rfc/bibxml3/reference.I-D.ietf-rmcat-wireless-tests.xml"> | ||||
<!ENTITY I-D.ietf-rmcat-cc-codec-interactions SYSTEM "http://xml2rfc.tools.ietf. | ||||
org/public/rfc/bibxml3/reference.I-D.ietf-rmcat-cc-codec-interactions.xml"> | ||||
]> | ||||
<?xml-stylesheet type='text/xsl' href='rfc2629.xslt' ?> | ||||
<?rfc toc="yes" ?> | ||||
<?rfc compact="yes" ?> | ||||
<?rfc symrefs="yes" ?> | ||||
<rfc category="exp" | ||||
docName="draft-ietf-rmcat-nada-13" | ||||
ipr="trust200902"> | ||||
<!-- What is the category field value--> | ||||
<front> | <front> | |||
<title abbrev="NADA"> | <title abbrev="NADA"> | |||
NADA: A Unified Congestion Control Scheme for Real-Time Media | Network-Assisted Dynamic Adaptation (NADA): A Unified Congestion Control | |||
Scheme for Real-Time Media | ||||
</title> | </title> | |||
<seriesInfo name="RFC" value="8698"/> | ||||
<author fullname="Xiaoqing Zhu" initials="X" surname="Zhu"> | <author fullname="Xiaoqing Zhu" initials="X" surname="Zhu"> | |||
<organization>Cisco Systems</organization> | <organization>Cisco Systems</organization> | |||
<address> | <address> | |||
<postal> | <postal> | |||
<street>12515 Research Blvd., Building 4</street> | <street>12515 Research Blvd., Building 4</street> | |||
<city>Austin</city> | <city>Austin</city> | |||
<region>TX</region> | <region>TX</region> | |||
<code>78759</code> | <code>78759</code> | |||
<country>USA</country> | <country>United States of America</country> | |||
</postal> | </postal> | |||
<email>xiaoqzhu@cisco.com</email> | <email>xiaoqzhu@cisco.com</email> | |||
</address> | </address> | |||
</author> | </author> | |||
<author fullname="Rong Pan *" initials="R" surname="Pan"> | <author fullname="Rong Pan" initials="R" surname="Pan"> | |||
<organization abbrev="Cisco Systems">* Pending affiliation change.</organi | <organization>Intel Corporation</organization> | |||
zation> | ||||
<address> | <address> | |||
<email>rong.pan@gmail.com</email> | <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> | </address> | |||
</author> | </author> | |||
<author fullname="Michael A. Ramalho" initials="M. A." surname="Ramalho"> | <author fullname="Michael A. Ramalho" initials="M." surname="Ramalho"> | |||
<organization abbrev="Cisco Systems">Cisco Systems, Inc.</organization> | <organization abbrev="AcousticComms">AcousticComms | |||
Consulting</organization> | ||||
<address> | <address> | |||
<postal> | <postal> | |||
<street>8000 Hawkins Road</street> | <street>6310 Watercrest Way Unit 203</street> | |||
<city>Sarasota</city> | <city>Lakewood Ranch</city> | |||
<region>FL</region> | <region>FL</region> | |||
<code>34241</code> | <code>34202-5211</code> | |||
<country>USA</country> | <country>United States of America</country> | |||
</postal> | </postal> | |||
<phone>+1 919 476 2038</phone> | <phone>+1 732 832 9723</phone> | |||
<email>mar42@cornell.edu</email> | <email>mar42@cornell.edu</email> | |||
<uri>http://ramalho.webhop.info/</uri> | ||||
</address> | </address> | |||
</author> | </author> | |||
<author fullname="Sergio Mena de la Cruz" initials="S. " surname="Mena"> | <author fullname="Sergio Mena" initials="S. " surname="Mena"> | |||
<organization>Cisco Systems</organization> | <organization>Cisco Systems</organization> | |||
<address> | <address> | |||
<postal> | <postal> | |||
<street>EPFL, Quartier de l'Innovation, Batiment E</street> | <street>EPFL, Quartier de l'Innovation, Batiment E</street> | |||
<city>Ecublens</city> | <city>Ecublens</city> | |||
<region>Vaud</region> | <region>Vaud</region> | |||
<code>1015</code> | <code>1015</code> | |||
<country>Switzerland</country> | <country>Switzerland</country> | |||
</postal> | </postal> | |||
<email>semena@cisco.com</email> | <email>semena@cisco.com</email> | |||
</address> | </address> | |||
</author> | </author> | |||
<!-- | <date month="February" year="2020"/> | |||
<author fullname="Paul E. Jones" initials="P. E." surname="Jones"> | ||||
<organization>Cisco Systems</organization> | ||||
<address> | ||||
<postal> | ||||
<street>7025 Kit Creek Rd.</street> | ||||
<city>Research Triangle Park</city> | ||||
<region>NC</region> | ||||
<code>27709</code> | ||||
<country>USA</country> | ||||
</postal> | ||||
<email>paulej@packetizer.com</email> | ||||
</address> | ||||
</author> | ||||
<author fullname="Jiantao Fu" initials="J." surname="Fu"> | ||||
<organization>Cisco Systems</organization> | ||||
<address> | ||||
<postal> | ||||
<street>707 Tasman Drive</street> | ||||
<city>Milpitas</city> | ||||
<region>CA</region> | ||||
<code>95035</code> | ||||
<country>USA</country> | ||||
</postal> | ||||
<email>jianfu@cisco.com</email> | ||||
</address> | ||||
</author> | ||||
<author fullname="Stefano D'Aronco" initials="S." surname="D'Aronco"> | ||||
<organization abbrev="ETH">ETH Zurich</organization> | ||||
<address> | ||||
<postal> | ||||
<street>Stefano-Franscini-Platz 5</street> | ||||
<city>Zurich</city> | ||||
<region></region> | ||||
<code>8093</code> | ||||
<country>Switzerland</country> | ||||
</postal> | ||||
<email>stefano.daronco@geod.baug.ethz.ch</email> | ||||
</address> | ||||
</author> | ||||
--> | ||||
<date year="2019" /> | ||||
<area>TSV</area> | <area>TSV</area> | |||
<keyword>Multimedia</keyword> | <keyword>Multimedia</keyword> | |||
<keyword>Congestion Control</keyword> | <keyword>Congestion Control</keyword> | |||
<abstract> | <abstract> | |||
<t>This document describes NADA (network-assisted dynamic adaptation), | <t>This document describes Network-Assisted Dynamic Adaptation (NADA), a | |||
a novel congestion control scheme for interactive real-time media | novel congestion control scheme for interactive real-time media | |||
applications, such as video conferencing. In the proposed scheme, the | applications such as video conferencing. In the proposed scheme, the | |||
sender regulates its sending rate based on either implicit or | sender regulates its sending rate, based on either implicit or explicit | |||
explicit congestion signaling, in a unified approach. The scheme can | congestion signaling, in a unified approach. The scheme can benefit from | |||
benefit from explicit congestion notification (ECN) markings from | Explicit Congestion Notification (ECN) markings from network nodes. It | |||
network nodes. It also maintains consistent sender behavior in the | also maintains consistent sender behavior in the absence of such | |||
absence of such markings, by reacting to queuing delays and packet | markings by reacting to queuing delays and packet losses instead. </t> | |||
losses instead. </t> | </abstract> | |||
</abstract> | </front> | |||
<middle> | ||||
</front> | <section anchor="sec-intro" numbered="true" toc="default"> | |||
<name>Introduction</name> | ||||
<middle> | <t>Interactive real-time media applications introduce a unique set of | |||
<section anchor="sec-intro" title="Introduction"> | 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"/> | ||||
markings. The requirements for the congestion control algorithm are | ||||
outlined in <xref target="I-D.ietf-rmcat-cc-requirements" | ||||
format="default"/>. | ||||
<t>Interactive real-time media applications introduce a unique set of | The requirements highlight that the desired congestion control scheme | |||
challenges for congestion control. Unlike TCP, the mechanism used for | should 1) avoid flow starvation and attain a reasonable fair share of | |||
real-time media needs to adapt quickly to instantaneous bandwidth changes, | bandwidth when competing against other flows, 2) adapt quickly, and 3) | |||
accommodate fluctuations in the output of video encoder rate control, | operate in a stable manner. </t> | |||
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"></xref> markings. The requirements for the | ||||
congestion control algorithm are outlined in | ||||
<xref target="I-D.ietf-rmcat-cc-requirements"></xref>. | ||||
It highlights that the desired congestion control scheme should avoid | ||||
flow starvation and attain a reasonable fair share of bandwidth when | ||||
competing against other flows, adapt quickly, and operate in a stable | ||||
manner. </t> | ||||
<t>This document describes an experimental congestion control scheme | <t>This document describes an experimental congestion control scheme | |||
called network-assisted dynamic adaptation (NADA). The design of NADA | called Network-Assisted Dynamic Adaptation (NADA). The design of NADA | |||
benefits from explicit congestion control signals (e.g., ECN markings) | benefits from explicit congestion control signals (e.g., ECN markings) | |||
from the network, yet also operates when only implicit congestion | from the network, yet also operates when only implicit congestion | |||
indicators (delay and/or loss) are available. Such a unified sender | indicators (delay and/or loss) are available. Such a unified sender | |||
behavior distinguishes NADA from other congestion control schemes for | behavior distinguishes NADA from other congestion control schemes for | |||
real-time media. In addition, its core congestion control algorithm is | real-time media. In addition, its core congestion control algorithm is | |||
designed to guarantee stability for path round-trip-times (RTTs) below | designed to guarantee stability for path round-trip times (RTTs) below | |||
a prescribed bound (e.g., 250ms with default parameter choices). It | a prescribed bound (e.g., 250 ms with default parameter choices). It | |||
further supports weighted bandwidth sharing among competing video flows | further supports weighted bandwidth sharing among competing video flows | |||
with different priorities. The signaling mechanism consists of standard | with different priorities. The signaling mechanism consists of standard | |||
RTP timestamp <xref target="RFC3550"></xref> and RTCP feedback reports. | Real-time Transport Protocol (RTP) timestamp <xref target="RFC3550" | |||
format="default"/> and Real-time | ||||
Transport Control Protocol (RTCP) feedback reports. | ||||
The definition of the desired RTCP feedback message is described in | The definition of the desired RTCP feedback message is described in | |||
detail in <xref target="I-D.ietf-avtcore-cc-feedback-message"></xref> | detail in <xref target="I-D.ietf-avtcore-cc-feedback-message" | |||
format="default"/> | ||||
so as to support the successful operation of several congestion control | so as to support the successful operation of several congestion control | |||
schemes for real-time interactive media. </t> | schemes for real-time interactive media. </t> | |||
</section> | </section> | |||
<section anchor="sec-term" title="Terminology"> | <section anchor="sec-term" numbered="true" toc="default"> | |||
<name>Terminology</name> | ||||
<t>The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | ||||
"SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and | ||||
"OPTIONAL" in this document are to be interpreted as described in | ||||
BCP 14 <xref target="RFC2119"></xref> <xref target="RFC8174"></xref> | ||||
when, and only when, they appear in all capitals, as shown here.</t> | ||||
</section> | ||||
<section anchor="sec-system-overview" | <t> | |||
title="System Overview"> | 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"/> | ||||
<xref target="RFC8174"/> when, and only when, they appear in all capitals, | ||||
as shown here. | ||||
</t> | ||||
<t><xref target="fig-system-overview"></xref> shows the end-to-end | </section> | |||
<section anchor="sec-system-overview" numbered="true" toc="default"> | ||||
<name>System Overview</name> | ||||
<t><xref target="fig-system-overview" format="default"/> shows the | ||||
end-to-end | ||||
system for real-time media transport that NADA operates in. Note that | system for real-time media transport that NADA operates in. Note that | |||
there also exist network nodes along the reverse (potentially uncongested) | there also exist network nodes along the reverse (potentially uncongested) | |||
path that the RTCP feedback reports traverse. Those network nodes are not | path that the RTCP feedback reports traverse. Those network nodes are not | |||
shown in the figure for sake of brevity.</t> | shown in the figure for the sake of brevity.</t> | |||
<t><figure anchor="fig-system-overview" | ||||
title="System Overview"> | ||||
<artwork><![CDATA[ | ||||
<figure anchor="fig-system-overview"> | ||||
<name>System Overview</name> | ||||
<artwork name="" type="" align="left" alt=""><![CDATA[ | ||||
+---------+ r_vin +--------+ +--------+ +----------+ | +---------+ r_vin +--------+ +--------+ +----------+ | |||
| Media |<--------| RTP | |Network | | RTP | | | Media |<--------| RTP | |Network | | RTP | | |||
| Encoder |========>| Sender |=======>| Node |====>| Receiver | | | Encoder |========>| Sender |=======>| Node |====>| Receiver | | |||
+---------+ r_vout +--------+ r_send +--------+ +----------+ | +---------+ r_vout +--------+ r_send +--------+ +----------+ | |||
/|\ | | /|\ | | |||
| | | | | | |||
+---------------------------------+ | +---------------------------------+ | |||
RTCP Feedback Report | RTCP Feedback Report | |||
]]></artwork> | ]]></artwork> | |||
</figure></t> | </figure> | |||
<t><list style="symbols"> | <dl> | |||
<t>Media encoder with rate control capabilities. It encodes raw media | ||||
(audio and video) frames into a compressed bitstream which is later | ||||
packetized into RTP packets. As discussed in <xref target="RFC8593"></xref>, | ||||
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. </t> | ||||
<t> RTP sender: responsible for calculating the NADA reference | <dt>Media encoder with rate control capabilities: | |||
rate based on network congestion indicators (delay, loss, or ECN | </dt> | |||
marking reports from the receiver), for updating the video encoder | <dd>Encodes raw media (audio and video) frames into a compressed bitstream | |||
with a new target rate r_vin, and for regulating the actual sending | that is later packetized into RTP packets. As discussed in <xref | |||
rate r_send accordingly. The RTP sender also generates a sending | target="RFC8593"/>, the | |||
timestamp for each outgoing packet. </t> | 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> | ||||
<t>RTP receiver: responsible for measuring and estimating | <dt>RTP sender: | |||
end-to-end delay (based on sender timestamp), packet loss | </dt> | |||
(based on RTP sequence number), ECN marking ratios (based | <dd>Responsible for calculating the NADA reference rate based on network | |||
on <xref target="RFC6679"></xref>), and receiving rate (r_recv) | congestion indicators (delay, loss, or ECN marking reports from the receiver), | |||
of the flow. It calculates the aggregated congestion signal | for updating the video encoder with a new target rate r_vin and for | |||
(x_curr) that accounts for queuing delay, ECN markings, and | regulating the actual sending rate r_send accordingly. The RTP sender also | |||
packet losses. The receiver also determines the mode for | generates a sending timestamp for each outgoing packet. | |||
sender rate adaptation (rmode) based on whether the flow has | </dd> | |||
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. </t> | ||||
<t> Network node with several modes of operation. The system | <dt>RTP receiver: | |||
can work with the default behavior of a simple drop tail queue. | </dt> | |||
It can also benefit from advanced AQM features such as | <dd>Responsible for measuring and estimating end-to-end delay (based on sender | |||
<xref target="RFC8033">PIE</xref>, <xref target="RFC8290">FQ-CoDel</xref>, | timestamp), packet loss (based on RTP sequence number), ECN marking ratios | |||
ECN marking based on <xref target="RFC7567">RED</xref>, and PCN | (based on <xref target="RFC6679"/>), and receiving rate (r_recv) of the | |||
marking using a token bucket algorithm (<xref target="RFC6660"></xref>). | flow. It calculates | |||
Note that network node operation is out of control for the design | the aggregated congestion signal (x_curr) that accounts for queuing delay, ECN | |||
of NADA. </t> | 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> | ||||
</list></t> | <dt>Network node with several modes of operation: | |||
</dt> | ||||
<dd>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">(PIE)</xref>, Flow Queue Controlling Queue Delay <xref | ||||
target="RFC8290">(FQ-CoDel)</xref>, ECN | ||||
marking based on <xref target="RFC7567"> Random Early Detection (RED)</xref>, | ||||
and Pre-Congestion Notification (PCN) marking using a | ||||
token bucket algorithm <xref target="RFC6660"/>. Note that network node | ||||
operation is out of scope for the design of NADA. | ||||
</section> | </dd> | |||
<section anchor="sec-algorithm" | </dl> | |||
title="Core Congestion Control Algorithm"> | ||||
<t>Like TCP-Friendly Rate Control (TFRC)<xref target="Floyd-CCR00"></xref> | </section> | |||
<xref target="RFC5348"></xref>, NADA is a rate-based congestion | <section anchor="sec-algorithm" numbered="true" toc="default"> | |||
<name>Core Congestion Control Algorithm</name> | ||||
<t>Like TCP-Friendly Rate Control (TFRC) <xref target="FLOYD-CCR00" | ||||
format="default"/> | ||||
<xref target="RFC5348" format="default"/>, NADA is a rate-based | ||||
congestion | ||||
control algorithm. In its simplest form, the sender reacts to the | control algorithm. In its simplest form, the sender reacts to the | |||
collection of network congestion indicators in the form of an | collection of network congestion indicators in the form of an | |||
aggregated congestion signal, and operates in one of two modes: | aggregated congestion signal and operates in one of two modes: | |||
<list style="symbols"> | </t> | |||
<t>Accelerated ramp-up: when the bottleneck is deemed to | <dl> | |||
be underutilized, the rate increases multiplicatively with | ||||
respect to the rate of previously successful transmissions. | ||||
The rate increase multiplier (gamma) is calculated based on | ||||
observed round-trip-time and target feedback interval, so | ||||
as to limit self-inflicted queuing delay. </t> | ||||
<t>Gradual rate update: in the presence of non-zero aggregate | <dt>Accelerated ramp up: | |||
congestion signal, the sending rate is adjusted in reaction to | </dt> | |||
both its value (x_curr) and its change in value (x_diff).</t> | <dd>When the bottleneck is deemed to be underutilized, the rate increases | |||
</list> | 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> | ||||
</t> | <dt>Gradual rate update: | |||
</dt> | ||||
<dd>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> | ||||
<t>This section introduces the list of mathematical notations and | </dl> | |||
<t>This section introduces the list of mathematical notations and | ||||
describes the core congestion control algorithm at the sender and | describes the core congestion control algorithm at the sender and | |||
receiver, respectively. Additional details on recommended practical | receiver, respectively. Additional details on recommended practical | |||
implementations are described in <xref target="sec-receiver"></xref> | implementations are described in Sections <xref target="sec-receiver" | |||
and <xref target="sec-sender"></xref>. </t> | format="counter"/> | |||
and <xref target="sec-sender" format="counter"/>. </t> | ||||
<section anchor="sec-notation" | <section anchor="sec-notation" numbered="true" toc="default"> | |||
title = "Mathematical Notations"> | <name>Mathematical Notations</name> | |||
<t>This section summarizes the list of variables and parameters | <t>This section summarizes the list of variables and parameters used | |||
used in the NADA algorithm. <xref target="tab-parameters"></xref> | in the NADA algorithm. <xref target="tab-parameters" | |||
also includes the default values for choosing the algorithm | format="default"/> also includes the default values for choosing the | |||
parameters either to represent a typical setting in practical | algorithm parameters to represent either a typical setting in | |||
applications or based on theoretical and simulation studies. | practical applications or a setting based on theoretical and | |||
See <xref target="sec-discussion-c"></xref> for some of the | simulation studies. See <xref target="sec-discussion-c" | |||
discussions on the impact of parameter values. Additional studies | format="default"/> for some of the discussions on the impact of | |||
in real-world settings suggested in <xref target="sec-experiments"></xref> | parameter values. Additional studies in real-world settings suggested | |||
could gather further insight on how to choose and adapt these | in <xref target="sec-experiments" format="default"/> could gather | |||
parameter values in practical deployment.</t> | further insight on how to choose and adapt these parameter values in | |||
practical deployment.</t> | ||||
<t><figure anchor="tab-variables" | <table align="left" anchor="tab-variables"> | |||
title ="List of variables."> | <name>List of Variables</name> | |||
<artwork><![CDATA[ | <thead> | |||
+--------------+-------------------------------------------------+ | <tr> | |||
| Notation | Variable Name | | <th align='left'>Notation</th> | |||
+--------------+-------------------------------------------------+ | <th align='left'>Variable Name</th> | |||
| t_curr | Current timestamp | | </tr> | |||
| t_last | Last time sending/receiving a feedback | | </thead> | |||
| delta | Observed interval between current and previous | | ||||
| | feedback reports: delta = t_curr-t_last | | ||||
| r_ref | Reference rate based on network congestion | | ||||
| r_send | Sending rate | | ||||
| r_recv | Receiving rate | | ||||
| r_vin | Target rate for video encoder | | ||||
| r_vout | Output rate from video encoder | | ||||
| d_base | Estimated baseline delay | | ||||
| d_fwd | Measured and filtered one-way delay | | ||||
| d_queue | Estimated queuing delay | | ||||
| d_tilde | Equivalent delay after non-linear warping | | ||||
| p_mark | Estimated packet ECN marking ratio | | ||||
| p_loss | Estimated packet loss ratio | | ||||
| x_curr | Aggregate congestion signal | | ||||
| x_prev | Previous value of aggregate congestion signal | | ||||
| x_diff | Change in aggregate congestion signal w.r.t. | | ||||
| | its previous value: x_diff = x_curr - x_prev | | ||||
| rmode | Rate update mode: (0 = accelerated ramp-up; | | ||||
| | 1 = gradual update) | | ||||
| gamma | Rate increase multiplier in accelerated ramp-up | | ||||
| | mode | | ||||
| loss_int | Measured average loss interval in packet count | | ||||
| loss_exp | Threshold value for setting the last observed | | ||||
| | packet loss to expiration | | ||||
| rtt | Estimated round-trip-time at sender | | ||||
| buffer_len | Rate shaping buffer occupancy measured in bytes | | ||||
+--------------+-------------------------------------------------+ | ||||
]]></artwork> | ||||
</figure></t> | ||||
<t><figure anchor="tab-parameters" | <tbody> | |||
title ="List of algorithm parameters and their default values."> | ||||
<artwork><![CDATA[ | <tr> | |||
+--------------+----------------------------------+----------------+ | <td align="left">t_curr</td> | |||
| Notation | Parameter Name | Default Value | | <td align="left">Current timestamp</td> | |||
+--------------+----------------------------------+----------------+ | </tr> | |||
| PRIO | Weight of priority of the flow | 1.0 | ||||
| RMIN | Minimum rate of application | 150Kbps | | <tr> | |||
| | supported by media encoder | | | <td align="left">t_last</td> | |||
| RMAX | Maximum rate of application | 1.5Mbps | | <td align="left">Last time sending/receiving a feedback message</td> | |||
| | supported by media encoder | | | </tr> | |||
| XREF | Reference congestion level | 10ms | | ||||
| KAPPA | Scaling parameter for gradual | 0.5 | | <tr> | |||
| | rate update calculation | | | <td align="left">delta</td> | |||
| ETA | Scaling parameter for gradual | 2.0 | | <td align="left">Observed interval between current and previous | |||
| | rate update calculation | | | feedback reports: delta = t_curr-t_last</td> | |||
| TAU | Upper bound of RTT in gradual | 500ms | | </tr> | |||
| | rate update calculation | | | ||||
| DELTA | Target feedback interval | 100ms | | <tr> | |||
+..............+..................................+................+ | <td align="left">r_ref</td> | |||
| LOGWIN | Observation window in time for | 500ms | | <td align="left">Reference rate based on network congestion</td> | |||
| | calculating packet summary | | | </tr> | |||
| | statistics at receiver | | | ||||
| QEPS | Threshold for determining queuing| 10ms | | <tr> | |||
| | delay build up at receiver | | | <td align="left">r_send</td> | |||
| DFILT | Bound on filtering delay | 120ms | | <td align="left">Sending rate</td> | |||
| GAMMA_MAX | Upper bound on rate increase | 0.5 | | </tr> | |||
| | ratio for accelerated ramp-up | | | ||||
| QBOUND | Upper bound on self-inflicted | 50ms | | <tr> | |||
| | queuing delay during ramp up | | | <td align="left">r_recv</td> | |||
+..............+..................................+................+ | <td align="left">Receiving rate</td> | |||
| MULTILOSS | Multiplier for self-scaling the | 7.0 | | </tr> | |||
| | expiration threshold of the last | | | ||||
| | observed loss (loss_exp) based on| | | <tr> | |||
| | measured average loss interval | | | <td align="left">r_vin</td> | |||
| | (loss_int) | | | <td align="left">Target rate for video encoder</td> | |||
| QTH | Delay threshold for invoking | 50ms | | </tr> | |||
| | non-linear warping | | | ||||
| LAMBDA | Scaling parameter in the | 0.5 | | <tr> | |||
| | exponent of non-linear warping | | | <td align="left">r_vout</td> | |||
+..............+..................................+................+ | <td align="left">Output rate from video encoder</td> | |||
| PLRREF | Reference packet loss ratio | 0.01 | | </tr> | |||
| PMRREF | Reference packet marking ratio | 0.01 | | ||||
| DLOSS | Reference delay penalty for loss | 10ms | | <tr> | |||
| | when packet loss ratio is at | | | <td align="left">d_base</td> | |||
| | PLRREF | | | <td align="left">Estimated baseline delay</td> | |||
| DMARK | Reference delay penalty for ECN | 2ms | | </tr> | |||
| | marking when packet marking | | | ||||
| | is at PMRREF | | | <tr> | |||
+..............+..................................+................+ | <td align="left">d_fwd</td> | |||
| FPS | Frame rate of incoming video | 30 | | <td align="left">Measured and filtered one-way delay</td> | |||
| BETA_S | Scaling parameter for modulating | 0.1 | | </tr> | |||
| | outgoing sending rate | | | ||||
| BETA_V | Scaling parameter for modulating | 0.1 | | <tr> | |||
| | video encoder target rate | | | <td align="left">d_queue</td> | |||
| ALPHA | Smoothing factor in exponential | 0.1 | | <td align="left">Estimated queuing delay</td> | |||
| | smoothing of packet loss and | | | </tr> | |||
| | marking ratios | | ||||
+--------------+----------------------------------+----------------+ | <tr> | |||
]]></artwork> | <td align="left">d_tilde</td> | |||
</figure></t> | <td align="left">Equivalent delay after non-linear warping</td> | |||
</tr> | ||||
<tr> | ||||
<td align="left">p_mark</td> | ||||
<td align="left">Estimated packet ECN marking ratio</td> | ||||
</tr> | ||||
<tr> | ||||
<td align="left">p_loss</td> | ||||
<td align="left">Estimated packet loss ratio</td> | ||||
</tr> | ||||
<tr> | ||||
<td align="left">x_curr</td> | ||||
<td align="left">Aggregate congestion signal</td> | ||||
</tr> | ||||
<tr> | ||||
<td align="left">x_prev</td> | ||||
<td align="left">Previous value of aggregate congestion signal</td> | ||||
</tr> | ||||
<tr> | ||||
<td align="left">x_diff</td> | ||||
<td align="left">Change in aggregate congestion signal w.r.t. its | ||||
previous value: x_diff = x_curr - x_prev</td> | ||||
</tr> | ||||
<tr> | ||||
<td align="left">rmode</td> | ||||
<td align="left">Rate update mode: (0 = accelerated ramp up; 1 = | ||||
gradual update)</td> | ||||
</tr> | ||||
<tr> | ||||
<td align="left">gamma</td> | ||||
<td align="left">Rate increase multiplier in accelerated ramp-up | ||||
mode</td> | ||||
</tr> | ||||
<tr> | ||||
<td align="left">loss_int</td> | ||||
<td align="left">Measured average loss interval in packet count</td> | ||||
</tr> | ||||
<tr> | ||||
<td align="left">loss_exp</td> | ||||
<td align="left">Threshold value for setting the last observed packet | ||||
loss to expiration</td> | ||||
</tr> | ||||
<tr> | ||||
<td align="left">rtt</td> | ||||
<td align="left">Estimated round-trip time at sender</td> | ||||
</tr> | ||||
<tr> | ||||
<td align="left">buffer_len</td> | ||||
<td align="left">Rate-shaping buffer occupancy measured in bytes</td> | ||||
</tr> | ||||
</tbody> | ||||
</table> | ||||
<table align="left" anchor="tab-parameters"> | ||||
<name>List of Algorithm Parameters and Their Default Values</name> | ||||
<thead> | ||||
<tr> | ||||
<th align='left'>Notation</th> | ||||
<th align='left'>Parameter Name</th> | ||||
<th align='left'>Default Value</th> | ||||
</tr> | ||||
</thead> | ||||
<tbody> | ||||
<tr> | ||||
<td align="left">PRIO</td> | ||||
<td align="left">Weight of priority of the flow</td> | ||||
<td align="left">1.0</td> | ||||
</tr> | ||||
<tr> | ||||
<td align="left">RMIN</td> | ||||
<td align="left">Minimum rate of application supported by media | ||||
encoder</td> | ||||
<td align="left">150 Kbps</td> | ||||
</tr> | ||||
<tr> | ||||
<td align="left">RMAX</td> | ||||
<td align="left">Maximum rate of application supported by media | ||||
encoder</td> | ||||
<td align="left">1.5 Mbps</td> | ||||
</tr> | ||||
<tr> | ||||
<td align="left">XREF</td> | ||||
<td align="left">Reference congestion level</td> | ||||
<td align="left">10 ms</td> | ||||
</tr> | ||||
<tr> | ||||
<td align="left">KAPPA</td> | ||||
<td align="left">Scaling parameter for gradual rate update | ||||
calculation</td> | ||||
<td align="left">0.5</td> | ||||
</tr> | ||||
<tr> | ||||
<td align="left">ETA</td> | ||||
<td align="left">Scaling parameter for gradual rate update | ||||
calculation</td> | ||||
<td align="left">2.0</td> | ||||
</tr> | ||||
<tr> | ||||
<td align="left">TAU</td> | ||||
<td align="left">Upper bound of RTT in gradual rate update | ||||
calculation</td> | ||||
<td align="left">500 ms</td> | ||||
</tr> | ||||
<tr> | ||||
<td align="left">DELTA</td> | ||||
<td align="left">Target feedback interval</td> | ||||
<td align="left">100 ms</td> | ||||
</tr> | ||||
<tr> | ||||
<td align="left">LOGWIN</td> | ||||
<td align="left">Observation window in time for calculating packet | ||||
summary statistics at receiver</td> | ||||
<td align="left">500 ms</td> | ||||
</tr> | ||||
<tr> | ||||
<td align="left">QEPS</td> | ||||
<td align="left">Threshold for determining queuing delay buildup at | ||||
receiver</td> | ||||
<td align="left">10 ms</td> | ||||
</tr> | ||||
<tr> | ||||
<td align="left">DFILT</td> | ||||
<td align="left">Bound on filtering delay</td> | ||||
<td align="left">120 ms</td> | ||||
</tr> | ||||
<tr> | ||||
<td align="left">GAMMA_MAX</td> | ||||
<td align="left">Upper bound on rate increase ratio for accelerated ramp | ||||
up</td> | ||||
<td align="left">0.5</td> | ||||
</tr> | ||||
<tr> | ||||
<td align="left">QBOUND</td> | ||||
<td align="left">Upper bound on self-inflicted queuing delay during ramp | ||||
up</td> | ||||
<td align="left">50 ms</td> | ||||
</tr> | ||||
<tr> | ||||
<td align="left">MULTILOSS</td> | ||||
<td align="left">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">7.0</td> | ||||
</tr> | ||||
<tr> | ||||
<td align="left">QTH</td> | ||||
<td align="left">Delay threshold for invoking non-linear warping</td> | ||||
<td align="left">50 ms</td> | ||||
</tr> | ||||
<tr> | ||||
<td align="left">LAMBDA</td> | ||||
<td align="left">Scaling parameter in the exponent of non-linear | ||||
warping</td> | ||||
<td align="left">0.5</td> | ||||
</tr> | ||||
<tr> | ||||
<td align="left">PLRREF</td> | ||||
<td align="left">Reference packet loss ratio</td> | ||||
<td align="left">0.01</td> | ||||
</tr> | ||||
<tr> | ||||
<td align="left">PMRREF</td> | ||||
<td align="left">Reference packet marking ratio</td> | ||||
<td align="left">0.01</td> | ||||
</tr> | ||||
<tr> | ||||
<td align="left">DLOSS</td> | ||||
<td align="left">Reference delay penalty for loss when packet loss ratio | ||||
is at PLRREF</td> | ||||
<td align="left">10 ms</td> | ||||
</tr> | ||||
<tr> | ||||
<td align="left">DMARK</td> | ||||
<td align="left">Reference delay penalty for ECN marking when packet | ||||
marking is at PMRREF</td> | ||||
<td align="left">2 ms</td> | ||||
</tr> | ||||
<tr> | ||||
<td align="left">FPS</td> | ||||
<td align="left">Frame rate of incoming video</td> | ||||
<td align="left">30</td> | ||||
</tr> | ||||
<tr> | ||||
<td align="left">BETA_S</td> | ||||
<td align="left">Scaling parameter for modulating outgoing sending | ||||
rate</td> | ||||
<td align="left">0.1</td> | ||||
</tr> | ||||
<tr> | ||||
<td align="left">BETA_V</td> | ||||
<td align="left">Scaling parameter for modulating video encoder target | ||||
rate</td> | ||||
<td align="left">0.1</td> | ||||
</tr> | ||||
<tr> | ||||
<td align="left">ALPHA</td> | ||||
<td align="left">Smoothing factor in exponential smoothing of packet | ||||
loss and marking ratios</td> | ||||
<td align="left">0.1</td> | ||||
</tr> | ||||
</tbody> | ||||
</table> | ||||
</section> | </section> | |||
<section anchor = "subsec-receiver-algorithm" | <section anchor="subsec-receiver-algorithm" numbered="true" | |||
title = "Receiver-Side Algorithm"> | toc="default"> | |||
<name>Receiver-Side Algorithm</name> | ||||
<t>The receiver-side algorithm can be outlined as below:</t> | ||||
<t>The receiver-side algorithm can be outlined as below:</t> | <ul empty="true"> | |||
<t><figure><artwork><![CDATA[ | <li>On initialization:</li> | |||
On initialization: | <li> | |||
set d_base = +INFINITY | <ul empty="true"> | |||
set p_loss = 0 | <li>set d_base = +INFINITY | |||
set p_mark = 0 | </li> | |||
set r_recv = 0 | <li>set p_loss = 0 | |||
set both t_last and t_curr as current time in milliseconds | </li> | |||
<li>set p_mark = 0 | ||||
</li> | ||||
<li>set r_recv = 0 | ||||
</li> | ||||
<li>set both t_last and t_curr as current time in milliseconds | ||||
</li> | ||||
</ul> | ||||
</li> | ||||
On receiving a media packet: | <li>On receiving a media packet: | |||
obtain current timestamp t_curr from system clock | </li> | |||
obtain from packet header sending time stamp t_sent | <li> | |||
obtain one-way delay measurement: d_fwd = t_curr - t_sent | <ul empty="true"> | |||
update baseline delay: d_base = min(d_base, d_fwd) | ||||
update queuing delay: d_queue = d_fwd - d_base | ||||
update packet loss ratio estimate p_loss | ||||
update packet marking ratio estimate p_mark | ||||
update measurement of receiving rate r_recv | ||||
On time to send a new feedback report (t_curr - t_last > DELTA): | <li>obtain current timestamp t_curr from system clock | |||
calculate non-linear warping of delay d_tilde if packet loss exists | </li> | |||
calculate current aggregate congestion signal x_curr | ||||
determine mode of rate adaptation for sender: rmode | ||||
send feedback containing values of: rmode, x_curr, and r_recv | ||||
update t_last = t_curr | ||||
]]></artwork></figure></t> | ||||
<t>In order for a delay-based flow to hold its ground when competing | <li>obtain from packet header sending time stamp t_sent | |||
</li> | ||||
<li>obtain one-way delay measurement: d_fwd = t_curr - t_sent | ||||
</li> | ||||
<li>update baseline delay: d_base = min(d_base, d_fwd) | ||||
</li> | ||||
<li>update queuing delay: d_queue = d_fwd - d_base | ||||
</li> | ||||
<li>update packet loss ratio estimate p_loss | ||||
</li> | ||||
<li>update packet marking ratio estimate p_mark | ||||
</li> | ||||
<li>update measurement of receiving rate r_recv | ||||
</li> | ||||
</ul> | ||||
</li> | ||||
<li>On time to send a new feedback report (t_curr - t_last > DELTA): | ||||
</li> | ||||
<li> | ||||
<ul empty="true"> | ||||
<li>calculate non-linear warping of delay d_tilde if packet loss exists | ||||
</li> | ||||
<li>calculate current aggregate congestion signal x_curr | ||||
</li> | ||||
<li>determine mode of rate adaptation for sender: rmode | ||||
</li> | ||||
<li>send feedback containing values of: rmode, x_curr, and r_recv | ||||
</li> | ||||
<li>update t_last = t_curr | ||||
</li> | ||||
</ul> | ||||
</li> | ||||
</ul> | ||||
<t>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 | against loss-based flows (e.g., loss-based TCP), it is important | |||
to distinguish between different levels of observed queuing delay. | to distinguish between different levels of observed queuing delay. | |||
For instance, over wired connections, a moderate queuing delay value | For instance, over wired connections, a moderate queuing delay value | |||
on the order of tens of milliseconds is likely self-inflicted or | on the order of tens of milliseconds is likely self-inflicted or | |||
induced by other delay-based flows, whereas a high queuing delay | induced by other delay-based flows, whereas a high queuing delay | |||
value of several hundreds of milliseconds may indicate the presence | value of several hundreds of milliseconds may indicate the presence | |||
of a loss-based flow that does not refrain from increased delay.</t> | of a loss-based flow that does not refrain from increased delay.</t> | |||
<t> If the last observed packet loss is within the expiration | ||||
<t> If the last observed packet loss is within the expiration | ||||
window of loss_exp (measured in terms of packet counts), the | window of loss_exp (measured in terms of packet counts), the | |||
estimated queuing delay follows a non-linear warping: </t> | estimated queuing delay follows a non-linear warping: </t> | |||
<artwork name="" type="" align="left" alt=""><![CDATA[ | ||||
<t><figure><artwork><![CDATA[ | / d_queue, if d_queue < QTH | |||
/ d_queue, if d_queue<QTH; | ||||
| | | | |||
d_tilde = < (1) | d_tilde = < (1) | |||
| (d_queue-QTH) | | (d_queue-QTH) | |||
\ QTH exp(-LAMBDA ---------------) , otherwise. | \ QTH exp(-LAMBDA ---------------) , otherwise | |||
QTH | QTH ]]></artwork> | |||
]]></artwork></figure></t> | ||||
<t> | <t> | |||
In (1), the queuing delay value is unchanged when it is below | In Equation (1), the queuing delay value is unchanged when it is below | |||
the first threshold QTH; otherwise it is scaled down following | the first threshold QTH; otherwise, it is scaled down following | |||
a non-linear curve. This non-linear warping is inspired by | a non-linear curve. This non-linear warping is inspired by | |||
the delay-adaptive congestion window backoff policy in | the delay-adaptive congestion window backoff policy in | |||
<xref target="Budzisz-TON11"></xref>, so as to "gradually nudge" | <xref target="BUDZISZ-AIMD-CC" format="default"/> so as to "gradually nudge" | |||
the controller to operate based on loss-induced congestion | the controller to operate based on loss-induced congestion | |||
signals when competing against loss-based flows. The exact form | signals when competing against loss-based flows. The exact form | |||
of the non-linear function has been simplified with respect to | of the non-linear function has been simplified with respect to | |||
<xref target="Budzisz-TON11"></xref>. The value of the threshold | <xref target="BUDZISZ-AIMD-CC" format="default"/>. The value of the threshold | |||
QTH should be carefully tuned for different operational environments, | QTH should be carefully tuned for different operational environments | |||
so as to avoid potential risks of prematurely discounting the congestion | so as to avoid potential risks of prematurely discounting the congestion | |||
signal level. Typically, a higher value of QTH is required in a | signal level. Typically, a higher value of QTH is required in a | |||
noisier environment (e.g., over wireless connections, or where the | noisier environment (e.g., over wireless connections or where the | |||
video stream encounters many time-varying background competing traffic) | video stream encounters many time-varying background competing traffic) | |||
so as to stay robust against occasional non-congestion-induced delay | so as to stay robust against occasional non-congestion-induced delay | |||
spikes. Additional insights on how this value can be tuned or auto-tuned | spikes. Additional insights on how this value can be tuned or auto-tuned | |||
should be gathered from carrying out experimental studies in different | should be gathered from carrying out experimental studies in different | |||
real-world deployment scenarios. | real-world deployment scenarios. | |||
</t> | </t> | |||
<t>The value of loss_exp is configured to self-scale with the average | ||||
<t>The value of loss_exp is configured to self-scale with the average | ||||
packet loss interval loss_int with a multiplier MULTILOSS: </t> | packet loss interval loss_int with a multiplier MULTILOSS: </t> | |||
<t><figure> | <artwork name="" type="" align="left" alt=""><![CDATA[ loss_exp = MULTILOSS * | |||
<artwork><![CDATA[ | loss_int. ]]></artwork> | |||
loss_exp = MULTILOSS * loss_int. | ||||
]]></artwork> | ||||
</figure></t> | ||||
<t>Estimation of the average loss interval loss_int, in turn, follows | ||||
Section 5.4 of the <xref target="RFC5348">TCP Friendly Rate Control | ||||
(TFRC) protocol</xref>. </t> | ||||
<t>In practice, it is recommended to linearly interpolate between the | <t>Estimation of the average loss interval loss_int, in turn, follows | |||
<xref target="RFC5348" sectionFormat ="of" | ||||
section="5.4">"TCP Friendly Rate Control | ||||
(TFRC): Protocol Specification"</xref>. </t> | ||||
<t>In practice, it is recommended to linearly interpolate between the | ||||
warped (d_tilde) and non-warped (d_queue) values of the queuing delay | 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> | during the transitional period lasting for the duration of loss_int. </t> | |||
<t>The aggregate congestion signal is:</t> | ||||
<t>The aggregate congestion signal is:</t> | <artwork name="" type="" align="left" alt=""><![CDATA[ | |||
<t><figure> | ||||
<artwork><![CDATA[ | ||||
/ p_mark \^2 / p_loss \^2 | / p_mark \^2 / p_loss \^2 | |||
x_curr = d_tilde + DMARK*|--------| + DLOSS*|--------|. (2) | x_curr = d_tilde + DMARK*|--------| + DLOSS*|--------| (2) | |||
\ PMRREF / \ PLRREF / | \ PMRREF / \ PLRREF / ]]></artwork> | |||
]]></artwork> | <t>Here, DMARK is prescribed a reference delay penalty associated with | |||
</figure></t> | 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>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>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"> | ||||
<li> No recent packet losses within the observation window LOGWIN; | ||||
and</li> <li> No buildup of queuing delay: d_fwd-d_base < QEPS | ||||
for all previous delay samples within the observation window | ||||
LOGWIN.</li> | ||||
</ul> | ||||
<t>Otherwise, the algorithm operates in graduate update mode. </t> | ||||
</section> | ||||
<section anchor="subsec-sender-algorithm" numbered="true" toc="default"> | ||||
<name>Sender-Side Algorithm</name> | ||||
<t>The sender-side algorithm is outlined as follows:</t> | ||||
<t>Here, DMARK is prescribed reference delay penalty associated | <ul empty="true"> | |||
with ECN markings at the reference marking ratio of PMRREF; | ||||
DLOSS is prescribed 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 SHOULD 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>In the absence of packet marking and losses, | <li>On initialization:</li> | |||
the value of x_curr reduces to the observed queuing | <li> | |||
delay d_queue. In that case the NADA algorithm operates | <ul empty="true"> | |||
in the regime of delay-based adaptation. </t> | <li>set r_ref = RMIN | |||
</li> | ||||
<li>set rtt = 0 | ||||
</li> | ||||
<li>set x_prev = 0 | ||||
</li> | ||||
<li>set t_last and t_curr as current system clock time | ||||
</li> | ||||
</ul> | ||||
</li> | ||||
<t>Given observed per-packet delay and loss information, | <li>On receiving feedback report: | |||
the receiver is also in a good position to determine | </li> | |||
whether the network is underutilized and recommend the | <li> | |||
corresponding rate adaptation mode for the sender. The | <ul empty="true"> | |||
criteria for operating in accelerated ramp-up mode are:</t> | ||||
<t><list style="symbols"> | <li>obtain current timestamp from system clock: t_curr | |||
<t> No recent packet losses within the observation window LOGWIN; | </li> | |||
and</t> | ||||
<t> No build-up of queuing delay: d_fwd-d_base < QEPS for all | ||||
previous delay samples within the observation window LOGWIN.</t> | ||||
</list></t> | ||||
<t>Otherwise the algorithm operates in graduate update mode. </t> | <li>obtain values of rmode, x_curr, and r_recv from feedback report | |||
</li> | ||||
</section> | <li>update estimation of rtt | |||
</li> | ||||
<section anchor = "subsec-sender-algorithm" | <li>measure feedback interval: delta = t_curr - t_last | |||
title = "Sender-Side Algorithm"> | </li> | |||
<t>The sender-side algorithm is outlined as follows:</t> | <li>if rmode == 0: | |||
</li> | ||||
<li> | ||||
<ul empty="true"> | ||||
<li>update r_ref following accelerated ramp-up rules | ||||
</li> | ||||
</ul> | ||||
</li> | ||||
<t><figure> | <li>else: | |||
<artwork><![CDATA[ | </li> | |||
on initialization: | <li> | |||
set r_ref = RMIN | <ul empty="true"> | |||
set rtt = 0 | <li>update r_ref following gradual update rules | |||
set x_prev = 0 | </li> | |||
set t_last and t_curr as current system clock time | </ul> | |||
</li> | ||||
on receiving feedback report: | <li>clip rate r_ref within the range of minimum rate (RMIN) and maximum rate | |||
obtain current timestamp from system clock: t_curr | (RMAX). | |||
obtain values of rmode, x_curr, and r_recv from feedback report | </li> | |||
update estimation of rtt | <li>set x_prev = x_curr | |||
measure feedback interval: delta = t_curr - t_last | </li> | |||
if rmode == 0: | <li>set t_last = t_curr | |||
update r_ref following accelerated ramp-up rules | </li> | |||
else: | ||||
update r_ref following gradual update rules | ||||
clip rate r_ref within the range of minimum rate (RMIN) | </ul> | |||
and maximum rate (RMAX). | </li> | |||
x_prev = x_curr | ||||
t_last = t_curr ]]></artwork> | ||||
</figure></t> | ||||
<t>In accelerated ramp-up mode, the rate r_ref is updated as follows:</t> | </ul> | |||
<t><figure> | <t>In accelerated ramp-up mode, the rate r_ref is updated as | |||
<artwork><![CDATA[ | follows:</t> | |||
<artwork name="" type="" align="left" alt=""><![CDATA[ | ||||
QBOUND | QBOUND | |||
gamma = min(GAMMA_MAX, ------------------) (3) | gamma = min(GAMMA_MAX, ------------------) (3) | |||
rtt+DELTA+DFILT | rtt+DELTA+DFILT | |||
r_ref = max(r_ref, (1+gamma) r_recv) (4) | r_ref = max(r_ref, (1+gamma) r_recv) | |||
(4) | ||||
]]></artwork></figure></t> | ]]></artwork> | |||
<t>The rate increase multiplier gamma is calculated as a function | ||||
of upper bound of self-inflicted queuing delay (QBOUND), | ||||
round-trip-time (rtt), target feedback interval (DELTA) and | ||||
bound on filtering delay for calculating d_queue (DFILT). It has | ||||
a maximum value of GAMMA_MAX. The rationale behind (3)-(4) is | ||||
that the longer it takes for the sender to observe self-inflicted | ||||
queuing delay build-up, the more conservative the sender should | ||||
be in increasing its rate, hence the smaller the rate increase | ||||
multiplier. </t> | ||||
<t>In gradual update mode, the rate r_ref is updated as:</t> | ||||
<t><figure> | ||||
<artwork><![CDATA[ | ||||
<t>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>In gradual update mode, the rate r_ref is updated as:</t> | ||||
<artwork name="" type="" align="left" alt=""><![CDATA[ | ||||
x_offset = x_curr - PRIO*XREF*RMAX/r_ref (5) | x_offset = x_curr - PRIO*XREF*RMAX/r_ref (5) | |||
x_diff = x_curr - x_prev (6) | x_diff = x_curr - x_prev (6) | |||
delta x_offset | delta x_offset | |||
r_ref = r_ref - KAPPA*-------*------------*r_ref | r_ref = r_ref - KAPPA*-------*------------*r_ref | |||
TAU TAU | TAU TAU | |||
x_diff | x_diff | |||
- KAPPA*ETA*---------*r_ref (7) | - KAPPA*ETA*---------*r_ref (7) | |||
TAU | TAU | |||
]]></artwork> | ||||
]]></artwork></figure></t> | <t>The rate changes in proportion to the previous rate decision. | |||
It is affected by two terms: the offset of the aggregate congestion | ||||
<t>The rate changes in proportion to the previous rate decision. | ||||
It is affected by two terms: offset of the aggregate congestion | ||||
signal from its value at equilibrium (x_offset) and its change | signal from its value at equilibrium (x_offset) and its change | |||
(x_diff). Calculation of x_offset depends on maximum rate | (x_diff). The calculation of x_offset depends on the maximum rate | |||
of the flow (RMAX), its weight of priority (PRIO), as well | of the flow (RMAX), its weight of priority (PRIO), as well | |||
as a reference congestion signal (XREF). The value of | as a reference congestion signal (XREF). The value of | |||
XREF is chosen so that the maximum rate of RMAX can be achieved | XREF is chosen so that the maximum rate of RMAX can be achieved | |||
when the observed congestion signal level is below PRIO*XREF. </t> | when the observed congestion signal level is below PRIO*XREF. </t> | |||
<t> | ||||
<t> | ||||
At equilibrium, the aggregated congestion signal stabilizes at | At equilibrium, the aggregated congestion signal stabilizes at | |||
x_curr = PRIO*XREF*RMAX/r_ref. This ensures that when multiple | x_curr = PRIO*XREF*RMAX/r_ref. This ensures that when multiple | |||
flows share the same bottleneck and observe a common value of | flows share the same bottleneck and observe a common value of | |||
x_curr, their rates at equilibrium will be proportional to their | x_curr, their rates at equilibrium will be proportional to their | |||
respective priority levels (PRIO) and the range between minimum | respective priority levels (PRIO) and the range between minimum | |||
and maximum rate. Values of the minimum rate (RMIN) and | and maximum rate. Values of the minimum rate (RMIN) and | |||
maximum rate (RMAX) will be provided by the media codec, | maximum rate (RMAX) will be provided by the media codec, | |||
for instance, as outlined by <xref target="I-D.ietf-rmcat-cc-codec-interactions" | for instance, as outlined by <xref | |||
> | target="I-D.ietf-rmcat-cc-codec-interactions" format="default"> | |||
</xref>. In the absence of such information, NADA sender will | </xref>. In the absence of such information, the NADA sender will | |||
choose a default value of 0 for RMIN, and 3Mbps for RMAX. </t> | choose a default value of 0 for RMIN and 3 Mbps for RMAX. </t> | |||
<t> As mentioned in the sender-side algorithm, the final rate | ||||
<t> As mentioned in the sender-side algorithm, the final rate | ||||
is always clipped within the dynamic range specified by the | is always clipped within the dynamic range specified by the | |||
application: </t> | application: </t> | |||
<artwork name="" type="" align="left" alt=""><![CDATA[ | ||||
r_ref = min(r_ref, RMAX) (8) | ||||
<t><figure><artwork><![CDATA[ | r_ref = max(r_ref, RMIN) (9) | |||
]]></artwork> | ||||
r_ref = min(r_ref, RMAX) (8) | <t>The above operations ignore many practical issues such as clock | |||
r_ref = max(r_ref, RMIN) (9) | synchronization between sender and receiver, the filtering of noise in | |||
]]></artwork></figure></t> | ||||
<t>The above operations ignore many practical issues such as clock | ||||
synchronization between sender and receiver, filtering of noise in | ||||
delay measurements, and base delay expiration. These will be addressed | delay measurements, and base delay expiration. These will be addressed | |||
in <xref target="sec-practical-nada"></xref>.</t> | in <xref target="sec-practical-nada" format="default"/>.</t> | |||
</section> | </section> | |||
</section> | </section> | |||
<section anchor="sec-practical-nada" numbered="true" toc="default"> | ||||
<section anchor="sec-practical-nada" | <name>Practical Implementation of NADA</name> | |||
title = "Practical Implementation of NADA"> | <section anchor="sec-receiver" numbered="true" toc="default"> | |||
<name>Receiver-Side Operation</name> | ||||
<section anchor="sec-receiver" | <t>The receiver continuously monitors end-to-end per-packet | |||
title="Receiver-Side Operation"> | ||||
<t>The receiver continuously monitors end-to-end per-packet | ||||
statistics in terms of delay, loss, and/or ECN marking ratios. | statistics in terms of delay, loss, and/or ECN marking ratios. | |||
It then aggregates all forms of congestion indicators into the | It then aggregates all forms of congestion indicators into the | |||
form of an equivalent delay and periodically reports this back | form of an equivalent delay and periodically reports this back | |||
to the sender. In addition, the receiver tracks the receiving | to the sender. In addition, the receiver tracks the receiving | |||
rate of the flow and includes that in the feedback message.</t> | rate of the flow and includes that in the feedback message.</t> | |||
<section anchor="sec-receiver-a" numbered="true" toc="default"> | ||||
<section anchor="sec-receiver-a" | <name>Estimation of One-Way Delay and Queuing Delay</name> | |||
title="Estimation of one-way delay and queuing delay"> | <t> | |||
The delay estimation process in NADA follows an approach similar to that of | ||||
<t> | earlier | |||
The delay estimation process in NADA follows a similar approach | delay-based congestion control schemes, such as Low Extra Delay Background | |||
as in earlier delay-based congestion control schemes, such as | Transport (LEDBAT) <xref target="RFC6817" format="default"></xref>. For | |||
<xref target="RFC6817">LEDBAT</xref>. For experimental implementations, | experimental implementations, instead of relying on RTP timestamps and the | |||
instead of relying on RTP timestamps and the transmission time offset | transmission time offset RTP header extension <xref target="RFC5450" | |||
RTP header extension <xref target="RFC5450"></xref>, the NADA sender | format="default"/>, the NADA sender can generate its own timestamp based on | |||
can generate its own timestamp based on local system clock and embed | the local system clock and embed that information in the transport packet | |||
that information in the transport packet header. The NADA receiver | header. The NADA receiver estimates the forward delay as having a constant | |||
estimates the forward delay as having a constant base delay component | base delay component plus a time-varying queuing delay component. The base | |||
plus a time varying queuing delay component. The base delay is | delay is estimated as the minimum value of one-way delay observed over a | |||
estimated as the minimum value of one-way delay observed over a | ||||
relatively long period (e.g., tens of minutes), whereas the individual | relatively long period (e.g., tens of minutes), whereas the individual | |||
queuing delay value is taken to be the difference between one-way delay | queuing delay value is taken to be the difference between one-way delay and | |||
and base delay. By re-estimating the base delay periodically, one can | base delay. By re-estimating the base delay periodically, one can avoid the | |||
avoid the potential issue of base delay expiration, whereby an earlier | potential issue of base delay expiration, whereby an earlier measured base | |||
measured base delay value is no longer valid due to underlying route | delay value is no longer valid due to underlying route changes or a cumulative | |||
changes or cumulative timing difference introduced by the clock rate skew | timing difference introduced by the clock-rate skew between sender and | |||
between sender and receiver. All delay estimations are based on sender | receiver. All delay estimations are based on sender timestamps with a | |||
timestamps with a recommended granularity of 100 microseconds | recommended granularity of 100 microseconds or finer. </t> | |||
or finer. </t> | <t> | |||
<t> | ||||
The individual sample values of queuing delay should be further | The individual sample values of queuing delay should be further | |||
filtered against various non-congestion-induced noise, such as | filtered against various non-congestion-induced noise, such as | |||
spikes due to processing "hiccup" at the network nodes. Therefore, | spikes due to a processing "hiccup" at the network nodes. Therefore, | |||
in addition to calculating the value of queuing delay using | in addition to calculating the value of queuing delay using | |||
d_queue = d_fwd - d_base, as expressed in <xref target="sec-receiver"></xref>, | d_queue = d_fwd - d_base, as expressed in <xref target="sec-receiver" | |||
current implementation further employs a minimum filter with | format="default"/>, | |||
the current implementation further employs a minimum filter with | ||||
a window size of 15 samples over per-packet queuing delay values. | a window size of 15 samples over per-packet queuing delay values. | |||
</t> | </t> | |||
</section> | ||||
</section> | <section anchor="sec-receiver-b" numbered="true" toc="default"> | |||
<name>Estimation of Packet Loss/Marking Ratio</name> | ||||
<section anchor="sec-receiver-b" | <t>The receiver detects packet losses via gaps in the | |||
title="Estimation of packet loss/marking ratio"> | ||||
<t>The receiver detects packet losses via gaps in the | ||||
RTP sequence numbers of received packets. For interactive | RTP sequence numbers of received packets. For interactive | |||
real-time media application with stringent latency | real-time media applications with stringent latency | |||
constraint (e.g., video conferencing), the receiver avoids | constraints (e.g., video conferencing), the receiver avoids | |||
the packet re-ordering delay by treating out-of-order packets | the packet reordering delay by treating out-of-order packets | |||
as losses. The instantaneous packet loss ratio p_inst is estimated | as losses. The instantaneous packet loss ratio p_inst is estimated | |||
as the ratio between the number of missing packets over | as the ratio between the number of missing packets over | |||
the number of total transmitted packets within the | the number of total transmitted packets within the | |||
recent observation window LOGWIN. The packet loss ratio | recent observation window LOGWIN. The packet loss ratio | |||
p_loss is obtained after exponential smoothing: </t> | p_loss is obtained after exponential smoothing: </t> | |||
<artwork name="" type="" align="left" alt=""><![CDATA[ | ||||
<t><figure> | p_loss = ALPHA*p_inst + (1-ALPHA)*p_loss (10) | |||
<artwork><![CDATA[ | ]]></artwork> | |||
p_loss = ALPHA*p_inst + (1-ALPHA)*p_loss. (10) | <t>The filtered result is reported back to the sender as | |||
]]></artwork> | ||||
</figure></t> | ||||
<t>The filtered result is reported back to the sender as | ||||
the observed packet loss ratio p_loss. </t> | the observed packet loss ratio p_loss. </t> | |||
<t> | ||||
<t> | The estimation of the packet marking ratio p_mark follows the same procedure | |||
Estimation of packet marking ratio p_mark follows the same procedure | ||||
as above. It is assumed that ECN marking information at the IP header | 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 | can be passed to the receiving endpoint, e.g., by following the mechanism | |||
described in <xref target="RFC6679"></xref>.</t> | described in <xref target="RFC6679" format="default"/>.</t> | |||
</section> | ||||
</section> | <section anchor="sec-receiver-c" numbered="true" toc="default"> | |||
<name>Estimation of Receiving Rate</name> | ||||
<section anchor = "sec-receiver-c" | <t> | |||
title = "Estimation of receiving rate"> | 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 | ||||
<t> | divides the total size of packets arriving during that window over the time | |||
It is fairly straightforward to estimate the receiving | span. The receiving rate (r_recv) can be either calculated at the sender side | |||
rate r_recv. NADA maintains a recent observation window | based on the per-packet feedback from the receiver or included as part of the | |||
with time span of LOGWIN, and simply divides the total | feedback report.</t> | |||
size of packets arriving during that window over the time | </section> | |||
span. The receiving rate (r_recv) can be calculated at | </section> | |||
either the sender side based on the per-packet feedback | <section anchor="sec-sender" numbered="true" toc="default"> | |||
from the receiver, or included as part of the feedback | <name>Sender-Side Operation</name> | |||
report.</t> | <t> | |||
<xref target="fig-nada-sender" format="default"/> provides a detailed | ||||
</section> | ||||
</section> | ||||
<section anchor="sec-sender" | ||||
title="Sender-Side Operation"> | ||||
<t> | ||||
<xref target="fig-nada-sender"></xref> provides a detailed | ||||
view of the NADA sender. Upon receipt of an RTCP feedback | view of the NADA sender. Upon receipt of an RTCP feedback | |||
report from the receiver, the NADA sender calculates the | report from the receiver, the NADA sender calculates the | |||
reference rate r_ref as specified in | reference rate r_ref as specified in | |||
<xref target="subsec-sender-algorithm"></xref>. | <xref target="subsec-sender-algorithm" format="default"/>. | |||
It further adjusts both the target rate for the live video | It further adjusts both the target rate for the live video | |||
encoder r_vin and the sending rate r_send over the network | encoder r_vin and the sending rate r_send over the network | |||
based on the updated value of r_ref and rate shaping buffer | based on the updated value of r_ref and rate-shaping buffer | |||
occupancy buffer_len. | occupancy buffer_len. | |||
</t> | </t> | |||
<t> | ||||
<t> | ||||
The NADA sender behavior stays the same in the presence | The NADA sender behavior stays the same in the presence | |||
of all types of congestion indicators: delay, loss, and | of all types of congestion indicators: delay, loss, and | |||
ECN marking. This unified approach allows a graceful | ECN marking. This unified approach allows a graceful | |||
transition of the scheme as the network shifts dynamically | transition of the scheme as the network shifts dynamically | |||
between light and heavy congestion levels. | between light and heavy congestion levels. | |||
</t> | </t> | |||
<figure anchor="fig-nada-sender"> | ||||
<t><figure anchor="fig-nada-sender" | <name>NADA Sender Structure</name> | |||
title="NADA Sender Structure"> | <artwork name="" type="" align="left" alt=""><![CDATA[ | |||
<artwork><![CDATA[ | ||||
+----------------+ | +----------------+ | |||
| Calculate | <---- RTCP report | | Calculate | <---- RTCP report | |||
| Reference Rate | | | Reference Rate | | |||
-----------------+ | -----------------+ | |||
| r_ref | | r_ref | |||
+------------+-------------+ | +------------+-------------+ | |||
| | | | | | |||
\|/ \|/ | \|/ \|/ | |||
+-----------------+ +---------------+ | +-----------------+ +---------------+ | |||
| Calculate Video | | Calculate | | | Calculate Video | | Calculate | | |||
| Target Rate | | Sending Rate | | | Target Rate | | Sending Rate | | |||
+-----------------+ +---------------+ | +-----------------+ +---------------+ | |||
| /|\ /|\ | | | /|\ /|\ | | |||
r_vin | | | | | r_vin | | | | | |||
\|/ +-------------------+ | | \|/ +-------------------+ | | |||
+----------+ | buffer_len | r_send | +----------+ | buffer_len | r_send | |||
| Video | r_vout -----------+ \|/ | | Video | r_vout -----------+ \|/ | |||
| Encoder |--------> |||||||||=================> | | Encoder |--------> |||||||||=================> | |||
+----------+ -----------+ RTP packets | +----------+ -----------+ RTP packets | |||
Rate Shaping Buffer | Rate-Shaping Buffer | |||
]]></artwork></figure></t> | ]]></artwork> | |||
</figure> | ||||
<section anchor = "sec-sender-c" | <section anchor="sec-sender-c" numbered="true" toc="default"> | |||
title = "Rate shaping buffer"> | <name>Rate-Shaping Buffer</name> | |||
<t> | ||||
<t> | ||||
The operation of the live video encoder is out of the scope | The operation of the live video encoder is out of the scope | |||
of the design for the congestion control scheme in NADA. | of the design for the congestion control scheme in NADA. | |||
Instead, its behavior is treated as a black box. | Instead, its behavior is treated as a black box. | |||
</t> | </t> | |||
<t> | ||||
<t> | A rate-shaping buffer is employed to absorb any instantaneous | |||
A rate shaping buffer is employed to absorb any instantaneous | mismatch between the encoder rate output r_vout and the regulated sending | |||
mismatch between encoder rate output r_vout and regulated sending | ||||
rate r_send. Its current level of occupancy is measured in bytes | rate r_send. Its current level of occupancy is measured in bytes | |||
and is denoted as buffer_len. | and is denoted as buffer_len. | |||
</t> | </t> | |||
<t>A large rate-shaping buffer contributes to higher | ||||
<t>A large rate shaping buffer contributes to higher | ||||
end-to-end delay, which may harm the performance of | end-to-end delay, which may harm the performance of | |||
real-time media communications. Therefore, the sender | real-time media communications. Therefore, the sender | |||
has a strong incentive to prevent the rate shaping | has a strong incentive to prevent the rate-shaping | |||
buffer from building up. The mechanisms adopted are: | buffer from building up. The mechanisms adopted are: | |||
</t> | </t> | |||
<ul spacing="normal"> | ||||
<t><list style="symbols"> | <li>To deplete the rate-shaping buffer faster by | |||
<t>To deplete the rate shaping buffer faster by | increasing the sending rate r_send; and </li> | |||
increasing the sending rate r_send; and </t> | <li>To limit incoming packets of the rate-shaping | |||
<t>To limit incoming packets of the rate shaping | buffer by reducing the video encoder target rate | |||
buffer by reducing the video encoder target rate | r_vin. </li> | |||
r_vin. </t> | </ul> | |||
</list></t> | </section> | |||
<section anchor="sec-sender-d" numbered="true" toc="default"> | ||||
</section> | <name>Adjusting Video Target Rate and Sending Rate</name> | |||
<t> | ||||
<section anchor = "sec-sender-d" | If the level of occupancy in the rate-shaping buffer is accessible | |||
title = "Adjusting video target rate and sending rate"> | ||||
<t> | ||||
If the level of occupancy in the rate shaping buffer is accessible | ||||
at the sender, such information can be leveraged to further adjust | 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 | 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 | actual sending rate r_send. The purpose of such adjustments is to | |||
mitigate the additional latencies introduced by the rate shaping | mitigate the additional latencies introduced by the rate-shaping | |||
buffer. The amount of rate adjustment can be calculated as follows: | buffer. The amount of rate adjustment can be calculated as follows: | |||
</t> | </t> | |||
<artwork name="" type="" align="left" alt=""><![CDATA[ | ||||
<t><figure><artwork><![CDATA[ | 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_diff_v = min(0.05*r_ref, BETA_V*8*buffer_len*FPS). (11) | r_vin = max(RMIN, r_ref - r_diff_v) (13) | |||
r_diff_s = min(0.05*r_ref, BETA_S*8*buffer_len*FPS). (12) | r_send = min(RMAX, r_ref + r_diff_s) (14) | |||
r_vin = max(RMIN, r_ref - r_diff_v). (13) | ]]></artwork> | |||
r_send = min(RMAX, r_ref + r_diff_s). (14) | ||||
]]></artwork></figure></t> | ||||
<t> In (11) and (12), the amount of adjustment is calculated | <t> In Equations (11) and (12), the amount of adjustment is calculated | |||
as proportional to the size of the rate shaping buffer but is | as proportional to the size of the rate-shaping buffer but is | |||
bounded by 5% of the reference rate r_ref calculated from network | bounded by 5% of the reference rate r_ref calculated from network | |||
congestion feedback alone. This ensures that the adjustment | congestion feedback alone. This ensures that the adjustment | |||
introduced by the rate shaping buffer will not counteract with the core | introduced by the rate-shaping buffer will not counteract with the core | |||
congestion control process. Equations (13) and (14) indicate | congestion control process. Equations (13) and (14) indicate | |||
the influence of the rate shaping buffer. A large | the influence of the rate-shaping buffer. A large | |||
rate shaping buffer nudges the encoder target rate slightly | rate-shaping buffer nudges the encoder target rate slightly | |||
below -- and the sending rate slightly above -- the reference | below (and the sending rate slightly above) the reference | |||
rate r_ref. The final video target rate (r_vin) and sending | rate r_ref. The final video target rate (r_vin) and sending | |||
rate (r_send) are further bounded within the original range of | rate (r_send) are further bounded within the original range of | |||
[RMIN, RMAX]. </t> | [RMIN, RMAX]. </t> | |||
<t> | <t> | |||
Intuitively, the amount of extra rate offset needed to completely | Intuitively, the amount of extra rate offset needed to completely | |||
drain the rate shaping buffer within the duration of a single | drain the rate-shaping buffer within the duration of a single | |||
video frame is given by 8*buffer_len*FPS, where FPS stands | video frame is given by 8*buffer_len*FPS, where FPS stands | |||
for the reference frame rate of the video. The scaling parameters | for the reference frame rate of the video. The scaling parameters | |||
BETA_V and BETA_S can be tuned to balance between the competing | BETA_V and BETA_S can be tuned to balance between the competing | |||
goals of maintaining a small rate shaping buffer and deviating | goals of maintaining a small rate-shaping buffer and deviating | |||
from the reference rate point. Empirical observations show that | from the reference rate point. Empirical observations show that | |||
the rate shaping buffer for a responsive live video encoder typically | the rate-shaping buffer for a responsive live video encoder typically | |||
stays empty and only occasionally holds a large frame (e.g., when | stays empty and only occasionally holds a large frame (e.g., when | |||
an intra-frame is produced) in transit. Therefore, the rate adjustment | an intra-frame is produced) in transit. Therefore, the rate adjustment | |||
introduced by this mechanism is expected to be minor. For instance, | introduced by this mechanism is expected to be minor. For instance, | |||
a rate shaping buffer of 2000 Bytes will lead to a rate adjustment | a rate-shaping buffer of 2000 bytes will lead to a rate adjustment | |||
of 48Kbps given the recommended scaling parameters of BETA_V = 0.1 | of 48 Kbps given the recommended scaling parameters of BETA_V = 0.1 | |||
and BETA_S = 0.1 and reference frame rate of FPS = 30. | and BETA_S = 0.1, and the reference frame rate of FPS = 30. | |||
</t> | </t> | |||
</section> | ||||
</section> | </section> | |||
<section anchor="sec-feedback" numbered="true" toc="default"> | ||||
</section> | <name>Feedback Message Requirements</name> | |||
<t>The following list of information is required for | ||||
<section anchor = "sec-feedback" | ||||
title = "Feedback Message Requirements"> | ||||
<t>The following list of information is required for | ||||
NADA congestion control to function properly: </t> | NADA congestion control to function properly: </t> | |||
<t><list style="symbols"> | <dl newline="false" spacing="normal"> | |||
<dt>Recommended rate adaptation mode (rmode): | ||||
<t>Recommended rate adaptation mode (rmode): a 1-bit flag | </dt> | |||
indicating whether the sender should operate in | <dd>A 1-bit flag indicating whether the sender should operate in accelerated | |||
accelerated ramp-up mode (rmode=0) or gradual update | ramp-up mode (rmode=0) or gradual update mode (rmode=1). | |||
mode (rmode=1). </t> | </dd> | |||
<t>Aggregated congestion signal (x_curr): the most recently | <dt>Aggregated congestion signal (x_curr): | |||
updated value, calculated by the receiver according to | </dt> | |||
<xref target="subsec-receiver-algorithm"></xref>. This | <dd>The most recently updated value, calculated by the receiver according to | |||
information can be expressed with a unit of 100 microsecond | <xref target="subsec-receiver-algorithm" format="default"/>. This information | |||
(i.e., 1/10 of a millisecond) in 15 bits. This allows | can be expressed with a unit of 100 microseconds (i.e., 1/10 of a millisecond) | |||
a maximum value of x_curr at approximately 3.27 second.</t> | in 15 bits. This allows a maximum value of x_curr at approximately 3.27 | |||
seconds. | ||||
</dd> | ||||
<t> | <dt>Receiving rate (r_recv): | |||
Receiving rate (r_recv): the most recently measured | </dt> | |||
receiving rate according to <xref target="sec-receiver-c"> | <dd>The most recently measured receiving rate according to <xref | |||
</xref>. This information is expressed with a unit of | target="sec-receiver-c" format="default"> </xref>. This information is | |||
bits per second (bps) in 32 bits (unsigned int). This | expressed with a unit of bits per second (bps) in 32 bits (unsigned int). This | |||
allows a maximum rate of approximately 4.3Gbps, approximately | allows a maximum rate of approximately 4.3 Gbps, approximately 1000 times the | |||
1000 times of the streaming rate of a typical high-definition | streaming rate of a typical high-definition (HD) video conferencing session | |||
(HD) video conferencing session today. This field can be | today. This field can be expanded further by a few more bytes if an even | |||
expanded further by a few more bytes, in case an even | higher rate needs to be specified. | |||
higher rate need to be specified.</t> | </dd> | |||
</list></t> | </dl> | |||
<t> | <t> | |||
The above list of information can be accommodated by 48 bits, | The above list of information can be accommodated by 48 bits, | |||
or 6 bytes, in total. They can be either included in the | or 6 bytes, in total. They can be either included in the | |||
feedback report from the receiver, or, in the case where all | feedback report from the receiver or, in the case where all | |||
receiver-side calculations are moved to the sender, derived | receiver-side calculations are moved to the sender, derived | |||
from per-packet information from the feedback message as defined | from per-packet information from the feedback message as defined | |||
in <xref target="I-D.ietf-avtcore-cc-feedback-message"></xref>. | in <xref target="I-D.ietf-avtcore-cc-feedback-message" format="default"/>. | |||
Choice of the feedback message interval DELTA is discussed in | Choosing the feedback message interval DELTA is discussed in | |||
<xref target="sec-discussion-c"></xref>. A target feedback interval | <xref target="sec-discussion-c" format="default"/>. A target feedback | |||
of DELTA=100ms is recommended. | interval | |||
</t> | of DELTA = 100 ms is recommended. | |||
</t> | ||||
</section> | ||||
</section> | ||||
<section anchor = "sec-discussions" | </section> | |||
title = "Discussions and Further Investigations"> | </section> | |||
<t>This section discussed the various design choices | <section anchor="sec-discussions" numbered="true" toc="default"> | |||
<name>Discussions and Further Investigations</name> | ||||
<t>This section discusses the various design choices | ||||
made by NADA, potential alternative variants of its | made by NADA, potential alternative variants of its | |||
implementation, and guidelines on how the key algorithm | implementation, and guidelines on how the key algorithm | |||
parameters can be chosen. <xref target="sec-experiments"></xref> | parameters can be chosen. <xref target="sec-experiments" format="default"/> | |||
recommends additional experimental setups to | recommends additional experimental setups to | |||
further explore these topics. </t> | further explore these topics. </t> | |||
<section anchor="sec-discussion-a" numbered="true" toc="default"> | ||||
<name>Choice of Delay Metrics</name> | ||||
<section anchor = "sec-discussion-a" | <t> | |||
title = "Choice of delay metrics"> | 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 | ||||
<t> | maintaining the minimum value of observed OWD over a relatively long time | |||
The current design works with relative one-way-delay (OWD) | horizon and subtracting that out from the observed absolute OWD value. Such an | |||
as the main indication of congestion. The value of the relative | approach cancels out the fixed difference between the sender and receiver | |||
OWD is obtained by maintaining the minimum value of observed | clocks. It has been widely adopted by other delay-based congestion control | |||
OWD over a relatively long time horizon and subtract that out | approaches such as <xref target="RFC6817" format="default"/>. As discussed in | |||
from the observed absolute OWD value. Such an approach cancels | <xref target="RFC6817" format="default"/>, the time horizon for tracking the | |||
out the fixed difference between the sender and receiver clocks. | minimum OWD needs to be chosen with care; it must be long enough for an | |||
It has been widely adopted by other delay-based congestion | opportunity to observe the minimum OWD with zero standing queue along the | |||
control approaches such as <xref target="RFC6817"></xref>. | path, | |||
As discussed in <xref target="RFC6817"></xref>, the time horizon | and it must be sufficiently short enough to timely reflect "true" changes in | |||
for tracking the minimum OWD needs to be chosen with care: it must | minimum OWD introduced by route changes and other rare events and | |||
be long enough for an opportunity to observe the minimum OWD with | to mitigate the cumulative impact of clock rate skew over time. | |||
zero standing queue along the path, and sufficiently short so as to | </t> | |||
timely reflect "true" changes in minimum OWD introduced by route | <t> | |||
changes and other rare events and to mitigate the cumulative impact | ||||
of clock rate skew over time. | ||||
</t> | ||||
<t> | ||||
The potential drawback in relying on relative OWD as the congestion | The potential drawback in relying on relative OWD as the congestion | |||
signal is that when multiple flows share the same bottleneck, the | signal is that when multiple flows share the same bottleneck, the | |||
flow arriving late at the network experiencing a non-empty queue may | flow arriving late at the network experiencing a non-empty queue may | |||
mistakenly consider the standing queuing delay as part of the fixed | mistakenly consider the standing queuing delay as part of the fixed | |||
path propagation delay. This will lead to slightly unfair bandwidth | path propagation delay. This will lead to slightly unfair bandwidth | |||
sharing among the flows. | sharing among the flows. | |||
</t> | </t> | |||
<t>Alternatively, one could move the per-packet statistical handling | ||||
<t>Alternatively, one could move the per-packet statistical handling | to the sender instead and use relative round-trip time (RTT) in lieu | |||
to the sender instead and use relative round-trip-time (RTT) in lieu | ||||
of relative OWD, assuming that per-packet acknowledgments are available. | of relative OWD, assuming that per-packet acknowledgments are available. | |||
The main drawback of RTT-based approach is the noise in the measured delay | The main drawback of an RTT-based approach is the noise in the measured delay | |||
in the reverse direction. | in the reverse direction. | |||
</t> | </t> | |||
<t> | ||||
<t> | Note that the choice of either delay metric (relative OWD vs. RTT) involves no | |||
Note that the choice of either delay metric (relative OWD vs. RTT) | change in the proposed rate adaptation algorithm. Therefore, comparing the | |||
involves no change in the proposed rate adaptation algorithm. | pros and cons regarding which delay metric to adopt can be kept as an | |||
Therefore, comparing the pros and cons regarding which delay metric | orthogonal direction of investigation. | |||
to adopt can be kept as an orthogonal direction of investigation. | </t> | |||
</t> | </section> | |||
<section anchor="sec-discussion-b" numbered="true" toc="default"> | ||||
</section> | <name>Method for Delay, Loss, and Marking Ratio Estimation</name> | |||
<t>Like other delay-based congestion control schemes, performance of | ||||
<section anchor="sec-discussion-b" | NADA depends on the accuracy of its delay measurement and estimation | |||
title = "Method for delay, loss, and marking ratio estimation"> | module. <xref target= "RFC6817" format="default" section="A"/> | |||
provides an extensive discussion on this aspect. | ||||
<t>Like other delay-based congestion control schemes, | </t> | |||
performance of NADA depends on the accuracy of its | ||||
delay measurement and estimation module. Appendix A | ||||
in <xref target = "RFC6817"></xref> provides an | ||||
extensive discussion on this aspect. | ||||
</t> | ||||
<t>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 de-noising, outlier rejection, | ||||
and trend analysis may be needed. </t> | ||||
<t> | <t>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> | ||||
More sophisticated methods in packet loss ratio calculation, | More sophisticated methods in packet loss ratio calculation, | |||
such as that adopted by <xref target="Floyd-CCR00"></xref>, | such as that adopted by <xref target="FLOYD-CCR00" format="default"/>, | |||
will likely be beneficial. These alternatives are part of | will likely be beneficial. These alternatives are part of | |||
the experiments this document proposes.</t> | the experiments this document proposes.</t> | |||
</section> | ||||
</section> | <section anchor="sec-discussion-c" numbered="true" toc="default"> | |||
<name>Impact of Parameter Values</name> | ||||
<section anchor = "sec-discussion-c" | <t>In the gradual rate update mode, the parameter TAU indicates the | |||
title = "Impact of parameter values"> | upper bound of round-trip time (RTT) in the feedback control loop. | |||
Typically, the observed feedback interval delta is close to the target | ||||
<t>In the gradual rate update mode, the parameter TAU indicates | feedback interval DELTA, and the relative ratio of delta/TAU versus | |||
the upper bound of round-trip-time (RTT) in feedback control loop. | ETA dictates the relative strength of influence from the aggregate | |||
Typically, the observed feedback interval delta is close to the | congestion signal offset term (x_offset) versus its recent change | |||
target feedback interval DELTA, and the relative ratio of delta/TAU | (x_diff), respectively. These two terms are analogous to the integral | |||
versus ETA dictates the relative strength of influence from the | and proportional terms in a proportional-integral (PI) controller. The | |||
aggregate congestion signal offset term (x_offset) versus its recent | recommended choice of TAU = 500 ms, DELTA = 100 ms, and ETA = 2.0 | |||
change (x_diff), respectively. These two terms are analogous to | corresponds | |||
the integral and proportional terms in a proportional-integral (PI) | to a relative ratio of 1:10 between the gains of the integral and | |||
controller. The recommended choice of TAU=500ms, DELTA=100ms and | proportional terms. Consequently, the rate adaptation is mostly driven | |||
ETA = 2.0 corresponds to a relative ratio of 1:10 between the gains | by the change in the congestion signal with a long-term shift towards | |||
of the integral and proportional terms. Consequently, the rate | its equilibrium value driven by the offset term. Finally, the scaling | |||
adaptation is mostly driven by the change in the congestion signal | parameter KAPPA determines the overall speed of the adaptation and | |||
with a long-term shift towards its equilibrium value driven by the | needs to strike a balance between responsiveness and stability. </t> | |||
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> | <t> | |||
The choice of the target feedback interval DELTA needs to strike | The choice of the target feedback interval DELTA needs to strike the right | |||
the right balance between timely feedback and low RTCP feedback | balance between timely feedback and low RTCP feedback message counts. A target | |||
message counts. A target feedback interval of DELTA=100ms is | feedback interval of DELTA = 100 ms is recommended, corresponding to a | |||
recommended, corresponding to a feedback bandwidth of 16Kbps | feedback | |||
with 200 bytes per feedback message --- approximately 1.6% | bandwidth of 16 Kbps with 200 bytes per feedback message -- approximately 1.6% | |||
overhead for a 1Mbps flow. Furthermore, both simulation | overhead for a 1 Mbps flow. Furthermore, both simulation studies and | |||
studies and frequency-domain analysis in <xref target="IETF-95"></xref> | frequency-domain analysis in <xref target="IETF-95" format="default"/> have | |||
have established that a feedback interval below 250ms (i.e., more | established that a feedback interval below 250 ms (i.e., more frequently than | |||
frequently than 4 feedback messages per second) will not break | 4 | |||
up the feedback control loop of NADA congestion control. </t> | feedback messages per second) will not break up the feedback control loop of | |||
NADA congestion control. </t> | ||||
<t>In calculating the non-linear warping of delay in (1), | <t>In calculating the non-linear warping of delay in Equation (1), | |||
the current design uses fixed values of QTH for determining | the current design uses fixed values of QTH for determining | |||
whether to perform the non-linear warping). Its value should be | whether to perform the non-linear warping. Its value should be | |||
carefully tuned for different operational environments (e.g., | carefully tuned for different operational environments (e.g., | |||
over wired vs. wireless connections), so as to avoid the potential | over wired vs. wireless connections) so as to avoid the potential | |||
risk of prematurely discounting the congestion signal level. | risk of prematurely discounting the congestion signal level. | |||
It is possible to adapt its value based on past observed patterns | 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 | of queuing delay in the presence of packet losses. It needs to be | |||
noted that the non-linear warping mechanism may lead to multiple | noted that the non-linear warping mechanism may lead to multiple | |||
NADA streams stuck in loss-based mode when competing against | NADA streams stuck in loss-based mode when competing against | |||
each other. </t> | each other. </t> | |||
<t>In calculating the aggregate congestion signal x_curr, the | <t>In calculating the aggregate congestion signal x_curr, the | |||
choice of DMARK and DLOSS influence the steady-state packet | choice of DMARK and DLOSS influence the steady-state packet | |||
loss/marking ratio experienced by the flow at a given | loss/marking ratio experienced by the flow at a given | |||
available bandwidth. Higher values of DMARK and DLOSS result | available bandwidth. Higher values of DMARK and DLOSS result | |||
in lower steady-state loss/marking ratios, but are more | in lower steady-state loss/marking ratios but are more | |||
susceptible to the impact of individual packet loss/marking | susceptible to the impact of individual packet loss/marking | |||
events. While the value of DMARK and DLOSS are fixed and | events. While the value of DMARK and DLOSS are fixed and | |||
predetermined in the current design, this document also encourages | predetermined in the current design, this document also encourages | |||
further explorations of a scheme for automatically | further explorations of a scheme for automatically | |||
tuning these values based on desired bandwidth sharing behavior | tuning these values based on desired bandwidth sharing behavior | |||
in the presence of other competing loss-based flows (e.g., | in the presence of other competing loss-based flows (e.g., | |||
loss-based TCP).</t> | loss-based TCP).</t> | |||
</section> | ||||
</section> | <section anchor="sec-discussion-d" numbered="true" toc="default"> | |||
<name>Sender-Based vs. Receiver-Based Calculation</name> | ||||
<section anchor="sec-discussion-d" | <t>In the current design, the aggregated congestion | |||
title = "Sender-based vs. receiver-based calculation"> | ||||
<t>In the current design, the aggregated congestion | ||||
signal x_curr is calculated at the receiver, keeping | signal x_curr is calculated at the receiver, keeping | |||
the sender operation completely independent of the | the sender operation completely independent of the | |||
form of actual network congestion indications (delay, | form of actual network congestion indications (delay, | |||
loss, or marking) in use. </t> | loss, or marking) in use. </t> | |||
<t>Alternatively, one can shift receiver-side calculations | ||||
<t>Alternatively, one can shift receiver-side calculations | ||||
to the sender, whereby the receiver simply reports on per-packet | to the sender, whereby the receiver simply reports on per-packet | |||
information via periodic feedback messages as defined in | information via periodic feedback messages as defined in | |||
<xref target="I-D.ietf-avtcore-cc-feedback-message"></xref>. | <xref target="I-D.ietf-avtcore-cc-feedback-message" format="default"/>. | |||
Such an approach enables interoperability amongst senders operating | Such an approach enables interoperability amongst senders operating | |||
on different congestion control schemes, but requires slightly | on different congestion control schemes but requires slightly | |||
higher overhead in the feedback messages. See additional discussions | higher overhead in the feedback messages. See additional discussions | |||
in <xref target="I-D.ietf-avtcore-cc-feedback-message"></xref> | in <xref target="I-D.ietf-avtcore-cc-feedback-message" format="default"/> | |||
regarding the desired format of the feedback messages and the | regarding the desired format of the feedback messages and the | |||
recommended feedback intervals. </t> | recommended feedback intervals. </t> | |||
</section> | ||||
</section> | <section anchor="sec-discussion-e" numbered="true" toc="default"> | |||
<name>Incremental Deployment</name> | ||||
<section anchor = "sec-discussion-e" | <t> | |||
title = "Incremental deployment"> | ||||
<t> | ||||
One nice property of NADA is the consistent video endpoint | One nice property of NADA is the consistent video endpoint | |||
behavior irrespective of network node variations. This facilitates | behavior irrespective of network node variations. This facilitates | |||
gradual, incremental adoption of the scheme. | gradual, incremental adoption of the scheme. | |||
</t> | </t> | |||
<t> | ||||
<t> | ||||
Initially, the proposed congestion control mechanism can | Initially, the proposed congestion control mechanism can | |||
be implemented without any explicit support from the network, and | be implemented without any explicit support from the network and | |||
relies solely on observed relative one-way delay measurements | relies solely on observed relative one-way delay measurements | |||
and packet loss ratios as implicit congestion signals. | and packet loss ratios as implicit congestion signals. | |||
</t> | </t> | |||
<t> | ||||
<t> | ||||
When ECN is enabled at the network nodes with RED-based marking, | When ECN is enabled at the network nodes with RED-based marking, | |||
the receiver can fold its observations of ECN markings into the | the receiver can fold its observations of ECN markings into the | |||
calculation of the equivalent delay. The sender can react to these | calculation of the equivalent delay. The sender can react to these | |||
explicit congestion signals without any modification. | explicit congestion signals without any modification. | |||
</t> | </t> | |||
<t> | <t> | |||
Ultimately, networks equipped with proactive marking based on | Ultimately, networks equipped with proactive marking based on the level of | |||
token bucket level metering can reap the additional benefits of | token bucket metering can reap the additional benefits of | |||
zero standing queues and lower end-to-end delay and work | zero standing queues and lower end-to-end delay and work | |||
seamlessly with existing senders and receivers. | seamlessly with existing senders and receivers. | |||
</t> | </t> | |||
</section> | ||||
</section> | </section> | |||
<section anchor="sec-implementations" numbered="true" toc="default"> | ||||
</section> | <name>Reference Implementations</name> | |||
<t> | ||||
<section anchor = "sec-implementations" | The NADA scheme has been implemented in both ns-2 <xref target="NS-2" | |||
title ="Reference Implementations"> | format="default"/> | |||
and ns-3 <xref target="NS-3" format="default"/> simulation platforms. The | ||||
<t> | implementation | |||
The NADA scheme has been implemented in both <xref target="ns-2"></xref> | ||||
and <xref target="ns-3"></xref> simulation platforms. The implementation | ||||
in ns-2 hosts the calculations as described in | in ns-2 hosts the calculations as described in | |||
<xref target="subsec-receiver-algorithm"></xref> at the receiver side, | <xref target="subsec-receiver-algorithm" format="default"/> at the receiver | |||
side, | ||||
whereas the implementation in ns-3 hosts these receiver-side calculations | whereas the implementation in ns-3 hosts these receiver-side calculations | |||
at the sender for the sake of interoperability. Extensive ns-2 simulation | at the sender for the sake of interoperability. Extensive ns-2 simulation | |||
evaluations of an earlier version of the draft are documented in | evaluations of an earlier draft version of this document are recorded in | |||
<xref target="Zhu-PV13"></xref>. | <xref target="ZHU-PV13" format="default"/>. | |||
An open source implementation of NADA as part of a ns-3 module is | An open-source implementation of NADA as part of an ns-3 module is | |||
available at <xref target="ns3-rmcat"></xref>. | available at <xref target="NS3-RMCAT" format="default"/>. | |||
Evaluation results of the current draft based on ns-3 are presented | Evaluation results of this document based on ns-3 are presented | |||
in <xref target="IETF-90"></xref> and <xref target="IETF-91"></xref> | in <xref target="IETF-90" format="default"/> and <xref target="IETF-91" | |||
for wired test cases as documented in <xref target="I-D.ietf-rmcat-eval-test"></ | format="default"/> | |||
xref>. | for wired test cases as documented in <xref target="I-D.ietf-rmcat-eval-test" | |||
Evaluation results of NADA over WiFi-based test cases as defined in | format="default"/>. | |||
<xref target="I-D.ietf-rmcat-wireless-tests"></xref> are | Evaluation results of NADA over Wi-Fi-based test cases as defined in | |||
presented in <xref target="IETF-93"></xref>. These simulation-based | <xref target="I-D.ietf-rmcat-wireless-tests" format="default"/> are | |||
presented in <xref target="IETF-93" format="default"/>. These simulation-based | ||||
evaluations have shown that NADA flows can obtain their fair share of | evaluations have shown that NADA flows can obtain their fair share of | |||
bandwidth when competing against each other. They typically adapt fast | bandwidth when competing against each other. They typically adapt fast | |||
in reaction to the arrival and departure of other flows, and can sustain | in reaction to the arrival and departure of other flows and can sustain | |||
a reasonable throughput when competing against loss-based TCP flows. </t> | a reasonable throughput when competing against loss-based TCP flows. </t> | |||
<t> | ||||
<t> | <xref target="IETF-90" format="default"/> describes the implementation and | |||
<xref target="IETF-90"></xref> describes the implementation and | ||||
evaluation of NADA in a lab setting. Preliminary evaluation | evaluation of NADA in a lab setting. Preliminary evaluation | |||
results of NADA in single-flow and multi-flow test scenarios | results of NADA in single-flow and multi-flow test scenarios | |||
have been presented in <xref target="IETF-91"></xref>. </t> | are presented in <xref target="IETF-91" format="default"/>. </t> | |||
<t> | ||||
<t> | ||||
A reference implementation of NADA has been carried out by | A reference implementation of NADA has been carried out by | |||
modifying the WebRTC module embedded in the Mozilla open source | modifying the WebRTC module embedded in the Mozilla open-source | |||
browser. Presentations from <xref target="IETF-103"></xref> | browser. Presentations from <xref target="IETF-103" format="default"/> | |||
and <xref target="IETF-105"></xref> document real-world evaluations | and <xref target="IETF-105" format="default"/> document real-world evaluations | |||
of the modified browser driven by NADA. The experimental setting | of the modified browser driven by NADA. The experimental setting | |||
involve remote connections with endpoints over either home or enterprise | involves remote connections with endpoints over either home or enterprise | |||
wireless networks. These evaluations validate the effectiveness of | wireless networks. These evaluations validate the effectiveness of | |||
NADA flows in recovering quickly from throughput drops caused by | NADA flows in recovering quickly from throughput drops caused by | |||
intermittent delay spikes over the last-hop wireless connections. </t> | intermittent delay spikes over the last-hop wireless connections. </t> | |||
</section> | ||||
<section anchor="sec-experiments" numbered="true" toc="default"> | ||||
<name>Suggested Experiments</name> | ||||
<t> | ||||
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"/> and the subset of | ||||
Wi-Fi-based test cases in <xref target="I-D.ietf-rmcat-wireless-tests" | ||||
format="default"/>. 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"/>) as discussed in | ||||
<xref target="sec-discussions" format="default"/>. </t> | ||||
<t>Additional experiments are suggested for the following scenarios, | ||||
preferably over real-world networks: </t> | ||||
<ul spacing="normal"> | ||||
<li>Experiments reflecting the setup of a typical WAN | ||||
connection. </li> | ||||
<li>Experiments with ECN marking capability turned on at the network | ||||
for existing test cases.</li> | ||||
<li>Experiments with multiple NADA streams bearing different | ||||
user-specified priorities.</li> | ||||
<li>Experiments with additional access technologies, especially | ||||
over cellular networks such as 3G/LTE.</li> | ||||
<li>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="default"> | ||||
<name>IANA Considerations</name> | ||||
<t>This document has no IANA actions.</t> | ||||
</section> | ||||
<section anchor="sec-security" numbered="true" toc="default"> | ||||
<name>Security Considerations</name> | ||||
<t>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"/> | ||||
discusses the potential risk of a receiver providing misleading | ||||
congestion feedback information and the mechanisms for mitigating such | ||||
risks.</t> | ||||
</section> | <t>The modification of the sending rate based on the sender-side | |||
rate-shaping | ||||
<section anchor = "sec-experiments" | buffer may lead to temporary excessive congestion over the network in | |||
title = "Suggested Experiments"> | the presence of an unresponsive video encoder. However, this effect can | |||
be mitigated by limiting the amount of rate modification introduced by | ||||
<t> | the rate-shaping buffer, bounding the size of the rate-shaping buffer at | |||
NADA has been extensively evaluated under various test | the sender, and maintaining a maximum allowed sending rate by NADA. | |||
scenarios, including the collection of test cases specified | </t> | |||
by <xref target="I-D.ietf-rmcat-eval-test"></xref> and the | </section> | |||
subset of WiFi-based test cases in | ||||
<xref target="I-D.ietf-rmcat-wireless-tests"></xref>. | ||||
Additional evaluations have been carried out to characterize | ||||
how NADA interacts with various active queue management (AQM) | ||||
schemes such as RED, CoDel, and 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 exercise will provide insights on how to choose or | ||||
automatically adapt the values of the key algorithm parameters | ||||
(see list in <xref target="tab-parameters"></xref>) as discussed | ||||
in <xref target="sec-discussions"></xref>. </t> | ||||
<t>Additional experiments are suggested for the following scenarios | ||||
and preferably over real-world networks: </t> | ||||
<t><list style="symbols"> | ||||
<t>Experiments reflecting the setup of a typical WAN connection. </t> | ||||
<t>Experiments with ECN marking capability turned on at the network | ||||
for existing test cases.</t> | ||||
<t>Experiments with multiple NADA streams bearing different | ||||
user-specified priorities.</t> | ||||
<t>Experiments with additional access technologies, especially | ||||
over cellular networks such as 3G/LTE.</t> | ||||
<t>Experiments with various media source contents, including audio only, | ||||
audio and video, and application content sharing (e.g., slide shows). </t> | ||||
</list></t> | ||||
</section> | ||||
<section anchor = "sec-iana" | ||||
title = "IANA Considerations"> | ||||
<t>This document makes no request of IANA.</t> | ||||
</section> | ||||
<section anchor = "sec-security" | ||||
title = "Security Considerations"> | ||||
<t>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. It is therefore | ||||
RECOMMENDED that the RTCP feedback message is at least integrity | ||||
checked. In addition, <xref target="I-D.ietf-avtcore-cc-feedback-message"></ | ||||
xref> | ||||
discusses the potential risk of a receiver providing misleading | ||||
congestion feedback information and the mechanisms for mitigating | ||||
such risks.</t> | ||||
<t>The modification | ||||
of sending rate based on send-side rate shaping buffer may | ||||
lead to temporary excessive congestion over the network | ||||
in the presence of a 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> | ||||
<section anchor = "sec-acknowledgments" | ||||
title = "Acknowledgments"> | ||||
<t> | ||||
The authors would like to thank Randell Jesup, Luca De Cicco, Piers O'Hanlon, | ||||
Ingemar Johansson, Stefan Holmer, Cesar Ilharco Magalhaes, Safiqul Islam, | ||||
Michael Welzl, Mirja Kuhlewind, Karen Elisabeth Egede Nielsen, Julius Flohr, | ||||
Roland Bless, Andreas Smas, and Martin Stiemerling for their valuable review | ||||
comments and helpful input to this specification. </t> | ||||
</section> | ||||
<section title="Contributors" | ||||
anchor="sec-contributors"> | ||||
<t>The following individuals have contributed to the implementation | ||||
and evaluation of the proposed scheme, and therefore have helped | ||||
to validate and substantially improve this specification.</t> | ||||
<t><list> | ||||
<t>Paul E. Jones <paulej@packetizer.com> of Cisco Systems implemented | ||||
an early version of the NADA congestion control scheme and helped with its | ||||
lab-based testbed evaluations. </t> | ||||
<t>Jiantao Fu <jianfu@cisco.com> 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>Stefano D'Aronco <stefano.daronco@geod.baug.ethz.ch> of ETH Zurich | ||||
(previously at Ecole Polytechnique Federale de Lausanne when contributing | ||||
to this work) helped with implementation and evaluation of an early version | ||||
of NADA in <xref target="ns-3"></xref>. </t> | ||||
<t>Charles Ganzhorn <charles.ganzhorn@gmail.com> contributed to the | ||||
testbed-based evaluation of NADA during an early stage of its development. | ||||
</t> | ||||
</list></t> | ||||
</section> | ||||
</middle> | ||||
<back> | ||||
<references title="Normative References"> | ||||
&rfc2119; <!-- RFCs --> | ||||
&rfc3168; <!-- ECN --> | ||||
&rfc3550; <!-- RTP --> | ||||
&rfc5348; <!-- TFRC --> | ||||
&rfc6679; <!--- ECN over RTP --> | ||||
&rfc8174; <!--- Ambiguity of Uppercase vs Lowercase --> | ||||
</references> | ||||
<references title="Informative References"> | ||||
&rfc5450; | ||||
&rfc6660; <!-- PCN --> | ||||
&rfc6817; <!-- LEDBAT --> | ||||
&rfc7567; <!-- RED --> | ||||
&rfc8033; <!-- PIE --> | ||||
&rfc8290; <!-- FQ-CoDel --> | ||||
&rfc8593; <!-- Video Traffic Model --> | ||||
<!--RMCAT related --> | ||||
&I-D.ietf-rmcat-cc-requirements; | ||||
&I-D.ietf-rmcat-cc-codec-interactions; | ||||
&I-D.ietf-rmcat-eval-test; | ||||
&I-D.ietf-rmcat-wireless-tests; | ||||
&I-D.ietf-avtcore-cc-feedback-message; | ||||
<reference anchor="Floyd-CCR00" | ||||
target=""> | ||||
<front> | ||||
<title> | ||||
Equation-based Congestion Control for Unicast Applications | ||||
</title> | ||||
<author fullname="Sally Floyd" initials="S." surname="Floyd"> | ||||
<organization></organization> | ||||
</author> | ||||
<author fullname="Mark Handley" initials="M." surname="Handley"> | ||||
<organization></organization> | ||||
</author> | ||||
<author fullname="Jitendra Padhye" initials="J." surname="Padhye"> | ||||
<organization></organization> | ||||
</author> | ||||
<author fullname="Jorg Widmer" initials="J." surname="Widmer"> | ||||
<organization></organization> | ||||
</author> | ||||
<date month="October" year="2000" /> | ||||
</front> | ||||
<seriesInfo name="ACM SIGCOMM Computer Communications Review" | ||||
value="vol. 30, no. 4, pp. 43-56"/> | ||||
</reference> | ||||
<reference anchor="Budzisz-TON11" | ||||
target=""> | ||||
<front> | ||||
<title> | ||||
On the Fair Coexistence of Loss- and Delay-Based TCP | ||||
</title> | ||||
<author fullname="Lukasz Budzisz" initials="L." surname="Budzisz"> | ||||
<organization></organization> | ||||
</author> | ||||
<author fullname="Rade Stanojevic" initials="R." surname="Stanojevic"> | ||||
<organization></organization> | ||||
</author> | ||||
<author fullname="Arieh Schlote" initials="A." surname="Schlote"> | ||||
<organization></organization> | ||||
</author> | ||||
<author fullname="Fred Baker" initials="F." surname="Baker"> | ||||
<organization></organization> | ||||
</author> | ||||
<author fullname="Robert Shorten" initials="R." surname="Shorten"> | ||||
<organization></organization> | ||||
</author> | ||||
<date month="December" year="2011" /> | ||||
</front> | ||||
<seriesInfo name="IEEE/ACM Transactions on Networking" | ||||
value="vol. 19, no. 6, pp. 1811-1824"/> | ||||
</reference> | ||||
<reference anchor="Zhu-PV13" | ||||
target=""> | ||||
<front> | ||||
<title> | ||||
NADA: A Unified Congestion Control Scheme for Low-Latency Interac | ||||
tive Video | ||||
</title> | ||||
<author fullname="Xiaoqing Zhu" initials="X." surname="Zhu"> | ||||
<organization></organization> | ||||
</author> | ||||
<author fullname="Rong Pan" initials="R." surname="Pan"> | ||||
<organization></organization> | ||||
</author> | ||||
<date month="December" year="2013" /> | ||||
</front> | ||||
<seriesInfo name="in Proc. IEEE International Packet Video Workshop (PV' | ||||
13)" | ||||
value="San Jose, CA, USA"/> | ||||
</reference> | ||||
<reference anchor="ns-2" target="http://www.isi.edu/nsnam/ns/"> | ||||
<front> | ||||
<title>The Network Simulator - ns-2</title> | ||||
<author> | ||||
<organization></organization> | ||||
</author> | ||||
<date /> | ||||
</front> | ||||
</reference> | ||||
<reference anchor="ns-3" target="https://www.nsnam.org/"> | ||||
<front> | ||||
<title>The Network Simulator - ns-3</title> | ||||
<author> | ||||
<organization></organization> | ||||
</author> | ||||
<date /> | ||||
</front> | ||||
</reference> | ||||
<reference anchor="IETF-90" | ||||
target="https://tools.ietf.org/agenda/90/slides/slides-90-rmcat- | ||||
6.pdf"> | ||||
<front> | ||||
<title>NADA Update: Algorithm, Implementation, and Test Case Evalua6on | ||||
Results</title> | ||||
<author fullname="Xiaoqing Zhu" initials="X." surname="Zhu"> | ||||
<organization></organization> | ||||
</author> | ||||
<author fullname="Michael Ramalho" initials="M." surname="Ramalho"> | ||||
<organization></organization> | ||||
</author> | ||||
<author fullname="Charles Ganzhorn" initials="C." surname="Ganzhorn"> | ||||
<organization></organization> | ||||
</author> | ||||
<author fullname="Paul E. Jones" initials="P. E." surname="Jones"> | ||||
<organization></organization> | ||||
</author> | ||||
<author fullname="Rong Pan" initials="R." surname="Pan"> | ||||
<organization></organization> | ||||
</author> | ||||
<date month= "July" year = "2014"/> | ||||
</front> | ||||
</reference> | ||||
<reference anchor="IETF-91" | ||||
target="http://www.ietf.org/proceedings/interim/2014/11/09/rmcat/slides/slides-i | ||||
nterim-2014-rmcat-1-2.pdf"> | ||||
<front> | ||||
<title>NADA Algorithm Update and Test Case Evaluations</title> | ||||
<author fullname="Xiaoqing Zhu" initials="X." surname="Zhu"> | ||||
<organization></organization> | ||||
</author> | ||||
<author fullname="Rong Pan" initials="R." surname="Pan"> | ||||
<organization></organization> | ||||
</author> | ||||
<author fullname="Michael Ramalho" initials="M." surname="Ramalho"> | ||||
<organization></organization> | ||||
</author> | ||||
<author fullname="Sergio Mena" initials="S." surname="Mena"> | ||||
<organization></organization> | ||||
</author> | ||||
<author fullname="Charles Ganzhorn" initials="C." surname="Ganzhorn"> | ||||
<organization></organization> | ||||
</author> | ||||
<author fullname="Paul E. Jones" initials="P. E." surname="Jones"> | ||||
<organization></organization> | ||||
</author> | ||||
<author fullname="Stefano D'Aronco" initials="S." surname="D'Aronco"> | ||||
<organization></organization> | ||||
</author> | ||||
<date month= "November" year = "2014"/> | ||||
</front> | ||||
</reference> | ||||
<reference anchor="IETF-93" | ||||
target="https://www.ietf.org/proceedings/93/slides/slides-93-rmcat-0.pd | ||||
f"> | ||||
<front> | ||||
<title>Updates on NADA</title> | ||||
<author fullname="Xiaoqing Zhu" initials="X." surname="Zhu"> | ||||
<organization></organization> | ||||
</author> | ||||
<author fullname="Rong Pan" initials="R." surname="Pan"> | ||||
<organization></organization> | ||||
</author> | ||||
<author fullname="Michael Ramalho" initials="M." surname="Ramalho"> | ||||
<organization></organization> | ||||
</author> | ||||
<author fullname="Sergio Mena" initials="S." surname="Mena"> | ||||
<organization></organization> | ||||
</author> | ||||
<author fullname="Charles Ganzhorn" initials="C." surname="Ganzhorn"> | ||||
<organization></organization> | ||||
</author> | ||||
<author fullname="Paul E. Jones" initials="P. E." surname="Jones"> | ||||
<organization></organization> | ||||
</author> | ||||
<author fullname="Stefano D'Aronco" initials="S." surname="D'Aronco"> | ||||
<organization></organization> | ||||
</author> | ||||
<author fullname="Jiantao Fu" initials="J." surname="Fu"> | ||||
<organization></organization> | ||||
</author> | ||||
<date month= "July" year = "2015"/> | ||||
</front> | ||||
</reference> | ||||
<reference anchor="IETF-95" | ||||
target="https://www.ietf.org/proceedings/95/slides/slides-95-rmcat-5.pd | ||||
f"> | ||||
<front> | ||||
<title>Updates on NADA: Stability Analysis and Impact of Feedback Inte | ||||
rvals</title> | ||||
<author fullname="Xiaoqing Zhu" initials="X." surname="Zhu"> | </middle> | |||
<organization></organization> | ||||
</author> | ||||
<author fullname="Rong Pan" initials="R." surname="Pan"> | <back> | |||
<organization></organization> | ||||
</author> | ||||
<author fullname="Michael Ramalho" initials="M." surname="Ramalho"> | <displayreference target="I-D.ietf-rmcat-cc-requirements" to="RMCAT-CC"/> | |||
<organization></organization> | <displayreference target="I-D.ietf-rmcat-cc-codec-interactions" | |||
</author> | 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"/> | ||||
<author fullname="Sergio Mena" initials="S." surname="Mena"> | <references> | |||
<organization></organization> | <name>References</name> | |||
</author> | <references> | |||
<name>Normative References</name> | ||||
<xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RF | ||||
C.2119.xml"/> | ||||
<author fullname="Paul E. Jones" initials="P. E." surname="Jones"> | <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RF | |||
<organization></organization> | C.3168.xml"/> | |||
</author> | ||||
<author fullname="Jiantao Fu" initials="J." surname="Fu"> | <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RF | |||
<organization></organization> | C.3550.xml"/> | |||
</author> | ||||
<author fullname="Stefano D'Aronco" initials="S." surname="D'Aronco"> | <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RF | |||
<organization></organization> | C.5348.xml"/> | |||
</author> | ||||
<author fullname="Charles Ganzhorn" initials="C." surname="Ganzhorn"> | <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RF | |||
<organization></organization> | C.6679.xml"/> | |||
</author> | ||||
<date month= "April" year = "2016"/> | ||||
</front> | ||||
</reference> | ||||
<reference anchor="IETF-103" | <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RF | |||
target="https://datatracker.ietf.org/meeting/103/materials/slides-103-r | C.8174.xml"/> | |||
mcat-nada-implementation-in-mozilla-browser-00"> | ||||
<front> | ||||
<title>NADA Implementation in Mozilla Browser</title> | ||||
<author fullname="Xiaoqing Zhu" initials="X." surname="Zhu"> | </references> | |||
<organization></organization> | <references> | |||
</author> | <name>Informative References</name> | |||
<author fullname="Rong Pan" initials="R." surname="Pan"> | <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.R | |||
<organization></organization> | FC.5450.xml"/> | |||
</author> | <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RF | |||
C.6660.xml"/> | ||||
<author fullname="Michael Ramalho" initials="M." surname="Ramalho"> | <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RF | |||
<organization></organization> | C.6817.xml"/> | |||
</author> | ||||
<author fullname="Sergio Mena" initials="S." surname="Mena"> | <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RF | |||
<organization></organization> | C.7567.xml"/> | |||
</author> | ||||
<author fullname="Paul E. Jones" initials="P. E." surname="Jones"> | <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RF | |||
<organization></organization> | C.8033.xml"/> | |||
</author> | ||||
<author fullname="Jiantao Fu" initials="J." surname="Fu"> | <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RF | |||
<organization></organization> | C.8290.xml"/> | |||
</author> | ||||
<author fullname="Stefano D'Aronco" initials="S." surname="D'Aronco"> | <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RF | |||
<organization></organization> | C.8593.xml"/> | |||
</author> | ||||
<date month= "November" year = "2018"/> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml3/reference.I-D.iet | |||
</front> | f-rmcat-cc-requirements.xml"/> | |||
</reference> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml3/reference.I-D.iet | |||
f-rmcat-cc-codec-interactions.xml"/> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml3/reference.I-D.iet | ||||
f-rmcat-eval-test.xml"/> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml3/reference.I-D.iet | ||||
f-rmcat-wireless-tests.xml"/> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml3/reference.I-D.iet | ||||
f-avtcore-cc-feedback-message.xml"/> | ||||
<reference anchor="IETF-105" | <reference anchor="FLOYD-CCR00" target=""> | |||
target="https://datatracker.ietf.org/meeting/105/materials/slides-105-r | <front> | |||
mcat-nada-update-02.pdf"> | <title> | |||
<front> | Equation-based congestion control for unicast applications | |||
<title>NADA Implementation in Mozilla Browser and Draft Update</title> | </title> | |||
<seriesInfo name="DOI" value="10.1145/347057.347397"/> | ||||
<author fullname="Sally Floyd" initials="S." surname="Floyd"> | ||||
<organization/> | ||||
</author> | ||||
<author fullname="Mark Handley" initials="M." surname="Handley"> | ||||
<organization/> | ||||
</author> | ||||
<author fullname="Jitendra Padhye" initials="J." surname="Padhye"> | ||||
<organization/> | ||||
</author> | ||||
<author fullname="Jörg Widmer" initials="J." surname="Widmer"> | ||||
<organization/> | ||||
</author> | ||||
<date month="October" year="2000"/> | ||||
</front> | ||||
<refcontent>ACM SIGCOMM Computer Communications Review, vol. 30, | ||||
no. 4, pp. 43-56 | ||||
</refcontent> | ||||
</reference> | ||||
<author fullname="Xiaoqing Zhu" initials="X." surname="Zhu"> | <reference anchor="BUDZISZ-AIMD-CC" target=""> | |||
<organization></organization> | <front> | |||
</author> | <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/> | ||||
</author> | ||||
<author fullname="Rade Stanojevic" initials="R." | ||||
surname="Stanojevic"> | ||||
<organization/> | ||||
</author> | ||||
<author fullname="Arieh Schlote" initials="A." surname="Schlote"> | ||||
<organization/> | ||||
</author> | ||||
<author fullname="Fred Baker" initials="F." surname="Baker"> | ||||
<organization/> | ||||
</author> | ||||
<author fullname="Robert Shorten" initials="R." surname="Shorten"> | ||||
<organization/> | ||||
</author> | ||||
<date month="December" year="2011"/> | ||||
</front> | ||||
<refcontent>IEEE/ACM Transactions on Networking, vol. 19, no. 6, | ||||
pp. 1811-1824 | ||||
</refcontent> | ||||
</reference> | ||||
<author fullname="Rong Pan" initials="R." surname="Pan"> | <reference anchor="ZHU-PV13" target=""> | |||
<organization></organization> | <front> | |||
</author> | <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/> | ||||
</author> | ||||
<author fullname="Rong Pan" initials="R." surname="Pan"> | ||||
<organization/> | ||||
</author> | ||||
<date month="December" year="2013"/> | ||||
</front> | ||||
<refcontent>Proc. IEEE International Packet Video Workshop, San | ||||
Jose, CA, USA | ||||
</refcontent> | ||||
</reference> | ||||
<author fullname="Michael Ramalho" initials="M." surname="Ramalho"> | <reference anchor="NS-2" | |||
<organization></organization> | target="http://nsnam.sourceforge.net/wiki/index.php/Main_Pa | |||
</author> | ge"> | |||
<front> | ||||
<title>ns-2</title> | ||||
<author> | ||||
<organization/> | ||||
</author> | ||||
<date month="December" year="2014"/> | ||||
</front> | ||||
</reference> | ||||
<author fullname="Sergio Mena" initials="S." surname="Mena"> | <reference anchor="NS-3" target="https://www.nsnam.org/"> | |||
<organization></organization> | <front> | |||
</author> | <title>ns-3 Network Simulator</title> | |||
<author> | ||||
<organization/> | ||||
</author> | ||||
</front> | ||||
</reference> | ||||
<author fullname="Paul E. Jones" initials="P. E." surname="Jones"> | <reference anchor="IETF-90" | |||
<organization></organization> | target="https://tools.ietf.org/agenda/90/slides/slides-90-rmca | |||
</author> | t-6.pdf"> | |||
<front> | ||||
<title>NADA Update: Algorithm, Implementation, and Test Case | ||||
Evaluation Results</title> | ||||
<author fullname="Xiaoqing Zhu" initials="X." surname="Zhu"> | ||||
<organization/> | ||||
</author> | ||||
<author fullname="Michael Ramalho" initials="M." | ||||
surname="Ramalho"> | ||||
<organization/> | ||||
</author> | ||||
<author fullname="Charles Ganzhorn" initials="C." | ||||
surname="Ganzhorn"> | ||||
<organization/> | ||||
</author> | ||||
<author fullname="Paul E. Jones" initials="P." surname="Jones"> | ||||
<organization/> | ||||
</author> | ||||
<author fullname="Rong Pan" initials="R." surname="Pan"> | ||||
<organization/> | ||||
</author> | ||||
<date month="July" year="2014"/> | ||||
</front> | ||||
<refcontent>IETF 90 | ||||
</refcontent> | ||||
</reference> | ||||
<author fullname="Jiantao Fu" initials="J." surname="Fu"> | <reference anchor="IETF-91" | |||
<organization></organization> | target="https://www.ietf.org/proceedings/interim/2014/11/09/rm | |||
</author> | cat/slides/slides-interim-2014-rmcat-1-2.pdf"> | |||
<front> | ||||
<title>NADA Algorithm Update and Test Case Evaluations</title> | ||||
<author fullname="Xiaoqing Zhu" initials="X." surname="Zhu"> | ||||
<organization/> | ||||
</author> | ||||
<author fullname="Rong Pan" initials="R." surname="Pan"> | ||||
<organization/> | ||||
</author> | ||||
<author fullname="Michael Ramalho" initials="M." | ||||
surname="Ramalho"> | ||||
<organization/> | ||||
</author> | ||||
<author fullname="Sergio Mena" initials="S." surname="Mena"> | ||||
<organization/> | ||||
</author> | ||||
<author fullname="Charles Ganzhorn" initials="C." | ||||
surname="Ganzhorn"> | ||||
<organization/> | ||||
</author> | ||||
<author fullname="Paul E. Jones" initials="P." surname="Jones"> | ||||
<organization/> | ||||
</author> | ||||
<author fullname="Stefano D'Aronco" initials="S." | ||||
surname="D'Aronco"> | ||||
<organization/> | ||||
</author> | ||||
<date month="November" year="2014"/> | ||||
</front> | ||||
<refcontent>IETF 91 | ||||
</refcontent> | ||||
</reference> | ||||
<author fullname="Stefano D'Aronco" initials="S." surname="D'Aronco"> | <reference anchor="IETF-93" | |||
<organization></organization> | target="https://www.ietf.org/proceedings/93/slides/slides-93-r | |||
</author> | mcat-0.pdf"> | |||
<front> | ||||
<title>Updates on NADA</title> | ||||
<author fullname="Xiaoqing Zhu" initials="X." surname="Zhu"> | ||||
<organization/> | ||||
</author> | ||||
<author fullname="Rong Pan" initials="R." surname="Pan"> | ||||
<organization/> | ||||
</author> | ||||
<author fullname="Michael Ramalho" initials="M." | ||||
surname="Ramalho"> | ||||
<organization/> | ||||
</author> | ||||
<author fullname="Sergio Mena" initials="S." surname="Mena"> | ||||
<organization/> | ||||
</author> | ||||
<author fullname="Charles Ganzhorn" initials="C." | ||||
surname="Ganzhorn"> | ||||
<organization/> | ||||
</author> | ||||
<author fullname="Paul E. Jones" initials="P." surname="Jones"> | ||||
<organization/> | ||||
</author> | ||||
<author fullname="Stefano D'Aronco" initials="S." | ||||
surname="D'Aronco"> | ||||
<organization/> | ||||
</author> | ||||
<author fullname="Jiantao Fu" initials="J." surname="Fu"> | ||||
<organization/> | ||||
</author> | ||||
<date month="July" year="2015"/> | ||||
</front> | ||||
<refcontent>IETF 93 | ||||
</refcontent> | ||||
</reference> | ||||
<date month= "July" year = "2019"/> | <reference anchor="IETF-95" | |||
</front> | target="https://www.ietf.org/proceedings/95/slides/slides-95-r | |||
</reference> | mcat-5.pdf"> | |||
<front> | ||||
<title>Updates on NADA: Stability Analysis and Impact of Feedback | ||||
Intervals</title> | ||||
<author fullname="Xiaoqing Zhu" initials="X." surname="Zhu"> | ||||
<organization/> | ||||
</author> | ||||
<author fullname="Rong Pan" initials="R." surname="Pan"> | ||||
<organization/> | ||||
</author> | ||||
<author fullname="Michael Ramalho" initials="M." | ||||
surname="Ramalho"> | ||||
<organization/> | ||||
</author> | ||||
<author fullname="Sergio Mena" initials="S." surname="Mena"> | ||||
<organization/> | ||||
</author> | ||||
<author fullname="Paul E. Jones" initials="P." surname="Jones"> | ||||
<organization/> | ||||
</author> | ||||
<author fullname="Jiantao Fu" initials="J." surname="Fu"> | ||||
<organization/> | ||||
</author> | ||||
<author fullname="Stefano D'Aronco" initials="S." | ||||
surname="D'Aronco"> | ||||
<organization/> | ||||
</author> | ||||
<author fullname="Charles Ganzhorn" initials="C." | ||||
surname="Ganzhorn"> | ||||
<organization/> | ||||
</author> | ||||
<date month="April" year="2016"/> | ||||
</front> | ||||
<refcontent>IETF 95 | ||||
</refcontent> | ||||
</reference> | ||||
<reference anchor="ns3-rmcat" | <reference anchor="IETF-103" | |||
target="https://github.com/cisco/ns3-rmcat"> | target="https://datatracker.ietf.org/meeting/103/materials/sli | |||
<front> | des-103-rmcat-nada-implementation-in-mozilla-browser-00"> | |||
<title>NS3 open source module of IETF RMCAT congestion control protocols</titl | <front> | |||
e> | <title>NADA Implementation in Mozilla Browser</title> | |||
<author fullname="Xiaoqing Zhu" initials="X." surname="Zhu"> | ||||
<organization/> | ||||
</author> | ||||
<author fullname="Rong Pan" initials="R." surname="Pan"> | ||||
<organization/> | ||||
</author> | ||||
<author fullname="Michael Ramalho" initials="M." | ||||
surname="Ramalho"> | ||||
<organization/> | ||||
</author> | ||||
<author fullname="Sergio Mena" initials="S." surname="Mena"> | ||||
<organization/> | ||||
</author> | ||||
<author fullname="Paul E. Jones" initials="P." surname="Jones"> | ||||
<organization/> | ||||
</author> | ||||
<author fullname="Jiantao Fu" initials="J." surname="Fu"> | ||||
<organization/> | ||||
</author> | ||||
<author fullname="Stefano D'Aronco" initials="S." | ||||
surname="D'Aronco"> | ||||
<organization/> | ||||
</author> | ||||
<date month="November" year="2018"/> | ||||
</front> | ||||
<refcontent>IETF 103 | ||||
</refcontent> | ||||
</reference> | ||||
<author fullname="Jiantao Fu" initials="J." surname="Fu"> | <reference anchor="IETF-105" | |||
<organization></organization> | target="https://datatracker.ietf.org/meeting/105/materials/sli | |||
</author> | des-105-rmcat-nada-update-02.pdf"> | |||
<front> | ||||
<title>NADA Implementation in Mozilla Browser and Draft | ||||
Update</title> | ||||
<author fullname="Xiaoqing Zhu" initials="X." surname="Zhu"> | ||||
<organization/> | ||||
</author> | ||||
<author fullname="Rong Pan" initials="R." surname="Pan"> | ||||
<organization/> | ||||
</author> | ||||
<author fullname="Michael Ramalho" initials="M." | ||||
surname="Ramalho"> | ||||
<organization/> | ||||
</author> | ||||
<author fullname="Sergio Mena" initials="S." surname="Mena"> | ||||
<organization/> | ||||
</author> | ||||
<author fullname="Paul E. Jones" initials="P." surname="Jones"> | ||||
<organization/> | ||||
</author> | ||||
<author fullname="Jiantao Fu" initials="J." surname="Fu"> | ||||
<organization/> | ||||
</author> | ||||
<author fullname="Stefano D'Aronco" initials="S." | ||||
surname="D'Aronco"> | ||||
<organization/> | ||||
</author> | ||||
<date month="July" year="2019"/> | ||||
</front> | ||||
<refcontent>IETF 105 | ||||
</refcontent> | ||||
</reference> | ||||
<author fullname="Sergio Mena" initials="S." surname="Mena"> | <reference anchor="NS3-RMCAT" | |||
<organization></organization> | target="https://github.com/cisco/ns3-rmcat"> | |||
</author> | <front> | |||
<author fullname="Xiaoqing Zhu" initials="X." surname="Zhu"> | <title>Simulator of IETF RMCAT congestion control | |||
<organization></organization> | protocols</title> | |||
</author> | <author fullname="Jiantao Fu" initials="J." surname="Fu"> | |||
<organization/> | ||||
</author> | ||||
<author fullname="Sergio Mena" initials="S." surname="Mena"> | ||||
<organization/> | ||||
</author> | ||||
<author fullname="Xiaoqing Zhu" initials="X." surname="Zhu"> | ||||
<organization/> | ||||
</author> | ||||
<date month="November" year="2017"/> | ||||
</front> | ||||
</reference> | ||||
<date month= "November" year = "2017"/> | </references> | |||
</front> | ||||
</reference> | ||||
</references> | </references> | |||
<section anchor="sec-network-nodes" numbered="true" toc="default"> | ||||
<section anchor="sec-network-nodes" | <name>Network Node Operations</name> | |||
title="Network Node Operations"> | <t>NADA can work with different network queue management | |||
<t>NADA can work with different network queue management | ||||
schemes and does not assume any specific network node operation. | schemes and does not assume any specific network node operation. | |||
As an example, this appendix describes three variants of queue | As an example, this appendix describes three variants of queue | |||
management behavior at the network node, leading to either | management behavior at the network node, leading to either | |||
implicit or explicit congestion signals. It needs to be | implicit or explicit congestion signals. It needs to be | |||
acknowledged that NADA has not yet been tested with non-probabilistic | acknowledged that NADA has not yet been tested with non-probabilistic | |||
ECN marking behaviors. | ECN marking behaviors. | |||
</t> | </t> | |||
<t> | ||||
<t> | ||||
In all three flavors described below, the network queue | In all three flavors described below, the network queue | |||
operates with the simple first-in-first-out (FIFO) principle. | operates with the simple First In, First Out (FIFO) principle. | |||
There is no need to maintain per-flow state. The system | There is no need to maintain per-flow state. The system | |||
can scale easily with a large number of video flows and | can scale easily with a large number of video flows and | |||
at high link capacity. | at high link capacity. | |||
</t> | </t> | |||
<section anchor="sec-network-droptail" numbered="true" toc="default"> | ||||
<section anchor="sec-network-droptail" | <name>Default Behavior of Drop-Tail Queues</name> | |||
title="Default behavior of drop tail queues"> | <t> | |||
In a conventional network with drop-tail or RED queues, | ||||
<t> | ||||
In a conventional network with drop tail or RED queues, | ||||
congestion is inferred from the estimation of end-to-end | congestion is inferred from the estimation of end-to-end | |||
delay and/or packet loss. Packet drops at the queue are | delay and/or packet loss. Packet drops at the queue are | |||
detected at the receiver, and contributes to the calculation | detected at the receiver and contribute to the calculation | |||
of the aggregated congestion signal x_curr. No special | of the aggregated congestion signal x_curr. No special | |||
action is required at network node. | action is required at the network node. | |||
</t> | </t> | |||
</section> | ||||
</section> | <section anchor="sec-network-ecn" numbered="true" toc="default"> | |||
<name>RED-Based ECN Marking</name> | ||||
<section anchor="sec-network-ecn" | <t>In this mode, the network node randomly marks | |||
title="RED-based ECN marking"> | ||||
<t>In this mode, the network node randomly marks | ||||
the ECN field in the IP packet header following | the ECN field in the IP packet header following | |||
the <xref target="RFC7567">Random Early Detection | the <xref target="RFC7567" format="default">Random Early Detection | |||
(RED) algorithm</xref>. Calculation of the marking | (RED) algorithm</xref>. Calculation of the marking | |||
probability involves the following steps:</t> | probability involves the following steps on packet arrival:</t> | |||
<t><figure><artwork><![CDATA[ | <ol spacing="normal" type="1"> | |||
on packet arrival: | ||||
update smoothed queue size q_avg as: | ||||
q_avg = w*q + (1-w)*q_avg. | ||||
calculate marking probability p as: | <li><t>update smoothed queue size q_avg as:</t> | |||
<artwork name="" type="" align="left" alt=""><![CDATA[ | ||||
q_avg = w*q + (1-w)*q_avg | ||||
]]></artwork> | ||||
</li> | ||||
/ 0, if q < q_lo; | <li><t>calculate marking probability p as:</t> | |||
| | <artwork name="" type="" align="left" alt=""><![CDATA[ | |||
| q_avg - q_lo | / 0, if q < q_lo | |||
p= < p_max*--------------, if q_lo <= q < q_hi; | | | |||
| q_hi - q_lo | | q_avg - q_lo | |||
| | p= < p_max*--------------, if q_lo <= q < q_hi | |||
\ p = 1, if q >= q_hi. | | q_hi - q_lo | |||
]]></artwork></figure></t> | | | |||
\ p = 1, if q >= q_hi | ||||
]]></artwork> | ||||
</li> | ||||
</ol> | ||||
<t> | <t> | |||
Here, q_lo and q_hi corresponds to the low | Here, q_lo and q_hi correspond to the low | |||
and high thresholds of queue occupancy. | and high thresholds of queue occupancy. | |||
The maximum marking probability is p_max. | The maximum marking probability is p_max. | |||
</t> | </t> | |||
<t> | ||||
<t> | The ECN marking events will contribute | |||
The ECN markings events will contribute | ||||
to the calculation of an equivalent delay | to the calculation of an equivalent delay | |||
x_curr at the receiver. No changes are required | x_curr at the receiver. No changes are required | |||
at the sender. | at the sender. | |||
</t> | </t> | |||
</section> | ||||
</section> | <section anchor="sec-network-pcn" numbered="true" toc="default"> | |||
<name>Random Early Marking with Virtual Queues</name> | ||||
<section anchor = "sec-network-pcn" | <t> | |||
title = "Random Early Marking with Virtual Queues"> | ||||
<t> | ||||
Advanced network nodes may support random early marking | Advanced network nodes may support random early marking | |||
based on a token bucket algorithm originally designed for | based on a token bucket algorithm originally designed for | |||
<xref target="RFC6660">Pre-Congestion Notification (PCN)</xref>. | <xref target="RFC6660" format="default">Pre-Congestion Notification | |||
(PCN)</xref>. | ||||
The early congestion notification (ECN) bit in the | The early congestion notification (ECN) bit in the | |||
IP header of packets are marked randomly. | IP header of packets is marked randomly. | |||
The marking probability is calculated based on a | The marking probability is calculated based on a | |||
token-bucket algorithm originally designed for the | token bucket algorithm originally designed for | |||
<xref target="RFC6660">Pre-Congestion Notification (PCN)</xref>. | <xref target="RFC6660" format="default">PCN</xref>. | |||
The target link utilization is set as 90%; the marking | The target link utilization is set as 90%; the marking | |||
probability is designed to grow linearly with the token | probability is designed to grow linearly with the token | |||
bucket size when it varies between 1/3 and 2/3 of the | bucket size when it varies between 1/3 and 2/3 of the | |||
full token bucket limit.</t> | full token bucket limit.</t> | |||
<t>Calculation of the marking probability involves | ||||
the following steps upon packet arrival:</t> | ||||
<t>Calculation of the marking probability involves | <ol spacing="normal" type="1"> | |||
the following steps:</t> | ||||
<t><figure><artwork><![CDATA[ | ||||
upon packet arrival: | ||||
meter packet against token bucket (r,b); | ||||
update token level b_tk; | <li><t>meter packet against token bucket (r,b)</t></li> | |||
calculate the marking probability as: | <li><t>update token level b_tk</t></li> | |||
/ 0, if b-b_tk < b_lo; | <li><t>calculate the marking probability as:</t> | |||
<artwork name="" type="" align="left" alt=""><![CDATA[ | ||||
/ 0, if b-b_tk < b_lo | ||||
| | | | |||
| b-b_tk-b_lo | | b-b_tk-b_lo | |||
p = < p_max* --------------, if b_lo<= b-b_tk <b_hi; | p = < p_max* --------------, if b_lo <= b-b_tk < b_hi | |||
| b_hi-b_lo | | b_hi-b_lo | |||
| | | | |||
\ 1, if b-b_tk>=b_hi. | \ 1, if b-b_tk >= b_hi | |||
]]></artwork> | ]]></artwork> | |||
</figure></t> | </li> | |||
</ol> | ||||
<t> | <t> | |||
Here, the token bucket lower and upper limits are denoted by | Here, the token bucket lower and upper limits are denoted by | |||
b_lo and b_hi, respectively. The parameter b indicates the size | b_lo and b_hi, respectively. The parameter b indicates the size | |||
of the token bucket. The parameter r is chosen to be below | of the token bucket. The parameter r is chosen to be below | |||
capacity, resulting in slight under-utilization of the link. | capacity, resulting in slight underutilization of the link. | |||
The maximum marking probability is p_max. | The maximum marking probability is p_max. | |||
</t> | </t> | |||
<t>The ECN markings events will contribute to the calculation | <t>The ECN marking events will contribute to the calculation | |||
of an equivalent delay x_curr at the receiver. No changes are | of an equivalent delay x_curr at the receiver. No changes are | |||
required at the sender. The virtual queuing mechanism from | required at the sender. The virtual queuing mechanism from | |||
the PCN-based marking algorithm will lead to additional | the PCN-based marking algorithm will lead to additional | |||
benefits such as zero standing queues. | benefits such as zero standing queues. | |||
</t> | </t> | |||
</section> | ||||
</section> | </section> | |||
<section anchor="sec-acknowledgments" numbered="false" toc="default"> | ||||
<name>Acknowledgments</name> | ||||
<t> | ||||
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 Kuehlewind"/>, | ||||
<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="default"> | ||||
<name>Contributors</name> | ||||
<t>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><contact fullname="Paul E. Jones"/> | ||||
<paulej@packetizer.com> of Cisco Systems implemented | ||||
an early version of the NADA congestion control scheme and helped with its | ||||
lab-based testbed evaluations. </t> | ||||
<t><contact fullname="Jiantao Fu"/> <jianfu@cisco.com> 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><contact fullname="Stefano D'Aronco"/> | ||||
<stefano.daronco@geod.baug.ethz.ch> 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"/>. </t> | ||||
<t><contact fullname="Charles Ganzhorn"/> | ||||
<charles.ganzhorn@gmail.com> contributed to the | ||||
testbed-based evaluation of NADA during an early stage of its development. | ||||
</t> | ||||
</section> | </section> | |||
</back> | </back> | |||
</rfc> | </rfc> | |||
End of changes. 229 change blocks. | ||||
1447 lines changed or deleted | 1544 lines changed or added | |||
This html diff was produced by rfcdiff 1.45. The latest version is available from http://tools.ietf.org/tools/rfcdiff/ |