RFC 7197

Duplication Delay Attribute in the Session Description Protocol

πŸ“… published April 2014, from ietf

RFC 7197: Duplication Delay Attribute in the Session Description Protocol ✨

bestie, here's the tea 🍡 this is RFC 7197, a Standards Track doc from the IETF, published April 2014. It's got ISSN 2070-1721, and the authors are A. Begen (Cisco), Y. Cai (Microsoft), and H. Ou (Cisco). It doesn't list anything it obsoletes or updates, so it's standing on its own πŸ’…

Abstract

okay so the main idea is simple. to protect against packet losses from network outages that last up to T time units, you duplicate each packet and send every copy at least T time units apart 🫢 people call this "time-shifted redundancy," "temporal redundancy," or just "delayed duplication." this doc adds an attribute to the Session Description Protocol (SDP) that says temporally redundant media streams exist and what the duplication delay is πŸŽ€

Status of This Memo

this is an Internet Standards Track document 🌸

it's a product of the Internet Engineering Task Force (IETF), so it represents the IETF community's consensus. it got public review and was approved for publication by the Internet Engineering Steering Group (IESG). more info on Internet Standards is in Section 2 of RFC 5741.

for the current status, any errata, and how to give feedback, check http://www.rfc-editor.org/info/rfc7197 πŸ¦‹

Copyright (c) 2014 IETF Trust and the persons identified as the document authors. All rights reserved πŸ’œ

this doc is subject to BCP 78 and the IETF Trust's Legal Provisions Relating to IETF Documents (http://trustee.ietf.org/license-info) as they stand on the publication date. read these carefully, bestie, because they explain your rights and restrictions. any Code Components pulled out of this doc must include Simplified BSD License text as described in Section 4.e of the Trust Legal Provisions, and they come without warranty, as the Simplified BSD License says πŸ”₯

Table of Contents

   1. Introduction ....................................................2
   2. Requirements Notation ...........................................4
   3. The 'duplication-delay' Attribute ...............................5
   4. SDP Examples ....................................................6
   5. Security Considerations .........................................7
   6. IANA Considerations .............................................8
      6.1. Registration of SDP Attributes .............................9
   7. Acknowledgements ................................................9
   8. References ......................................................9
      8.1. Normative References .......................................9
      8.2. Informative References ....................................10

1. Introduction ✨

okay so packet delivery in an IP network can get interrupted when a physical link, interface, or device fails 😭 to soften that, some networks are built to be resilient, with several alternate paths between two endpoints. but if there's no resiliency, or the failure happens in a non-resilient part, you get a temporary outage where packets get dropped. the outage lasts until network reconvergence happens (aka until connectivity comes back) around the failure. reconvergence usually takes somewhere between tens and hundreds of milliseconds, depending on the network's size and features.

there are a bunch of reconvergence technologies out there today, like IP Fast Convergence, MPLS Traffic Engineering Fast Reroute, and Multicast Only Fast Reroute. you can add application-layer loss-repair methods on top, like Forward Error Correction (FEC), retransmission, temporal redundancy, and spatial redundancy, to shrink (and sometimes totally erase) the impact of outages 🌈 every combo has its own bandwidth needs and makes the network complexity different, so a network operator has to think carefully about which combo to deploy for each part of the network (like core vs. edge). there's a full overview of these technologies and loss-repair methods in [IC2011].

one loss-repair method is temporal redundancy, a.k.a. delayed duplication. the media sender sends an original source packet, then sends a duplicate after a set delay. if an outage hits the original, the duplicate is expected to reach the receiver (with high probability) πŸ¦‹ or the duplicate could get hit by an outage and get dropped while the original goes through fine. and sometimes both arrive at the receiver. in that case, the receiver (or whatever node does duplicate suppression) has to spot the duplicates and toss them, so the output stream ends up duplicate-free πŸ’…

delayed duplication works for lots of multimedia apps that have enough bandwidth for the extra traffic and can handle the added delay. BUT it must be used with care, lowkey, because it could easily cause a new wave of denial-of-service attacks πŸ’€ it's harmful when the main cause of packet loss is congestion instead of an outage from a temporary link or network element failure. only endpoints that want protection from network failures should duplicate. protection against congestion has to come from somewhere else, because duplication just makes congestion worse πŸ™ˆ

