<?xml version="1.0" encoding="US-ASCII"?>
<!-- used xml2rfc v2 -->
<!DOCTYPE rfc SYSTEM "rfc2629.dtd" [
<!ENTITY rfc2119 SYSTEM "reference.RFC.2119.xml">
<!ENTITY rfc3376 SYSTEM "reference.RFC.3376.xml">
<!ENTITY rfc3810 SYSTEM "reference.RFC.3810.xml">
<!ENTITY rfc4566 SYSTEM "reference.RFC.4566.xml">
<!ENTITY rfc5888 SYSTEM "reference.RFC.5888.xml">
<!ENTITY rfc3550 SYSTEM "reference.RFC.3550.xml">
<!ENTITY rfc3264 SYSTEM "reference.RFC.3264.xml">
<!ENTITY rfc4756 SYSTEM "reference.RFC.4756.xml">
<!ENTITY rfc3388 SYSTEM "reference.RFC.3388.xml">
<!ENTITY rfc5576 SYSTEM "reference.RFC.5576.xml">
<!ENTITY rfc5234 SYSTEM "reference.RFC.5234.xml">
<!ENTITY rfc5652 SYSTEM "reference.RFC.5652.xml">
<!ENTITY rfc2818 SYSTEM "reference.RFC.2818.xml">
<!ENTITY rfc2974 SYSTEM "reference.RFC.2974.xml">
<!ENTITY rfc4588 SYSTEM "reference.RFC.4588.xml">
<!ENTITY rfc2354 SYSTEM "reference.RFC.2354.xml">
<!ENTITY rfc5751 SYSTEM "reference.RFC.5751.xml">
]>

