<?xmlversion="1.0" encoding="US-ASCII"?>version='1.0' encoding='utf-8'?> <!DOCTYPE rfc SYSTEM"rfc2629.dtd"> <?rfc strict="yes" ?> <?rfc toc="yes"?> <?rfc tocdepth="4"?> <?rfc symrefs="yes"?> <?rfc sortrefs="yes" ?> <?rfc compact="yes" ?> <?rfc subcompact="no" ?>"rfc2629-xhtml.ent"> <rfc xmlns:xi="http://www.w3.org/2001/XInclude" category="std" docName="draft-ietf-avtcore-cc-feedback-message-09"ipr="trust200902">number="8888" ipr="trust200902" obsoletes="" updates="" submissionType="IETF" consensus="true" xml:lang="en" tocInclude="true" tocDepth="4" symRefs="true" sortRefs="true" version="3"> <!-- xml2rfc v2v3 conversion 3.5.0 --> <front> <title abbrev="Congestion Control Feedback in RTCP">RTP Control Protocol (RTCP) Feedback for Congestion Control</title> <seriesInfo name="RFC" value="8888"/> <author fullname="Zaheduzzaman Sarker" initials="Z." surname="Sarker"> <organization>Ericsson AB</organization> <address> <postal> <street>Torshamnsgatan21</street>23</street> <city>Stockholm</city><region></region><region/> <code>16440</code>83</code> <country>Sweden</country> </postal><phone>+46107173743</phone><phone>+46 10 717 37 43</phone> <email>zaheduzzaman.sarker@ericsson.com</email> </address> </author> <author fullname="Colin Perkins"initials="C. S."initials="C." surname="Perkins"> <organization>University of Glasgow</organization> <address> <postal> <street>School of Computing Science</street> <city>Glasgow</city> <code>G12 8QQ</code> <country>United Kingdom</country> </postal> <email>csp@csperkins.org</email> </address> </author> <author fullname="Varun Singh" initials="V." surname="Singh"> <organization abbrev="callstats.io">CALLSTATS I/O Oy</organization> <address> <postal> <street>Annankatu 31-33 C 42</street> <city>Helsinki</city> <code>00100</code> <country>Finland</country> </postal> <email>varun.singh@iki.fi</email><uri>http://www.callstats.io/</uri><uri>https://www.callstats.io/</uri> </address> </author> <author fullname="Michael A. Ramalho"initials="M. A."initials="M." surname="Ramalho"> <organization abbrev="AcousticComms">AcousticComms Consulting</organization> <address> <postal> <street>6310 Watercrest Way Unit 203</street> <city>Lakewood Ranch</city> <region>FL</region> <code>34202-5122</code><country>USA</country><country>United States of America</country> </postal> <phone>+1 732 832 9723</phone> <email>mar42@cornell.edu</email> <uri>http://ramalho.webhop.info/</uri> </address> </author> <dateday="2" month="November" year="2020" /> <area>Transport</area> <workgroup>IETF RMCAT Working Group</workgroup>month="January" year="2021"/> <keyword>Congestioncontrol, feedback message, RTP, RTCP</keyword>control</keyword> <keyword>feedback message</keyword> <keyword>RTP</keyword> <keyword>RTCP</keyword> <abstract> <t> An effective RTP congestion control algorithm requires more fine-grained feedback on packet loss, timing, andECNExplicit Congestion Notification (ECN) marks than is provided by the standard RTP Control Protocol (RTCP) Sender Report (SR) and Receiver Report (RR) packets. This document describes an RTCP feedback message intended to enable congestion control for interactive real-time traffic using RTP. The feedback message is designed for use with a sender-based congestion control algorithm, in which the receiver of an RTP flow sendsRTCP feedback packetsback to the sender RTCP feedback packets containing the information the sender needs to perform congestion control. </t> </abstract> </front> <middle> <sectiontitle="Introduction">numbered="true" toc="default"> <name>Introduction</name> <t>For interactive real-time traffic, such as video conferencing flows, the typical protocol choice is the Real-time Transport Protocol (RTP) <xreftarget="RFC3550"/>target="RFC3550" format="default"/> running over the User Datagram Protocol (UDP). RTP does not provide any guarantee of Quality of Service (QoS), reliability, or timely delivery, and expects the underlying transport protocol to do so. UDP alone certainly does not meet that expectation. However, the RTP Control Protocol (RTCP) <xreftarget="RFC3550"/>target="RFC3550" format="default"/> provides a mechanism by which the receiver of an RTP flow can periodically send transport and media quality metrics to the sender of that RTP flow. This information can be used by the sender to perform congestion control. In the absence of standardized messages for this purpose, designers of congestion control algorithms have developed proprietary RTCP messages that convey only those parameters needed for their respective designs. As a direct result, the different congestion control designs are not interoperable. To enable algorithm evolution as well as interoperability across designs (e.g., different rate adaptation algorithms), it is highly desirable to have a generic congestion control feedback format.</t> <t>To help achieve interoperability for unicast RTP congestion control, this memoproposesspecifies a common RTCP feedback packet format that can be used byNADA <xref target="RFC8698"></xref>, SCReAMNetwork-Assisted Dynamic Adaptation (NADA) <xref target="RFC8698" format="default"/>, Self-Clocked Rate Adaptation for Multimedia (SCReAM) <xreftarget="RFC8298"></xref>,target="RFC8298" format="default"/>, Google Congestion Control <xreftarget="I-D.ietf-rmcat-gcc"></xref>target="Google-GCC"/>, and Shared Bottleneck Detection <xreftarget="RFC8382"></xref>, and hopefullytarget="RFC8382" format="default"/>, and, hopefully, also by future RTP congestion controlalgorithms.</t>algorithms. </t> </section> <sectiontitle="Terminology">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","<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"OPTIONAL""<bcp14>OPTIONAL</bcp14>" in this document are to be interpreted as described inBCP 14BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they appear in all capitals, as shown here.</t> <t>Inadditionaddition, the terminology defined in <xreftarget="RFC3550"></xref>,target="RFC3550" format="default"/>, <xreftarget="RFC4585"></xref>,target="RFC4585" format="default"/>, and <xreftarget="RFC5506"></xref>target="RFC5506" format="default"/> applies.</t> </section> <section anchor="feedback_message"title="RTCPnumbered="true" toc="default"> <name>RTCP Feedback for CongestionControl">Control</name> <t>Based on an analysis of NADA <xreftarget="RFC8698"></xref>,target="RFC8698" format="default"/>, SCReAM <xreftarget="RFC8298"></xref>,target="RFC8298" format="default"/>, Google Congestion Control <xreftarget="I-D.ietf-rmcat-gcc"></xref>target="Google-GCC"/>, and Shared Bottleneck Detection <xreftarget="RFC8382"></xref>,target="RFC8382" format="default"/>, the following per-RTP packet congestion control feedback information has been determined to be necessary:</t><t> <list style="symbols"> <t>RTP sequence number: The<dl newline="false" spacing="normal"> <dt>RTP Sequence Number:</dt><dd>The receiver of an RTP flow needs to feed the sequence numbers of the received RTP packets back to the sender, so the sender can determine which packets were received and which were lost. Packet loss is used as an indication of congestion by many congestion controlalgorithms.</t> <t>Packetalgorithms.</dd> <dt>Packet ArrivalTime: TheTime:</dt><dd>The receiver of an RTP flow needs to feed the arrival time of each RTP packet back to the sender. Packet delay and/or delay variation (jitter) is used as a congestion signal by some congestion controlalgorithms.</t> <t>Packetalgorithms.</dd> <dt>Packet Explicit Congestion Notification (ECN)Marking: IfMarking:</dt><dd>If ECN <xreftarget="RFC3168"></xref>,target="RFC3168" format="default"/> <xreftarget="RFC6679"></xref>target="RFC6679" format="default"/> is used, it is necessary to feed back the 2-bit ECN mark in received RTP packets, indicating for each RTP packet whether it is marked not-ECT, ECT(0), ECT(1), orECN-CE.ECN Congestion Experienced (ECN-CE). ("ECT" stands for "ECN-Capable Transport".) If the path used by the RTP traffic is ECNcapablecapable, the sender can useCongestion Experienced (ECN-CE)ECN-CE marking information as a congestion controlsignal.</t> </list> </t>signal.</dd> </dl> <t>Every RTP flow is identified by its Synchronization Source (SSRC) identifier. Accordingly, the RTCP feedback format needs to group its reports by SSRC, sending one report block per received SSRC.</t> <t>As a practical matter, we note that host operating system (OS) process interruptions can occur at inopportune times. Accordingly, recording RTP packet send times at the sender, and the corresponding RTP packet arrival times at the receiver, needs to be done with deliberate care. This is because the time duration of host OS interruptions can be significant relative to the precision desired in the one-way delay estimates. Specifically, the send time needs to be recorded at the last opportunity prior to transmitting the RTP packet at the sender, and the arrival time at the receiver needs to be recorded at the earliest available opportunity.</t> <sectionanchor="sec:ccfb" title="RTCPanchor="sec_ccfb" numbered="true" toc="default"> <name>RTCP Congestion Control FeedbackReport">Report</name> <t>Congestion control feedback can be sent as part of a regular scheduled RTCPreport,report or in an RTP/AVPF early feedback packet. If sent as early feedback, congestion control feedbackMAY<bcp14>MAY</bcp14> be sent in a non-compound RTCP packet <xreftarget="RFC5506"></xref>target="RFC5506" format="default"/> if the RTP/AVPF profile <xreftarget="RFC4585"></xref>target="RFC4585" format="default"/> or the RTP/SAVPF profile <xreftarget="RFC5124"></xref>target="RFC5124" format="default"/> is used.</t> <t>Irrespective of how it is transported, the congestion control feedback is sent as aTransport LayerTransport-Layer Feedback Message (RTCP packet type 205). The format of this RTCP packet is shown in <xreftarget="rtcp-packet"></xref>:</t> <t><figure anchor="rtcp-packet" title="RTCPtarget="rtcp-packet" format="default"/>:</t> <figure anchor="rtcp-packet"> <name>RTCP Congestion Control Feedback PacketFormat"> <artwork><![CDATA[Format</name> <artwork name="" type="" align="left" alt=""><![CDATA[ 0 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |V=2|P|FMT=CCFB|FMT=11 | PT = 205 | length | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | SSRC of RTCP packet sender | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | SSRC of 1st RTP Stream | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | begin_seq | num_reports | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |R|ECN| Arrival time offset | ... . +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ . . . . . . +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | SSRC of nth RTP Stream | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | begin_seq | num_reports | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |R|ECN| Arrival time offset | ... | . . . . +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Report Timestamp(32bits)(32 bits) |+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ ]]></artwork> </figure></t>+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+]]></artwork> </figure> <t>The firsteight8 octets comprise a standard RTCP header, with PT=205 andFMT=CCFBFMT=11 indicating that this is a congestion control feedback packet, and with the SSRC set to that of the sender of the RTCPpacket. (NOTE TO RFC EDITOR: please replace CCFB here and in the above diagram with the IANA assigned RTCP feedback packet type, and remove this note)</t> <t>Section 6.1 of <xref target="RFC4585"></xref>packet.</t> <t><xref target="RFC4585" sectionFormat="of" section="6.1"/> requires the RTCP header to be followed by the SSRC of the RTP flow being reported upon. Accordingly, the RTCP header is followed by a report block for each SSRC from which RTP packets have been received, followed by a Report Timestamp.</t> <t>Each report block begins with the SSRC of the received RTPStreamstream on which it is reporting. Following this, the report block contains a 16-bit packet metric block for each RTP packetwiththat has a sequence number in the range begin_seq to begin_seq+num_reports inclusive (calculated using arithmetic modulo 65536 to account for possible sequence number wrap-around). If the number of 16-bit packet metric blocks included in the report block is not a multiple of two, then 16 bits of zero paddingMUST<bcp14>MUST</bcp14> be added after the last packet metric block, to align the end of the packet metric blocks with the next32 bit32-bit boundary. The value of num_reportsMAY<bcp14>MAY</bcp14> bezero,0, indicating that there are no packet metric blocks included for that SSRC. Each report blockMUST NOT<bcp14>MUST NOT</bcp14> include more than 16384 packet metric blocks (i.e., itMUST NOT<bcp14>MUST NOT</bcp14> report on more than one quarter of the sequence number space in a single report). </t> <t> The contents of each 16-bit packet metric blockcomprisescomprise the R, ECN, and ATO fields as follows:<list style="symbols"> <t> Received</t> <dl newline="false" spacing="normal"> <dt>Received (R, 1bit): is abit):</dt><dd>A booleanto indicate ifthat indicates whether the packet was received.0 represents 0 indicates that the packet was not yet received and the subsequent15-bits15 bits (ECN and ATO) in this 16-bit packet metric block are also set to 0 andMUST<bcp14>MUST</bcp14> be ignored. 1representsindicates that the packet was received and the subsequent bits in the block need to beparsed. </t> <t> ECNparsed.</dd> <dt>ECN (2bits): is thebits):</dt><dd>The echoed ECN mark of the packet. These bits are set to 00 if notreceived,received or if ECN is notused. </t> <t> Arrivalused.</dd> <dt>Arrival time offset (ATO, 13bits): is thebits):</dt><dd>The arrival time of the RTP packet at the receiver, as an offset before the time represented by the Report Timestamp (RTS) field of this RTCP congestion control feedback report. The ATO field is in units of 1/1024 seconds (this unit is chosen to give exact offsets from the RTS field) so, for example, an ATO value of 512 indicates that the corresponding RTP packet arrived exactly half a second before the time instant represented by the RTS field. If the measured value is greater than 8189/1024 seconds (the value that would be coded as 0x1FFD), the value 0x1FFEMUST<bcp14>MUST</bcp14> be reported to indicate an over-range measurement. If the measurement isunavailable,unavailable or if the arrival time of the RTP packet is after the time represented by the RTS field, then an ATO value of 0x1FFFMUST<bcp14>MUST</bcp14> be reported for thepacket. </t> </list> </t>packet.</dd> </dl> <t>The RTCP congestion control feedback report packet concludes with the Report Timestamp field (RTS, 32 bits). This denotes the time instant on which this packet isreporting,reporting and is the instant from which the arrival time offset values are calculated. The value of the RTS field is derived from the same clock used to generate the NTP timestamp field in RTCP Sender Report (SR) packets. It is formatted as the middle 32 bits of an NTP format timestamp, as described inSection 4 of<xreftarget="RFC3550"></xref>.</t>target="RFC3550" sectionFormat="of" section="4"/>.</t> <t>RTCPcongestion control feedback packets SHOULDCongestion Control Feedback Packets <bcp14>SHOULD</bcp14> include a report block for every active SSRC. The sequence number ranges reported on in consecutive reports for a given SSRC will generally be contiguous, but overlapping reportsMAY<bcp14>MAY</bcp14> be sent (and need to be sent in cases where RTP packet reordering occurs across the boundary between consecutive reports). If an RTP packet was reported as received in one report, that packetMUST<bcp14>MUST</bcp14> also be reported as received in any overlapping reports sent later that cover its sequence number range. If feedback reports covering overlapping sequence number ranges are sent, information in later feedback reportsupdates thatmay update any data sent in previous reports for RTP packets included in both feedback reports. </t> <t>RTCPcongestion control feedback packetsCongestion Control Feedback Packets can be large if they are sent infrequently relative to the number of RTP data packets. If an RTCPcongestion control feedback packetCongestion Control Feedback Packet is too large to fit within the path MTU, its senderSHOULD<bcp14>SHOULD</bcp14> split it into multiple feedback packets. The RTCP reporting intervalSHOULD<bcp14>SHOULD</bcp14> be chosen such that feedback packets are sent often enough that they are small enough to fit within the pathMTUMTU. (<xreftarget="I-D.ietf-rmcat-rtp-cc-feedback"/>target="I-D.ietf-rmcat-rtp-cc-feedback" format="default"/> discusses how to choose the reporting interval; specifications for RTP congestion control algorithms can also provideguidance).</t>guidance.)</t> <t>If duplicate copies of a particular RTP packet are received, then the arrival time of the first copy to arriveMUST<bcp14>MUST</bcp14> be reported. If any of the copies of the duplicated packet are ECN-CE marked, then an ECN-CE markMUST<bcp14>MUST</bcp14> be reportedthatfor that packet;otherwiseotherwise, the ECN mark of the first copy to arrive is reported.</t> <t>If no packets are received from an SSRC in a reporting interval, a report blockMAY<bcp14>MAY</bcp14> be sent with begin_seq set to the highest sequence number previously received from that SSRC and num_reports set tozero (or,0 (or the report can simplytobe omitted). The correspondingSR/RRSender Report / Receiver Report (SR/RR) packet will have a non-increased extended highest sequence number received field that will inform the sender that no packets have been received, but it can ease processing to have that information available in the congestion control feedback reports too.</t> <t>A report block indicating that certain RTP packets were lost is not to be interpreted as a request to retransmit the lost packets. The receiver of such a report might choose to retransmit such packets, provided a retransmission payload format has been negotiated, but there is no requirement that it do so.</t> </section> </section> <sectiontitle="Feedbacknumbered="true" toc="default"> <name>Feedback Frequency andOverhead">Overhead</name> <t>There is a trade-off between speed and accuracy of reporting, and the overhead of the reports. <xreftarget="I-D.ietf-rmcat-rtp-cc-feedback"/>target="I-D.ietf-rmcat-rtp-cc-feedback" format="default"/> discusses this trade-off, suggests desirable RTCP feedback rates, and provides guidance on how toconfigureconfigure, for example, the RTCP bandwidthfraction, etc.,fraction to make appropriate use of the reporting block described in this memo. Specifications for RTP congestion control algorithms can also provide guidance.</t> <t>It is generally understood that congestion control algorithms work better with more frequent feedback. However, RTCP bandwidth and transmission rules put some upper limits on how frequently the RTCP feedback messages can be sent from an RTP receiver to the RTP sender. In many cases, sending feedback once per frame is an upper bound before the reporting overhead becomes excessive, although this will depend on the media rate and more frequent feedback might be needed with high-rate media flows <xreftarget="I-D.ietf-rmcat-rtp-cc-feedback"></xref>.target="I-D.ietf-rmcat-rtp-cc-feedback" format="default"/>. Analysis <xreftarget="feedback-requirements"></xref>target="feedback-requirements" format="default"/> has also shown that some candidate congestion control algorithms can operate with less frequent feedback, using a feedback interval range of50-200ms.50-200 ms. Applications need to negotiate an appropriate congestion control feedback interval at session setup time, based on the choice of congestion control algorithm, the expected mediabit rate,bitrate, and the acceptable feedback overhead. </t> </section> <sectiontitle="Responsenumbered="true" toc="default"> <name>Response to Loss of FeedbackPackets">Packets</name> <t> Like all RTCP packets, RTCPcongestion control feedback packetsCongestion Control Feedback Packets might be lost. All RTP congestion control algorithmsMUST<bcp14>MUST</bcp14> specify how they respond to the loss of feedback packets. </t> <t> RTCP packets do not contain a sequence number, so loss of feedback packets has to be inferred based on the time since the last feedback packet. If only a single congestion control feedback packet is lost, an appropriate response is to assume that the level of congestion has remained roughly the same as the previous report. However, if multiple consecutive congestion control feedback packets are lost, then the media senderSHOULD<bcp14>SHOULD</bcp14> rapidly reduce its sending rate as this likely indicates a path failure. The RTP circuit breaker specification <xreftarget="RFC8083"/>target="RFC8083" format="default"/> provides further guidance. </t> </section> <sectiontitle="SDP Signalling">numbered="true" toc="default"> <name>SDP Signaling</name> <t> A new "ack" feedback parameter, "ccfb", is defined for use with the "a=rtcp-fb:"SDPSession Description Protocol (SDP) extension to indicate the use of the RTP Congestion Controlfeedback packetFeedback Packet format defined in <xreftarget="feedback_message"/>.target="feedback_message" format="default"/>. The ABNF definition <xref target="RFC5234"/> of this SDP parameter extensionis: </t> <figure> <artwork><![CDATA[is:</t> <sourcecode type="abnf"><![CDATA[ rtcp-fb-ack-param = <See Section 4.2 of [RFC4585]> rtcp-fb-ack-param =/ ccfb-par ccfb-par = SP"ccfb" ]]></artwork> </figure>"ccfb"]]></sourcecode> <t> The payload type used with "ccfb" feedbackMUST<bcp14>MUST</bcp14> be the wildcard type ("*"). This implies that the congestion control feedback is sent for all payload types in use in the session, including anyFECForward Error Correction (FEC) and retransmission payload types. An example of the resulting SDP attribute is: </t><figure> <artwork><![CDATA[<sourcecode name="" type="sdp"><![CDATA[ a=rtcp-fb:* ackccfb ]]></artwork> </figure>ccfb]]></sourcecode> <t> The offer/answer rules for these SDP feedback parameters are specified inSection 4.2 of the RTP/AVPF profile<xreftarget="RFC4585"/>.target="RFC4585" sectionFormat="of" section="4.2">the RTP/AVPF profile</xref>. </t> <t> An SDP offer might indicate support for both the congestion control feedback mechanism specified in this memo and one or more alternative congestion control feedback mechanisms that offer substantially the same semantics. In this case, the answering partySHOULD<bcp14>SHOULD</bcp14> include only one of the offered congestion control feedback mechanisms in its answer. If are-invite offeringsubsequent offer containing the same set of congestion control feedback mechanisms is received, the generated answerSHOULD<bcp14>SHOULD</bcp14> choose the same congestion control feedback mechanism as in the original answer where possible. </t> <t> When the SDP BUNDLE extension <xreftarget="I-D.ietf-mmusic-sdp-bundle-negotiation"/>target="RFC8843" format="default"/> is used for multiplexing, the "a=rtcp-fb:" attribute has multiplexing category IDENTICAL-PER-PT <xreftarget="I-D.ietf-mmusic-sdp-mux-attributes"/>.target="RFC8859"/>. </t> </section> <sectiontitle="Relationnumbered="true" toc="default"> <name>Relationship to RFC6679">6679</name> <t>UseThe use of Explicit Congestion Notification (ECN) with RTP is described in <xreftarget="RFC6679"/>. Thattarget="RFC6679" format="default"/>, which specifies how to negotiate the use of ECN withRTP,RTP and defines an RTCP ECN Feedback Packet to carry ECN feedback reports. It uses an SDP "a=ecn-capable-rtp:" attribute to negotiate the use of ECN, and the "a=rtcp-fb:"attributesattribute with the "nack" parameter "ecn" to negotiate the use of RTCP ECN FeedbackPackets. </t>Packets.</t> <t> The RTCP ECN Feedback Packet is not useful when ECN is used with the RTP Congestion Control Feedback Packet defined in thismemomemo, since it provides duplicate information. When congestion control feedback is to be used with RTP and ECN, the SDP offer generatedMUST<bcp14>MUST</bcp14> include an "a=ecn-capable-rtp:" attribute to negotiate ECN support, along with an "a=rtcp-fb:" attribute with the "ack" parameter "ccfb" to indicate that the RTP Congestion Control Feedback Packet can be used. The "a=rtcp-fb:" attributeMAY<bcp14>MAY</bcp14> also include the "nack" parameter"ecn","ecn" to indicate that the RTCP ECN Feedback Packet is also supported. If an SDP offer signals support for both RTP Congestion Control Feedback Packets and the RTCP ECN Feedback Packet, the answering partySHOULD<bcp14>SHOULD</bcp14> signal support for one, but not both, formats in its SDP answer to avoid sending duplicate feedback. </t> <t> When using ECN with RTP, the guidelines inSection 7.2 of<xreftarget="RFC6679"/> MUSTtarget="RFC6679" sectionFormat="of" section="7.2"/> <bcp14>MUST</bcp14> be followed to initiate the use of ECN in an RTP session. The guidelines inSection 7.3 of<xreftarget="RFC6679"/> MUST also be followed abouttarget="RFC6679" sectionFormat="of" section="7.3"/> regarding the ongoing use of ECN within an RTPsession,session <bcp14>MUST</bcp14> also be followed, with the exception that feedback is sent using the RTCP Congestion Control Feedback Packets described in this memo rather than using RTP ECN Feedback Packets. Similarly, the guidance inSection 7.4 of<xreftarget="RFC6679"/> aroundtarget="RFC6679" sectionFormat="of" section="7.4"/> related to detecting failuresMUST<bcp14>MUST</bcp14> be followed, with the exception that the necessary information is retrieved from the RTCP Congestion Control Feedback Packets rather than from RTP ECN Feedback Packets. </t> </section> <sectiontitle="Design Rationale">numbered="true" toc="default"> <name>Design Rationale</name> <t>The primary function of RTCP SR/RR packets is to report statistics on the reception of RTP packets. The reception report blocks sent in these packets contain information about observed jitter, fractional packet loss, and cumulative packet loss. It was intended that this information could be used to support congestion control algorithms, but experience has shown that it is not sufficient for that purpose. An efficient congestion control algorithm requires more fine-grained information on per-packet reception quality than is provided by SR/RR packets to react effectively. The feedback format defined in this memo provides such fine-grained feedback.</t> <t>Several other RTCP extensions also provide more detailed feedback than SR/RR packets:</t><t> <list style="hanging"> <t hangText="TMMBR:">The Codec Control Messages<dl newline="false" spacing="normal"> <dt>TMMBR:</dt> <dd>The codec control messages for the RTP/AVPF profile <xreftarget="RFC5104"></xref>target="RFC5104" format="default"/> include a Temporary Maximum Media Stream Bit Rate Request (TMMBR) message. This is used to convey a temporary maximumbit ratebitrate limitation from a receiver of RTP packets to their sender. Even though it was not designed to replace congestion control, TMMBR has been used as a means to doreceiver basedreceiver-based congestion control where the session bandwidth is high enough to send frequent TMMBR messages, especially when used with non-compound RTCP packets <xreftarget="RFC5506"></xref>.target="RFC5506" format="default"/>. This approach requires the receiver of the RTP packets to monitor their reception, determine the level of congestion, and recommend a maximumbit ratebitrate suitable for current available bandwidth on the path; it also assumes that the RTP sendercan/willcan&wj;/will respect thatbit rate.bitrate. This is the opposite of the sender-based congestion control approach suggested in this memo, so TMMBR cannot be used to convey the information needed forasender-based congestion control. TMMBR could, however, be viewed as a complementary mechanism that can inform the sender of the receiver's current view of an acceptable maximumbit rate.bitrate. Mechanisms that convey the receiver's estimate of the maximum availablebit-ratebitrate provide similar feedback.</t> <t hangText="RTCP</dd> <dt>RTCP Extended Reports(XR):">Numerous(XRs):</dt> <dd>Numerous RTCPextended report (XR)XR blocks have been defined to report details of packet loss, arrival times <xreftarget="RFC3611"/>,target="RFC3611" format="default"/>, delay <xreftarget="RFC6843"/>,target="RFC6843" format="default"/>, and ECN marking <xreftarget="RFC6679"/>.target="RFC6679" format="default"/>. It is possible to combine several such XR blocks into a compound RTCP packet, to report the detailed loss, arrival time, and ECN marking information needed for effective sender-based congestion control. However, the result has high overheadbothin terms of both bandwidth and complexity, due to the need to stack multiplereports.</t> <t hangText="Transport-widereports.</dd> <dt>Transport-wide CongestionControl:">TheControl:</dt> <dd>The format defined in this memo provides individual feedback on each SSRC. An alternative is to add a header extension to each RTP packet, containing a single, transport-wide, packet sequence number, then have the receiver send RTCP reports giving feedback on these additional sequence numbers <xreftarget="I-D.holmer-rmcat-transport-wide-cc-extensions"/>.target="I-D.holmer-rmcat-transport-wide-cc-extensions" format="default"/>. Such an approachaddsincreases theper-packet overheadsize ofthe header extension (8 octets pereach RTP packetinby 8 octets, due to thereferenced format),header extension, but reduces the size of the RTCP feedback packets, and can simplify the rate calculation at the sender if it maintains a single rate limit that applies to all RTP packetssentsent, irrespective of their SSRC. Equally, the use of transport-wide feedback makes it more difficult to adapt the sending rate, or respond to lost packets, based on the reception and/or loss patterns observed on a per-SSRC basis (for example, to perform differential rate control and repair for audio and video flows, based on knowledge of what packets from each flow were lost). Transport-wide feedback is also a less natural fit with the wider RTP framework, which makes extensive use of per-SSRC sequence numbers andfeedback.</t> </list> </t>feedback.</dd> </dl> <t>Considering these issues, we believe it appropriate to design a new RTCP feedback mechanism to convey information for sender-based congestion control algorithms. The new congestion control feedback RTCP packet described in <xreftarget="feedback_message"></xref>target="feedback_message" format="default"/> provides such a mechanism.</t> </section> <sectionanchor="Acknowledgements" title="Acknowledgements"> <t>This document is based on the outcome of a design team discussion in the RTP Media Congestion Avoidance Techniques (RMCAT) working group. The authors would like to thank David Hayes, Stefan Holmer, Randell Jesup, Ingemar Johansson, Jonathan Lennox, Sergio Mena, Nils Ohlmeier, Magnus Westerlund, and Xiaoqing Zhu for their valuable feedback.</t> </section> <!-- Possibly a 'Contributors' section ... --> <sectionanchor="IANA"title="IANA Considerations">numbered="true" toc="default"> <name>IANA Considerations</name> <t> The IANAis requested to registerhas registered one new RTP/AVPF Transport-Layer Feedback Message in thetable for FMT values"FMT Values for RTPFB PayloadTypesTypes" table <xreftarget="RFC4585"/>target="RFC4585" format="default"/> as defined in <xreftarget="sec:ccfb"/>:target="sec_ccfb" format="default"/>: </t><figure> <artwork><![CDATA[ Name: CCFB Long name: RTP<dl indent="14" newline="false" spacing="compact"> <dt>Name:</dt><dd>CCFB</dd> <dt>Long name:</dt><dd>RTP Congestion ControlFeedback Value: (to be assigned by IANA) Reference: (RFC number of this document, when published) ]]></artwork> </figure>Feedback</dd> <dt>Value:</dt><dd>11</dd> <dt>Reference:</dt><dd>RFC 8888</dd> </dl> <t> The IANAishas alsorequested to registerregistered one new SDP "rtcp-fb" attribute "ack" parameter, "ccfb", in the SDP("ack"'"ack" and "nack" AttributeValues)Values' registry: </t><figure> <artwork><![CDATA[ Value name: ccfb Long name: Congestion<dl indent="14" newline="false" spacing="compact"> <dt>Value name:</dt><dd>ccfb</dd> <dt>Long name:</dt><dd>Congestion ControlFeedback Usable with: ack Mux: IDENTICAL-PER-PT Reference: (RFC number of this document, when published) ]]></artwork> </figure>Feedback</dd> <dt>Usable with:</dt><dd>ack</dd> <dt>Mux:</dt><dd>IDENTICAL-PER-PT</dd> <dt>Reference:</dt><dd>RFC 8888</dd> </dl> </section> <section anchor="Security"title="Security Considerations">numbered="true" toc="default"> <name>Security Considerations</name> <t>The security considerations of the RTP specification <xreftarget="RFC3550"/>,target="RFC3550" format="default"/>, the applicable RTP profile (e.g., <xreftarget="RFC3551"/>,target="RFC3551" format="default"/>, <xreftarget="RFC3711"/>,target="RFC3711" format="default"/>, or <xreftarget="RFC4585"/>),target="RFC4585" format="default"/>), and the RTP congestion control algorithmthat is in usebeing used (e.g., <xreftarget="RFC8698"/>,target="RFC8698" format="default"/>, <xreftarget="RFC8298"/>,target="RFC8298" format="default"/>, <xreftarget="I-D.ietf-rmcat-gcc"/>,target="Google-GCC"/>, or <xreftarget="RFC8382"/>)target="RFC8382" format="default"/>) apply.</t> <t>A receiver that intentionally generates inaccurate RTCP congestion control feedback reports might be able to trick the sender into sending at a greater rate than the path can support, thereby causing congestion on the path. This scenario will negatively impact the quality of experience of that receiver,andpotentiallycausecausing both denial of service to other traffic sharing the path andexcessiveexcessively increased resource usage at the media sender. Since RTP is an unreliable transport, a sender can intentionally drop a packet, leaving a gap in the RTP sequence number space without causing serious harm, to check that the receiver is correctly reportinglosses (thislosses. (This needs to be done with care and some awareness of the media data being sent, to limit impact on the userexperience).</t>experience.)</t> <t>An on-path attacker that can modify RTCPcongestion control feedback packetsCongestion Control Feedback Packets can change the reports to trick the sender into sending at either an excessively high or excessively low rate, leading to denial of service. The secure RTCP profile <xreftarget="RFC3711"/>target="RFC3711" format="default"/> can be used to authenticate RTCP packets to protect against this attack.</t> <t>Anoff-patchoff-path attacker that can spoof RTCPcongestion control feedback packetsCongestion Control Feedback Packets can similarly trick a sender into sending at an incorrect rate, leading to denial of service. This attack is difficult, since the attacker needs to guess the SSRC and sequence number in addition to the destination transport address. As withon-patchon-path attacks, the secure RTCP profile <xreftarget="RFC3711"/>target="RFC3711" format="default"/> can be used to authenticate RTCP packets to protect against this attack.</t> </section> </middle> <back><references title="Normative References"> <?rfc include='reference.RFC.2119'?> <?rfc include='reference.RFC.3168'?> <?rfc include='reference.RFC.3550'?> <?rfc include='reference.RFC.3551'?> <?rfc include='reference.RFC.3711'?> <?rfc include='reference.RFC.4585'?> <?rfc include='reference.RFC.5124'?> <?rfc include='reference.RFC.5506'?> <?rfc include='reference.RFC.6679'?> <?rfc include='reference.RFC.8083'?> <?rfc include='reference.RFC.8174'?> <?rfc include='reference.I-D.ietf-mmusic-sdp-bundle-negotiation'?> <?rfc include='reference.I-D.ietf-mmusic-sdp-mux-attributes'?><displayreference target="I-D.ietf-rmcat-rtp-cc-feedback" to="RTCP-Multimedia-Feedback"/> <displayreference target="I-D.holmer-rmcat-transport-wide-cc-extensions" to="RTP-Ext-for-CC"/> <references> <name>References</name> <references> <name>Normative References</name> <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.2119.xml"/> <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.3168.xml"/> <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.3550.xml"/> <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.3551.xml"/> <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.3711.xml"/> <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.4585.xml"/> <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.5124.xml"/> <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.5234.xml"/> <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.5506.xml"/> <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.6679.xml"/> <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.8083.xml"/> <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.8174.xml"/> <!-- draft-ietf-mmusic-sdp-bundle-negotiation (RFC 8843) --> <reference anchor="RFC8843" target="https://www.rfc-editor.org/info/rfc8843"> <front> <title>Negotiating Media Multiplexing Using the Session Description Protocol (SDP)</title> <author initials="C" surname="Holmberg" fullname="Christer Holmberg"> <organization/> </author> <author initials="H" surname="Alvestrand" fullname="Harald Alvestrand"> <organization/> </author> <author initials="C" surname="Jennings" fullname="Cullen Jennings"> <organization/> </author> <date month="January" year="2021"/> </front> <seriesInfo name="RFC" value="8843"/> <seriesInfo name="DOI" value="10.17487/RFC8843"/> </reference> <!-- draft-ietf-mmusic-sdp-mux-attributes (RFC 8859) --> <reference anchor="RFC8859" target="https://www.rfc-editor.org/info/rfc8859"> <front> <title>A Framework for Session Description Protocol (SDP) Attributes When Multiplexing</title> <author initials="S" surname="Nandakumar" fullname="Suhas Nandakumar"> <organization/> </author> <date month="January" year="2021"/> </front> <seriesInfo name="RFC" value="8859"/> <seriesInfo name="DOI" value="10.17487/RFC8859"/> </reference> </references><references title="Informative References"> <?rfc include='reference.I-D.ietf-rmcat-rtp-cc-feedback'?> <?rfc include="reference.I-D.ietf-rmcat-gcc"?> <?rfc include='reference.RFC.3611'?> <?rfc include='reference.RFC.5104'?> <?rfc include='reference.RFC.6843'?> <?rfc include="reference.RFC.8298"?> <?rfc include="reference.RFC.8382"?> <?rfc include='reference.RFC.8698"?> <?rfc include="reference.I-D.holmer-rmcat-transport-wide-cc-extensions"?> <?rfc include="reference.I-D.alvestrand-rmcat-remb"?><references> <name>Informative References</name> <!-- draft-ietf-rmcat-rtp-cc-feedback (Expired) --> <xi:include href="https://datatracker.ietf.org/doc/bibxml3/draft-ietf-rmcat-rtp-cc-feedback.xml"/> <!-- draft-ietf-rmcat-gcc (Expired) Have to do long way in order to fix "De Cicco" --> <reference anchor='Google-GCC'> <front> <title>A Google Congestion Control Algorithm for Real-Time Communication</title> <author initials='S' surname='Holmer' fullname='Stefan Holmer'> <organization /> </author> <author initials='H' surname='Lundin' fullname='Henrik Lundin'> <organization /> </author> <author initials='G' surname='Carlucci' fullname='Gaetano Carlucci'> <organization /> </author> <author initials='L' surname='De Cicco' fullname='Luca De Cicco'> <organization /> </author> <author initials='S' surname='Mascolo' fullname='Saverio Mascolo'> <organization /> </author> <date month='July' day='8' year='2016' /> </front> <seriesInfo name="Internet-Draft" value="draft-ietf-rmcat-gcc-02"/> </reference> <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.3611.xml"/> <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.5104.xml"/> <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.6843.xml"/> <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.8298.xml"/> <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.8382.xml"/> <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.8698.xml"/> <!-- draft-holmer-rmcat-transport-wide-cc-extensions (Expired) --> <xi:include href="https://datatracker.ietf.org/doc/bibxml3/draft-holmer-rmcat-transport-wide-cc-extensions.xml"/> <reference anchor="feedback-requirements"target="://www.ietf.org/proceedings/95/slides/slides-95-rmcat-1.pdf">target="https://www.ietf.org/proceedings/95/slides/slides-95-rmcat-1.pdf"> <front> <title>RMCAT Feedback Requirements</title> <author><organization></organization><organization/> </author> <date/>month="April" year="2016"/> </front> <refcontent>IETF 95</refcontent> </reference> </references> </references> <section anchor="Acknowledgements" numbered="false" toc="default"> <name>Acknowledgements</name> <t>This document is based on the outcome of a design team discussion in the RTP Media Congestion Avoidance Techniques (RMCAT) Working Group. The authors would like to thank <contact fullname="David Hayes"/>, <contact fullname="Stefan Holmer"/>, <contact fullname="Randell Jesup"/>, <contact fullname="Ingemar Johansson"/>, <contact fullname="Jonathan Lennox"/>, <contact fullname="Sergio Mena"/>, <contact fullname="Nils Ohlmeier"/>, <contact fullname="Magnus Westerlund"/>, and <contact fullname="Xiaoqing Zhu"/> for their valuable feedback.</t> </section> </back> </rfc>