one especially good use case is making real-time video feeds more reliable inside a core IP network, where bandwidth is plentiful and you want maximum reliability (ideally zero loss) [IC2011]. compared with other redundancy approaches like FEC [RFC6363] and redundant data encoding (e.g., [RFC2198]), delayed duplication is super easy to implement, because it doesn't need any special encoding or decoding 🧚

for duplicate suppression, the receiver has to be able to identify identical packets. this is easy for media packets that carry one or more unique identifiers, like the sequence number field in the RTP header [RFC3550]. for non-RTP apps, the receiver can use unique sequence numbers if they exist, or other approaches to compare incoming packets and drop the duplicates πŸ“

this spec introduces a new Session Description Protocol (SDP) [RFC4566] attribute for apps and services that use delayed duplication. it indicates the relative delay for each extra duplication πŸŽ€ the attribute works with the duplication grouping semantics defined in [RFC7104].

what this spec does NOT cover (lol, but kinda): it doesn't explain how a sender should pick its duplication delay, since that depends on the underlying network and the reconvergence technologies inside it 🫠 it also doesn't explain how the receiver should suppress duplicates and merge the incoming streams into a loss-free, duplication-free output (a process people often call "stream merging"). an app or transport service that uses delayed duplication has to set its own stream-merging rules ✨

in practice, more than two redundant streams probably won't be used, since the extra delay and overhead aren't easy to justify. still, the attribute is defined generally so it could handle more than two redundant streams (multiple duplications) if needed πŸ’– the main focus is RTP-based transport, but the attribute works for both RTP and non-RTP streams. protocol issues and details on duplicating RTP streams are in [RFC7198] 🌸

2. Requirements Notation

the key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and "OPTIONAL" in this doc are to be interpreted as described in [RFC2119] πŸŽ€

3. The 'duplication-delay' Attribute πŸ’œ

the ABNF [RFC5234] syntax below formally describes the 'duplication-delay' attribute:

   delaying-attribute     = "a=duplication-delay:" periods CRLF
   periods                = period *( SP period)
   period                 = 1*DIGIT ; in milliseconds

          ABNF Syntax for the 'duplication-delay' Attribute

the 'duplication-delay' attribute can be a media-level attribute AND a session-level attribute πŸ¦‹ it gives the relative delay, in milliseconds (ms), from the previous transmission of each duplication, measured at transmission time. here are the rules, bestie πŸ‘‘

  • if it's used as a media-level attribute, it MUST be used with the 'ssrc-group' attribute and "DUP" grouping semantics as defined in [RFC7104]. when it's media-level, the relative delay value(s) it specifies SHALL apply to every Synchronization Source (SSRC)-based duplication grouping in the same media description. so you can't give different duplication delay values to different duplication groups in the same media description πŸ™…β€β™€οΈ
  • if it's used as a session-level attribute, it MUST be used with the 'group' attribute and "DUP" grouping semantics as defined in [RFC7104]. when it's session-level, the relative delay value(s) it specifies SHALL apply to every duplication grouping in the same SDP description. again, you can't give different duplication delay values to different duplication groups in the same SDP description. if you DO need different delay values for different duplication groups, then you MUST use different SDP descriptions for each, or you MUST use the 'duplication-delay' attribute at the media level. in that case, the 'duplication-delay' attribute MUST NOT be used at the session level πŸ”₯
  • for offer/answer model considerations, refer to [RFC7104] ✨

To be continued in part 2 πŸŽ€

4. SDP Examples ✨

okay so the first example is giving two RTP streams, and each one gets duplicated once πŸ’– That makes two sets of two-stream groups, and every grouping uses the same 100 ms duplication delay πŸŽ€ The first set is SSRCs 1000 and 1010, and the second set is 1020 and 1030 πŸ¦‹

v=0
o=ali 1122334455 1122334466 IN IP4 dup.example.com
s=Delayed Duplication
t=0 0
m=video 30000 RTP/AVP 100 101
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=rtpmap:101 MP2T/90000
a=ssrc:1020 cname:ch1b@example.com
a=ssrc:1030 cname:ch1b@example.com
a=ssrc-group:DUP 1020 1030
a=duplication-delay:100
a=mid:Ch1

