RFC 8888 PROPOSED STANDARD RTP · RTCP · CONGESTION CONTROL

RTCP CC feedback: RTP Control Protocol (RTCP) Feedback for Congestion Control

A standard RTCP report that tells an RTP sender which packets arrived, when, and with what ECN marks, so it can control congestion.

On rfc-editor.org ↗
PUBLISHED
January 2021
AUTHORS
Z. Sarker, C. Perkins, V. Singh, M. Ramalho
STREAM
IETF
RTCP PACKET TYPE
205 (Transport-Layer Feedback)
FMT VALUE
11
METRIC BLOCK SIZE
16 bits per RTP packet
MAX PACKETS PER REPORT BLOCK
16384
ATO UNIT
1/1024 second
SDP PARAMETER
a=rtcp-fb:* ack ccfb
DOI
10.17487/RFC8888
ERRATA
Reported errata

RFC text

Contents
Original text · RFC Editor View on rfc-editor.org ↗
Internet Engineering Task Force (IETF)                         Z. Sarker
Request for Comments: 8888                                   Ericsson AB
Category: Standards Track                                     C. Perkins
ISSN: 2070-1721                                    University of Glasgow
                                                                V. Singh
                                                            callstats.io
                                                              M. Ramalho
                                                           AcousticComms
                                                            January 2021


      RTP Control Protocol (RTCP) Feedback for Congestion Control

Abstract

   An effective RTP congestion control algorithm requires more fine-
   grained feedback on packet loss, timing, and Explicit Congestion
   Notification (ECN) marks than is provided by the standard RTP Control
   Protocol (RTCP) Sender Report (SR) and Receiver Report (RR) packets.
   This document describes an RTCP feedback message intended to enable
   congestion control for interactive real-time traffic using RTP.  The
   feedback message is designed for use with a sender-based congestion
   control algorithm, in which the receiver of an RTP flow sends back to
   the sender RTCP feedback packets containing the information the
   sender needs to perform congestion control.

Status of This Memo

   This is an Internet Standards Track document.

   This document is a product of the Internet Engineering Task Force
   (IETF).  It represents the consensus of the IETF community.  It has
   received public review and has been approved for publication by the
   Internet Engineering Steering Group (IESG).  Further information on
   Internet Standards is available in Section 2 of RFC 7841.

   Information about the current status of this document, any errata,
   and how to provide feedback on it may be obtained at
   https://www.rfc-editor.org/info/rfc8888.

Copyright Notice

   Copyright (c) 2021 IETF Trust and the persons identified as the
   document authors.  All rights reserved.

   This document is subject to BCP 78 and the IETF Trust's Legal
   Provisions Relating to IETF Documents
   (https://trustee.ietf.org/license-info) in effect on the date of
   publication of this document.  Please review these documents
   carefully, as they describe your rights and restrictions with respect
   to this document.  Code Components extracted from this document must
   include Simplified BSD License text as described in Section 4.e of
   the Trust Legal Provisions and are provided without warranty as
   described in the Simplified BSD License.

Table of Contents

   1.  Introduction
   2.  Terminology
   3.  RTCP Feedback for Congestion Control
     3.1.  RTCP Congestion Control Feedback Report
   4.  Feedback Frequency and Overhead
   5.  Response to Loss of Feedback Packets
   6.  SDP Signaling
   7.  Relationship to RFC 6679
   8.  Design Rationale
   9.  IANA Considerations
   10. Security Considerations
   11. References
     11.1.  Normative References
     11.2.  Informative References
   Acknowledgements
   Authors' Addresses

1.  Introduction

   For interactive real-time traffic, such as video conferencing flows,
   the typical protocol choice is the Real-time Transport Protocol (RTP)
   [RFC3550] 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) [RFC3550] 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.

   To help achieve interoperability for unicast RTP congestion control,
   this memo specifies a common RTCP feedback packet format that can be
   used by Network-Assisted Dynamic Adaptation (NADA) [RFC8698], Self-
   Clocked Rate Adaptation for Multimedia (SCReAM) [RFC8298], Google
   Congestion Control [Google-GCC], and Shared Bottleneck Detection
   [RFC8382], and, hopefully, also by future RTP congestion control
   algorithms.