<?xml-stylesheet type='text/xsl' href='rfc2629.xslt' ?>
<?rfc toc="yes" ?>
<?rfc symrefs="yes" ?>
<?rfc compact="yes" ?>
<?rfc subcompact="no" ?>
<?rfc sortrefs="yes" ?>
<?rfc colonspace='yes' ?>
<?rfc tocindent='yes' ?>
<?rfc rfcedstyle="yes" ?>
<rfc category="std" number="7104" submissionType="IETF" consensus="yes"
     ipr="trust200902">
  <front>
    <title abbrev="Duplication Grouping Semantics in SDP">Duplication Grouping
    Semantics in the Session Description Protocol</title>

    <author fullname="Ali Begen" initials="A." surname="Begen">
      <organization>Cisco</organization>

      <address>
        <postal>
          <street>181 Bay Street</street>

          <city>Toronto</city>

          <region>ON</region>

          <code>M5J 2T3</code>

          <country>Canada</country>
        </postal>

        <email>abegen@cisco.com</email>
      </address>
    </author>

    <author fullname="Yiqun Cai" initials="Y." surname="Cai">
      <organization>Microsoft</organization>

      <address>
        <postal>
          <street>1065 La Avenida</street>

          <city>Mountain View</city>

          <region>CA</region>

          <code>94043</code>

          <country>USA</country>
        </postal>

        <email>yiqunc@microsoft.com</email>
      </address>
    </author>

    <author fullname="Heidi Ou" initials="H." surname="Ou">
      <organization>Cisco</organization>

      <address>
        <postal>
          <street>170 W. Tasman Dr.</street>

          <city>San Jose</city>

          <region>CA</region>

          <code>95134</code>

          <country>USA</country>
        </postal>

        <email>hou@cisco.com</email>
      </address>
    </author>

    <date month="January" year="2014"/>

  <workgroup>MMUSIC</workgroup>



    <abstract>
      <t>Packet loss is undesirable for real-time multimedia sessions, but it can
      occur due to congestion or other unplanned network outages. This is
      especially true for IP multicast networks, where packet loss patterns
      can vary greatly between receivers. One technique that can be used to
      recover from packet loss without incurring unbounded delay for all the
      receivers is to duplicate the packets and send them in separate
      redundant streams. This document defines the semantics for grouping
      redundant streams in the Session Description Protocol (SDP). The
      semantics defined in this document are to be used with the SDP Grouping
      Framework. Grouping semantics at the Synchronization Source (SSRC) level are
      also defined in this document for RTP streams using SSRC
      multiplexing.</t>
    </abstract>
  </front>

  <middle>
    <section title="Introduction">
      <t>The <xref target="RFC3550">Real-time Transport Protocol (RTP)</xref>
      is widely used today for delivering IPTV traffic and other real-time
      multimedia sessions. Many of these applications support very large
      numbers of receivers and rely on intra-domain UDP/IP multicast for
      efficient distribution of traffic within the network.</t>

      <t>While this combination has proved successful, there does exist a
      weakness. As <xref target="RFC2354"/> noted, packet loss is not
      avoidable, even in a carefully managed network. This loss might be due
      to congestion; it might also be a result of an unplanned outage caused
      by a flapping link, a link or interface failure, a software bug, or a
      maintenance person accidentally cutting the wrong fiber. Since UDP/IP
      flows do not provide any means for detecting loss and retransmitting
      packets, it is left up to the RTP layer and the applications to detect,
      and recover from, packet loss.</t>

      <t>One technique to recover from packet loss without incurring unbounded
      delay for all the receivers is to duplicate the packets and send them in
      separate redundant streams. Variations on this idea have been
      implemented and deployed today <xref target="IC2011"/>. <xref
      target="RTP-DUP"/> explains how duplication can
      be achieved for RTP streams without breaking the RTP and RTP Control
      Protocol (RTCP) functionality. In this document, we describe the
      semantics needed in the Session Description Protocol (SDP) <xref
      target="RFC4566"/> to support this technique.</t>
    </section>

    <section title="Requirements Notation">
      <t>The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
      "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and
      "OPTIONAL" in this document are to be interpreted as described in <xref
      target="RFC2119"/>.</t>
    </section>

    <section title="Duplication Grouping">
      <section anchor="sec_red" title="&quot;DUP&quot; Grouping Semantics">
        <t>Each "a=group" line is used to indicate an association relationship
        between the redundant streams. The streams included in one "a=group"
        line are called a "Duplication Group".</t>

        <t>Using the SDP Grouping Framework in <xref target="RFC5888"/>, this
        document defines "DUP" as the grouping semantics for redundant
        streams.</t>

        <t>The "a=group:DUP" semantics MUST be used to group the redundant
        streams, except when the streams are specified in the same media
        description, i.e., in the same "m" line (see <xref
        target="sec_rtp"/>). In an "a=group:DUP" line, the order of the listed
        redundant streams does not strictly indicate the order of
        transmission, although it is RECOMMENDED that the stream listed first
        be sent first, with the other stream(s) being the (time-delayed)
        duplicate(s).</t>
      </section>

      <section anchor="sec_rtp"
               title="Duplication Grouping for SSRC-Multiplexed RTP Streams">
        <t><xref target="RFC5576"/> defines an SDP media-level attribute,
        called "ssrc-group", for grouping the RTP streams that are SSRC
        multiplexed and carried in the same RTP session. The grouping is based
        on the SSRC identifiers. Since SSRC-multiplexed RTP streams are
        defined in the same "m" line, the "group" attribute cannot be
        used.</t>

        <t>This section explains how duplication is used with SSRC-multiplexed
        streams using the "ssrc-group" attribute <xref target="RFC5576"/>.</t>

        <t>The semantics of "DUP" for the "ssrc-group" attribute are the same
        as the one defined for the "group" attribute, except that the SSRC
        identifiers are used to designate the duplication grouping
        associations: a=ssrc-group:DUP *(SP ssrc-id) <xref target="RFC5576"/>.
        As above, while in an "a=ssrc-group:DUP" line, the order of the listed
        redundant streams does not necessarily indicate the order of
        transmission, but it is RECOMMENDED that the stream listed first be sent
        first, with the other stream(s) being the (time-delayed)
        duplicate(s).</t>
      </section>

      <section title="SDP Offer/Answer Model Considerations">
        <t>When offering duplication grouping using SDP in an offer/answer
        model <xref target="RFC3264"/>, the following considerations
        apply.</t>

        <t>A node that is receiving an offer from a sender may or may not
        understand line grouping. It is also possible that the node
        understands line grouping but does not understand the "DUP"
        semantics. From the viewpoint of the sender of the offer, these cases
        are indistinguishable.</t>

        <t>When a node is offered a session with the "DUP" grouping semantics
        but it does not support line grouping or the duplication grouping
        semantics, as per <xref target="RFC5888"/>, the node responds to the
        offer either (1) with an answer that omits the grouping attribute or
        (2) with a refusal to the request (e.g., "488 Not Acceptable Here" or
        "606 Not Acceptable in SIP").</t>

        <t>In the first case, the original sender of the offer must send a new
        offer without any duplication grouping. In the second case, if the
        sender of the offer still wishes to establish the session, it should
        retry the request with an offer without the duplication grouping. This
        behavior is specified in <xref target="RFC5888"/>.</t>
      </section>
    </section>

    <section anchor="sec_sdp" title="SDP Examples">
      <section title="Separate Source Addresses">
        <t>In this example, the redundant streams use the same IP destination
        address (232.252.0.1), but they are sourced from different addresses
        (198.51.100.1 and 198.51.100.2). Thus, the receiving host needs to
        join both source-specific multicast (SSM) sessions separately.</t>

        <t><figure>
            <preamble/>

            <artwork><![CDATA[
     v=0
     o=ali 1122334455 1122334466 IN IP4 dup.example.com
     s=DUP Grouping Semantics
     t=0 0
     m=video 30000 RTP/AVP 100
     c=IN IP4 233.252.0.1/127
     a=source-filter:incl IN IP4 233.252.0.1 198.51.100.1 198.51.100.2
     a=rtpmap:100 MP2T/90000
     a=ssrc:1000 cname:ch1@example.com
     a=ssrc:1010 cname:ch1@example.com
     a=ssrc-group:DUP 1000 1010
     a=mid:Ch1
                    ]]></artwork>
          </figure></t>

        <t>Note that in actual use, SSRC values, which are random 32-bit
        numbers, can be much larger than the ones shown in this example. Also,
        note that this SDP description does not use the "duplication-delay"
        attribute (defined in <xref
        target="DELAYED-DUP"/>) since the sender does
        not apply any delay between the redundant streams upon transmission.
        Alternatively, one MAY explicitly insert an "a=duplication-delay:0"
        line before the "a=mid:Ch1" line for informational purposes.</t>
      </section>

      <section title="Separate Destination Addresses">
        <t>In this example, the redundant streams have different IP
        destination addresses. The example shows the same UDP port number and
        IP source address for each stream, but either or both could have been
        different for the two streams.</t>

        <t><figure>
            <preamble/>

            <artwork><![CDATA[
     v=0
     o=ali 1122334455 1122334466 IN IP4 dup.example.com
     s=DUP Grouping Semantics
     t=0 0
     a=group:DUP S1a S1b
     m=video 30000 RTP/AVP 100
     c=IN IP4 233.252.0.1/127
     a=source-filter:incl IN IP4 233.252.0.1 198.51.100.1
     a=rtpmap:100 MP2T/90000
     a=mid:S1a
     m=video 30000 RTP/AVP 101
     c=IN IP4 233.252.0.2/127
     a=source-filter:incl IN IP4 233.252.0.2 198.51.100.1
     a=rtpmap:101 MP2T/90000
     a=mid:S1b
                    ]]></artwork>
          </figure></t>

        <t>Optionally, one could be more explicit and insert an
        "a=duplication&nbhy;delay:0" line before the first "m" line.</t>
      </section>

      <section title="Temporal Redundancy">
        <t>In this example, the redundant streams have the same IP source and
        destination addresses (i.e., they are transmitted in the same SSM
        session). Due to the same source and destination addresses, the
        packets in both streams will be routed over the same path. To provide
        resiliency against packet loss, the duplicate of an original packet is
        transmitted 50 milliseconds (ms) later as indicated by the "duplication-delay"
        attribute (defined in <xref
        target="DELAYED-DUP"/>).</t>

        <t><figure>
            <preamble/>

            <artwork><![CDATA[
     v=0
     o=ali 1122334455 1122334466 IN IP4 dup.example.com
     s=Delayed Duplication
     t=0 0
     m=video 30000 RTP/AVP 100
     c=IN IP4 233.252.0.1/127
     a=source-filter:incl IN IP4 233.252.0.1 198.51.100.1
     a=rtpmap:100 MP2T/90000
     a=ssrc:1000 cname:ch1a@example.com
     a=ssrc:1010 cname:ch1a@example.com
     a=ssrc-group:DUP 1000 1010
     a=duplication-delay:50
     a=mid:Ch1
             ]]></artwork>
          </figure></t>

        <t/>
      </section>
    </section>

    <section anchor="sec_security_considerations"
             title="Security Considerations">
      <t>In general, the security considerations of <xref target="RFC4566"/>
      apply to this document as well.</t>

      <t>There is a weak threat for the receiver that the duplication grouping
      can be modified to indicate relationships that do not exist. Such
      attacks might result in failure of the duplication mechanisms and/or
      mishandling of the media streams by the receivers.</t>

      <t>In order to avoid attacks of this sort, the SDP description needs to
      be integrity protected and provided with source authentication. This
      can, for example, be achieved on an end-to-end basis using S/MIME <xref
      target="RFC5652"/> <xref target="RFC5751"/> when the SDP is used in a
      signaling packet using MIME types (application/sdp). Alternatively,
      HTTPS <xref target="RFC2818"/> or the authentication method in the
      Session Announcement Protocol (SAP) <xref target="RFC2974"/> could be
      used as well. As for the confidentiality, if it is desired, it can be
      useful to use a secure, encrypted transport method to carry the SDP
      description.</t>
    </section>

    <section title="IANA Considerations">
      <t>This document registers the following semantics with IANA in the
      &quot;Semantics for the "group" SDP Attribute&quot; subregistry (under the "Session Description Protocol (SDP) Parameters" registry:</t>

      <t><figure>
          <preamble/>

          <artwork><![CDATA[
Semantics                              Token   Reference
-------------------------------------  ------  ---------
Duplication                            DUP     [RFC7104]
]]></artwork>
        </figure></t>

      <t>This document also registers the following semantics with IANA in
      the &quot;Semantics for the "ssrc-group" SDP Attribute&quot; subregistry under the "Session Description Protocol (SDP) Parameters" registry:</t>

      <t><figure>
          <preamble/>

          <artwork><![CDATA[
Token    Semantics                      Reference
-------  -----------------------------  ---------
DUP      Duplication                    [RFC7104]
]]></artwork>
        </figure></t>
    </section>

    <section title="Acknowledgments">
      <t>The authors would like to thank Colin Perkins, Bill Ver Steeg, Dave
      Oran, and Toerless Eckert for their input and suggestions.</t>
    </section>
  </middle>

  <back>
    <references title="Normative References">
      &rfc3550;

      &rfc4566;

      &rfc2119;

      &rfc5888;

      &rfc5576;

      &rfc3264;
    </references>

    <references title="Informative References">

<!-- I-D.ietf-avtext-rtp-duplication, Active -->
<reference anchor='RTP-DUP'>
<front>
<title>Duplicating RTP Streams</title>

<author initials='A' surname='Begen' fullname='Ali Begen'>
    <organization />
</author>

<author initials='C' surname='Perkins' fullname='Colin Perkins'>
    <organization />
</author>

<date month='October' year='2013' />
</front>

<seriesInfo name='Work in' value='Progress' />
</reference>

 <!-- I-D.ietf-mmusic-delayed-duplication-03, Active-->
<reference anchor='DELAYED-DUP'>
<front>
<title>Delayed Duplication Attribute in the Session Description Protocol</title>

<author initials='A' surname='Begen' fullname='Ali Begen'>
    <organization />
</author>

<author initials='Y' surname='Cai' fullname='Yiqun Cai'>
    <organization />
</author>

<author initials='H' surname='Ou' fullname='Heidi Ou'>
    <organization />
</author>

<date month='December' year='2013' />

</front>

<seriesInfo name='Work in' value='Progress' />
</reference>

      &rfc2354;

      &rfc5652;

      &rfc2818;

      &rfc2974;

      &rfc5751;

      <reference anchor="IC2011">
        <front>
          <title>Toward Lossless Video Transport, IEEE Internet Computing,
          vol. 15/6, pp. 48-57</title>

          <author fullname="John Evans" initials="J" surname="Evans">
            <organization/>

         
          </author>

          <author fullname="Ali Begen" initials="A" surname="Begen">
            <organization/>
          </author>

          <author fullname="Jason Greengrass" initials="J"
                  surname="Greengrass">
            <organization/>
          </author>

          <author fullname="Clarence Filsfils" initials="C" surname="Filsfils">
            <organization/>
          </author>

          <date month="November" year="2011"/>
        </front>
      </reference>
    </references>
  </back>
</rfc>