Quick reality check: in actual use, SSRC values are random 32-bit numbers, so they could be way bigger than the cute little ones shown here πŸ™ˆπŸŒΈ

The second example is the multicast stream getting duplicated twice 😭 The first duplicate goes out 50 ms after the original, and then the second duplicate goes out 100 ms after that. So the same packet gets sent three times across 150 ms total. Iconic behaviour, honestly 🧚

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:ch1c@example.com
a=ssrc:1010 cname:ch1c@example.com
a=ssrc:1020 cname:ch1c@example.com
a=ssrc-group:DUP 1000 1010 1020
a=duplication-delay:50 100
a=mid:Ch1

The third example is a multicast UDP stream with a 50 ms duplication delay πŸ“ The redundant streams go out in separate source-specific multicast (SSM) sessions. That means the receiving host has to join both SSM sessions if it wants both streams. Main character energy, but you gotta do the work πŸ’…

v=0
o=ali 1122334455 1122334466 IN IP4 dup.example.com
s=Delayed Duplication
t=0 0
a=group:DUP S1a S1b
a=duplication-delay:50
m=audio 30000 udp mp4
c=IN IP4 233.252.0.1/127
a=source-filter:incl IN IP4 233.252.0.1 198.51.100.1
a=mid:S1a
m=audio 40000 udp mp4
c=IN IP4 233.252.0.2/127
a=source-filter:incl IN IP4 233.252.0.2 198.51.100.1
a=mid:S1b

5. Security Considerations πŸ”₯

okay bestie, serious moment incoming 🫢 The 'duplication-delay' attribute is not believed to add any significant security risk to multimedia applications. Still, a sneaky third party could use this attribute to mislead the receivers about the duplication delays and/or the number of redundant streams πŸ’€ If the attacker bumps the duplication delay up, receivers end up waiting unnecessarily long, since they have to sit through the entire period 😭 If the attacker shrinks it instead, receivers might not wait long enough for the duplicated transmission and end up with unnecessary packet losses πŸ™ˆ BUT, these attacks need the attacker to intercept and rewrite the packets carrying the SDP description. And if an interceptor can do that, a whole lot more attacks are also possible πŸ’…

To avoid this kind of nonsense, the SDP description needs to be integrity protected and come with source authentication ✨ For example, this can be done end-to-end using S/MIME [RFC5652] [RFC5751] when SDP is carried in a signaling packet using MIME types (application/sdp). Alternatively, HTTPS [RFC2818] or the authentication method in the Session Announcement Protocol (SAP) [RFC2974] could be used too πŸŽ€

Another risk is a software misconfiguration or a software bug where a huge number of duplicates gets accidentally signaled in the 'duplication-delay' attribute 😱 And an attacker could also abuse this attribute to start a denial-of-service attack by signaling and sending way too many duplicated streams 🚨 In any application that uses this attribute, it's a good practice to put a hard limit on both the number of duplicate streams and the total delay added by duplication, regardless of what the SDP description specifies πŸ›‘οΈ

Heads up: this mechanism duplicates media packets. If those packets are also cryptographically protected (e.g., encrypted), the duplication could act as an accelerator for any Million Message [RFC3218] or similar attack, such as Lucky 13 [Lucky13], that exists against the security mechanism in use. That acceleration could turn an otherwise infeasible attack into a practical one. Assuming the amount of duplication is small and that such weak or broken security mechanisms really should not be used, the overall security impact of the duplication should be minimal. However, if a bad actor controlled the SDP but did not have access to the keying material used for media, that actor could potentially use the SDP to make media handling use a weak or broken mechanism with a lot of duplication, and then the duplication could be significant. So deployments where the SDP is controlled by an actor who should not have access to the media keying material should be cautious about using this duplication mechanism πŸ₯Ί

Last one: if this mechanism is used together with a source description (SDES), and the key used for media protection is derived from a human-memorable or otherwise dictionary-attackable secret, then the duplication done here could allow a more efficient dictionary attack against the media 😬 The right fix is proper keying or, if using an SDES, making sure the keys used are not dictionary-attackable πŸ”