2.  Terminology

   The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
   "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and
   "OPTIONAL" in this document are to be interpreted as described in
   BCP 14 [RFC2119] [RFC8174] when, and only when, they appear in all
   capitals, as shown here.

   In addition, the terminology defined in [RFC3550], [RFC4585], and
   [RFC5506] applies.

3.  RTCP Feedback for Congestion Control

   Based on an analysis of NADA [RFC8698], SCReAM [RFC8298], Google
   Congestion Control [Google-GCC], and Shared Bottleneck Detection
   [RFC8382], the following per-RTP packet congestion control feedback
   information has been determined to be necessary:

   RTP Sequence Number:  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 control algorithms.

   Packet Arrival Time:  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 control algorithms.

   Packet Explicit Congestion Notification (ECN) Marking:  If ECN
      [RFC3168] [RFC6679] 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), or ECN
      Congestion Experienced (ECN-CE).  ("ECT" stands for "ECN-Capable
      Transport".)  If the path used by the RTP traffic is ECN capable,
      the sender can use ECN-CE marking information as a congestion
      control signal.

   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.

   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.

3.1.  RTCP Congestion Control Feedback Report

   Congestion control feedback can be sent as part of a regular
   scheduled RTCP report or in an RTP/AVPF early feedback packet.  If
   sent as early feedback, congestion control feedback MAY be sent in a
   non-compound RTCP packet [RFC5506] if the RTP/AVPF profile [RFC4585]
   or the RTP/SAVPF profile [RFC5124] is used.

   Irrespective of how it is transported, the congestion control
   feedback is sent as a Transport-Layer Feedback Message (RTCP packet
   type 205).  The format of this RTCP packet is shown in Figure 1:

      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=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 (32 bits)                    |
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

          Figure 1: RTCP Congestion Control Feedback Packet Format

   The first 8 octets comprise a standard RTCP header, with PT=205 and
   FMT=11 indicating that this is a congestion control feedback packet,
   and with the SSRC set to that of the sender of the RTCP packet.

   Section 6.1 of [RFC4585] 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.

   Each report block begins with the SSRC of the received RTP stream on
   which it is reporting.  Following this, the report block contains a
   16-bit packet metric block for each RTP packet that 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 padding MUST be added after the last packet metric
   block, to align the end of the packet metric blocks with the next
   32-bit boundary.  The value of num_reports MAY be 0, indicating that
   there are no packet metric blocks included for that SSRC.  Each
   report block MUST NOT include more than 16384 packet metric blocks
   (i.e., it MUST NOT report on more than one quarter of the sequence
   number space in a single report).

   The contents of each 16-bit packet metric block comprise the R, ECN,
   and ATO fields as follows:

   Received (R, 1 bit):  A boolean that indicates whether the packet was
      received.  0 indicates that the packet was not yet received and
      the subsequent 15 bits (ECN and ATO) in this 16-bit packet metric
      block are also set to 0 and MUST be ignored.  1 indicates that the
      packet was received and the subsequent bits in the block need to
      be parsed.

   ECN (2 bits):  The echoed ECN mark of the packet.  These bits are set
      to 00 if not received or if ECN is not used.

   Arrival time offset (ATO, 13 bits):  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 0x1FFE MUST be reported to indicate an over-
      range measurement.  If the measurement is unavailable or if the
      arrival time of the RTP packet is after the time represented by
      the RTS field, then an ATO value of 0x1FFF MUST be reported for
      the packet.

   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 is 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 in
   Section 4 of [RFC3550].

   RTCP Congestion Control Feedback Packets SHOULD 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 reports MAY 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 packet MUST 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 reports may update any data sent
   in previous reports for RTP packets included in both feedback
   reports.

   RTCP Congestion Control Feedback Packets can be large if they are
   sent infrequently relative to the number of RTP data packets.  If an
   RTCP Congestion Control Feedback Packet is too large to fit within
   the path MTU, its sender SHOULD split it into multiple feedback
   packets.  The RTCP reporting interval SHOULD be chosen such that
   feedback packets are sent often enough that they are small enough to
   fit within the path MTU.  ([RTCP-Multimedia-Feedback] discusses how
   to choose the reporting interval; specifications for RTP congestion
   control algorithms can also provide guidance.)

   If duplicate copies of a particular RTP packet are received, then the
   arrival time of the first copy to arrive MUST be reported.  If any of
   the copies of the duplicated packet are ECN-CE marked, then an ECN-CE
   mark MUST be reported for that packet; otherwise, the ECN mark of the
   first copy to arrive is reported.

   If no packets are received from an SSRC in a reporting interval, a
   report block MAY be sent with begin_seq set to the highest sequence
   number previously received from that SSRC and num_reports set to 0
   (or the report can simply be omitted).  The corresponding Sender
   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.

   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.

4.  Feedback Frequency and Overhead

   There is a trade-off between speed and accuracy of reporting, and the
   overhead of the reports.  [RTCP-Multimedia-Feedback] discusses this
   trade-off, suggests desirable RTCP feedback rates, and provides
   guidance on how to configure, for example, the RTCP bandwidth
   fraction to make appropriate use of the reporting block described in
   this memo.  Specifications for RTP congestion control algorithms can
   also provide guidance.

   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 [RTCP-Multimedia-Feedback].  Analysis
   [feedback-requirements] has also shown that some candidate congestion
   control algorithms can operate with less frequent feedback, using a
   feedback interval range of 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 media bitrate, and the acceptable feedback overhead.

5.  Response to Loss of Feedback Packets

   Like all RTCP packets, RTCP Congestion Control Feedback Packets might
   be lost.  All RTP congestion control algorithms MUST specify how they
   respond to the loss of feedback packets.

   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 sender SHOULD rapidly reduce its sending rate as this
   likely indicates a path failure.  The RTP circuit breaker
   specification [RFC8083] provides further guidance.

6.  SDP Signaling

   A new "ack" feedback parameter, "ccfb", is defined for use with the
   "a=rtcp-fb:" Session Description Protocol (SDP) extension to indicate
   the use of the RTP Congestion Control Feedback Packet format defined
   in Section 3.  The ABNF definition [RFC5234] of this SDP parameter
   extension is:

           rtcp-fb-ack-param = <See Section 4.2 of [RFC4585]>
           rtcp-fb-ack-param =/ ccfb-par
           ccfb-par          = SP "ccfb"

   The payload type used with "ccfb" feedback MUST be the wildcard type
   ("*").  This implies that the congestion control feedback is sent for
   all payload types in use in the session, including any Forward Error
   Correction (FEC) and retransmission payload types.  An example of the
   resulting SDP attribute is:

           a=rtcp-fb:* ack ccfb

   The offer/answer rules for these SDP feedback parameters are
   specified in Section 4.2 of the RTP/AVPF profile [RFC4585].

   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 party SHOULD include
   only one of the offered congestion control feedback mechanisms in its
   answer.  If a subsequent offer containing the same set of congestion
   control feedback mechanisms is received, the generated answer SHOULD
   choose the same congestion control feedback mechanism as in the
   original answer where possible.

   When the SDP BUNDLE extension [RFC8843] is used for multiplexing, the
   "a=rtcp-fb:" attribute has multiplexing category IDENTICAL-PER-PT
   [RFC8859].

7.  Relationship to RFC 6679

   The use of Explicit Congestion Notification (ECN) with RTP is
   described in [RFC6679], which specifies how to negotiate the use of
   ECN with 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:" attribute with the
   "nack" parameter "ecn" to negotiate the use of RTCP ECN Feedback
   Packets.

   The RTCP ECN Feedback Packet is not useful when ECN is used with the
   RTP Congestion Control Feedback Packet defined in this memo, since it
   provides duplicate information.  When congestion control feedback is
   to be used with RTP and ECN, the SDP offer generated MUST 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:" attribute MAY also include the "nack" parameter "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 party SHOULD
   signal support for one, but not both, formats in its SDP answer to
   avoid sending duplicate feedback.

   When using ECN with RTP, the guidelines in Section 7.2 of [RFC6679]
   MUST be followed to initiate the use of ECN in an RTP session.  The
   guidelines in Section 7.3 of [RFC6679] regarding the ongoing use of
   ECN within an RTP session MUST 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 in Section 7.4 of [RFC6679] related
   to detecting failures MUST 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.

8.  Design Rationale

   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.

   Several other RTCP extensions also provide more detailed feedback
   than SR/RR packets:

   TMMBR:  The codec control messages for the RTP/AVPF profile [RFC5104]
      include a Temporary Maximum Media Stream Bit Rate Request (TMMBR)
      message.  This is used to convey a temporary maximum bitrate
      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 do receiver-based congestion control
      where the session bandwidth is high enough to send frequent TMMBR
      messages, especially when used with non-compound RTCP packets
      [RFC5506].  This approach requires the receiver of the RTP packets
      to monitor their reception, determine the level of congestion, and
      recommend a maximum bitrate suitable for current available
      bandwidth on the path; it also assumes that the RTP sender
      can/will respect that 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 for
      sender-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 maximum bitrate.
      Mechanisms that convey the receiver's estimate of the maximum
      available bitrate provide similar feedback.

   RTCP Extended Reports (XRs):  Numerous RTCP XR blocks have been
      defined to report details of packet loss, arrival times [RFC3611],
      delay [RFC6843], and ECN marking [RFC6679].  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 overhead in terms of both bandwidth
      and complexity, due to the need to stack multiple reports.

   Transport-wide Congestion Control:  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 [RTP-Ext-for-CC].  Such an approach increases the size of
      each RTP packet by 8 octets, due to the 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 packets sent, 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 and feedback.

   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 Section 3 provides such a mechanism.

9.  IANA Considerations

   The IANA has registered one new RTP/AVPF Transport-Layer Feedback
   Message in the "FMT Values for RTPFB Payload Types" table [RFC4585]
   as defined in Section 3.1:

   Name:         CCFB
   Long name:    RTP Congestion Control Feedback
   Value:        11
   Reference:    RFC 8888

   The IANA has also registered one new SDP "rtcp-fb" attribute "ack"
   parameter, "ccfb", in the SDP '"ack" and "nack" Attribute Values'
   registry:

   Value name:   ccfb
   Long name:    Congestion Control Feedback
   Usable with:  ack
   Mux:          IDENTICAL-PER-PT
   Reference:    RFC 8888

10.  Security Considerations

   The security considerations of the RTP specification [RFC3550], the
   applicable RTP profile (e.g., [RFC3551], [RFC3711], or [RFC4585]),
   and the RTP congestion control algorithm being used (e.g., [RFC8698],
   [RFC8298], [Google-GCC], or [RFC8382]) apply.

   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, potentially causing both
   denial of service to other traffic sharing the path and excessively
   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 reporting
   losses.  (This needs to be done with care and some awareness of the
   media data being sent, to limit impact on the user experience.)

   An on-path attacker that can modify RTCP Congestion 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 [RFC3711] can be used to
   authenticate RTCP packets to protect against this attack.

   An off-path attacker that can spoof RTCP Congestion 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 with on-path attacks, the
   secure RTCP profile [RFC3711] can be used to authenticate RTCP
   packets to protect against this attack.

11.  References

11.1.  Normative References

   [RFC2119]  Bradner, S., "Key words for use in RFCs to Indicate
              Requirement Levels", BCP 14, RFC 2119,
              DOI 10.17487/RFC2119, March 1997,
              <https://www.rfc-editor.org/info/rfc2119>.

   [RFC3168]  Ramakrishnan, K., Floyd, S., and D. Black, "The Addition
              of Explicit Congestion Notification (ECN) to IP",
              RFC 3168, DOI 10.17487/RFC3168, September 2001,
              <https://www.rfc-editor.org/info/rfc3168>.

   [RFC3550]  Schulzrinne, H., Casner, S., Frederick, R., and V.
              Jacobson, "RTP: A Transport Protocol for Real-Time
              Applications", STD 64, RFC 3550, DOI 10.17487/RFC3550,
              July 2003, <https://www.rfc-editor.org/info/rfc3550>.

   [RFC3551]  Schulzrinne, H. and S. Casner, "RTP Profile for Audio and
              Video Conferences with Minimal Control", STD 65, RFC 3551,
              DOI 10.17487/RFC3551, July 2003,
              <https://www.rfc-editor.org/info/rfc3551>.

   [RFC3711]  Baugher, M., McGrew, D., Naslund, M., Carrara, E., and K.
              Norrman, "The Secure Real-time Transport Protocol (SRTP)",
              RFC 3711, DOI 10.17487/RFC3711, March 2004,
              <https://www.rfc-editor.org/info/rfc3711>.

   [RFC4585]  Ott, J., Wenger, S., Sato, N., Burmeister, C., and J. Rey,
              "Extended RTP Profile for Real-time Transport Control
              Protocol (RTCP)-Based Feedback (RTP/AVPF)", RFC 4585,
              DOI 10.17487/RFC4585, July 2006,
              <https://www.rfc-editor.org/info/rfc4585>.

   [RFC5124]  Ott, J. and E. Carrara, "Extended Secure RTP Profile for
              Real-time Transport Control Protocol (RTCP)-Based Feedback
              (RTP/SAVPF)", RFC 5124, DOI 10.17487/RFC5124, February
              2008, <https://www.rfc-editor.org/info/rfc5124>.

   [RFC5234]  Crocker, D., Ed. and P. Overell, "Augmented BNF for Syntax
              Specifications: ABNF", STD 68, RFC 5234,
              DOI 10.17487/RFC5234, January 2008,
              <https://www.rfc-editor.org/info/rfc5234>.

   [RFC5506]  Johansson, I. and M. Westerlund, "Support for Reduced-Size
              Real-Time Transport Control Protocol (RTCP): Opportunities
              and Consequences", RFC 5506, DOI 10.17487/RFC5506, April
              2009, <https://www.rfc-editor.org/info/rfc5506>.

   [RFC6679]  Westerlund, M., Johansson, I., Perkins, C., O'Hanlon, P.,
              and K. Carlberg, "Explicit Congestion Notification (ECN)
              for RTP over UDP", RFC 6679, DOI 10.17487/RFC6679, August
              2012, <https://www.rfc-editor.org/info/rfc6679>.

   [RFC8083]  Perkins, C. and V. Singh, "Multimedia Congestion Control:
              Circuit Breakers for Unicast RTP Sessions", RFC 8083,
              DOI 10.17487/RFC8083, March 2017,
              <https://www.rfc-editor.org/info/rfc8083>.

   [RFC8174]  Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC
              2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174,
              May 2017, <https://www.rfc-editor.org/info/rfc8174>.

   [RFC8843]  Holmberg, C., Alvestrand, H., and C. Jennings,
              "Negotiating Media Multiplexing Using the Session
              Description Protocol (SDP)", RFC 8843,
              DOI 10.17487/RFC8843, January 2021,
              <https://www.rfc-editor.org/info/rfc8843>.

   [RFC8859]  Nandakumar, S., "A Framework for Session Description
              Protocol (SDP) Attributes When Multiplexing", RFC 8859,
              DOI 10.17487/RFC8859, January 2021,
              <https://www.rfc-editor.org/info/rfc8859>.

11.2.  Informative References

   [feedback-requirements]
              "RMCAT Feedback Requirements", IETF 95, April 2016,
              <https://www.ietf.org/proceedings/95/slides/slides-95-
              rmcat-1.pdf>.

   [Google-GCC]
              Holmer, S., Lundin, H., Carlucci, G., De Cicco, L., and S.
              Mascolo, "A Google Congestion Control Algorithm for Real-
              Time Communication", Work in Progress, Internet-Draft,
              draft-ietf-rmcat-gcc-02, 8 July 2016,
              <https://tools.ietf.org/html/draft-ietf-rmcat-gcc-02>.

   [RFC3611]  Friedman, T., Ed., Caceres, R., Ed., and A. Clark, Ed.,
              "RTP Control Protocol Extended Reports (RTCP XR)",
              RFC 3611, DOI 10.17487/RFC3611, November 2003,
              <https://www.rfc-editor.org/info/rfc3611>.

   [RFC5104]  Wenger, S., Chandra, U., Westerlund, M., and B. Burman,
              "Codec Control Messages in the RTP Audio-Visual Profile
              with Feedback (AVPF)", RFC 5104, DOI 10.17487/RFC5104,
              February 2008, <https://www.rfc-editor.org/info/rfc5104>.

   [RFC6843]  Clark, A., Gross, K., and Q. Wu, "RTP Control Protocol
              (RTCP) Extended Report (XR) Block for Delay Metric
              Reporting", RFC 6843, DOI 10.17487/RFC6843, January 2013,
              <https://www.rfc-editor.org/info/rfc6843>.

   [RFC8298]  Johansson, I. and Z. Sarker, "Self-Clocked Rate Adaptation
              for Multimedia", RFC 8298, DOI 10.17487/RFC8298, December
              2017, <https://www.rfc-editor.org/info/rfc8298>.

   [RFC8382]  Hayes, D., Ed., Ferlin, S., Welzl, M., and K. Hiorth,
              "Shared Bottleneck Detection for Coupled Congestion
              Control for RTP Media", RFC 8382, DOI 10.17487/RFC8382,
              June 2018, <https://www.rfc-editor.org/info/rfc8382>.

   [RFC8698]  Zhu, X., Pan, R., Ramalho, M., and S. Mena, "Network-
              Assisted Dynamic Adaptation (NADA): A Unified Congestion
              Control Scheme for Real-Time Media", RFC 8698,
              DOI 10.17487/RFC8698, February 2020,
              <https://www.rfc-editor.org/info/rfc8698>.

   [RTCP-Multimedia-Feedback]
              Perkins, C., "RTP Control Protocol (RTCP) Feedback for
              Congestion Control in Interactive Multimedia Conferences",
              Work in Progress, Internet-Draft, draft-ietf-rmcat-rtp-cc-
              feedback-05, 4 November 2019,
              <https://tools.ietf.org/html/draft-ietf-rmcat-rtp-cc-
              feedback-05>.

   [RTP-Ext-for-CC]
              Holmer, S., Flodman, M., and E. Sprang, "RTP Extensions
              for Transport-wide Congestion Control", Work in Progress,
              Internet-Draft, draft-holmer-rmcat-transport-wide-cc-
              extensions-01, 19 October 2015,
              <https://tools.ietf.org/html/draft-holmer-rmcat-transport-
              wide-cc-extensions-01>.

Acknowledgements

   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.

Authors' Addresses

   Zaheduzzaman Sarker
   Ericsson AB
   Torshamnsgatan 23
   SE-164 83 Stockholm
   Sweden

   Phone: +46 10 717 37 43
   Email: zaheduzzaman.sarker@ericsson.com


   Colin Perkins
   University of Glasgow
   School of Computing Science
   Glasgow
   G12 8QQ
   United Kingdom

   Email: csp@csperkins.org


   Varun Singh
   CALLSTATS I/O Oy
   Annankatu 31-33 C 42
   FI-00100 Helsinki
   Finland

   Email: varun.singh@iki.fi
   URI:   https://www.callstats.io/


   Michael A. Ramalho
   AcousticComms Consulting
   6310 Watercrest Way Unit 203
   Lakewood Ranch, FL 34202-5122
   United States of America

   Phone: +1 732 832 9723
   Email: mar42@cornell.edu
   URI:   http://ramalho.webhop.info/

AI ELI5

On this page
PROBLEMSender-based congestion control for interactive real-time media needs per-packet loss, timing and ECN information, which standard RTCP Sender and Receiver Reports do not give. Each algorithm had invented its own proprietary feedback message.
MECHANISMRFC 8888 defines an RTCP Transport-Layer Feedback Message (packet type 205, FMT 11) with a 16-bit metric for each RTP packet, giving received flag, ECN mark and arrival time offset, grouped by SSRC.
WHY IT MATTERSDifferent congestion control algorithms can share one feedback format. It is signaled in SDP with the ack parameter ccfb.

§1Why Standard RTCP Reports Are Not Enough

Interactive real-time traffic such as video conferencing typically uses the Real-time Transport Protocol (RTP) over UDP. RTP offers no guarantee of reliability or timely delivery. The RTP Control Protocol (RTCP) lets a receiver send quality metrics back to the sender, and the sender can use them for congestion control.

Without a standard message, designers of congestion control algorithms built proprietary RTCP messages with only the parameters they needed, so the designs were not interoperable. This memo gives a common feedback format for unicast RTP that can be used by NADA (RFC 8698), SCReAM (RFC 8298), Google Congestion Control, and Shared Bottleneck Detection (RFC 8382), and hopefully by future algorithms.

Every team used its own private way of reporting how the packages were doing. This document gives everybody one shared report form.

WHERE THE FEEDBACK SITS (RFC 8888)
  1. Congestion control algorithmFor example NADA, SCReAM or Google Congestion Control
  2. RTCP congestion control feedbackDefined by RFC 8888
  3. RTP and RTCPMedia transport and control reports
  4. UDPUnderlying transport

§2What the Sender Needs to Know

From an analysis of those four algorithms, the RFC concludes that three pieces of information per RTP packet are needed:

  • RTP sequence number, so the sender can tell which packets were received and which were lost. Loss is a congestion signal for many algorithms.
  • Packet arrival time, because delay or delay variation (jitter) is a congestion signal for some algorithms.
  • ECN mark, the 2-bit mark showing not-ECT, ECT(0), ECT(1) or ECN-CE, when ECN is used on the path.

Reports are grouped by SSRC, one report block per received RTP stream. The RFC also warns that host OS interruptions can distort one-way delay estimates, so the sender should record send time at the last opportunity before transmitting and the receiver should record arrival time at the earliest opportunity.

The sender wants three answers for every package: did it arrive, when did it arrive, and was the road marked as crowded?

§3The Feedback Packet Format

The report is an RTCP Transport-Layer Feedback Message with packet type PT=205 and FMT=11. It can be sent in a regular scheduled RTCP report or as RTP/AVPF early feedback, and as early feedback it MAY be sent in a non-compound RTCP packet when the RTP/AVPF or RTP/SAVPF profile is used.

After the 8-octet RTCP header comes one report block per SSRC from which RTP packets have been received, and then a 32-bit Report Timestamp (RTS). Each block holds the SSRC, begin_seq, num_reports, and a 16-bit packet metric block for each sequence number in the range, calculated modulo 65536. If the count of metric blocks is odd, 16 bits of zero padding MUST be added. A block MUST NOT report more than 16384 packets, which is one quarter of the sequence space.

Each metric block has three fields:

  • R (1 bit): 1 if the packet was received. If 0, the other 15 bits are 0 and MUST be ignored.
  • ECN (2 bits): the echoed ECN mark, 00 if not received or ECN is unused.
  • ATO (13 bits): arrival time as an offset before the RTS, in units of 1/1024 second. An ATO of 512 means half a second before the RTS.

A value of 0x1FFE MUST be reported for an over-range measurement (more than 8189/1024 seconds), and 0x1FFF when the measurement is unavailable or the packet arrived after the RTS. The RTS is the middle 32 bits of an NTP format timestamp, from the same clock as the NTP timestamp in Sender Reports.

The receipt lists every package number with a tick for arrived, a color for how crowded the road was, and how long ago it arrived, all measured back from the time the receipt was written.

START OF A REPORT BLOCK AND METRIC BLOCK (RFC 8888)
Report block header and one packet metric block
FieldNameSizeValueDescription
SSRCSSRC of RTP Stream4 bytesThe stream this block reports on.
BEGIN-SEQbegin_seq2 bytesFirst RTP sequence number reported.
NUM-REPORTSnum_reports2 bytesCount of packet metric blocks; may be 0.
RR1 bits1 if the packet was received.
ECNECN2 bitsEchoed ECN mark.
ATOATO13 bitsArrival time offset before the Report Timestamp, in 1/1024 s.

§4Reporting Rules and Frequency

Feedback packets SHOULD include a report block for every active SSRC. Consecutive reports are generally contiguous, but overlapping reports MAY be sent, which is needed when reordering crosses a report boundary. A packet reported as received MUST be reported as received in any later overlapping report, and later reports can update earlier data.

If duplicate copies of an RTP packet arrive, the arrival time of the first copy MUST be reported, and an ECN-CE mark MUST be reported if any copy was marked CE. If nothing arrived from an SSRC, a block MAY be sent with num_reports set to 0, or omitted. A loss report is not a request to retransmit.

If a feedback packet is too big for the path MTU, the sender SHOULD split it. There is a trade-off between speed, accuracy and overhead: feedback once per frame is often an upper bound, and some algorithms can work with an interval of 50-200 ms. Applications need to negotiate an appropriate interval at session setup.

The receipt can list the same package twice if needed, and it always tells the truth about the first copy and about any crowded-road marks. Sending receipts too often costs more than it helps.

§5When Feedback Packets Are Lost

RTCP packets have no sequence number, so a lost feedback packet has to be inferred from the time since the last one. Every RTP congestion control algorithm MUST specify how it reacts to lost feedback.

If a single feedback packet is lost, an appropriate response is to assume congestion stayed roughly the same. If several consecutive packets are lost, the media sender SHOULD rapidly reduce its sending rate, since this likely means a path failure. RFC 8083 on RTP circuit breakers gives further guidance.

If one receipt goes missing, keep driving at the same speed. If many go missing in a row, slow down fast, because something is probably broken on the road.

§6Signaling with SDP and ECN

A new ack parameter, ccfb, is defined for the a=rtcp-fb: SDP attribute. The payload type MUST be the wildcard type (an asterisk), so feedback covers all payload types, including FEC and retransmission. The example is a=rtcp-fb:* ack ccfb. If an offer lists several alternative congestion control feedback mechanisms, the answerer SHOULD pick only one.

The older RTCP ECN Feedback Packet of RFC 6679 duplicates the ECN information here. To use ECN, the offer MUST include a=ecn-capable-rtp: and ack ccfb, and MAY also include nack ecn. If both are offered, the answerer SHOULD signal one, not both. The RFC 6679 guidelines for starting, using and detecting failures of ECN MUST be followed, taking the information from the new packets.

Before the call starts, both sides agree in the setup message that they will use this receipt form, and they pick only one kind of crowded-road report so nothing is sent twice.

§7Design Rationale

SR and RR reports carry jitter, fractional loss and cumulative loss, but experience shows that is not enough for effective congestion control, which needs per-packet detail. The RFC compares alternatives:

  • TMMBR lets a receiver request a maximum bitrate. That is receiver-based, the opposite of the sender-based approach here, though it can complement it.
  • RTCP Extended Reports can be combined to carry loss, arrival time and ECN, but with high bandwidth and complexity overhead.
  • Transport-wide congestion control adds an RTP header extension with one sequence number across streams. It costs 8 octets per RTP packet and makes per-SSRC adaptation harder, so the RFC chose per-SSRC feedback.

The old report was a summary, like a final score. Other fixes were either backwards, too heavy, or hid details, so the authors made a fresh per-package receipt.

§8Security and Attacks

The security considerations of RTP, the RTP profile in use, and the congestion control algorithm apply. A receiver that sends inaccurate reports could trick the sender into sending faster than the path supports, causing congestion and possibly denial of service to other traffic. A sender can deliberately drop a packet, carefully, to check that the receiver reports the loss correctly.

An on-path attacker could alter reports to push the rate too high or too low. An off-path attacker would need to guess the SSRC and sequence number as well as the destination transport address. The secure RTCP profile in RFC 3711 can authenticate RTCP packets against both attacks.

If someone lies on the receipt, the sender may drive too fast or too slow. Signing the receipts makes lying much harder.

§9References