<?xmlversion="1.0" encoding="US-ASCII"?>version='1.0' encoding='utf-8'?> <!DOCTYPE rfc SYSTEM"rfc2629.dtd"> <?rfc toc="yes" ?> <?rfc strict="yes" ?> <?rfc compact="yes" ?> <?rfc sortrefs="yes" ?> <?rfc symrefs="yes" ?>"rfc2629-xhtml.ent"> <rfc xmlns:xi="http://www.w3.org/2001/XInclude" category="std" docName="draft-ietf-avtcore-rtp-multi-stream-optimisation-12" number="8861" ipr="trust200902"updates="">updates="" obsoletes="" submissionType="IETF" consensus="true" xml:lang="en" tocInclude="true" sortRefs="true" symRefs="true" version="3"> <!-- xml2rfc v2v3 conversion 2.35.0 --> <front> <title abbrev="Grouping RTCP Reception Statistics">Sending Multiple RTP Streams in a Single RTP Session: GroupingRTCPRTP Control Protocol (RTCP) Reception Statistics and Other Feedback</title> <seriesInfo name="RFC" value="8861"/> <author fullname="Jonathan Lennox" initials="J." surname="Lennox"> <organizationabbrev="Vidyo">Vidyo, Inc.</organization>abbrev="8x8 / Jitsi">8x8, Inc. / Jitsi</organization> <address> <postal><street>433 Hackensack Avenue</street> <street>Seventh Floor</street> <city>Hackensack</city><city>Jersey City</city> <region>NJ</region><code>07601</code> <country>US</country><code>07302</code> <country>United States of America</country> </postal><email>jonathan@vidyo.com</email><email>jonathan.lennox@8x8.com</email> </address> </author> <author fullname="Magnus Westerlund" initials="M." surname="Westerlund"> <organization>Ericsson</organization> <address> <postal><street>Farogatan 2</street> <city>SE-164 80 Kista</city><street>Torshamnsgatan 23</street> <city>Kista</city> <code>164 80</code> <country>Sweden</country> </postal><phone>+46 10 714 82 87</phone><email>magnus.westerlund@ericsson.com</email> </address> </author> <author fullname="Qin Wu" initials="Q." surname="Wu"> <organization>Huawei</organization> <address> <postal> <street>101 Software Avenue, Yuhua District</street> <city>Nanjing, Jiangsu 210012</city> <country>China</country> </postal> <email>bill.wu@huawei.com</email> </address> </author> <author fullname="Colin Perkins" 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><date/> <workgroup>AVTCORE WG</workgroup><date month="January" year="2021"/> <keyword>RGRP</keyword> <keyword>SDES</keyword> <keyword>XR</keyword> <keyword>Reporting</keyword> <keyword>Group</keyword> <abstract> <t>RTP allows multiple RTP streams to be sent in a singlesession,session but requires eachSynchronisationSynchronization Source (SSRC) to sendRTCPRTP Control Protocol (RTCP) reception quality reports for every other SSRC visible in the session. This causes the number of RTCP reception reports to grow with the number of SSRCs, rather than the number of endpoints. In manycasescases, most of these RTCP reception reports are unnecessary, since all SSRCs of an endpoint are normally co-located and see the same reception quality. This memo defines a Reporting Group extension to RTCP to reduce the reporting overhead in such scenarios.</t> </abstract> </front> <middle> <section anchor="introduction"title="Introduction">numbered="true" toc="default"> <name>Introduction</name> <t>The Real-time Transport Protocol (RTP) <xreftarget="RFC3550"/>target="RFC3550" format="default"/> is a protocol for group communication, supporting multiparty multimedia sessions. A single RTP session can support multiple participants sending data atonce,once and can also support participants sending multiple simultaneous RTP streams. Examples of the latter might include a participant with multiple cameras who chooses to send multiple views of a scene, or a participant that sends audio and video flows multiplexed in a single RTP session. Rules for handling RTP sessions containing multiple RTP streams are described in <xreftarget="RFC3550"/>target="RFC3550" format="default"/>, with some clarifications in <xreftarget="I-D.ietf-avtcore-rtp-multi-stream"/>.</t>target="RFC8108" format="default"/>.</t> <t>An RTP endpoint will have one or moresynchronisation sourcesSynchronization Sources (SSRCs). It will have at least one RTPStream,stream, and thus at least one SSRC, for each media source it sends, and it might use multiple SSRCs per media source when using <xreftarget="RFC6190">mediatarget="RFC6190" format="default">media scalability features</xref>, forward error correction, <xreftarget="RFC4588">RTPtarget="RFC4588" format="default">RTP retransmission</xref>, or similar mechanisms. An endpoint that is not sending any RTPstream,streams will have at least one SSRC to use for reporting and any feedback messages. Each SSRC has to sendRTCP sender reportsRTP Control Protocol (RTCP) Sender Reports (SRs) corresponding to the RTP packets itsends,sends andreceiver reportsReceiver Reports (RRs) for traffic it receives. (SRs and RRs are described in <xref target="RFC3550"/>.) That is, every SSRC will send RTCP packets to report on every other SSRC. This rule is simple, but it can be quite inefficient for endpoints that send large numbers of RTP streams in a single RTP session. Consider a session comprising ten participants, each sending three media sources, each media source associated withtheirits own RTP stream. There will be 30 SSRCs in such an RTP session, and each of those 30 SSRCs will send an RTCPSender Report/Receiver ReportSR/RR packet (containing several report blocks) per reporting interval as each SSRC reports on all the others. However, the three SSRCs comprising each participant are commonly co-located such that they see identical reception quality. If there was a way to indicate that several SSRCs areco-located,co-located and see the same reception quality, then two-thirds of those RTCP reports could be suppressed. This would allow the remaining RTCP reports to be sent more often, while keeping within the same RTCP bandwidth fraction.</t> <t>This memo defines such an RTCPextension,extension: RTCP Reporting Groups. This extension is used to indicate the SSRCs that originate from the sameendpoint,endpoint and therefore have identical reception quality, hence allowing the endpoints to suppress unnecessary RTCP reception quality reports.</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", "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 in BCP 14 <xreftarget="RFC2119"/>.</t>target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they appear in all capitals, as shown here.</t> </section> <section anchor="reportgroups"title="RTCPnumbered="true" toc="default"> <name>RTCP ReportingGroups">Groups</name> <t>An RTCP Reporting Group is a set ofsynchronization sources (SSRCs)SSRCs that areco-locatedco&nbhy;located at a single endpoint (which could be an end host or a middlebox) in an RTP session. Since they are co-located, every SSRC in the RTCPreporting groupReporting Group will have an identical view of the networkconditions,conditions and will see the same lost packets, jitter, etc. This allows a single representative to send RTCP reception quality reports on behalf of the rest of thereporting group,Reporting Group, reducing the number of RTCP packets that need to be sent without loss of information.</t> <sectiontitle="Semanticsnumbered="true" toc="default"> <name>Semantics andBehaviourBehavior of RTCP ReportingGroups">Groups</name> <t>A group of co-located SSRCs that see identical network conditions can form an RTCPreporting group.Reporting Group. Ifreporting groupsReporting Groups are in use, an RTP endpoint with multiple SSRCsMAY<bcp14>MAY</bcp14> put those SSRCs into areporting groupReporting Group if their view of the network isidentical;identical, i.e., if they report on traffic received at the same interface of an RTP endpoint. SSRCs with different views of the networkMUST NOT<bcp14>MUST NOT</bcp14> be put into the samereporting group.</t>Reporting Group.</t> <t>An endpoint that has combined its SSRCs into an RTCPreporting groupReporting Group will choose one (or a subset) of those SSRCs to act as "reporting source(s)" for that RTCPreporting group.Reporting Group. A reporting source will send RTCP SR/RR reception quality reports on behalf of the other members of the RTCPreporting group.Reporting Group. A reporting sourceMUST<bcp14>MUST</bcp14> suppress the RTCP SR/RR reports that relate to other members of thereporting group,Reporting Group and only report on remote SSRCs. The other members(non reporting(non-reporting sources) of the RTCPreporting groupReporting Group will suppress their RTCP reception qualityreports,reports and will instead send an RTCPRGRSReporting Group Reporting Sources (RGRS) packet (see <xreftarget="sec-rgrs"/>)target="sec-rgrs" format="default"/>) to indicate that they are part of an RTCPreporting groupReporting Group and give the SSRCs of the reporting sources.</t> <t>If there are large numbers of remote SSRCs in the RTP session, then the reception quality reports generated by the reporting source might grow too large to fit into a single compound RTCP packet, forcing the reporting source to use a round-robin policy to determine what remote SSRCs it includes in each compound RTCP packet, and so reducing the frequency of reports on each SSRC. To avoid this, in sessions with large numbers of remote SSRCs, an RTCPreporting group MAYReporting Group <bcp14>MAY</bcp14> use more than one reporting source. If several SSRCs are acting as reporting sources for an RTCPreporting group,Reporting Group, then each reporting sourceMUST<bcp14>MUST</bcp14> have non-overlapping sets of remote SSRCs it reports on.</t> <t>An endpointMUST NOT<bcp14>MUST NOT</bcp14> create an RTCPreporting groupReporting Group that comprises only a single local SSRC (i.e., an RTCPreporting groupReporting Group where the reporting source is the only member of the group), unless it is anticipated that the group might have additional SSRCs added to it in the future.</t> <t>If a reporting source leaves the RTP session (i.e., if it sendsaan RTCP BYEpacket,packet or it leaves the session without sending a BYEunderaccording to the rules of <xreftarget="RFC3550"/> section 6.3.7),target="RFC3550" sectionFormat="comma" section="6.3.7"/>), the remaining members of the RTCPreporting group MUST either (a) haveReporting Group <bcp14>MUST</bcp14> (a) have another reportingsource,source -- if oneexists,exists -- report on the remote SSRCs that the leaving SSRC had reported on,(b) choose(b) choose a new reporting source, or(c) disband(c) disband the RTCPreporting groupReporting Group and begin sending reception quality reportsfollowingper <xreftarget="RFC3550"/>target="RFC3550" format="default"/> and <xreftarget="I-D.ietf-avtcore-rtp-multi-stream"/>.</t>target="RFC8108" format="default"/>.</t> <t>The RTCP timing rules assign different bandwidth fractions to senders and receivers. This lets senders transmit RTCP reception quality reports more often than receivers. If a reporting source in an RTCPreporting groupReporting Group is areceiver,receiver but one or more non-reporting SSRCs in the RTCPreporting groupReporting Group are senders, then the endpointMAY<bcp14>MAY</bcp14> treat the reporting source as a sender for the purpose of RTCP bandwidth allocation, increasing its RTCP bandwidth allocation, provided it also treats one of the senders as if it were a receiver and makes the corresponding reduction in RTCP bandwidth for that SSRC. However, the application needs to consider the impact on the frequency of transmitting of the synchronization information included in RTCPSender Reports.</t>SRs.</t> </section> <sectiontitle="Identifyingnumbered="true" toc="default"> <name>Identifying Members of an RTCP ReportingGroup">Group</name> <t>When RTCP Reporting Groups are in use, the other SSRCs in the RTP session need to be able to identify which SSRCs are members of an RTCPreporting group.Reporting Group. Two RTCP extensions are defined to support this: the RTCPRGRP SDESReporting Group (RGRP) Source Description (SDES) item is used by the reporting source(s) to identify an RTCPreporting group,Reporting Group, and the RTCP RGRS packet is used by other members of an RTCPreporting groupReporting Group to identify the reporting source(s).</t> <section anchor="sec-rgrp"title="Definitionnumbered="true" toc="default"> <name>Definition and Use of the RTCP RGRP SDESItem">Item</name> <t>This document defines a new RTCP RGRP SDES item to identify an RTCPreporting group.Reporting Group. The motivation for giving areporting groupReporting Group anidentifyidentifier is to ensure thatthe(1) the RTCPreporting groupReporting Group and its member SSRCs can be correctly associated when there are multiple reportingsources,sources andto ensure that a(2) a reporting SSRC can be associated with the correctreporting groupReporting Group if an SSRC collision occurs.</t> <t>This document defines the RTCPSource Description (SDES)RGRP SDES item. The RTCPSDESRGRP SDES itemMUST<bcp14>MUST</bcp14> be sent by the reporting sources in areporting group,Reporting Group andMUST NOT<bcp14>MUST NOT</bcp14> be sent by other members of thereporting groupReporting Group or by SSRCs that are not members of any RTCPreporting group.Reporting Group. Specifically, every reporting source in an RTCPreporting group MUSTReporting Group <bcp14>MUST</bcp14> include an RTCP SDES packet containing an RGRP item in every compound RTCP packet in which it sends an RR or SR packet (i.e., in every RTCP packet it sends, unless <xreftarget="RFC5506">Reduced-Sizetarget="RFC5506" format="default">Reduced-Size RTCP</xref> is in use).</t> <t>Syntactically, the format of the RTCPSDESRGRP SDES item is identical to that of the <xreftarget="RFC7022">RTCPtarget="RFC7022" format="default">RTCP SDES CNAME item</xref>, except that the SDES item type fieldMUST<bcp14>MUST</bcp14> have valueRGRP=(TBA)RGRP=11 instead of CNAME=1. The value of the RTCPSDESRGRP SDES itemMUST<bcp14>MUST</bcp14> be chosen with the same concerns about global uniqueness and the same privacy considerations as the RTCP SDES CNAME. The value of the RTCPSDESRGRP SDES itemMUST<bcp14>MUST</bcp14> be stable throughout the lifetime of thereporting group,Reporting Group, even if some or all of the reporting sources change their SSRC due tocollisions,collisions or if the set of reporting sources changes.</t><t><list style="empty"> <t>Note to RFC Editor: please replace (TBA) in the above paragraph with the RTCP SDES item type number assigned to the RGRP item, then delete this note.</t> </list></t><t>An RTP mixer or translator that forwards RTCP SR or RR packets from members of areporting group MUSTReporting Group <bcp14>MUST</bcp14> forward the corresponding RTCPSDESRGRP SDES items as well, even if it otherwise strips SDES items other than the CNAME item.</t> </section> <section anchor="sec-rgrs"title="Definitionnumbered="true" toc="default"> <name>Definition and Use of the RTCP RGRSPacket">Packet</name> <t>A new RTCP packet type is defined to allow the members of an RTCPreporting groupReporting Group to identify the reporting sources for that group. This allows participants in an RTP session to distinguish an SSRC that is sending empty RTCP reception reports because it is a member of an RTCPreporting group,Reporting Group from an SSRC that is sending empty RTCP reception reports because it is not receiving any traffic. It also explicitly identifies the reporting sources, allowing other members of the RTP session toknow(1) know which SSRCs are acting as the reporting sources for an RTCPreporting group,Reporting Group andallowing them to detect(2) detect if RTCP packets from any of the reporting sources are being lost.</t> <t>The format of the RTCP RGRS packet is defined below. It comprises the fixed RTCP header that indicates the packet type and length, the SSRC of the packet sender, and a list of reporting sources for the RTCPreporting groupReporting Group of which the packet sender is a member.</t><figure> <artwork><![CDATA[<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| SC |PT=RGRS(TBA)PT=RGRS(212) | length | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | SSRC of packet sender | +=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+ : List of SSRC(s) for the Reporting Source(s) : : ... : +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+]]></artwork></figure><t>The fields in the RTCP RGRS packet have the followingdefinition: <list style="hanging"> <t hangText="version (V):">2 bitsdefinitions: </t> <dl newline="false" spacing="normal"> <dt>version (V):</dt> <dd>2-bit unsigned integer. This field identifies the RTP version. The current RTP version is2.</t> <t hangText="padding (P):">12.</dd> <dt>padding (P):</dt> <dd>1 bit. If set, the padding bit indicates that the RTCP packet contains additional padding octets at the end that are not part of the control information but are included in the length field. See <xreftarget="RFC3550"/>.</t> <t hangText="Sourcetarget="RFC3550" format="default"/>.</dd> <dt>Source Count(SC):">5 bits(SC):</dt> <dd>5-bit unsigned integer. Indicates the number of reporting source SSRCs that are included in this RTCP packet. As the RTCP RGRS packetMUST NOT<bcp14>MUST NOT</bcp14> benotsent by reporting sources, all the SSRCs in the list of reporting sources will be different from the SSRC of the packet sender. Every RTCP RGRS packetMUST<bcp14>MUST</bcp14> contain at least one reporting sourceSSRC.</t> <t hangText="PayloadSSRC.</dd> <dt>Payload type(PT):">8 bits(PT):</dt> <dd> <t>8-bit unsigned integer. The RTCP packet type number that identifies the packet as being an RTCP RGRS packet. The RGRS RTCP packet has the value[TBA]. <list style="empty"> <t>Note to RFC Editor: please replace [TBA] here, and in the packet format diagram above, with the RTCP packet type that IANA assigns to the RTCP RGRS packet.</t> </list></t> <t hangText="Length:">16 bits212. </t> </dd> <dt>Length:</dt> <dd>16-bit unsigned integer. The length of this packet in 32-bit words minus one, including the header and any padding. This is in line with the definition of the length field used in RTCPsenderSRs andreceiver reportsRRs <xreftarget="RFC3550"/>.target="RFC3550" format="default"/>. Since all RTCP RGRS packets include at least one reporting source SSRC, the length will always be 2 orgreater.</t> <t hangText="SSRCgreater.</dd> <dt>SSRC of packetsender:">32sender:</dt> <dd>32 bits. The SSRC of the sender of thispacket.</t> <t hangText="Listpacket.</dd> <dt>List of SSRCs for the ReportingSource(s):">ASource(s):</dt> <dd>A variablelength sizenumber (as indicated by the SC header field) ofthe 32 bit32&nbhy;bit SSRC values of the reporting sources for the RTCP Reporting Group of which the packet sender is amember.</t> </list></t>member.</dd> </dl> <t>Every source that belongs to an RTCPreporting groupReporting Group but is not a reporting sourceMUST<bcp14>MUST</bcp14> include an RTCP RGRS packet in every compound RTCP packet in which it sends an RR or SR packet (i.e., in every RTCP packet it sends, unless <xreftarget="RFC5506">target="RFC5506" format="default"> Reduced-Size RTCP</xref> is in use). Each RTCP RGRS packetMUST<bcp14>MUST</bcp14> contain the SSRC identifier of at least one reporting source. If there are more reporting sources in an RTCPreporting groupReporting Group than can fit into an RTCP RGRS packet, the members of thatreporting group MUSTReporting Group <bcp14>MUST</bcp14> send the SSRCs of the reporting sources in a round-robin fashion in consecutive RTCP RGRS packets, such that all the SSRCs of the reporting sources are included over the course of several RTCP reporting intervals.</t> <t>An RTP mixer or translator that forwards RTCP SR or RR packets from members of areporting group MUSTReporting Group <bcp14>MUST</bcp14> also forward the corresponding RGRS RTCP packets. If the RTP mixer or translator rewrites SSRC values of the packets it forwards, itMUST<bcp14>MUST</bcp14> make the corresponding changes to the RTCP RGRS packets.</t> </section> </section> <sectiontitle="Interactionsnumbered="true" toc="default"> <name>Interactions with the RTP/AVPF FeedbackProfile"> <t>UseProfile</name> <t>The use of the RTP/AVPF Feedback Profile <xreftarget="RFC4585"/>target="RFC4585" format="default"/> allows SSRCs to send rapid RTCP feedback requests and codec control messages. If the use of the RTP/AVPF profile has been negotiated in an RTP session, members of an RTCPreporting groupReporting Group can send rapid RTCP feedback and codec control messagesfollowingper <xreftarget="RFC4585"/> andtarget="RFC5104" format="default"/>, per <xreftarget="RFC5104"/>,target="RFC4585" format="default"/> as updated bySection 5.4 of<xreftarget="I-D.ietf-avtcore-rtp-multi-stream"/>,target="RFC8108" sectionFormat="of" section="5.4"/>, and by the following considerations.</t> <t>The members of an RTCPreporting groupReporting Group will all see identical network conditions. Accordingly, one might therefore think that it doesn't matter which SSRC in thereporting groupReporting Group sends the RTP/AVPF feedback or codec control messages. There might be, however, cases where the sender of the feedback/codec control message has semantic importance, or when only a subset of the members of an RTCPreporting groupReporting Group might want to send RTP/AVPF feedback or a codec control message in response to a particular event. For example, an RTP video sender might choose to treat packet loss feedback received from SSRCs known to be audio receivers with less urgency than feedback that it receives from video receivers when deciding what packets to retransmit, and a multimedia receiver usingreporting groupsReporting Groups might want to choose the outgoing SSRC for feedback packets to reflect this.</t> <t>Each member of an RTCPreporting group SHOULDReporting Group <bcp14>SHOULD</bcp14> therefore send RTP/AVPF feedback/codec control messages independently of the other members of thereporting group,Reporting Group, to respect the semantic meaning of the message sender. The suppression rules of <xreftarget="RFC4585"/>target="RFC4585" format="default"/> will ensure that only a single copy of each feedback packet is (typically) generated, even if several members of areporting groupReporting Group send the same feedback. When an endpoint knows that several members of its RTCPreporting groupReporting Group will be sending identicalfeedback,feedback and that the sender of the feedback is not semantically important,thenthat endpointMAY<bcp14>MAY</bcp14> choose to send all its feedback from the reporting source and deterministically suppress feedback packets generated by the other sources in thereporting group.</t>Reporting Group.</t> <t>It is important to note that the RTP/AVPF timing rules operate on a per-SSRC basis. Using a single reporting source to send all feedback for areporting groupReporting Group will hence limit the amount of feedback that can be sent to that which can be sent by one SSRC. If this limit is a problem, then thereporting groupReporting Group can allow each of its members to send its own feedback, using its own SSRC.</t> <t>If the RTP/AVPF feedback messages or codec control requests are sent as compound RTCP packets, then those compound RTCP packetsMUST<bcp14>MUST</bcp14> include either an RTCP RGRS packet or an RTCPSDESRGRP SDES item, depending on whether they are sent by the reporting source or anon-reportingnon&nbhy;reporting source in the RTCPreporting groupReporting Group, respectively. The contents ofnon-compoundnoncompound RTCP feedback or codec control messages are not affected by the use of RTCPreporting groups.</t>Reporting Groups.</t> </section> <sectiontitle="Interactionsnumbered="true" toc="default"> <name>Interactions with RTCP Extended Report (XR)Packets">Packets</name> <t>When using RTCP ExtendedReportsReport (XR) packets <xreftarget="RFC3611"/>target="RFC3611" format="default"/> with RTCPreporting groups,Reporting Groups, it isRECOMMENDED<bcp14>RECOMMENDED</bcp14> that the reporting sourceisbe used to send the RTCP XR packets. If multiple reporting sources are in use, the reporting source that sends the SR/RR packets that relate to a particular remote SSRCSHOULD<bcp14>SHOULD</bcp14> send the RTCP XR reports about that SSRC. This is motivated as one commonly combine the RTCP XR metrics with the regular report block to more fully understand the situation. Receiving these blocks in different compound packets reduces theirvaluevalue, as the measuring intervals are not synchronized in those cases.</t> <t>Some RTCP XR report blocks are specific to particular types ofmedia,media and might be relevant to only some members of areporting group.Reporting Group. For example, it would make no sense for an SSRC that is receiving video to send aVoIPVoice over IP (VoIP) metric RTCP XR report block. Suchmedia specificmedia-specific RTCP XR report blocksMUST<bcp14>MUST</bcp14> be sent by the SSRC to which they arerelevant,relevant andMUST NOT<bcp14>MUST NOT</bcp14> be included in the common report sent by the reporting source. This might mean that some SSRCs send RTCP XR packets in compound RTCP packets that contain an empty RTCP SR/RRpacket,packet and that the time period covered by the RTCP XR packet is differenttofrom that covered by the RTCP SR/RR packet. If it is important that the RTCP XR packet and RTCP SR/RR packet cover the same time period, then that sourceSHOULD<bcp14>SHOULD</bcp14> be removed from the RTCPreporting group,Reporting Group, andsendstandard RTCP packets be sent instead.</t> </section> <sectiontitle="Middlebox Considerations">numbered="true" toc="default"> <name>Middlebox Considerations</name> <t>Many different types ofmiddleboxmiddleboxes are used with RTP. RTCPreporting groupsReporting Groups are potentially relevant to those types of RTPmiddleboxmiddleboxes that have their own SSRCs and generate RTCP reports for the traffic they receive. RTP middleboxes that do not have their ownSSRC,SSRC and thatdon'tdo not send RTCP reports on the traffic theyreceive,receive cannot use the RTCPreporting groupsReporting Group extension, since they generate no RTCP reports to that group.</t> <t>An RTP middlebox that has several SSRCs of its own can use the RTCPreporting groupsReporting Group extension to group the RTCP reports it generates. This can occur, for example, if a middlebox is acting as an RTP mixer for both audio and video flows that are multiplexed onto a single RTP session, where the middlebox has one SSRC for the audio mixer and one for the video mixer part, and when the middlebox wants to avoidcross reportingcross-reporting between audio and video.</t> <t>A middlebox cannot use the RTCPreporting groupsReporting Group extension to group RTCP packets from the SSRCs that it is forwarding. It can, however, group the RTCP packets from the SSRCs it is forwarding into compound RTCPpacketspackets, following the rules inSection 6.1 of<xreftarget="RFC3550"/>target="RFC3550" sectionFormat="of" section="6.1"/> andSection 5.3 of<xreftarget="I-D.ietf-avtcore-rtp-multi-stream"/>.target="RFC8108" sectionFormat="of" section="5.3"/>. If the middlebox is using RTCPreporting groupsReporting Groups for its own SSRCs, itMAY<bcp14>MAY</bcp14> include RTCP packets from the SSRCs that it is forwarding as part of the compound RTCP packets its reporting source generates.</t> <t>A middlebox that forwards RTCP SR or RR packets sent by members of areporting group MUSTReporting Group <bcp14>MUST</bcp14> forward the corresponding RTCPSDESRGRP SDES items, as described in <xreftarget="sec-rgrp"/>.target="sec-rgrp" format="default"/>. A middlebox that forwards RTCP SR or RR packets sent bymembermembers of areporting group MUSTReporting Group <bcp14>MUST</bcp14> also forward the corresponding RTCP RGRS packets, as described in <xreftarget="sec-rgrs"/>.target="sec-rgrs" format="default"/>. Failure to forward these packets can cause compatibility problems, as described in <xreftarget="compat"/>.</t>target="compat" format="default"/>.</t> <t>If a middlebox rewrites SSRC values in the RTP and RTCP packets that it is forwarding, then itMUST<bcp14>MUST</bcp14> make the corresponding changes in RTCP SDES packets containing RGRP items and in RTCP RGRS packets, to allow them to be associated with the rewritten SSRCs.</t> </section> <section anchor="sdp"title="SDP Signallingnumbered="true" toc="default"> <name>SDP Signaling for ReportingGroups">Groups</name> <t>This document defines the "a=rtcp-rgrp" <xreftarget="RFC4566">Sessiontarget="RFC4566" format="default">Session Description Protocol (SDP)</xref> attribute to indicate if the session participant is capable of supporting RTCP Reporting Groups for applications that use SDP for configuration of RTP sessions. It is a propertyattribute,attribute and hence takes no value. The <xreftarget="I-D.ietf-mmusic-sdp-mux-attributes">multiplexingtarget="RFC8859" format="default">multiplexing category</xref> is IDENTICAL, as the functionality appliesonat the RTP session level. A participant that proposes the use of RTCP Reporting GroupsSHALL<bcp14>SHALL</bcp14> itself support the reception of RTCP Reporting Groups. The formal definition of this attributeis:</t> <figure> <artwork><![CDATA[ Name: rtcp-rgrp Value: Usage Level: session, media Charset Dependent: no Example: a=rtcp-rgrp ]]></artwork> </figure>is as follows:</t> <ul empty="true"><li> <dl spacing="compact"> <dt>Name:</dt><dd>rtcp-rgrp</dd> <dt>Value:</dt><dd>None</dd> <dt>Usage Level:</dt><dd>session, media</dd> <dt>Charset Dependent:</dt><dd>no</dd> <dt>Example:</dt><dd>a=rtcp-rgrp</dd> </dl> </li> </ul> <t>When using SDP Offer/Answer <xreftarget="RFC3264"/>,target="RFC3264" format="default"/>, the following procedures are to be used:<list style="symbols"> <t>Generating</t> <dl newline="true" spacing="normal"> <dt>Generating the initial SDPoffer: Ifoffer:</dt> <dd>If the offerer supports the RTCPreporting group extensions,Reporting Group extensions and is willing to accept RTCP packets containing those extensions, then itMUST<bcp14>MUST</bcp14> include an "a=rtcp-rgrp" attribute in the initial offer. If the offerer does not support RTCPreporting groups extensions,Reporting Group extensions or is not willing to accept RTCP packets containing those extensions, then itMUST NOT<bcp14>MUST NOT</bcp14> include the "a=rtcp-rgrp" attribute in theoffer.</t> <t>Generatingoffer.</dd> <dt>Generating the SDPanswer: Ifanswer:</dt> <dd>If the SDP offer contains an"a=rtcp-rgrp""a=rtcp&nbhy;rgrp" attribute, and if the answerer supports RTCPreporting groupsReporting Groups and is willing to receive RTCP packets using the RTCPreporting groupsReporting Group extensions, then the answererMAY<bcp14>MAY</bcp14> include an "a=rtcp-rgrp" attribute in the answer andMAY<bcp14>MAY</bcp14> send RTCP packets containing the RTCPreporting groupsReporting Group extensions. If the offer does not contain an "a=rtcp-rgrp" attribute, or if the offer does contain such an attribute but the answerer does not wish to accept RTCP packets using the RTCPreporting groupsReporting Group extensions, then the answerMUST NOT<bcp14>MUST NOT</bcp14> include an "a=rtcp-rgrp"attribute.</t> <t>Offerer Processingattribute.</dd> <dt>Offerer processing of the SDPAnswer: Ifanswer:</dt> <dd>If the SDP answer contains an "a=rtcp-rgrp"attribute,attribute and the corresponding offer also contained an "a=rtcp-rgrp" attribute, then the offererMUST<bcp14>MUST</bcp14> be prepared to accept and process RTCP packets that contain thereporting groups extension,Reporting Group extensions andMAY<bcp14>MAY</bcp14> send RTCP packets that contain thereporting groups extension.Reporting Group extensions. If the SDP answer contains an "a=rtcp-rgrp"attribute,attribute but the corresponding offer did not contain the"a=rtcp-rgrp""a=rtcp&nbhy;rgrp" attribute, then the offererMUST<bcp14>MUST</bcp14> reject the call. If the SDP answer does not contain an "a=rtcp-rgrp" attribute, then the offererMUST NOT<bcp14>MUST NOT</bcp14> send packets containing the RTCPreporting groups extensions,Reporting Group extensions and does not need to processpacketpackets containing the RTCPreporting groups extensions.</t> </list></t>Reporting Group extensions.</dd> </dl> <t>In declarative usage of SDP, such as the <xreftarget="RFC2326">Real Timetarget="RFC7826" format="default">Real-Time Streaming Protocol (RTSP)</xref> and the <xreftarget="RFC2974">Sessiontarget="RFC2974" format="default">Session Announcement Protocol (SAP)</xref>, the presence of the attribute indicates that the session participantMAY<bcp14>MAY</bcp14> use RTCP Reporting Groups in its RTCP transmissions. An implementation that doesn't explicitly support RTCP Reporting GroupsMAY<bcp14>MAY</bcp14> joinaan RTP session as long as it has been verified that the implementation doesn't suffer from the problems discussed in <xreftarget="compat"/>.</t>target="compat" format="default"/>.</t> </section> </section> <sectiontitle="Propertiesnumbered="true" toc="default"> <name>Properties of RTCP ReportingGroups">Groups</name> <t>This section provides additional information on what the resulting properties arewith(i.e., resulting effects or impacts) as related to the design specified in <xreftarget="reportgroups"/>.target="reportgroups" format="default"/>. The content of this section is non-normative.</t> <section anchor="reportgroups-bw"title="Bandwidthnumbered="true" toc="default"> <name>Bandwidth Benefits of RTCP ReportingGroups">Groups</name> <t>To understand the benefits of RTCPreporting groups,Reporting Groups, consider a scenario in which the two endpoints in a session each have a hundred sources, of which eight each are sending within any given reporting interval.</t> <t>For ease of analysis, we can make the simplifying approximation that the duration of the RTCP reporting interval is equal to the total size of the RTCP packets sent during an RTCP interval, divided by the RTCP bandwidth. (This will be approximately true in scenarios where the bandwidth is not so high that the minimum RTCP interval is reached.)ForTo furthersimplification,simplify, we can assume that RTCP senders are following the recommendations regardingCompoundcompound RTCPPacketspackets in <xreftarget="I-D.ietf-avtcore-rtp-multi-stream"/>;target="RFC8108" format="default"/>; thus, the per-packet transport-layer overhead will be small relative to the RTCP data. Thus, only the actual RTCP data itself need be considered.</t> <t>In a report interval in this scenario, there will, as a baseline, be 200 SDES packets, 184 RR packets, and 16 SR packets. This amounts to approximately 6.5kBKB of RTCP packets per report interval, assuming 16-byte CNAMEs and no other SDES information.</t> <t>Using the original<xref target="RFC3550"/> everyone-reports-on-every-sender"everyone reports on every sender" feedbackrules,rules <xref target="RFC3550" format="default"/>, each of the 184 receivers will send 16 report blocks, and each of the 16 senders will send 15. This amounts to approximately 76kBKB of report block traffic per interval; 92% of RTCP traffic consists of report blocks.</t> <t>Ifreporting groupsReporting Groups are used, however, there is only 0.4kBKB of reports per interval, with no loss of useful information. Additionally, there will be (assuming 16-byteRGRPs,RGRPs and a single reporting source perreporting group)Reporting Group) an additional 2.4kBKB per cycle of RTCP RGRP SDES items and RGRS packets. Put another way, the unmodified<xref target="RFC3550"/>reporting interval per <xref target="RFC3550" format="default"/> is approximately 9 times longer than ifreporting groupsReporting Groups are in use.</t> </section> <section anchor="compat"title="Compatibilitynumbered="true" toc="default"> <name>Compatibility of RTCP ReportingGroups">Groups</name> <t>The RTCP traffic generated by receivers using RTCP Reporting Groups might appear, to observers unaware of these semantics, to be generated by receivers who are experiencing a network disconnection, as the non-reporting sources appear not to be receiving a given sender at all.</t> <t>This could be a potentially critical problem for such a sender using RTCP for congestion control, as such a sender might think that it is sending so much traffic that it is causing complete congestion collapse.</t> <t>However, such an interpretation of the session statistics would require a fairly sophisticated RTCP analysis. Any receiver of RTCP statisticswhichthat is just interested in information about itself needs to be prepared for the possibility that any given reception report might not contain information about a specific media source, because reception reports in large conferences can be round-robined.</t> <t>Thus,it is unclear to whatthe extent to which suchbackward compatibilitybackward-compatibility issues would actually cause trouble inpractice.</t>practice is unclear.</t> </section> </section> <sectiontitle="Security Considerations">numbered="true" toc="default"> <name>Security Considerations</name> <t>The security considerations of <xreftarget="RFC3550"/>target="RFC3550" format="default"/> and <xreftarget="I-D.ietf-avtcore-rtp-multi-stream"/>target="RFC8108" format="default"/> apply. If the RTP/AVPF profile is in use, then the security considerations of <xreftarget="RFC4585"/>target="RFC4585" format="default"/> (and <xreftarget="RFC5104"/>,target="RFC5104" format="default"/>, if used) also apply. If RTCP XR is used, the securityconsiderationconsiderations of <xreftarget="RFC3611"/> andtarget="RFC3611" format="default"/>, including security considerations regarding any XR report blocksusedused, also apply.</t> <t>The RTCPSDESRGRP SDES item is vulnerable to malicious modifications unless integrityprotectedprotection is used. A modification of this item's length fieldcausecauses the parsing of the RTCP packet in which it is contained to fail. Depending on the implementation, parsing of the full compound RTCP packet can alsofailfail, causing the whole packet to be discarded. A modificationtoof the value of this SDES item would make the receiver of the report think that the sender of the report was a member of a different RTCPreporting group.Reporting Group. This will potentially create an inconsistency, when the RGRS reports the source as being in the samereporting groupReporting Group as another source with anotherreporting groupReporting Group identifier.What impactThe impacts on a receiver implementation that such inconsistencieswould havecould cause are difficult to fully predict. One case is that when congestion control or other adaptation mechanisms are used, an inconsistent report can result in a media senderto reducereducing itsbit-rate.bitrate. However, a direct modification of thereceiver reportRR or a feedback message itself would be a more efficientattack,attack and would be equally costly to perform.</t> <t>The new RGRS RTCPPacketpacket type is very simple. The common RTCP packet type header shares the same security riskswithas those that affect previous RTCP packet types. Errors or modification of the length field can cause the full compound packet to fail header validation (seeAppendix A.2 in<xreftarget="RFC3550"/>)target="RFC3550" sectionFormat="of" section="A.2"/>), resulting in the whole compound RTCP packet being discarded. Modification of the SC field or the Pfieldsfield would cause an inconsistency when processing the RTCP packet, likely resultingitin the packet being classified as invalid. A modification of the PT field would cause the packetbeingto be interpretedunderaccording to some other packet type's rules. In suchcasea case, the result might be more or less predictable but would be specific to the packettype specific.type. Modification of theSSRC"SSRC of packetsendersender" field would attribute this packet to anothersender. Resultingsender, resulting in a receiver believing that thereporting group appliesReporting Group also applies for this SSRC, if it exists. If it doesn't exist, unlessalsocorresponding modifications are also done onaan SR/RR packet andaan SDESpacketpacket, the RTCP packetSHOULD<bcp14>SHOULD</bcp14> be discarded. If consistent changes are done,thatsuch a scenario could be part of a resource exhaustion attack on a receiver implementation. Modification of the "List of SSRCs for the Reporting Source(s)" field would change the SSRC the receiverexpectexpects to report on behalf of this SSRC. If that SSRCexist, thatexists, this situation could potentially change thereport groupReporting Group used for this SSRC. A change to anotherreporting groupReporting Group belonging to another endpoint is likelydetectabledetectable, as there would be a mismatch between the SSRC of the packet sender's endpoint information, transport addresses, SDESCNAME etcCNAME, etc., and the corresponding information from thereporting groupReporting Group indicated.</t> <t>Ingeneralgeneral, thereporting groupReporting Group is providinglimited impacts attacks.limited-impact attacks on the endpoints. The most significant result fromana deliberate attack would be to cause the information to be discarded or be inconsistent, includingdiscardthe discarding of all RTCP packets that are modified. This causes a lack of information at any receiver entity, possibly disregarding theendpointsendpoint's participation in the session.</t> <t>To protect againstthis type ofsuch attacks from externalnon trustednon-trusted entities, integrity and source authenticationSHOULD<bcp14>SHOULD</bcp14> be applied. This can be done, for example, by using <xreftarget="RFC3711">SRTP</xref>target="RFC3711" format="default">the Secure Real-time Transport Protocol (SRTP)</xref> with appropriatekey-management,key management; other optionsexistexist, as discussed in <xreftarget="RFC7201">RTP Security Options</xref>.</t>target="RFC7201" format="default">"Options for Securing RTP Sessions"</xref>.</t> <t>TheReportReporting Group Identifier hasa potential privacy impacting properties.properties that could potentially impact privacy. If thiswouldidentifier were to be generated by an implementation insucha way thatis long termmakes it long-term stable or predictable, it could be used for tracking a particularend-point. Thereforeendpoint. Therefore, it isRECOMMENDED<bcp14>RECOMMENDED</bcp14> that it be generated as a short-term persistent RGRP, following the rules for short-term persistent CNAMEs in <xreftarget="RFC7022"/>.target="RFC7022" format="default"/>. The rest of the information revealed,i.e.i.e., the SSRCs, the size ofreporting groupthe Reporting Group, and the number of reporting sources in areporting groupReporting Group, is of a less sensitive nature, considering that the SSRCs and the communication wouldanywaybe revealed without thisextension.extension anyway. By encrypting thereport group extensionsReporting Group extensions, the confidentiality of the SSRC values wouldpreserved confidential,be preserved, but the values can still be revealed if <xreftarget="RFC3711">SRTP</xref>target="RFC3711" format="default">SRTP</xref> is used. The size of thereporting groupsReporting Groups and the number of reporting sources are likely determinable from analysis of the packet pattern and sizes. However, this information appears to have limited value.</t> </section> <sectiontitle="IANA Considerations"> <t>(Note to the RFC-Editor: in the following, please replace "TBA" with the IANA-assigned value, and "XXXX" with the number of this document, then delete this note)</t> <t>The IANA is requested to register onenumbered="true" toc="default"> <name>IANA Considerations</name> <t>IANA has registered a new RTCP RGRP SDESitemsitem in the"RTCP"RTP SDES Item Types" registry, as follows:</t><figure> <artwork><![CDATA[ Value Abbrev Name Reference TBA<table anchor="new-RTCP-SDES-item"> <name>New RTCP RGRP SDES Item: Reporting GroupIdentifier [RFCXXXX] ]]></artwork> </figure>Identifier</name> <thead> <tr> <th>Value</th> <th>Abbrev</th> <th>Name</th> <th>Reference</th> </tr> </thead> <tbody> <tr> <td>11</td> <td>RGRP</td> <td>Reporting Group Identifier</td> <td>RFC 8861</td> </tr> </tbody> </table> <t>The definition of the RTCPSDESRGRP SDES item is given in <xreftarget="sec-rgrp"/>target="sec-rgrp" format="default"/> of this memo.</t><t>The IANA is also requested to register one<t>IANA has registered a new RTCP packet type in the "RTCP Control Packet Types (PT)"Registryregistry, as follows:</t><figure> <artwork><![CDATA[ Value Abbrev Name Reference TBA RGRS<table anchor="new-RTCP-packet-type"> <name>New RTCP Packet Type: Reporting Group ReportingSources [RFCXXXX] ]]></artwork> </figure>Sources</name> <thead> <tr> <th>Value</th> <th>Abbrev</th> <th>Name</th> <th>Reference</th> </tr> </thead> <tbody> <tr> <td>212</td> <td>RGRS</td> <td>Reporting Group Reporting Sources</td> <td>RFC 8861</td> </tr> </tbody> </table> <t>The definition of the RTCP RGRS packet type is given in <xreftarget="sec-rgrs"/>target="sec-rgrs" format="default"/> of this memo.</t><t>The IANA is<t>IANA has alsorequested to register oneregistered a new SDPattribute:</t> <figure> <artwork><![CDATA[ SDP Attribute ("att-field"):attribute.</t> <t>SDP Attributename: rtcp-rgrp Long form: RTCP("att-field"):</t> <ul empty="true" spacing="normal"><li> <dl indent="22" spacing="normal"> <dt>Contact Name:</dt><dd>IESG</dd> <dt>Contact Email:</dt><dd>iesg@ietf.org</dd> <dt>Attribute name:</dt><dd>rtcp-rgrp</dd> <dt>Long form:</dt><dd>RTCP ReportingGroups TypeGroups</dd> <dt>Type ofname: att-field Typename:</dt><dd>att-field</dd> <dt>Type ofattribute: Mediaattribute:</dt><dd>Media or sessionlevel Subjectlevel</dd> <dt>Subject tocharset: No Purpose: Negotiatecharset:</dt><dd>No</dd> <dt>Purpose:</dt><dd>To negotiate or configure the use of the RTCP Reporting GroupExtension. Reference: [RFCXXXX] Values: None ]]></artwork> </figure>extension</dd> <dt>Reference:</dt><dd>RFC 8861</dd> <dt>Value:</dt><dd>None</dd> <dt>Mux Category:</dt><dd>IDENTICAL</dd> </dl> </li> </ul> <t>The definition of the "a=rtcp-rgrp" SDES attribute is given in <xreftarget="sdp"/>target="sdp" format="default"/> of this memo.</t> </section> </middle> <back><references title="Normative References"> <?rfc include="reference.RFC.2119"?> <?rfc include='reference.RFC.3264'?> <?rfc include='reference.RFC.3550'?> <?rfc include='reference.RFC.4566'?> <?rfc include='reference.RFC.7022'?> <?rfc include="reference.I-D.ietf-avtcore-rtp-multi-stream"?> <?rfc include='reference.I-D.ietf-mmusic-sdp-mux-attributes'?><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.3264.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.4566.xml"/> <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.7022.xml"/> <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.8174.xml"/> <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.8108.xml"/> <!-- 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> <name>Informative References</name> <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.2974.xml"/> <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.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.4588.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.5506.xml"/> <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.6190.xml"/> <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.7201.xml"/> <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.7826.xml"/> </references><references title="Informative References"> <?rfc include='reference.RFC.2326'?> <?rfc include='reference.RFC.2974'?> <?rfc include='reference.RFC.3611'?> <?rfc include='reference.RFC.3711'?> <?rfc include='reference.RFC.4585'?> <?rfc include='reference.RFC.4588'?> <?rfc include='reference.RFC.5104'?> <?rfc include='reference.RFC.5506'?> <?rfc include='reference.RFC.6190'?> <?rfc include='reference.RFC.7201'?></references> </back> </rfc>