6. IANA Considerations πŸ“‹

The following contact information shall be used for the registration in this document:

Ali Begen
abegen@cisco.com

6.1. Registration of SDP Attributes

This document registers a new attribute name in SDP 🌈

SDP Attribute ("att-field"):

   Attribute name:     duplication-delay
   Long form:          Duplication delay for temporally redundant
                       streams
   Type of name:       att-field
   Type of attribute:  Media or session level
   Subject to charset: No
   Purpose:            Specifies the relative duplication delay(s)
                       for redundant stream(s)
   Reference:          [RFC7197]
   Values:             See [RFC7197]

7. Acknowledgements 🫢

The authors would like to thank Colin Perkins, Paul Kyzivat, and Stephen Farrell for their suggestions and reviews πŸ’œ

8. References πŸ“š

8.1. Normative References

  • [RFC2119]: Bradner, S., "Key words for use in RFCs to Indicate Requirement Levels", BCP 14, RFC 2119, March 1997.
  • [RFC4566]: Handley, M., Jacobson, V., and C. Perkins, "SDP: Session Description Protocol", RFC 4566, July 2006.
  • [RFC3550]: Schulzrinne, H., Casner, S., Frederick, R., and V. Jacobson, "RTP: A Transport Protocol for Real-Time Applications", STD 64, RFC 3550, July 2003.
  • [RFC5234]: Crocker, D. and P. Overell, "Augmented BNF for Syntax Specifications: ABNF", STD 68, RFC 5234, January 2008.
  • [RFC7104]: Begen, A., Cai, Y., and H. Ou, "Duplication Grouping Semantics in the Session Description Protocol", RFC 7104, January 2014.

8.2. Informative References

  • [RFC6363]: Watson, M., Begen, A., and V. Roca, "Forward Error Correction (FEC) Framework", RFC 6363, October 2011.
  • [RFC2198]: Perkins, C., Kouvelas, I., Hodson, O., Hardman, V., Handley, M., Bolot, J., Vega-Garcia, A., and S. Fosse-Parisis, "RTP Payload for Redundant Audio Data", RFC 2198, September 1997.
  • [RFC7198]: Begen, A. and C. Perkins, "Duplicating RTP Streams", RFC 7198, April 2014.
  • [IC2011]: Evans, J., Begen, A., Greengrass, J., and C. Filsfils, "Toward Lossless Video Transport", IEEE Internet Computing, Vol. 15, No. 6, pp. 48-57, November 2011.
  • [RFC5652]: Housley, R., "Cryptographic Message Syntax (CMS)", STD 70, RFC 5652, September 2009.
  • [RFC5751]: Ramsdell, B. and S. Turner, "Secure/Multipurpose Internet Mail Extensions (S/MIME) Version 3.2 Message Specification", RFC 5751, January 2010.
  • [RFC2818]: Rescorla, E., "HTTP Over TLS", RFC 2818, May 2000.
  • [RFC2974]: Handley, M., Perkins, C., and E. Whelan, "Session Announcement Protocol", RFC 2974, October 2000.
  • [RFC3218]: Rescorla, E., "Preventing the Million Message Attack on Cryptographic Message Syntax", RFC 3218, January 2002.
  • [Lucky13]: AlFardan, N. and K. Paterson, "Lucky Thirteen: Breaking the TLS and DTLS Record Protocols", IEEE Symposium on Security and Privacy, May 2013, <http://ieeexplore.ieee.org/xpl/articleDetails.jsp?tp=&arnumber=6547131&queryText%3DLucky+Thirteen>.

Authors' Addresses πŸ¦‹

Ali Begen
Cisco
181 Bay Street
Toronto, ON  M5J 2T3
Canada

EMail: abegen@cisco.com


Yiqun Cai
Microsoft
1065 La Avenida
Mountain View, CA  94043
USA

EMail: yiqunc@microsoft.com


Heidi Ou
Cisco
170 W. Tasman Dr.
San Jose, CA  95134
USA

EMail: hou@cisco.com
πŸ“¦ where this page comes from