rfc8836xml2.original.xml | rfc8836.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"> | |||
<?rfc toc="yes"?> | ||||
<?rfc tocompact="yes"?> | <rfc xmlns:xi="http://www.w3.org/2001/XInclude" number="8836" category="info" | |||
<?rfc tocdepth="3"?> | submissionType="IETF" consensus="true" ipr="trust200902" obsoletes="" | |||
<?rfc tocindent="yes"?> | updates="" xml:lang="en" tocInclude="true" symRefs="true" sortRefs="true" | |||
<?rfc symrefs="yes"?> | version="3" docName="draft-ietf-rmcat-cc-requirements-09"> | |||
<?rfc sortrefs="yes"?> | ||||
<?rfc comments="yes"?> | ||||
<?rfc inline="yes"?> | ||||
<?rfc compact="yes"?> | ||||
<?rfc subcompact="no"?> | ||||
<rfc category="info" docName="draft-ietf-rmcat-cc-requirements-09" | ||||
ipr="trust200902"> | ||||
<front> | ||||
<title abbrev="RTP Media Congestion Control Requirements ">Congestion | ||||
Control Requirements for Interactive Real-Time Media</title> | ||||
<!-- xml2rfc v2v3 conversion 2.34.0 --> | ||||
<front> | ||||
<title abbrev="RTP Media Congestion Control | ||||
Requirements">Congestion Control Requirements for | ||||
Interactive Real-Time Media</title> | ||||
<seriesInfo name="RFC" value="8836"/> | ||||
<author fullname="Randell Jesup" initials="R." surname="Jesup"> | <author fullname="Randell Jesup" initials="R." surname="Jesup"> | |||
<organization>Mozilla</organization> | <organization>Mozilla</organization> | |||
<address> | <address> | |||
<postal> | <postal> | |||
<street></street> | <street/> | |||
<country>USA</country> | <country>USA</country> | |||
</postal> | </postal> | |||
<email>randell-ietf@jesup.org</email> | <email>randell-ietf@jesup.org</email> | |||
</address> | </address> | |||
</author> | </author> | |||
<author fullname="Zaheduzzaman Sarker" initials="Z." role="editor" surname=" | ||||
<author fullname="Zaheduzzaman Sarker" initials="Z." role="editor" | Sarker"> | |||
surname="Sarker"> | ||||
<organization>Ericsson</organization> | <organization>Ericsson</organization> | |||
<address> | <address> | |||
<postal> | <postal> | |||
<street></street> | <street/> | |||
<city/> | ||||
<city></city> | <region/> | |||
<code/> | ||||
<region></region> | ||||
<code></code> | ||||
<country>Sweden</country> | <country>Sweden</country> | |||
</postal> | </postal> | |||
<phone/> | ||||
<phone></phone> | ||||
<facsimile></facsimile> | ||||
<email>zaheduzzaman.sarker@ericsson.com</email> | <email>zaheduzzaman.sarker@ericsson.com</email> | |||
<uri/> | ||||
<uri></uri> | ||||
</address> | </address> | |||
</author> | </author> | |||
<date month="October" year="2020"/> | ||||
<date /> | <keyword>Interactive multimedia</keyword> | |||
<keyword>webrtc</keyword> | ||||
<keyword>video communication</keyword> | ||||
<keyword>RTP/RTCP</keyword> | ||||
<abstract> | <abstract> | |||
<t>Congestion control is needed for all data transported across the | <t>Congestion control is needed for all data transported across the | |||
Internet, in order to promote fair usage and prevent congestion | Internet, in order to promote fair usage and prevent congestion | |||
collapse. The requirements for interactive, point-to-point real-time | collapse. The requirements for interactive, point-to-point real-time | |||
multimedia, which needs low-delay, semi-reliable data delivery, are | multimedia, which needs low-delay, semi-reliable data delivery, are | |||
different from the requirements for bulk transfer like FTP or bursty | different from the requirements for bulk transfer like FTP or bursty | |||
transfers like Web pages. Due to an increasing amount of RTP-based | transfers like web pages. Due to an increasing amount of RTP-based | |||
real-time media traffic on the Internet (e.g. with the introduction of | real-time media traffic on the Internet (e.g., with the introduction of | |||
the Web Real-Time Communication (WebRTC)), it is especially important to | the Web Real-Time Communication (WebRTC)), it is especially important to | |||
ensure that this kind of traffic is congestion controlled.</t> | ensure that this kind of traffic is congestion controlled.</t> | |||
<t>This document describes a set of requirements that can be used to | <t>This document describes a set of requirements that can be used to | |||
evaluate other congestion control mechanisms in order to figure out | evaluate other congestion control mechanisms in order to figure out | |||
their fitness for this purpose, and in particular to provide a set of | their fitness for this purpose, and in particular to provide a set of | |||
possible requirements for real-time media congestion avoidance | possible requirements for a real-time media congestion avoidance | |||
technique.</t> | technique.</t> | |||
</abstract> | </abstract> | |||
<note title="Requirements Language"> | ||||
<t>The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | ||||
"SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this | ||||
document are to be interpreted as described in <xref | ||||
target="RFC2119">RFC 2119</xref>. The terms are presented in many cases | ||||
using lowercase for readability.</t> | ||||
</note> | ||||
</front> | </front> | |||
<middle> | <middle> | |||
<section title="Introduction"> | <section numbered="true" toc="default"> | |||
<name>Introduction</name> | ||||
<t>Most of today's TCP congestion control schemes were developed with a | <t>Most of today's TCP congestion control schemes were developed with a | |||
focus on an use of the Internet for reliable bulk transfer of | focus on a use of the Internet for reliable bulk transfer of | |||
non-time-critical data, such as transfer of large files. They have also | non-time-critical data, such as transfer of large files. They have also | |||
been used successfully to govern the reliable transfer of smaller chunks | been used successfully to govern the reliable transfer of smaller chunks | |||
of data in as short a time as possible, such as when fetching Web | of data in as short a time as possible, such as when fetching web | |||
pages.</t> | pages.</t> | |||
<t>These algorithms have also been used for transfer of media streams | <t>These algorithms have also been used for transfer of media streams | |||
that are viewed in a non-interactive manner, such as "streaming" video, | that are viewed in a non-interactive manner, such as "streaming" video, | |||
where having the data ready when the viewer wants it is important, but | where having the data ready when the viewer wants it is important, but | |||
the exact timing of the delivery is not.</t> | the exact timing of the delivery is not.</t> | |||
<t>When doing real-time interactive media, the requirements are | <t>When handling real-time interactive media, the requirements are | |||
different; one needs to provide the data continuously, within a very | different. One needs to provide the data continuously, within a very | |||
limited time window (no more than 100s of milliseconds end-to-end | limited time window (no more delay than hundreds of milliseconds | |||
delay), the sources of data may be able to adapt the amount of data that | end-to-end). In addition, the sources of data may be able to adapt the | |||
needs sending within fairly wide margins but can be rate limited by the | amount of data that needs sending within fairly wide margins, but they can | |||
application- even not always have data to send, and may tolerate some | be rate limited by the | |||
amount of packet loss, but since the data is generated in real-time, | application -- even not always having data to send. They may tolerate some | |||
amount of packet loss, but since the data is generated in real time, | ||||
sending "future" data is impossible, and since it's consumed in | sending "future" data is impossible, and since it's consumed in | |||
real-time, data delivered late is commonly useless.</t> | real time, data delivered late is commonly useless.</t> | |||
<t>While the requirements for real-time interactive media differ from | <t>While the requirements for real-time interactive media differ from | |||
the requirements for the other flow types, these other flow types will | the requirements for the other flow types, these other flow types will | |||
be present in the network. The congestion control algorithm for | be present in the network. The congestion control algorithm for | |||
real-time interactive media must work properly when these other flow | real-time interactive media must work properly when these other flow | |||
types are present as cross traffic on the network.</t> | types are present as cross traffic on the network.</t> | |||
<t>One particular protocol portfolio being developed for this use case | <t>One particular protocol portfolio being developed for this use case | |||
is WebRTC <xref target="I-D.ietf-rtcweb-overview"></xref>, where one | is WebRTC <xref target="RFC8825" format="default"/>, where one | |||
envisions sending multiple flows using the Real-time Transport Protocol | envisions sending multiple flows using the Real-time Transport Protocol | |||
(RTP) <xref target="RFC3550"></xref> between two peers, in conjunction | (RTP) <xref target="RFC3550" format="default"/> between two peers, in conj unction | |||
with data flows, all at the same time, without having special | with data flows, all at the same time, without having special | |||
arrangements with the intervening service providers. As RTP does not | arrangements with the intervening service providers. As RTP does not | |||
provide any congestion control mechanism; a set of circuit breakers, | provide any congestion control mechanism, a set of circuit breakers, | |||
such as <xref target="I-D.ietf-avtcore-rtp-circuit-breakers"></xref>, | such as those described in <xref target="RFC8083" format="default"/>, | |||
are required to protect the network from excessive congestion caused by | are required to protect the network from excessive congestion caused by | |||
the non-congestion controlled flows. When the real-time interactive | non-congestion-controlled flows. When the real-time interactive | |||
media is congestion controlled, it is recommended that the congestion | media is congestion controlled, it is recommended that the | |||
control mechanism operates within the constraints defined by these | congestion control mechanism operate within the constraints defined by | |||
circuit breakers when circuit breaker is present and that it should not | these | |||
cause congestion collapse when circuit breaker is not implemented.</t> | circuit breakers when a circuit breaker is present and that it should not | |||
cause congestion collapse when a circuit breaker is not implemented.</t> | ||||
<t>Given that this use case is the focus of this document, use cases | <t>Given that this use case is the focus of this document, use cases | |||
involving non-interactive media such as video streaming, and use cases | involving non-interactive media such as video streaming and those | |||
using multicast/broadcast-type technologies, are out of scope.</t> | using multicast/broadcast-type technologies, are out of scope.</t> | |||
<t>The terminology defined in <xref target="RFC8825" format="default"/> | ||||
<t>The terminology defined in <xref | is used in this memo.</t> | |||
target="I-D.ietf-rtcweb-overview"></xref> is used in this memo.</t> | ||||
</section> | </section> | |||
<section title="Requirements"> | <section numbered="true" toc="default"> | |||
<t><list style="numbers"> | <name>Requirements</name> | |||
<ol spacing="normal" type="1"> | ||||
<li> | ||||
<t>The congestion control algorithm must attempt to provide | <t>The congestion control algorithm must attempt to provide | |||
as-low-as-possible-delay transit for interactive real-time traffic | as-low-as-possible-delay transit for interactive real-time traffic | |||
while still providing a useful amount of bandwidth. There may be | while still providing a useful amount of bandwidth. There may be | |||
lower limits on the amount of bandwidth that is useful, but this is | lower limits on the amount of bandwidth that is useful, but this is | |||
largely application-specific and the application may be able to | largely application specific, and the application may be able to | |||
modify or remove flows in order allow some useful flows to get | modify or remove flows in order to allow some useful flows to get | |||
enough bandwidth. (Example: not enough bandwidth for low-latency | enough bandwidth. For example, although there might not be enough band | |||
video+audio, but enough for audio-only.) <list style="letters"> | width | |||
<t>Jitter (variation in the bitrate over short time scales) also | for low-latency video+audio, there could be enough for audio only. | |||
is relevant, though moderate amounts of jitter will be absorbed | </t> | |||
<ol spacing="normal" type="a"> | ||||
<li>Jitter (variation in the bitrate over short timescales) is also | ||||
relevant, though moderate amounts of jitter will be absorbed | ||||
by jitter buffers. Transit delay should be considered to track | by jitter buffers. Transit delay should be considered to track | |||
the short-term maximums of delay including jitter.</t> | ||||
<t>It should provide this as-low-as-possible-delay transit and | the short-term maximums of delay, including jitter.</li> | |||
<li>The algorithm should provide this as-low-as-possible-delay trans | ||||
it and | ||||
minimize self-induced latency even when faced with intermediate | minimize self-induced latency even when faced with intermediate | |||
bottlenecks and competing flows. Competing flows may limit | bottlenecks and competing flows. Competing flows may limit | |||
what's possible to achieve.</t> | what's possible to achieve.</li> | |||
<li>The algorithm should be resilient to the effects of events, such | ||||
<t>It should be resilience to the effects of the events, such as | as | |||
routing changes, which may alter or remove bottlenecks or change | routing changes, which may alter or remove bottlenecks or change | |||
the bandwidth available especially if there is a reduction in | the bandwidth available, especially if there is a reduction in | |||
available bandwidth or increase in observed delay. It is | available bandwidth or increase in observed delay. It is | |||
expected that the mechanism reacts quickly to the such events to | expected that the mechanism reacts quickly to such events to | |||
avoid delay buildup. In the context of this memo, a 'quick' | avoid delay buildup. In the context of this memo, a "quick" | |||
reaction is on the order of a few RTTs, subject to the | reaction is on the order of a few RTTs, subject to the | |||
constraints of the media codec, but is likely within a second. | constraints of the media codec, but is likely within a second. | |||
Reaction on the next RTT is explicitly not required, since many | Reaction on the next RTT is explicitly not required, since many | |||
codecs cannot adapt their sending rate that quickly, but equally | codecs cannot adapt their sending rate that quickly, but | |||
response cannot be arbitrarily delayed.</t> | at the same time a response cannot be arbitrarily delayed.</li> | |||
<li>The algorithm should react quickly to handle both local and remo | ||||
<t>It should react quickly to handle both local and remote | te | |||
interface changes (WLAN to 3G data, etc) which may radically | interface changes (e.g., WLAN to 3G data) that may radically | |||
change the bandwidth available or bottlenecks, especially if | change the bandwidth available or bottlenecks, especially if | |||
there is a reduction in available bandwidth or increase in | there is a reduction in available bandwidth or an increase in | |||
bottleneck delay. It is assumed that an interface change can | bottleneck delay. It is assumed that an interface change can | |||
generate a notification to the algorithm.</t> | generate a notification to the algorithm.</li> | |||
<li>The real-time interactive media applications can be rate | ||||
<t>The real-time interactive media applications can be rate | ||||
limited. This means the offered loads can be less than the | limited. This means the offered loads can be less than the | |||
available bandwidth at any given moment, and may vary | available bandwidth at any given moment and may vary | |||
dramatically over time, including dropping to no load and then | dramatically over time, including dropping to no load and then | |||
resuming a high load, such as in a mute/unmute operation. Hence, | resuming a high load, such as in a mute/unmute operation. Hence, | |||
the algorithm must be designed to handle such behavior from | the algorithm must be designed to handle such behavior from | |||
media source or application. Note that the reaction time between | a media source or application. Note that the reaction time between | |||
a change in the bandwidth available from the algorithm and a | a change in the bandwidth available from the algorithm and a | |||
change in the offered load is variable, and may be different | change in the offered load is variable, and it may be different | |||
when increasing versus decreasing.</t> | when increasing versus decreasing.</li> | |||
<li>The algorithm is required to avoid building up queues when | ||||
<t>The algorithm requires to avoid building up queues when | ||||
competing with short-term bursts of traffic (for example, | competing with short-term bursts of traffic (for example, | |||
traffic generated by web-browsing) which can quickly saturate a | traffic generated by web browsing), which can quickly saturate a | |||
local-bottleneck router or link, but also clear quickly. The | local-bottleneck router or link but clear quickly. The | |||
algorithm should also react quickly to regain its previous share | algorithm should also react quickly to regain its previous share | |||
of the bandwidth when the local-bottleneck or link is | of the bandwidth when the local bottleneck or link is | |||
cleared.</t> | cleared.</li> | |||
<li>Similarly, periodic bursty flows such as MPEG DASH <xref | ||||
<t>Similarly periodic bursty flows such as MPEG DASH <xref | target="MPEG_DASH" format="default"/> or proprietary media | |||
target="MPEG_DASH"></xref> or proprietary media streaming | streaming | |||
algorithms may compete in bursts with the algorithm, and may not | algorithms may compete in bursts with the algorithm and may not | |||
be adaptive within a burst. They are often layered on top of TCP | be adaptive within a burst. They are often layered on top of TCP | |||
but use TCP in a bursty manner that can interact poorly with | but use TCP in a bursty manner that can interact poorly with | |||
competing flows during the bursts. The algorithm must not | competing flows during the bursts. The algorithm must not | |||
increase the already existing delay buildup during those bursts. | increase the already existing delay buildup during those bursts. | |||
Note that this competing traffic may be on a shared access link, | Note that this competing traffic may be on a shared access link, | |||
or the traffic burst may cause a shift in the location of the | or the traffic burst may cause a shift in the location of the | |||
bottleneck for the duration of the burst.</t> | bottleneck for the duration of the burst.</li> | |||
</list></t> | </ol> | |||
</li> | ||||
<li> | ||||
<t>The algorithm must be fair to other flows, both real-time flows | <t>The algorithm must be fair to other flows, both real-time flows | |||
(such as other instances of itself), and TCP flows, both long-lived | (such as other instances of itself) and TCP flows, both long-lived flo | |||
and bursts such as the traffic generated by a typical web browsing | ws | |||
session. Note that 'fair' is a rather hard-to-define term. It should | and bursts such as the traffic generated by a typical web-browsing | |||
be fair with itself, giving fair share of the bandwidth to multiple | session. Note that "fair" is a rather hard-to-define term. It should | |||
be fair with itself, giving a fair share of the bandwidth to multiple | ||||
flows with similar RTTs, and if possible to multiple flows with | flows with similar RTTs, and if possible to multiple flows with | |||
different RTTs.<list style="letters"> | different RTTs. | |||
<t>Existing flows at a bottleneck must also be fair to new flows | </t> | |||
to that bottleneck, and must allow new flows to ramp up to a | <ol spacing="normal" type="a"> | |||
<li>Existing flows at a bottleneck must also be fair to new flows | ||||
to that bottleneck and must allow new flows to ramp up to a | ||||
useful share of the bottleneck bandwidth as quickly as possible. | useful share of the bottleneck bandwidth as quickly as possible. | |||
A useful share will depend on the media types involved, total | A useful share will depend on the media types involved, total | |||
bandwidth available and the user experience requirements of a | bandwidth available, and the user-experience requirements of a | |||
particular service. Note that relative RTTs may affect the rate | particular service. Note that relative RTTs may affect the rate | |||
new flows can ramp up to a reasonable share.</t> | at which new flows can ramp up to a reasonable share.</li> | |||
</list></t> | </ol> | |||
</li> | ||||
<t>The algorithm should not starve competing TCP flows, and should | <li> | |||
as best as possible avoid starvation by TCP flows.<list | <t>The algorithm should not starve competing TCP flows and should, | |||
style="letters"> | as best as possible, avoid starvation by TCP flows.</t> | |||
<t>The congestion control should prioritise achieving a useful | <ol spacing="normal" type="a"> | |||
<li>The congestion control should prioritize achieving a useful | ||||
share of the bandwidth depending on the media types and total | share of the bandwidth depending on the media types and total | |||
available bandwidth over achieving as low as possible transit | available bandwidth over achieving as-low-as-possible transit | |||
delay, when these two requirements are in conflict.</t> | delay, when these two requirements are in conflict.</li> | |||
</list></t> | </ol> | |||
</li> | ||||
<t>The algorithm should as quickly as possible adapt to initial | <li> | |||
network conditions at the start of a flow. This should occur both if | <t>The algorithm should adapt as quickly as possible to initial | |||
network conditions at the start of a flow. This should occur whether | ||||
the initial bandwidth is above or below the bottleneck bandwidth. | the initial bandwidth is above or below the bottleneck bandwidth. | |||
<list style="letters"> | </t> | |||
<t>The algorithm should allow different modes of adaptation for | <ol spacing="normal" type="a"> | |||
example,the startup adaptation may be faster than adaptation | <li>The algorithm should allow different modes of adaptation; for | |||
example, the startup adaptation may be faster than adaptation | ||||
later in a flow. It should allow for both slow-start operation | later in a flow. It should allow for both slow-start operation | |||
(adapt up) and history-based startup (start at a point expected | (adapt up) and history-based startup (start at a point expected | |||
to be at or below channel bandwidth from historical information, | to be at or below channel bandwidth from historical information, | |||
which may need to adapt down quickly if the initial guess is | which may need to adapt down quickly if the initial guess is | |||
wrong). Starting too low and/or adapting up too slowly can cause | wrong). Starting too low and/or adapting up too slowly can cause | |||
a critical point in a personal communication to be poor | a critical point in a personal communication to be poor | |||
("Hello!"). Starting over-bandwidth causes other problems for | ("Hello!"). | |||
Starting too high above the available bandwidth causes other probl | ||||
ems for | ||||
user experience, so there's a tension here. Alternative methods | user experience, so there's a tension here. Alternative methods | |||
to help startup like probing during setup with dummy data may be | to help startup, such as probing during setup with dummy data, may | |||
useful in some applications; in some cases there will be a | be | |||
useful in some applications; in some cases, there will be a | ||||
considerable gap in time between flow creation and the initial | considerable gap in time between flow creation and the initial | |||
flow of data. Again, A flow may need to change adaptation rates | flow of data. Again, a flow may need to change adaptation rates | |||
due to network conditions or changes in the provided flows (such | due to network conditions or changes in the provided flows (such | |||
as un-muting or sending data after a gap).</t> | as unmuting or sending data after a gap).</li> | |||
</list></t> | </ol> | |||
</li> | ||||
<li> | ||||
<t>The algorithm should be stable if the RTP streams are halted or | <t>The algorithm should be stable if the RTP streams are halted or | |||
discontinuous (for example - Voice Activity Detection). <list | discontinuous (for example, when using Voice Activity Detection). </t> | |||
style="letters"> | <ol spacing="normal" type="a"> | |||
<t>After stream resumption, the algorithm should attempt to | <li>After stream resumption, the algorithm should attempt to | |||
rapidly regain its previous share of the bandwidth; the | rapidly regain its previous share of the bandwidth; the | |||
aggressiveness with which this is done will decay with the | aggressiveness with which this is done will decay with the | |||
length of the pause.</t> | length of the pause.</li> | |||
</list></t> | </ol> | |||
</li> | ||||
<t>The algorithm should where possible merge information across | <li> | |||
multiple RTP streams sent between two endpoints, when those RTP | <t>Where possible, the algorithm should merge information across | |||
multiple RTP streams sent between two endpoints when those RTP | ||||
streams share a common bottleneck, whether or not those streams are | streams share a common bottleneck, whether or not those streams are | |||
multiplexed onto the same ports, in order to allow congestion | multiplexed onto the same ports. This will allow congestion | |||
control of the set of streams together instead of as multiple | control of the set of streams together instead of as multiple | |||
independent streams. This allows better overall bandwidth | independent streams. It will also allow better overall bandwidth | |||
management, faster response to changing conditions, and fairer | management, faster response to changing conditions, and fairer | |||
sharing of bandwidth with other network users.<list style="letters"> | sharing of bandwidth with other network users.</t> | |||
<t>The algorithm should also share information and adaptation | <ol spacing="normal" type="a"> | |||
<li>The algorithm should also share information and adaptation | ||||
with other non-RTP flows between the same endpoints, such as a | with other non-RTP flows between the same endpoints, such as a | |||
WebRTC DataChannel <xref | WebRTC data channel <xref target="RFC8831" format="default"/>, whe | |||
target="I-D.ietf-rtcweb-data-channel"></xref>, when | n | |||
possible.</t> | possible.</li> | |||
<li>When there are multiple streams across the same 5-tuple | ||||
<t>When there are multiple streams across the same 5-tuple | ||||
coordinating their bandwidth use and congestion control, the | coordinating their bandwidth use and congestion control, the | |||
algorithm should allow the application to control the relative | algorithm should allow the application to control the relative | |||
split of available bandwidth. The most correlated bandwidth | split of available bandwidth. The most correlated bandwidth | |||
usage would be with other flows on the same 5-tuple, but there | usage would be with other flows on the same 5-tuple, but there | |||
may be use in coordinating measurement and control of the local | may be use in coordinating measurement and control of the local | |||
link(s). Use of information about previous flows, especially on | link(s). Use of information about previous flows, especially on | |||
the same 5-tuple, may be useful input to the algorithm, | the same 5-tuple, may be useful input to the algorithm, | |||
especially to startup performance of a new flow.</t> | especially regarding startup performance of a new flow.</li> | |||
</list></t> | </ol> | |||
</li> | ||||
<li> | ||||
<t>The algorithm should not require any special support from network | <t>The algorithm should not require any special support from network | |||
elements to convey congestion related information to be functional. | elements to be able to convey congestion-related information. | |||
As much as possible, it should leverage available information about | As much as possible, it should leverage available information about | |||
the incoming flow to provide feedback to the sender. Examples of | the incoming flow to provide feedback to the sender. Examples of | |||
this information are the packet arrival times, acknowledgements and | this information are the packet arrival times, acknowledgements and | |||
feedback, packet timestamps, and packet losses, Explicit Congestion | feedback, packet timestamps, packet losses, and Explicit Congestion | |||
Notification (ECN) <xref target="RFC3168"></xref>; all of these can | Notification (ECN) <xref target="RFC3168" format="default"/>; all of t | |||
hese can | ||||
provide information about the state of the path and any bottlenecks. | provide information about the state of the path and any bottlenecks. | |||
However, the use of available information is algorithm | However, the use of available information is algorithm | |||
dependent.<list style="letters"> | dependent.</t> | |||
<t>Extra information could be added to the packets to provide | <ol spacing="normal" type="a"> | |||
<li>Extra information could be added to the packets to provide | ||||
more detailed information on actual send times (as opposed to | more detailed information on actual send times (as opposed to | |||
sampling times), but should not be required.</t> | sampling times), but such information should not be required.</li> | |||
</list></t> | </ol> | |||
</li> | ||||
<li> | ||||
<t>Since the assumption here is a set of RTP streams, the | <t>Since the assumption here is a set of RTP streams, the | |||
backchannel typically should be done via RTCP<xref | backchannel typically should be done via the RTP Control Protocol | |||
target="RFC3550"></xref>; one alternative would be to include it | (RTCP) <xref target="RFC3550" format="default"/>; instead, one alternat | |||
instead in a reverse RTP channel using header extensions.<list | ive | |||
style="letters"> | would be to include it | |||
<t>In order to react sufficiently quickly when using RTCP for a | in a reverse-RTP channel using header extensions.</t> | |||
backchannel, an RTP profile such as RTP/AVPF <xref | <ol spacing="normal" type="a"> | |||
target="RFC4585"></xref> or RTP/SAVPF <xref | <li>In order to react sufficiently quickly when using RTCP for a | |||
target="RFC5124"></xref> that allows sufficiently frequent | backchannel, an RTP profile such as RTP/AVPF <xref target="RFC4585 | |||
" format="default"/> or RTP/SAVPF <xref target="RFC5124" format="default"/> that | ||||
allows sufficiently frequent | ||||
feedback must be used. Note that in some cases, backchannel | feedback must be used. Note that in some cases, backchannel | |||
messages may be delayed until the RTCP channel can be allocated | messages may be delayed until the RTCP channel can be allocated | |||
enough bandwidth, even under AVPF rules. This may also imply | enough bandwidth, even under AVPF rules. This may also imply | |||
negotiating a higher maximum percentage for RTCP data or | negotiating a higher maximum percentage for RTCP data or | |||
allowing solutions to violate or modify the rules specified for | allowing solutions to violate or modify the rules specified for | |||
AVPF.</t> | AVPF.</li> | |||
<li>Bandwidth for the feedback messages should be minimized | ||||
<t>Bandwidth for the feedback messages should be minimized (such | using techniques such as those in <xref target="RFC5506" | |||
as via RFC 5506 <xref target="RFC5506"></xref>to allow RTCP | format="default"/>, to allow RTCP | |||
without Sender Reports/Receiver Reports)</t> | without Sender/Receiver Reports.</li> | |||
<li>Backchannel data should be minimized to avoid taking too much | ||||
<t>Backchannel data should be minimized to avoid taking too much | ||||
reverse-channel bandwidth (since this will often be used in a | reverse-channel bandwidth (since this will often be used in a | |||
bidirectional set of flows). In areas of stability, backchannel | bidirectional set of flows). In areas of stability, backchannel | |||
data may be sent more infrequently so long as algorithm | data may be sent more infrequently so long as algorithm | |||
stability and fairness are maintained. When the channel is | stability and fairness are maintained. When the channel is | |||
unstable or has not yet reached equilibrium after a change, | unstable or has not yet reached equilibrium after a change, | |||
backchannel feedback may be more frequent and use more | backchannel feedback may be more frequent and use more | |||
reverse-channel bandwidth. This is an area with considerable | reverse-channel bandwidth. This is an area with considerable | |||
flexibility of design, and different approaches to backchannel | flexibility of design, and different approaches to backchannel | |||
messages and frequency are expected to be evaluated.</t> | messages and frequency are expected to be evaluated.</li> | |||
</list></t> | </ol> | |||
</li> | ||||
<t>Flows managed by this algorithm and flows competing against at a | <li> | |||
bottleneck may have different DSCP<xref target="RFC5865"></xref> | <t>Flows managed by this algorithm and flows competing against each | |||
markings depending on the type of traffic, or may be subject to | other at a | |||
bottleneck may have different Differentiated Services Code Point | ||||
(DSCP) <xref target="RFC5865" format="default"/> | ||||
markings depending on the type of traffic or may be subject to | ||||
flow-based QoS. A particular bottleneck or section of the network | flow-based QoS. A particular bottleneck or section of the network | |||
path may or may not honor DSCP markings. The algorithm should | path may or may not honor DSCP markings. The algorithm should | |||
attempt to leverage DSCP markings when they're available.<list | attempt to leverage DSCP markings when they're available.</t> | |||
style="letters"> | </li> | |||
<t>In WebRTC, a division of packets into 4 classes is envisioned | <li>The algorithm should sense the unexpected lack of backchannel | |||
in order of priority: faster-than-audio, audio, video, | information as a possible indication of a channel-overuse problem | |||
best-effort, and bulk-transfer. Typically the flows managed by | ||||
this algorithm would be audio or video in that hierarchy, and | ||||
feedback flows would be faster-than-audio.</t> | ||||
</list></t> | ||||
<t>The algorithm should sense the unexpected lack of backchannel | ||||
information as a possible indication of a channel overuse problem | ||||
and react accordingly to avoid burst events causing a congestion | and react accordingly to avoid burst events causing a congestion | |||
collapse.</t> | collapse.</li> | |||
<li>The algorithm should be stable and maintain low delay when faced | ||||
<t>The algorithm should be stable and maintain low-delay when faced | ||||
with Active Queue Management (AQM) algorithms. Also note that these | with Active Queue Management (AQM) algorithms. Also note that these | |||
algorithms may apply across multiple queues in the bottleneck, or to | algorithms may apply across multiple queues in the bottleneck or to | |||
a single queue</t> | a single queue.</li> | |||
</list></t> | </ol> | |||
</section> | </section> | |||
<section numbered="true" toc="default"> | ||||
<section title="Deficiencies of existing mechanisms "> | <name>Deficiencies of Existing Mechanisms</name> | |||
<t>Among the existing congestion control mechanisms TCP Friendly Rate | <t>Among the existing congestion control mechanisms, TCP Friendly Rate | |||
Control (TFRC) <xref target="RFC5348"></xref> is the one which claims to | Control (TFRC) <xref target="RFC5348" format="default"/> is the one that c | |||
be suitable for real-time interactive media. TFRC is, an equation based, | laims to | |||
congestion control mechanism which provides reasonably fair share of the | be suitable for real-time interactive media. TFRC is an equation-based | |||
congestion control mechanism that provides a reasonably fair share of | ||||
bandwidth when competing with TCP flows and offers much lower throughput | bandwidth when competing with TCP flows and offers much lower throughput | |||
variations than TCP. This is achieved by a slower response to the | variations than TCP. This is achieved by a slower response to the | |||
available bandwidth change than TCP. TFRC is designed to perform best | available bandwidth change than TCP. TFRC is designed to perform best | |||
with applications which has fixed packet size and does not have fixed | with applications that have a fixed packet size and do not have a fixed | |||
period between sending packets.</t> | period between sending packets.</t> | |||
<t>TFRC detects loss events and reacts to congestion-caused loss by | ||||
<t>TFRC operates on detecting loss events and reacts to loss caused by | reducing its sending rate. It allows applications to | |||
congestion by reducing its sending rate. It allows applications to | increase the sending rate until loss is observed in the flows. As | |||
increase the sending rate until loss is observed in the flows. As it is | noted in IAB/IRTF report <xref target="RFC7295" format="default"/>, large | |||
noted in IAB/IRTF report <xref target="RFC7295"></xref> large buffers | buffers | |||
are available in the network elements which introduces additional delay | are available in the network elements, which introduce additional delay | |||
in the communication, it becomes important to take all possible | in the communication. It becomes important to take all possible | |||
congestion indications into considerations. Looking at the current | congestion indications into consideration. Looking at the current | |||
Internet deployment, TFRC's only consideration of loss events as | Internet deployment, TFRC's biggest deficiency is that it only considers | |||
congestion indication can be considered as biggest lacking.</t> | loss events as a congestion indication. | |||
</t> | ||||
<t>A typical real-time interactive communication includes live encoded | <t>A typical real-time interactive communication includes live-encoded | |||
audio and video flow(s). In such a communication scenario an audio | audio and video flow(s). In such a communication scenario, an audio | |||
source typically needs fixed interval between packets, needs to vary | source typically needs a fixed interval between packets and needs to | |||
their segment size instead of their packet rate in response to | vary the segment size of the packets instead of the packet rate in | |||
congestion and sends smaller packets, a variant of TFRC , Small-Packet | response to congestion; therefore, it sends smaller packets. | |||
TFRC (TFRC-SP) <xref target="RFC4828"></xref> addresses the issues | A variant of TFRC, Small-Packet | |||
related to such kind of sources ; a video source generally varies video | TFRC (TFRC-SP) <xref target="RFC4828" format="default"/>, addresses the is | |||
frame sizes, can produce large frames which need to be further | sues | |||
related to such kind of sources. A video source generally varies video | ||||
frame sizes, can produce large frames that need to be further | ||||
fragmented to fit into path Maximum Transmission Unit (MTU) size, and | fragmented to fit into path Maximum Transmission Unit (MTU) size, and | |||
have almost fixed interval between producing frames under a certain | has an almost fixed interval between producing frames under a certain | |||
frame rate, TFRC is known to be less optimal when using with such video | frame rate. TFRC is known to be less optimal when using such video | |||
sources.</t> | sources.</t> | |||
<t>There are also some mismatches between TFRC's design assumptions and | <t>There are also some mismatches between TFRC's design assumptions and | |||
how the media sources in a typical real-time interactive application | how the media sources in a typical real-time interactive application | |||
works. TFRC is design to maintain smooth sending rate however media | work. TFRC is designed to maintain a smooth sending rate; however, media | |||
sources can change rates in steps for both rate increase and rate | sources can change rates in steps for both rate increase and rate | |||
decrease. TFRC can operate in two modes - i) Bytes per second and ii) | decrease. TFRC can operate in two modes: i) bytes per second and ii) | |||
packets per second, where typical real-time interactive media sources | packets per second, where typical real-time interactive media sources | |||
operates on bit per second. There are also limitations on how quickly | operate on bit per second. There are also limitations on how quickly | |||
the media sources can adapt to specific sending rates. The modern video | the media sources can adapt to specific sending rates. Modern video | |||
encoders can operate on a mode where they can vary the output bitrate a | encoders can operate in a mode in which they can vary the output bitrate a | |||
lot depending on the way there are configured, the current scene it is | lot depending on the way they are configured, the current scene they are | |||
encoding and more. Therefore, it is possible that the video source does | encoding, and more. Therefore, it is possible that the video source will | |||
not always output at a bitrate they are allowed to. TFRC tries to raise | not always output at an allowable bitrate. TFRC tries to increase | |||
its sending rate when transmitting at maximum allowed rate and increases | its sending rate when transmitting at the maximum allowed rate, and it inc | |||
only twice the current transmission rate hence it may create issues when | reases | |||
the video source vary their bitrates.</t> | only twice the current transmission rate; hence, it may create issues when | |||
the video sources vary their bitrates.</t> | ||||
<t>Moreover, there are number of studies on TFRC which shows it's | <t>Moreover, there are a number of studies on TFRC that show its | |||
limitations which includes TFRC's unfairness on low statistically | limitations, including TFRC's unfairness to low statistically | |||
multiplexed links, oscillatory behavior, performance issue in highly | multiplexed links, oscillatory behavior, performance issues in highly | |||
dynamic loss rates conditions and more <xref target="CH09"></xref>.</t> | dynamic loss-rate conditions, and more <xref target="CH09" format="default | |||
"/>.</t> | ||||
<t>Looking at all these deficiencies it can be concluded that the | <t>Looking at all these deficiencies, it can be concluded that the | |||
requirements of congestion control mechanism for real-time interactive | requirements for a congestion control mechanism for real-time interactive | |||
media cannot be met by TFRC as defined in the standard.</t> | media cannot be met by TFRC as defined in the standard.</t> | |||
</section> | </section> | |||
<section anchor="IANA" numbered="true" toc="default"> | ||||
<section anchor="IANA" title="IANA Considerations"> | <name>IANA Considerations</name> | |||
<t>This document makes no request of IANA.</t> | <t>This document has no IANA actions.</t> | |||
<t>Note to RFC Editor: this section may be removed on publication as an | ||||
RFC.</t> | ||||
</section> | </section> | |||
<section anchor="Security" numbered="true" toc="default"> | ||||
<section anchor="Security" title="Security Considerations"> | <name>Security Considerations</name> | |||
<t>An attacker with the ability to delete, delay or insert messages in | <t>An attacker with the ability to delete, delay, or insert messages into | |||
the flow can fake congestion signals, unless they are passed on a | the flow can fake congestion signals, unless they are passed on a | |||
tamper-proof path. Since some possible algorithms depend on the timing | tamper-proof path. Since some possible algorithms depend on the timing | |||
of packet arrival, even a traditional protected channel does not fully | of packet arrival, even a traditional, protected channel does not fully | |||
mitigate such attacks.</t> | mitigate such attacks.</t> | |||
<t>An attack that reduces bandwidth is not necessarily significant, | <t>An attack that reduces bandwidth is not necessarily significant, | |||
since an on-path attacker could break the connection by discarding all | since an on-path attacker could break the connection by discarding all | |||
packets. Attacks that increase the perceived available bandwidth are | packets. Attacks that increase the perceived available bandwidth are | |||
conceivable, and need to be evaluated. Such attacks could result in | conceivable and need to be evaluated. Such attacks could result in | |||
starvation of competing flows and permit amplification attacks.</t> | starvation of competing flows and permit amplification attacks.</t> | |||
<t>Algorithm designers should consider the possibility of malicious | <t>Algorithm designers should consider the possibility of malicious | |||
on-path attackers.</t> | on-path attackers.</t> | |||
</section> | </section> | |||
<section anchor="Acknowledgements" title="Acknowledgements"> | ||||
<t>This document is the result of discussions in various fora of the | ||||
WebRTC effort, in particular on the rtp-congestion@alvestrand.no mailing | ||||
list. Many people contributed their thoughts to this.</t> | ||||
</section> | ||||
</middle> | </middle> | |||
<back> | <back> | |||
<references title="Normative References"> | ||||
<?rfc include="reference.RFC.2119"?> | ||||
<?rfc include='reference.RFC.3550'?> | ||||
<?rfc include='reference.RFC.4585'?> | ||||
<?rfc include='reference.RFC.5124'?> | <references> | |||
<name>References</name> | ||||
<?rfc include='reference.I-D.ietf-rtcweb-overview'?> | <references> | |||
</references> | <name>Normative References</name> | |||
<xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | ||||
<references title="Informative References"> | ence.RFC.3550.xml"/> | |||
<?rfc include='reference.RFC.3168'?> | <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | |||
ence.RFC.4585.xml"/> | ||||
<?rfc include='reference.RFC.5506'?> | <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | |||
ence.RFC.5124.xml"/> | ||||
<?rfc include='reference.RFC.5865'?> | ||||
<?rfc include='reference.RFC.5348'?> | ||||
<?rfc include='reference.RFC.4828'?> | ||||
<?rfc include='reference.RFC.7295'?> | ||||
<?rfc include='reference.I-D.ietf-rtcweb-data-channel'?> | ||||
<?rfc include='reference.I-D.ietf-avtcore-rtp-circuit-breakers'?> | <!-- draft-ietf-rtcweb-overview: RFC 8825 --> | |||
<reference anchor="RFC8825" target="https://www.rfc-editor.org/info/rfc8825"> | ||||
<front> | ||||
<title>Overview: Real-Time Protocols for Browser-Based Applications</title> | ||||
<author initials="H." surname="Alvestrand" fullname="Harald T. Alvestrand"> | ||||
<organization /> | ||||
</author> | ||||
<date month="October" year="2020" /> | ||||
</front> | ||||
<seriesInfo name="RFC" value="8825" /> | ||||
<seriesInfo name="DOI" value="10.17487/RFC8825"/> | ||||
</reference> | ||||
<reference anchor="MPEG_DASH"> | </references> | |||
<front> | ||||
<title>Dynamic adaptive streaming over HTTP (DASH) -- Part 1: Media | ||||
presentation description and segment formats</title> | ||||
<author></author> | <references> | |||
<name>Informative References</name> | ||||
<xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | ||||
ence.RFC.3168.xml"/> | ||||
<xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | ||||
ence.RFC.5506.xml"/> | ||||
<xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | ||||
ence.RFC.5865.xml"/> | ||||
<xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | ||||
ence.RFC.5348.xml"/> | ||||
<xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | ||||
ence.RFC.4828.xml"/> | ||||
<xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | ||||
ence.RFC.7295.xml"/> | ||||
<date month="April" year="2012" /> | <!-- draft-ietf-rtcweb-data-channel: 8831 --> | |||
</front> | <reference anchor="RFC8831" target="https://www.rfc-editor.org/info/rfc8831"> | |||
<front> | ||||
<title>WebRTC Data Channels</title> | ||||
<author initials="R" surname="Jesup" fullname="Randell Jesup"> | ||||
<organization/> | ||||
</author> | ||||
<author initials="S" surname="Loreto" fullname="Salvatore Loreto"> | ||||
<organization/> | ||||
</author> | ||||
<author initials="M" surname="Tüxen" fullname="Michael Tüxen"> | ||||
<organization/> | ||||
</author> | ||||
<date month='October' year='2020'/> | ||||
</front> | ||||
<seriesInfo name="RFC" value="8831"/> | ||||
<seriesInfo name="DOI" value="10.17487/RFC8831"/> | ||||
</reference> | ||||
<format target="http://standards.iso.org/ittf/PubliclyAvailableStandards | <!-- draft-ietf-avtcore-rtp-circuit-breakers; RFC 8083 (Published) --> | |||
/c057623_ISO_IEC_23009-1_2012.zip" | <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | |||
type="TXT" /> | ence.RFC.8083.xml"/> | |||
</reference> | <reference anchor="MPEG_DASH" target="https://www.iso.org/standard/79329 | |||
.html"> | ||||
<front> | ||||
<title>Information Technology -- Dynamic adaptive streaming over | ||||
HTTP (DASH) -- Part 1: Media presentation description and segment | ||||
formats</title> | ||||
<author> | ||||
<organization>ISO</organization> | ||||
</author> | ||||
<date month="December" year="2019"/> | ||||
</front> | ||||
<seriesInfo name="ISO/IEC" value="23009-1:2019"/> | ||||
</reference> | ||||
<reference anchor="CH09"> | <reference anchor="CH09"> | |||
<front> | <front> | |||
<title>Designing TCP-Friendly Window-based Congestion Control for | <title>Designing TCP-Friendly Window-based Congestion Control for | |||
Real-time Multimedia Applications</title> | Real-time Multimedia Applications</title> | |||
<author fullname="Soo-Hyun Choi" initials="S" surname="Choi"> | ||||
<organization/> | ||||
</author> | ||||
<author fullname="Mark Handley" initials="M" surname="Handley"> | ||||
<organization/> | ||||
</author> | ||||
<date month="May" year="2009"/> | ||||
</front> | ||||
<refcontent>Proceedings of PFLDNeT</refcontent> | ||||
</reference> | ||||
</references> | ||||
</references> | ||||
<author fullname="Soo-Hyun Choi" initials="S" surname="Choi"> | <section anchor="Acknowledgements" numbered="false" toc="default"> | |||
<organization></organization> | <name>Acknowledgements</name> | |||
</author> | <t>This document is the result of discussions in various fora of the | |||
WebRTC effort, in particular on the <rtp-congestion@alvestrand.no> m | ||||
<author fullname="Mark Handley" initials="M" surname="Handley"> | ailing | |||
<organization></organization> | list. Many people contributed their thoughts to this.</t> | |||
</section> | ||||
<address> | ||||
<postal> | ||||
<street></street> | ||||
<city></city> | ||||
<region></region> | ||||
<code></code> | ||||
<country></country> | ||||
</postal> | ||||
<phone></phone> | ||||
<facsimile></facsimile> | ||||
<email></email> | ||||
<uri></uri> | ||||
</address> | ||||
</author> | ||||
<date day="21" month="May" year="2009" /> | ||||
</front> | ||||
<seriesInfo name="PFLDNeT 2009 Workshop" value="" /> | ||||
<format target="www.hpcc.jp/pfldnet2009/Program_files/1569199301.pdf" | ||||
type="PDF" /> | ||||
</reference> | ||||
</references> | ||||
</back> | </back> | |||
</rfc> | </rfc> | |||
End of changes. 100 change blocks. | ||||
366 lines changed or deleted | 362 lines changed or added | |||
This html diff was produced by rfcdiff 1.48. The latest version is available from http://tools.ietf.org/tools/rfcdiff/ |