Duplication Delay Attribute in the Session Description Protocol
Extracted elements (15)
Delayed duplication is easy to implement compared to FEC or redundant encoding because it requires no special encoding or decoding; the sender simply retransmits original packets after a time delay. The delay is chosen to span the expected network reconvergence time (typically tens to hundreds of milliseconds).
The attribute is defined generically to support more than two redundant streams (multiple duplications) by specifying multiple delay values, even though in practice more than two redundant streams are unlikely due to added delay and overhead. Multiple period values represent relative delays between successive duplicates.
The 'duplication-delay' attribute is applicable to both RTP and non-RTP streams, though the primary focus is RTP-based transport. For RTP, duplicate suppression uses the RTP sequence number; non-RTP applications must use their own unique identifiers or comparison approaches.
For offer/answer model considerations, implementations must refer to RFC 7104, which defines the 'DUP' grouping semantics that this attribute depends on. This attribute does not define stream merging rules; each application must determine its own stream merging behavior.
If different duplication delay values are needed for different duplication groups, one MUST use different SDP descriptions for each or 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.
When 'duplication-delay' is used as a media-level attribute, the specified relative delay values SHALL apply to every SSRC-based duplication grouping in the same media description; one cannot specify different delay values for different duplication groups in the same media description.
When used as a media-level attribute, 'duplication-delay' MUST be used with the 'ssrc-group' attribute and 'DUP' grouping semantics as defined in RFC 7104.
When used as a session-level attribute, 'duplication-delay' MUST be used with the 'group' attribute and 'DUP' grouping semantics as defined in RFC 7104. The relative delay values SHALL apply to every duplication grouping in the same SDP description.
The 'duplication-delay' SDP attribute specifies the relative delay in milliseconds for each additional duplication of a media stream, supporting both single and multiple duplications. It is defined as both a media-level and session-level SDP attribute using ABNF syntax: 'a=duplication-delay:' followed by one or more space-separated integer values in milliseconds.
This document registers the 'duplication-delay' SDP attribute (att-field) in the IANA SDP Attribute registry. It is a media- or session-level attribute, not subject to charset, and specifies the relative duplication delay(s) for redundant streams.
A malevolent third party could intercept and rewrite SDP packets to alter the 'duplication-delay' value, causing receivers to wait unnecessarily long (if delay is increased) or to drop packets prematurely (if delay is reduced). Integrity protection and source authentication via S/MIME, HTTPS, or SAP authentication are recommended.
An attacker or software misconfiguration could signal a large number of duplicated streams using this attribute, causing a denial-of-service. Applications should impose hard limits on both the number of duplicate streams and the total delay introduced, regardless of what the SDP specifies.
Delayed duplication could act as a cryptographic attack accelerator (e.g., Million Message attack, Lucky 13) if the media packets are cryptographically protected with a weak or broken mechanism. Deployments should avoid weak security mechanisms and apply hard limits on duplication counts.
If this mechanism is used with SDES and the media protection key is derived from a dictionary-attackable secret, the duplication allows for a more efficient dictionary attack. The countermeasure is to use proper keying or ensure SDES keys are not dictionary-attackable.
The 'duplication-delay' attribute is encoded as 'a=duplication-delay:' followed by one or more period values, each being a positive integer in milliseconds, separated by spaces. ABNF: delaying-attribute = "a=duplication-delay:" periods CRLF; periods = period *( SP period); period = 1*DIGIT.