summaryrefslogtreecommitdiff
path: root/doc/rfc/rfc8840.txt
diff options
context:
space:
mode:
authorThomas Voss <mail@thomasvoss.com> 2024-11-27 20:54:24 +0100
committerThomas Voss <mail@thomasvoss.com> 2024-11-27 20:54:24 +0100
commit4bfd864f10b68b71482b35c818559068ef8d5797 (patch)
treee3989f47a7994642eb325063d46e8f08ffa681dc /doc/rfc/rfc8840.txt
parentea76e11061bda059ae9f9ad130a9895cc85607db (diff)
doc: Add RFC documents
Diffstat (limited to 'doc/rfc/rfc8840.txt')
-rw-r--r--doc/rfc/rfc8840.txt1768
1 files changed, 1768 insertions, 0 deletions
diff --git a/doc/rfc/rfc8840.txt b/doc/rfc/rfc8840.txt
new file mode 100644
index 0000000..d739d92
--- /dev/null
+++ b/doc/rfc/rfc8840.txt
@@ -0,0 +1,1768 @@
+
+
+
+
+Internet Engineering Task Force (IETF) E. Ivov
+Request for Comments: 8840 Jitsi
+Category: Standards Track T. Stach
+ISSN: 2070-1721 Unaffiliated
+ E. Marocco
+ Telecom Italia
+ C. Holmberg
+ Ericsson
+ January 2021
+
+
+ A Session Initiation Protocol (SIP) Usage for Incremental Provisioning
+ of Candidates for the Interactive Connectivity Establishment (Trickle
+ ICE)
+
+Abstract
+
+ The Interactive Connectivity Establishment (ICE) protocol describes a
+ Network Address Translator (NAT) traversal mechanism for UDP-based
+ multimedia sessions established with the Offer/Answer model. The ICE
+ extension for Incremental Provisioning of Candidates (Trickle ICE)
+ defines a mechanism that allows ICE Agents to shorten session
+ establishment delays by making the candidate gathering and
+ connectivity checking phases of ICE non-blocking and by executing
+ them in parallel.
+
+ This document defines usage semantics for Trickle ICE with the
+ Session Initiation Protocol (SIP). The document also defines a new
+ SIP Info Package to support this usage together with the
+ corresponding media type. Additionally, a new Session Description
+ Protocol (SDP) "end-of-candidates" attribute and a new SIP option tag
+ "trickle-ice" are defined.
+
+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/rfc8840.
+
+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. Protocol Overview
+ 3.1. Discovery Issues
+ 3.2. Relationship with the Offer/Answer Model
+ 4. Incremental Signaling of ICE Candidates
+ 4.1. Initial Offer/Answer Exchange
+ 4.1.1. Sending the Initial Offer
+ 4.1.2. Receiving the Initial Offer
+ 4.1.3. Sending the Initial Answer
+ 4.1.4. Receiving the Initial Answer
+ 4.2. Subsequent Offer/Answer Exchanges
+ 4.3. Establishing the Dialog
+ 4.3.1. Establishing Dialog State through Reliable Offer/Answer
+ Delivery
+ 4.3.2. Establishing Dialog State through Unreliable Offer/
+ Answer Delivery
+ 4.3.3. Initiating Trickle ICE without an SDP Answer
+ 4.4. Delivering Candidates in INFO Requests
+ 5. Initial Discovery of Trickle ICE Support
+ 5.1. Provisioning Support for Trickle ICE
+ 5.2. Trickle ICE Discovery with Globally Routable User Agent
+ URIs (GRUUs)
+ 5.3. Fall Back to Half Trickle
+ 6. Considerations for RTP and RTCP Multiplexing
+ 7. Considerations for Media Multiplexing
+ 8. SDP "end-of-candidates" Attribute
+ 8.1. Definition
+ 8.2. Offer/Answer Procedures
+ 9. Content Type "application/trickle-ice-sdpfrag"
+ 9.1. Overall Description
+ 9.2. Grammar
+ 10. Info Package
+ 10.1. Rationale -- Why INFO?
+ 10.2. Overall Description
+ 10.3. Applicability
+ 10.4. Info Package Name
+ 10.5. Info Package Parameters
+ 10.6. SIP Option Tags
+ 10.7. INFO Request Body Parts
+ 10.8. Info Package Usage Restrictions
+ 10.9. Rate of INFO Requests
+ 10.10. Info Package Security Considerations
+ 11. Deployment Considerations
+ 12. IANA Considerations
+ 12.1. SDP "end-of-candidates" Attribute
+ 12.2. Media Type "application/trickle-ice-sdpfrag"
+ 12.3. SIP Info Package "trickle-ice"
+ 12.4. SIP Option Tag "trickle-ice"
+ 13. Security Considerations
+ 14. References
+ 14.1. Normative References
+ 14.2. Informative References
+ Acknowledgements
+ Authors' Addresses
+
+1. Introduction
+
+ The Interactive Connectivity Establishment (ICE) protocol [RFC8445]
+ describes a mechanism for Network Address Translator (NAT) traversal
+ that consists of three main phases.
+
+ During the first phase, an agent gathers a set of candidate transport
+ addresses (source IP, port, and transport protocol). This is
+ followed by a second phase where these candidates are sent to a
+ remote agent within the Session Description Protocol (SDP) body of a
+ SIP message. At the remote agent, the gathering procedure is
+ repeated and candidates are sent to the first agent. Once the
+ candidate information is available, a third phase starts in parallel
+ where connectivity between all candidates in both sets is checked
+ (connectivity checks). Once these phases have been completed, and
+ only then, both agents can begin communication.
+
+ According to [RFC8445], the three phases above happen consecutively,
+ in a blocking way, which can introduce undesirable setup delay during
+ session establishment. The Trickle ICE extension [RFC8838] defines
+ generic semantics required for these ICE phases to happen in a
+ parallel, non-blocking way and hence speeds up session establishment.
+
+ This specification defines a usage of Trickle ICE with the Session
+ Initiation Protocol (SIP)[RFC3261]. It describes how ICE candidates
+ are to be exchanged incrementally using SIP INFO requests [RFC6086]
+ and how the Half Trickle and Full Trickle modes defined in [RFC8838]
+ are to be used by SIP User Agents (UAs) depending on their
+ expectations for support of Trickle ICE by a remote agent.
+
+ This document defines a new Info Package as specified in [RFC6086]
+ for use with Trickle ICE together with the corresponding media type,
+ SDP attribute, and SIP option tag.
+
+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.
+
+ This specification makes use of terminology defined by the ICE
+ protocol in [RFC8445] and by its Trickle ICE extension in [RFC8838].
+ It is assumed that the reader is familiar with the terminology from
+ both documents.
+
+ [RFC8445] also describes how ICE makes use of the Session Traversal
+ Utilities for NAT (STUN) protocol [RFC5389] and its extension
+ Traversal Using Relays around NAT (TURN) [RFC5766].
+
+3. Protocol Overview
+
+ When using ICE for SIP according to [RFC8839], the ICE candidates are
+ exchanged solely via SDP Offer/Answer as per [RFC3264]. This
+ specification defines an additional mechanism where candidates can be
+ exchanged using SIP INFO messages and a newly defined Info Package
+ [RFC6086]. This also allows ICE candidates to be sent in parallel to
+ an ongoing Offer/Answer negotiation and/or after the completion of
+ the Offer/Answer negotiation.
+
+ Typically, in cases where Trickle ICE is fully supported, the Offerer
+ sends an INVITE request containing a subset of candidates. Once an
+ early dialog is established, the Offerer can continue sending
+ candidates in INFO requests within that dialog.
+
+ Similarly, an Answerer can send ICE candidates using INFO requests
+ within the dialog established by its 18x provisional response.
+ Figure 1 shows such a sample exchange:
+
+ STUN/TURN STUN/TURN
+ Servers Alice Bob Servers
+ | | | |
+ | STUN Bi.Req. | INVITE (Offer) | |
+ |<--------------|------------------------>| |
+ | | 183 (Answer) | TURN Alloc Req |
+ | STUN Bi.Resp. |<------------------------|--------------->|
+ |-------------->| INFO/OK (SRFLX Cand.) | |
+ | |------------------------>| TURN Alloc Resp|
+ | | INFO/OK (Relay Cand.) |<---------------|
+ | |<------------------------| |
+ | | | |
+ | | More Cands & ConnChecks| |
+ | |<=======================>| |
+ | | | |
+ | | 200 OK | |
+ | |<------------------------| |
+ | | ACK | |
+ | |------------------------>| |
+ | | | |
+ | |<===== MEDIA FLOWS =====>| |
+ | | | |
+
+ Note: "SRFLX" denotes server-reflexive candidates
+
+ Figure 1: Sample Trickle ICE Scenario with SIP
+
+3.1. Discovery Issues
+
+ In order to benefit from Trickle ICE's full potential and reduce
+ session establishment latency to a minimum, Trickle ICE Agents need
+ to generate SDP Offers and Answers that contain incomplete and
+ potentially empty sets of candidates. Such Offers and Answers can
+ only be handled meaningfully by agents that actually support
+ incremental candidate provisioning, which implies the need to confirm
+ such support before using it.
+
+ Contrary to other protocols, where "in advance" capability discovery
+ is widely implemented, the mechanisms that allow this for SIP (i.e.,
+ a combination of UA capabilities [RFC3840] and Globally Routable User
+ Agent URIs (GRUUs) [RFC5627]) have only seen low levels of adoption.
+ This presents an issue for Trickle ICE implementations as SIP UAs do
+ not have an obvious means of verifying that their peer will support
+ incremental candidate provisioning.
+
+ The Half Trickle mode of operation defined in the Trickle ICE
+ specification [RFC8838] provides one way around this, by requiring
+ the first Offer to contain a complete set of local ICE candidates and
+ using only incremental provisioning of remote candidates for the rest
+ of the session.
+
+ While using Half Trickle does provide a working solution, it also
+ comes at the price of increased latency. Therefore, Section 5 makes
+ several alternative suggestions that enable SIP UAs to engage in Full
+ Trickle right from their first Offer: Section 5.1 discusses the use
+ of online provisioning as a means of allowing the use of Trickle ICE
+ for all endpoints in controlled environments. Section 5.2 describes
+ anticipatory discovery for implementations that actually do support
+ GRUU and UA capabilities, and Section 5.3 discusses the
+ implementation and use of Half Trickle by SIP UAs where none of the
+ above are an option.
+
+3.2. Relationship with the Offer/Answer Model
+
+ From the perspective of SIP middleboxes and proxies, the Offer/Answer
+ exchange for Trickle ICE looks partly similar to the Offer/Answer
+ exchange for regular ICE for SIP [RFC8839]. However, in order to
+ have the full picture of the candidate exchange, the newly introduced
+ INFO messages need to be considered as well.
+
+
+ +-------------------------------+ +-------------------------------+
+ | Alice +--------------+ | | +--------------+ Bob |
+ | | Offer/Answer | | | | Offer/Answer | |
+ | +--------+ | Module | | | | Module | +--------+ |
+ | | ICE | +--------------+ | | +--------------+ | ICE | |
+ | | Module | | | | | | Module | |
+ | +--------+ | | | | +--------+ |
+ +-------------------------------+ +-------------------------------+
+ | | | |
+ | | INVITE (Offer) | |
+ | |--------------------->| |
+ | | 183 (Answer) | |
+ | |<---------------------| |
+ | | | |
+ | |
+ | SIP INFO (more candidates) |
+ |----------------------------------------------------->|
+ | SIP INFO (more candidates) |
+ |<-----------------------------------------------------|
+ | |
+ | STUN Binding Requests/Responses |
+ |----------------------------------------------------->|
+ | STUN Binding Requests/Responses |
+ |<-----------------------------------------------------|
+ | |
+
+ Figure 2: Distinguishing between Trickle ICE and Traditional
+ Signaling
+
+ From an architectural viewpoint, as displayed in Figure 2, exchanging
+ candidates through SIP INFO requests could be represented as
+ signaling between ICE modules and not between Offer/Answer modules of
+ SIP UAs. Then, such INFO requests do not impact the state of the
+ Offer/Answer transaction other than providing additional candidates.
+ Consequently, INFO requests are not considered Offers or Answers.
+ Nevertheless, candidates that have been exchanged using INFO requests
+ SHALL be included in subsequent Offers or Answers. The version
+ number in the "o=" line of that subsequent Offer needs to be
+ incremented by 1 per the rules in [RFC3264].
+
+4. Incremental Signaling of ICE Candidates
+
+ Trickle ICE Agents will exchange ICE descriptions compliant to
+ [RFC8838] via Offer/Answer procedures and/or INFO request bodies.
+ This requires the following SIP-specific extensions:
+
+ 1. Trickle ICE Agents MUST indicate support for Trickle ICE by
+ including the SIP option-tag "trickle-ice" in a SIP Supported:
+ header field within all SIP INVITE requests and responses.
+
+ 2. Trickle ICE Agents MUST indicate support for Trickle ICE by
+ including the ice-option "trickle" within all SDP Offers and
+ Answers in accordance to [RFC8838].
+
+ 3. Trickle ICE Agents MAY include any number of ICE candidates,
+ i.e., from zero to the complete set of candidates, in their
+ initial Offer or Answer. If the complete candidate set is
+ already included in the initial Offer, it is called Half Trickle.
+
+ 4. Trickle ICE Agents MAY exchange additional ICE candidates using
+ INFO requests within an existing INVITE dialog usage (including
+ an early dialog) as specified in [RFC6086]. The INFO requests
+ carry an Info-Package: trickle-ice. Trickle ICE Agents MUST be
+ prepared to receive INFO requests within that same dialog usage,
+ containing additional candidates and/or an indication that
+ trickling of such candidates has ended.
+
+ 5. Trickle ICE Agents MAY exchange additional ICE candidates before
+ the Answerer has sent the Answer provided that an invite dialog
+ usage is established at both Trickle ICE Agents. Note that in
+ case of forking, multiple early dialogs may exist.
+
+ The following sections provide further details on how Trickle ICE
+ Agents perform the initial Offer/Answer exchange (Section 4.1),
+ perform subsequent Offer/Answer exchanges (Section 4.2), and
+ establish the INVITE dialog usage (Section 4.3) such that they can
+ incrementally trickle candidates (Section 4.4).
+
+4.1. Initial Offer/Answer Exchange
+
+4.1.1. Sending the Initial Offer
+
+ If the Offerer includes candidates in its initial Offer, it MUST
+ encode these candidates as specified in [RFC8839].
+
+ If the Offerer wants to send its initial Offer before knowing any
+ candidate for one or more media descriptions, it MUST set the port to
+ the default value '9' for these media descriptions. If the Offerer
+ does not want to include the host IP address in the corresponding
+ "c="line, e.g., due to privacy reasons, it SHOULD include a default
+ address in the "c="line, which is set to the IPv4 address 0.0.0.0 or
+ to the IPv6 equivalent ::.
+
+ In this case, the Offerer obviously cannot know the RTP Control
+ Protocol (RTCP) transport address; thus, it MUST NOT include the
+ "rtcp" attribute [RFC3605]. This avoids potential ICE mismatch (see
+ [RFC8839]) for the RTCP transport address.
+
+ If the Offerer wants to use RTCP multiplexing [RFC5761] and/or
+ exclusive RTCP multiplexing [RFC8858], it still will include the
+ "rtcp-mux" and/or "rctp-mux-only" attribute in the initial Offer.
+
+ In any case, the Offerer MUST include the "ice-options:trickle"
+ attribute in accordance to [RFC8838] and MUST include in each "m="
+ line a "mid" attribute in accordance to [RFC5888]. The "mid"
+ attribute identifies the "m=" line to which a candidate belongs and
+ helps in case of multiple "m=" lines, when candidate gathering could
+ occur in an order different from the order of the "m=" lines.
+
+4.1.2. Receiving the Initial Offer
+
+ If the initial Offer included candidates, the Answerer uses these
+ candidates to start ICE processing as specified in [RFC8838].
+
+ If the initial Offer included the "ice-options:trickle" attribute,
+ the Answerer MUST be prepared for receiving trickled candidates later
+ on.
+
+ In case of a "m/c=" line with default values, none of the eventually
+ trickled candidates will match the default destination. This
+ situation MUST NOT cause an ICE mismatch (see [RFC8839]).
+
+4.1.3. Sending the Initial Answer
+
+ If the Answerer includes candidates in its initial Answer, it MUST
+ encode these candidates as specified in [RFC8839].
+
+ If the Answerer wants to send its initial Answer before knowing any
+ candidate for one or more media descriptions, it MUST set the port to
+ the default value '9' for these media descriptions. If the Answerer
+ does not want to include the host IP address in the corresponding
+ "c="line, e.g., due to privacy reasons, it SHOULD include a default
+ address in the "c="line, which is set to the IPv4 address 0.0.0.0 or
+ to the IPv6 equivalent ::.
+
+ In this case, the Answerer obviously cannot know the RTCP transport
+ address; thus, it MUST NOT include the "rtcp" attribute [RFC6086].
+ This avoids potential ICE mismatch (see [RFC8839]) for the RTCP
+ transport address.
+
+ If the Answerer accepts the use of RTCP multiplexing [RFC5761] and/or
+ exclusive RTCP multiplexing [RFC8858], it will include the "rtcp-mux"
+ attribute in the initial Answer.
+
+ In any case, the Answerer MUST include the "ice-options:trickle"
+ attribute in accordance to [RFC8838] and MUST include in each "m="
+ line a "mid" attribute in accordance to [RFC5888].
+
+4.1.4. Receiving the Initial Answer
+
+ If the initial Answer included candidates, the Offerer uses these
+ candidates to start ICE processing as specified in [RFC8838].
+
+ In case of a "m/c=" line with default values, none of the eventually
+ trickled candidates will match the default destination. This
+ situation MUST NOT cause an ICE mismatch (see [RFC8839]).
+
+4.2. Subsequent Offer/Answer Exchanges
+
+ Subsequent Offer/Answer exchanges are handled the same as regular ICE
+ (see Section 4.4 of [RFC8839]).
+
+ If an Offer or Answer needs to be sent while the ICE Agents are in
+ the middle of trickling, Section 4.4 of [RFC8839] applies. This
+ means that an ICE Agent includes candidate attributes for all local
+ candidates it had trickled previously for a specific media stream.
+
+4.3. Establishing the Dialog
+
+ In order to be able to start trickling, the following two conditions
+ need to be satisfied at the SIP UAs:
+
+ * Trickle ICE support at the peer agent MUST be confirmed.
+
+ * A dialog MUST have been created between the peers.
+
+ Section 5 discusses in detail the various options for satisfying the
+ first of the above conditions. However, regardless of those
+ mechanisms, agents are certain to have a clear understanding of
+ whether their peers support trickle ICE once an Offer and an Answer
+ have been exchanged, which also allows for ICE processing to commence
+ (see Figure 3).
+
+4.3.1. Establishing Dialog State through Reliable Offer/Answer Delivery
+
+ Alice Bob
+ | |
+ | INVITE (Offer) |
+ |------------------------>|
+ | 183 (Answer) |
+ |<------------------------|
+ | PRACK/OK |
+ |------------------------>|
+ | |
+ +----------------------------------------+
+ |Alice and Bob know that both can trickle|
+ |and know that the dialog is in the early|
+ |state. Send INFO! |
+ +----------------------------------------+
+ | |
+ | INFO/OK (+SRFLX Cand.) |
+ |------------------------>|
+ | INFO/OK (+SRFLX Cand.) |
+ |<------------------------|
+ | |
+
+ Note: "SRFLX" denotes server-reflexive candidates
+
+ Figure 3: A SIP Offerer can freely trickle as soon as it receives
+ an Answer
+
+ As shown in Figure 3, satisfying both conditions is relatively
+ trivial for ICE Agents that have sent an Offer in an INVITE and that
+ have received an Answer in a reliable provisional response. It is
+ guaranteed to have confirmed support (or lack thereof) for Trickle
+ ICE at the Answerer and to have fully initialized the SIP dialog at
+ both ends. Offerers and Answerers (after receipt of the PRACK
+ request) in the above situation can therefore freely commence
+ trickling within the newly established dialog.
+
+4.3.2. Establishing Dialog State through Unreliable Offer/Answer
+ Delivery
+
+ The situation is a bit more delicate for agents that have received an
+ Offer in an INVITE request and have sent an Answer in an unreliable
+ provisional response because, once the response has been sent, the
+ Answerer does not know when or if it has been received (Figure 4).
+
+ Alice Bob
+ | |
+ | INVITE (Offer) |
+ |------------------------>|
+ | 183 (Answer) |
+ |<------------------------|
+ | |
+ | +----------------------+
+ | |Bob: I don't know if |
+ | |Alice got my 183 or if|
+ | |her dialog is already |
+ | |in the early state. |
+ | | Can I send INFO??? |
+ | +----------------------+
+ | |
+
+ Figure 4: A SIP UA that sent an Answer in an unreliable
+ provisional response does not know if it was received or if the
+ dialog at the side of the Offerer has entered the early state
+
+ In order to clear this ambiguity as soon as possible, the Answerer
+ needs to retransmit the provisional response with the exponential
+ backoff timers described in [RFC3262]. These retransmissions MUST
+ cease on receipt of an INFO request carrying a "trickle-ice" Info
+ Package body, on receipt of any other in-dialog request from the
+ Offerer, or on transmission of the Answer in a 2xx response. The
+ Offerer cannot send in-dialog requests until it receives a response,
+ so the arrival of such a request proves that the response has
+ arrived. Using the INFO request for dialog confirmation is similar
+ to the procedure described in Section 7.1.1 of [RFC8839], except that
+ the STUN binding request is replaced by the INFO request.
+
+ The Offerer MUST send a Trickle ICE INFO request as soon as it
+ receives an SDP Answer in an unreliable provisional response. This
+ INFO request MUST repeat the candidates that were already provided in
+ the Offer (as would be the case when Half Trickle is performed or
+ when new candidates have not been learned since then). The first
+ case could happen when Half Trickle is used and all candidates are
+ already in the initial offer. The second case could happen when Full
+ Trickle is used and the Offerer is currently gathering additional
+ candidates but did not yet get them. Also, if the initial Offer did
+ not contain any candidates, depending on how the Offerer gathers its
+ candidates and how long it takes to do so, this INFO could still
+ contain no candidates.
+
+ When Full Trickle is used and if newly learned candidates are
+ available, the Offerer SHOULD also deliver these candidates in said
+ INFO request, unless it wants to hold back some candidates in
+ reserve, e.g., in case these candidates are expensive to use and
+ would only be trickled if all other candidates failed.
+
+ The Offerer SHOULD include an "end-of-candidates" attribute in case
+ candidate discovery has ended in the meantime and no further
+ candidates are to be trickled.
+
+ As soon as an Answerer has received such an INFO request, the
+ Answerer has an indication that a dialog is established at both ends
+ and trickling can begin (Figure 5).
+
+ Note: The "+SRFLX" in Figure 5 indicates that additional newly
+ learned server-reflexive candidates are included.
+
+ Alice Bob
+ | |
+ | INVITE (Offer) |
+ |------------------------>|
+ | 183 (Answer) |
+ |<------------------------|
+ | INFO/OK (+SRFLX Cand.) |
+ |------------------------>|
+ | |
+ | +----------------------+
+ | |Bob: Now I know Alice|
+ | | is ready. Send INFO! |
+ | +----------------------+
+ | INFO/OK (+SRFLX Cand.) |
+ |<------------------------|
+ | |
+ | 200/ACK (Answer) |
+ |<------------------------|
+
+ Note: "SRFLX" denotes server-reflexive candidates
+
+ Figure 5: A SIP UA that received an INFO request after sending an
+ unreliable provisional response knows that the dialog at the side
+ of the receiver has entered the early state
+
+ When sending the Answer in the 200 OK response to the INVITE request,
+ the Answerer needs to repeat exactly the same Answer that was
+ previously sent in the unreliable provisional response in order to
+ fulfill the corresponding requirements in [RFC3264]. Thus, the
+ Offerer needs to be prepared for receiving a different number of
+ candidates in that repeated Answer than previously exchanged via
+ trickling and MUST ignore the candidate information in that 200 OK
+ response.
+
+4.3.3. Initiating Trickle ICE without an SDP Answer
+
+ The ability to convey arbitrary candidates in INFO message bodies
+ allows ICE Agents to initiate trickling without actually sending an
+ Answer. Trickle ICE Agents can therefore respond to an INVITE
+ request with provisional responses without an SDP Answer [RFC3261].
+ Such provisional responses serve for establishing an early dialog.
+
+ Agents that choose to establish the dialog in this way MUST
+ retransmit these responses with the exponential backoff timers
+ described in [RFC3262]. These retransmissions MUST cease on receipt
+ of an INFO request carrying a "trickle-ice" Info Package body, on
+ receipt of any in-dialog requests from the Offerer, or on
+ transmission of the Answer in a 2xx response. The Offerer cannot
+ send in-dialog requests until it receives a response, so the arrival
+ of such a request proves that the response has arrived. This is
+ again similar to the procedure described in Section 6.1.1 of
+ [RFC8839], except that an Answer is not yet provided.
+
+ Note: The "+SRFLX" in Figure 6 indicates that additional newly
+ learned server-reflexive candidates are included.
+
+ Alice Bob
+ | |
+ | INVITE (Offer) |
+ |------------------------>|
+ | 183 (-) |
+ |<------------------------|
+ | INFO/OK (SRFLX Cand.) |
+ |------------------------>|
+ | |
+ | +----------------------+
+ | |Bob: Now I know again|
+ | | that Alice is ready. |
+ | | Send INFO! |
+ | +----------------------+
+ | INFO/OK (SRFLX Cand.) |
+ |<------------------------|
+ | 183 (Answer) opt. |
+ |<------------------------|
+ | INFO/OK (SRFLX Cand.) |
+ |<------------------------|
+ | 200/ACK (Answer) |
+ |<------------------------|
+
+ Note: "SRFLX" denotes server-reflexive candidates
+
+ Figure 6: A SIP UA sends an unreliable provisional response
+ without an Answer for establishing an early dialog
+
+ When sending the Answer, the agent MUST repeat all currently known
+ and used candidates, if any, and MAY include all newly gathered
+ candidates since the last INFO request was sent. However, if that
+ Answer was already sent in an unreliable provisional response, the
+ Answerers MUST repeat exactly the same Answer in the 200 OK response
+ to the INVITE request in order to fulfill the corresponding
+ requirements in [RFC3264]. In case that trickling continued, an
+ Offerer needs to be prepared for receiving fewer candidates in that
+ repeated Answer than previously exchanged via trickling and MUST
+ ignore the candidate information in that 200 OK response.
+
+4.4. Delivering Candidates in INFO Requests
+
+ Whenever new ICE candidates become available for sending, agents
+ encode them in "candidate" attributes as described by [RFC8839]. For
+ example:
+
+ a=candidate:1 1 UDP 2130706432 200a0b:12f0::1 5000 typ host
+
+ The use of SIP INFO requests happens within the context of the Info
+ Package as defined in Section 10. The media type [RFC6838] for their
+ payload MUST be set to "application/trickle-ice-sdpfrag" as defined
+ in Section 9. The INFO request body adheres to the grammar as
+ specified in Section 9.2.
+
+ Since neither the "candidate" nor the "end-of-candidates" attributes
+ contain information that would allow correlating them to a specific
+ "m=" line, it is handled through the use of pseudo "m=" lines.
+
+ Pseudo "m=" lines follow the SDP syntax for "m=" lines as defined in
+ [RFC4566] and are linked to the corresponding "m=" line in the SDP
+ Offer or Answer via the identification tag in a "mid" attribute
+ [RFC5888]. A pseudo "m=" line does not provide semantics other than
+ indicating to which "m=" line a candidate belongs. Consequently, the
+ receiving agent MUST ignore any remaining content of the pseudo "m="
+ line, which is not defined in this document. This guarantees that
+ the "application/trickle-ice-sdpfrag" bodies do not interfere with
+ the Offer/Answer procedures as specified in [RFC3264].
+
+ When sending the INFO request, the agent MAY, if already known to the
+ agent, include the same content into the pseudo "m=" line as for the
+ "m=" line in the corresponding Offer or Answer. However, since
+ Trickle ICE might be decoupled from the Offer/Answer negotiation, the
+ content might be unknown to the agent. In this case, the agent MUST
+ include the following default values:
+
+ * The media field is set to 'audio'.
+
+ * The port value is set to '9'.
+
+ * The proto value is set to 'RTP/AVP'.
+
+ * The fmt field MUST appear only once and is set to '0'.
+
+ Agents MUST include a pseudo "m=" line and an identification tag in a
+ "mid" attribute for every "m=" line whose candidate list they intend
+ to update. Such "mid" attributes MUST immediately precede the list
+ of candidates for that specific "m=" line.
+
+ All "candidate" or "end-of-candidates" attributes following a "mid"
+ attribute, up until (and excluding) the next occurrence of a pseudo
+ "m=" line, pertain to the "m=" line identified by that identification
+ tag.
+
+ Note, that there is no requirement that the INFO request body
+ contains as many pseudo "m=" lines as the Offer/Answer contains "m="
+ lines, nor that the pseudo "m=" lines be in the same order as the
+ "m=" lines that they pertain to. The correspondence can be made via
+ the "mid" attributes since candidates are grouped in sections headed
+ by "pseudo" "m=" lines. These sections contain "mid" attribute
+ values that point back to the true "m=" line.
+
+ An "end-of-candidates" attribute, preceding the first pseudo "m="
+ line, indicates the end of all trickling from that agent, as opposed
+ to end of trickling for a specific "m=" line, which would be
+ indicated by a media-level "end-of-candidates" attribute.
+
+ Refer to Figure 7 for an example of the INFO request content.
+
+ The use of pseudo "m=" lines allows for a structure similar to the
+ one in SDP Offers and Answers where separate media-level and session-
+ level sections can be distinguished. In the current case, lines
+ preceding the first pseudo "m=" line are considered to be session
+ level. Lines appearing in between or after pseudo "m=" lines will be
+ interpreted as media level.
+
+ | Note that while this specification uses the "mid" attribute
+ | from [RFC5888], it does not define any grouping semantics.
+
+ All INFO requests MUST carry the "ice-pwd" and "ice-ufrag" attributes
+ that allow mapping them to a specific ICE generation. An agent MUST
+ discard any received INFO requests containing "ice-pwd" and "ice-
+ ufrag" attributes that do not match those of the current ICE
+ Negotiation Session.
+
+ The "ice-pwd" and "ice-ufrag" attributes MUST appear at the same
+ level as the ones in the Offer/Answer exchange. In other words, if
+ they were present as session-level attributes, they will also appear
+ at the beginning of all INFO request payloads, i.e., preceding the
+ first pseudo "m=" line. If they were originally exchanged as media-
+ level attributes, potentially overriding session-level values, then
+ they will also be included in INFO request payloads following the
+ corresponding pseudo "m=" lines.
+
+ Note that when candidates are trickled, [RFC8838] requires that each
+ candidate must be delivered to the receiving Trickle ICE
+ implementation not more than once and in the same order as it was
+ conveyed. If the signaling protocol provides any candidate
+ retransmissions, they need to be hidden from the ICE implementation.
+ This requirement is fulfilled as follows.
+
+ Since the agent is not fully aware of the state of the ICE
+ Negotiation Session at its peer, it MUST include all currently known
+ and used local candidates in every INFO request. That is, the agent
+ MUST repeat in the INFO request body all candidates that were
+ previously sent under the same combination of "ice-pwd" and "ice-
+ ufrag" in the same order as they were sent before. In other words,
+ the sequence of a previously sent list of candidates MUST NOT change
+ in subsequent INFO requests, and newly gathered candidates MUST be
+ added at the end of that list. Although repeating all candidates
+ creates some overhead, it also allows easier handling of problems
+ that could arise from unreliable transports like, e.g., loss of
+ messages and reordering, which can be detected through the CSeq:
+ header field in the INFO request.
+
+ In addition, an ICE Agent needs to adhere to Section 17 of [RFC8838]
+ on preserving candidate order while trickling.
+
+ When receiving INFO requests carrying any candidates, agents MUST
+ first identify and discard the attribute lines containing candidates
+ they have already received in previous INFO requests or in the Offer/
+ Answer exchange preceding them.
+
+ Such candidates are considered to be equal if their IP address port,
+ transport, and component ID are the same. After identifying and
+ discarding the known candidates, the agents MUST forward the actual
+ new candidates to the ICE Agents in the same order as they were
+ received in the INFO request body. The ICE Agents will then process
+ the new candidates according to the rules described in [RFC8838].
+
+ Receiving an "end-of-candidates" attribute in an INFO request body --
+ with the "ice-ufrag" and "ice-pwd" attributes matching the current
+ ICE generation -- is an indication from the peer agent that it will
+ not send any further candidates. When included at the session level,
+ i.e., before any pseudo "m=" line, this indication applies to the
+ whole session; when included at the media level, the indication
+ applies only to the corresponding "m=" line. Handling of such end-
+ of-candidates indications is defined in [RFC8838].
+
+ The example in Figure 7 shows the content of a candidate delivering
+ INFO request. In the example, the "end-of-candidates" attributes
+ indicate that the candidate gathering is finished and that no further
+ INFO requests follow.
+
+ INFO sip:alice@example.com SIP/2.0
+ ...
+ Info-Package: trickle-ice
+ Content-type: application/trickle-ice-sdpfrag
+ Content-Disposition: Info-Package
+ Content-length: 862
+
+ a=ice-pwd:asd88fgpdd777uzjYhagZg
+ a=ice-ufrag:8hhY
+ m=audio 9 RTP/AVP 0
+ a=mid:1
+ a=candidate:1 1 UDP 2130706432 2001:db8:a0b:12f0::1 5000 typ host
+ a=candidate:1 2 UDP 2130706432 2001:db8:a0b:12f0::1 5001 typ host
+ a=candidate:1 1 UDP 2130706431 192.0.2.1 5010 typ host
+ a=candidate:1 2 UDP 2130706431 192.0.2.1 5011 typ host
+ a=candidate:2 1 UDP 1694498815 192.0.2.3 5010 typ srflx
+ raddr 192.0.2.1 rport 8998
+ a=candidate:2 2 UDP 1694498815 192.0.2.3 5011 typ srflx
+ raddr 192.0.2.1 rport 8998
+ a=end-of-candidates
+ m=audio 9 RTP/AVP 0
+ a=mid:2
+ a=candidate:1 1 UDP 2130706432 2001:db8:a0b:12f0::1 6000 typ host
+ a=candidate:1 2 UDP 2130706432 2001:db8:a0b:12f0::1 6001 typ host
+ a=candidate:1 1 UDP 2130706431 192.0.2.1 6010 typ host
+ a=candidate:1 2 UDP 2130706431 192.0.2.1 6011 typ host
+ a=candidate:2 1 UDP 1694498815 192.0.2.3 6010 typ srflx
+ raddr 192.0.2.1 rport 9998
+ a=candidate:2 2 UDP 1694498815 192.0.2.3 6011 typ srflx
+ raddr 192.0.2.1 rport 9998
+ a=end-of-candidates
+
+ Note: In a real INFO request, there will be no line breaks
+ in the "candidate" attributes
+
+ Figure 7: An Example for the Content of an INFO Request
+
+5. Initial Discovery of Trickle ICE Support
+
+ SIP UAs are required by [RFC8838] to indicate their support of and
+ intent to use Trickle ICE in their Offers and Answers by using the
+ "ice-options:trickle" attribute, and they MUST include the SIP
+ option-tag "trickle-ice" in a SIP Supported: or Require: header
+ field. This makes discovery fairly straightforward for Answerers or
+ for cases where Offers need to be generated within existing dialogs
+ (i.e., when sending UPDATE or re-INVITE requests). In both
+ scenarios, prior SDP bodies will have provided the necessary
+ information.
+
+ Obviously, such information is not available at the time a first
+ Offer is being constructed, and it is therefore impossible for ICE
+ Agents to determine support for incremental provisioning that way.
+ The following options are suggested as ways of addressing this issue.
+
+5.1. Provisioning Support for Trickle ICE
+
+ In certain situations, it may be possible for integrators deploying
+ Trickle ICE to know in advance that some or all endpoints reachable
+ from within the deployment will support Trickle ICE. This is the
+ case, for example, if Session Border Controllers (SBCs) with support
+ for this specification are used to connect to UAs that do not support
+ Trickle ICE.
+
+ While the exact mechanism for allowing such provisioning is out of
+ scope here, this specification encourages trickle ICE implementations
+ to allow the option in the way they find most appropriate.
+
+ However, an Offerer assuming Trickle ICE support MUST include a SIP
+ Require: trickle-ice header field. That way, if the provisioned
+ assumption of Trickle ICE support ends up being incorrect, the
+ failure is (a) operationally easy to track down and (b) recoverable
+ by the client, i.e., they can resend the request without the SIP
+ Require: header field and without the assumption of Trickle ICE
+ support.
+
+5.2. Trickle ICE Discovery with Globally Routable User Agent URIs
+ (GRUUs)
+
+ [RFC3840] provides a way for SIP UAs to query for support of specific
+ capabilities using, among others, OPTIONS requests. On the other
+ hand, support for GRUU according to [RFC5627] allows SIP requests to
+ be addressed to specific UAs (as opposed to arbitrary instances of an
+ address of record). Combining the two and using the "trickle-ice"
+ option tag defined in Section 10.6 provides SIP UAs with a way of
+ learning the capabilities of specific SIP UA instances and then
+ addressing them directly with INVITE requests that require Trickle
+ ICE support.
+
+ Such learning of capabilities may happen in different ways. One
+ option for a SIP UA is to learn the GRUU instance ID of a peer
+ through presence and then to query its capabilities with an OPTIONS
+ request. Alternatively, it can also just send an OPTIONS request to
+ the Address of Record (AOR) it intends to contact and then inspect
+ the returned response(s) for support of both GRUU and Trickle ICE
+ (Figure 8). It is noted that using the GRUU means that the INVITE
+ request can go only to that particular device. This prevents the use
+ of forking for that request.
+
+ Alice Bob
+ | |
+ | OPTIONS sip:b1@example.com SIP/2.0 |
+ |-------------------------------------------------->|
+ | |
+ | 200 OK |
+ | Contact: sip:b1@example.com;gr=hha9s8d-999a |
+ | ;audio;video|;trickle-ice;... |
+ |<--------------------------------------------------|
+ | |
+ | INVITE sip:b1@example.com;gr=hha9s8d-999a SIP/2.0 |
+ | Supported: trickle-ice |
+ | (Offer) |
+ |-------------------------------------------------->|
+ | |
+ | 183 (Answer) |
+ |<--------------------------------------------------|
+ | INFO/OK (Trickling) |
+ |<------------------------------------------------->|
+ | |
+ | ... |
+ | |
+
+ Figure 8: Trickle ICE Support Discovery with OPTIONS and GRUU
+
+ Confirming support for Trickle ICE through [RFC3840] gives SIP UAs
+ the option to engage in Full Trickle negotiation (as opposed to the
+ more lengthy Half Trickle) from the very first Offer they send.
+
+5.3. Fall Back to Half Trickle
+
+ In cases where none of the other mechanisms in this section are
+ acceptable, SIP UAs should use the Half Trickle mode defined in
+ [RFC8838]. With Half Trickle, agents initiate sessions the same way
+ they would when using ICE for SIP [RFC8839]. This means that, prior
+ to actually sending an Offer, agents first gather ICE candidates in a
+ blocking way and then send them all in that Offer. The blocking
+ nature of the process implies that some amount of latency will be
+ accumulated, and it is advised that agents try to anticipate it where
+ possible, for example, when user actions indicate a high likelihood
+ for an imminent call (e.g., activity on a keypad or a phone going off
+ hook).
+
+ Using Half Trickle results in Offers that are compatible with both
+ ICE SIP endpoints [RFC8839] and legacy endpoints [RFC3264].
+
+ STUN/TURN STUN/TURN
+ Servers Alice Bob Servers
+ | | | |
+ |<--------------| | |
+ | | | |
+ | | | |
+ | Candidate | | |
+ | | | |
+ | | | |
+ | Discovery | | |
+ | | | |
+ | | | |
+ |-------------->| INVITE (Offer) | |
+ | |---------------------------->| |
+ | | 183 (Answer) |-------------->|
+ | |<----------------------------| |
+ | | INFO (repeated candidates) | |
+ | |---------------------------->| |
+ | | | |
+ | | INFO (more candidates) | Candidate |
+ | |<----------------------------| |
+ | | Connectivity Checks | |
+ | |<===========================>| Discovery |
+ | | INFO (more candidates) | |
+ | |<----------------------------| |
+ | | Connectivity Checks |<--------------|
+ | |<===========================>| |
+ | | | |
+ | | 200 OK | |
+ | |<----------------------------| |
+ | | | |
+ | |<======= MEDIA FLOWS =======>| |
+ | | | |
+
+ Figure 9: Example of a Typical (Half) Trickle ICE Exchange with SIP
+
+ As a reminder, once a single Offer or Answer has been exchanged
+ within a specific dialog, support for Trickle ICE will have been
+ determined. No further use of Half Trickle will therefore be
+ necessary within that same dialog, and all subsequent exchanges can
+ use the Full Trickle mode of operation.
+
+6. Considerations for RTP and RTCP Multiplexing
+
+ The following consideration describes options for Trickle ICE in
+ order to give some guidance to implementers on how trickling can be
+ optimized with respect to providing RTCP candidates.
+
+ Handling of the "rtcp" attribute [RFC3605] and the "rtcp-mux"
+ attribute for RTP/RTCP multiplexing [RFC5761] is already considered
+ in Section 5.1.1.1 of [RFC8445] and in [RFC5761]. These
+ considerations are still valid for Trickle ICE; however, trickling
+ provides more flexibility for the sequence of candidate exchange in
+ case of RTCP multiplexing.
+
+ If the Offerer supports RTP/RTCP multiplexing exclusively as
+ specified in [RFC8858], the procedures in that document apply for the
+ handling of the "rtcp-mux-only", "rtcp", and "rtcp-mux" attributes.
+
+ While a Half Trickle Offerer has to send an Offer compliant to
+ [RFC8839] and [RFC5761] including candidates for all components, the
+ flexibility of a Full Trickle Offerer allows the sending of only RTP
+ candidates (component 1) in the initial Offer assuming that RTCP
+ multiplexing is supported by the Answerer. A Full Trickle Offerer
+ would need to start gathering and trickling RTCP candidates
+ (component 2) only after having received an indication in the Answer
+ that the Answerer unexpectedly does not support RTCP multiplexing.
+
+ A Trickle Answerer MAY include an "rtcp-mux" attribute [RFC5761] in
+ the "application/trickle-ice-sdpfrag" body if it supports and uses
+ RTP and RTCP multiplexing. The Trickle Answerer needs to follow the
+ guidance on the usage of the "rtcp" attribute as given in [RFC8839]
+ and [RFC3605]. Receipt of this attribute at the Offerer in an INFO
+ request prior to the Answer indicates that the Answerer supports and
+ uses RTP and RTCP multiplexing. The Offerer can use this
+ information, e.g., for stopping the gathering of RTCP candidates and/
+ or for freeing corresponding resources.
+
+ This behavior is illustrated by the following example Offer that
+ indicates support for RTP and RTCP multiplexing.
+
+ v=0
+ o=alice 2890844526 2890844526 IN IP6 atlanta.example.com
+ s=
+ c=IN IP6 2001:db8:a0b:12f0::3
+ t=0 0
+ a=ice-pwd:777uzjYhagZgasd88fgpdd
+ a=ice-ufrag:Yhh8
+ m=audio 5000 RTP/AVP 0
+ a=mid:1
+ a=rtcp-mux
+ a=candidate:1 1 UDP 1658497328 2001:db8:a0b:12f0::3 5000 typ host
+
+ Once the dialog is established as described in Section 4.3, the
+ Answerer sends the following INFO request.
+
+ INFO sip:alice@example.com SIP/2.0
+ ...
+ Info-Package: trickle-ice
+ Content-type: application/trickle-ice-sdpfrag
+ Content-Disposition: Info-Package
+ Content-length: 161
+
+ a=ice-pwd:asd88fgpdd777uzjYhagZg
+ a=ice-ufrag:8hhY
+ m=audio 9 RTP/AVP 0
+ a=mid:1
+ a=rtcp-mux
+ a=candidate:1 1 UDP 1658497382 2001:db8:a0b:12f0::4 6000 typ host
+
+ This INFO request indicates that the Answerer supports and uses RTP
+ and RTCP multiplexing as well. It allows the Offerer to omit
+ gathering RTCP candidates or releasing already gathered RTCP
+ candidates. If the INFO request did not contain the "rtcp-mux"
+ attribute, the Offerer has to gather RTCP candidates unless it wants
+ to wait until receipt of an Answer that eventually confirms support
+ or non-support for RTP and RTCP multiplexing. In case the Offerer
+ already sent RTCP candidates in a previous INFO request, it still
+ needs to repeat them in subsequent INFO requests, even when that
+ support for RTCP multiplexing was confirmed by the Answerer and the
+ Offerer has released its RTCP candidates.
+
+7. Considerations for Media Multiplexing
+
+ The following considerations describe options for Trickle ICE in
+ order to give some guidance to implementers on how trickling can be
+ optimized with respect to providing candidates in case of Media
+ Multiplexing [RFC8843]. It is assumed that the reader is familiar
+ with [RFC8843].
+
+ ICE candidate exchange is already considered in Section 10 of
+ [RFC8843]. These considerations are still valid for Trickle ICE;
+ however, trickling provides more flexibility for the sequence of
+ candidate exchange, especially in Full Trickle mode.
+
+ Except for bundle-only "m=" lines, a Half Trickle Offerer has to send
+ an Offer with candidates for all bundled "m=" lines. The additional
+ flexibility, however, allows a Full Trickle Offerer to initially send
+ only candidates for the "m=" line with the suggested Offerer BUNDLE
+ address.
+
+ On receipt of the Answer, the Offerer will detect if BUNDLE is
+ supported by the Answerer and if the suggested Offerer BUNDLE address
+ was selected. In this case, the Offerer does not need to trickle
+ further candidates for the remaining "m=" lines in a bundle.
+ However, if BUNDLE is not supported, the Full Trickle Offerer needs
+ to gather and trickle candidates for the remaining "m=" lines as
+ necessary. If the Answerer selects an Offerer BUNDLE address that is
+ different from the suggested Offerer BUNDLE address, the Full Trickle
+ Offerer needs to gather and trickle candidates for the "m=" line that
+ carries the selected Offerer BUNDLE address.
+
+ A Trickle Answerer SHOULD include a "group:BUNDLE" attribute
+ [RFC8843] at session level in the "application/trickle-ice-sdpfrag"
+ body if it supports and uses bundling. When doing so, the Answerer
+ MUST include all identification-tags in the same order that is used
+ or will be used in the Answer.
+
+ Receipt of this attribute at the Offerer in an INFO request prior to
+ the Answer indicates that the Answerer supports and uses bundling.
+ The Offerer can use this information, e.g., for stopping the
+ gathering of candidates for the remaining "m=" lines in a bundle and/
+ or for freeing corresponding resources.
+
+ This behavior is illustrated by the following example Offer that
+ indicates support for Media Multiplexing.
+
+ If the Offerer already sent candidates for "m=" lines in a bundle in
+ a previous INFO request, it still needs to repeat them in subsequent
+ INFO requests, even when that support for bundling was confirmed by
+ the Answerer and the Offerer has released candidates that are no
+ longer needed.
+
+ v=0
+ o=alice 2890844526 2890844526 IN IP6 atlanta.example.com
+ s=
+ c=IN IP6 2001:db8:a0b:12f0::3
+ t=0 0
+ a=group:BUNDLE foo bar
+ a=ice-pwd:777uzjYhagZgasd88fgpdd
+ a=ice-ufrag:Yhh8
+ m=audio 10000 RTP/AVP 0
+ a=mid:foo
+ a=rtcp-mux
+ a=rtpmap:0 PCMU/8000
+ a=extmap 1 urn:ietf:params:rtp-hdrext:sdes:mid
+ a=candidate:1 1 UDP 1658497328 2001:db8:a0b:12f0::3 10000 typ host
+ m=video 10002 RTP/AVP 31
+ a=mid:bar
+ a=rtcp-mux
+ a=rtpmap:31 H261/90000
+ a=extmap 1 urn:ietf:params:rtp-hdrext:sdes:mid
+
+ The example Offer indicates support for RTP and RTCP multiplexing and
+ contains a "candidate" attribute only for the "m=" line with the
+ suggested Offerer BUNDLE address. Once the dialog is established as
+ described in Section 4.3, the Answerer sends the following INFO
+ request.
+
+ INFO sip:alice@example.com SIP/2.0
+ ...
+ Info-Package: trickle-ice
+ Content-type: application/trickle-ice-sdpfrag
+ Content-Disposition: Info-Package
+ Content-length: 219
+
+ a=group:BUNDLE foo bar
+ a=ice-pwd:asd88fgpdd777uzjYhagZg
+ a=ice-ufrag:8hhY
+ m=audio 9 RTP/AVP 0
+ a=mid:foo
+ a=rtcp-mux
+ a=candidate:1 1 UDP 1658497328 2001:db8:a0b:12f0::3 5000 typ host
+
+ This INFO request indicates that the Answerer supports and uses Media
+ Multiplexing as well. Note that the Answerer only includes a single
+ pseudo "m=" line since candidates matching those from the second "m="
+ line in the offer are not needed from the Answerer.
+
+ The INFO request also indicates that the Answerer accepted the
+ suggested Offerer BUNDLE address. This allows the Offerer to omit
+ gathering RTP and RTCP candidates for the other "m=" lines or
+ releasing already gathered candidates. If the INFO request did not
+ contain the "group:BUNDLE" attribute, the Offerer has to gather RTP
+ and RTCP candidates for the other "m=" lines unless it wants to wait
+ until receipt of an Answer that eventually confirms support or non-
+ support for Media Multiplexing.
+
+ Independent of using Full Trickle or Half Trickle mode, the rules
+ from [RFC8859] apply to both, Offerer and Answerer, when putting
+ attributes as specified in Section 9.2 in the "application/trickle-
+ ice-sdpfrag" body.
+
+8. SDP "end-of-candidates" Attribute
+
+8.1. Definition
+
+ This section defines the new SDP media-level and session-level
+ [RFC4566] "end-of-candidates" attribute. "end-of-candidates" is a
+ property attribute [RFC4566]; hence, it has no value. By including
+ this attribute in an Offer or Answer, the sending agent indicates
+ that it will not trickle further candidates. When included at the
+ session level, this indication applies to the whole session; when
+ included at the media level, the indication applies only to the
+ corresponding media description.
+
+ Name: end-of-candidates
+
+ Value: N/A
+
+ Usage Level: media and session level
+
+ Charset Dependent: no
+
+ Mux Category: IDENTICAL
+
+ Example: a=end-of-candidates
+
+8.2. Offer/Answer Procedures
+
+ The Offerer or Answerer MAY include an "end-of-candidates" attribute
+ in case candidate discovery has ended and no further candidates are
+ to be trickled. The Offerer or Answerer MUST provide the "end-of-
+ candidates" attribute together with the "ice-ufrag" and "ice-pwd"
+ attributes of the current ICE generation as required by [RFC8838].
+ When included at the session level, this indication applies to the
+ whole session; when included at the media level, the indication
+ applies only to the corresponding media description.
+
+ Receipt of an "end-of-candidates" attribute at an Offerer or Answerer
+ -- with the "ice-ufrag" and "ice-pwd" attributes matching the current
+ ICE generation -- indicates that the gathering of candidates has
+ ended at the peer, for either the session or only the corresponding
+ media description as specified above. The receiving agent forwards
+ an end-of-candidates indication to the ICE Agent, which in turn acts
+ as specified in [RFC8838].
+
+9. Content Type "application/trickle-ice-sdpfrag"
+
+9.1. Overall Description
+
+ An "application/trickle-ice-sdpfrag" body is used exclusively by the
+ "trickle-ice" Info Package. Other SDP-related applications need to
+ define their own media type. The INFO request body uses a subset of
+ the possible SDP lines as defined by the grammar in [RFC4566]. A
+ valid body uses only pseudo "m=" lines and certain attributes that
+ are needed and/or useful for trickling candidates. The content
+ adheres to the following grammar.
+
+9.2. Grammar
+
+ The grammar of an "application/trickle-ice-sdpfrag" body is based on
+ the following ABNF [RFC5234]. It specifies the subset of existing
+ SDP attributes that is needed or useful for trickling candidates.
+ The grammar uses the indicator for case-sensitive %s, as defined in
+ [RFC7405], but it also imports grammar for other SDP attributes that
+ precede the production of [RFC7405]. A sender SHOULD use lower case
+ for attributes from such earlier grammar, but a receiver MUST treat
+ them as case insensitive.
+
+ ; Syntax
+ trickle-ice-sdpfrag = session-level-fields
+ pseudo-media-descriptions
+ session-level-fields = *(session-level-field CRLF)
+
+ session-level-field = ice-lite-attribute /
+ ice-pwd-attribute /
+ ice-ufrag-attribute /
+ ice-options-attribute /
+ ice-pacing-attribute /
+ end-of-candidates-attribute /
+ bundle-group-attribute /
+ extension-attribute-fields
+ ; for future extensions
+
+ ice-lite-attribute = %s"a" "=" ice-lite
+ ice-pwd-attribute = %s"a" "=" ice-pwd-att
+ ice-ufrag-attribute = %s"a" "=" ice-ufrag-att
+ ice-pacing-attribute = %s"a" "=" ice-pacing-att
+ ice-options-attribute = %s"a" "=" ice-options
+ end-of-candidates-attribute = %s"a" "=" end-of-candidates
+ end-of-candidates = %s"end-of-candidates"
+ bundle-group-attribute = %s"a" "=" %s"group:" bundle-semantics
+ *(SP identification-tag)
+ bundle-semantics = "BUNDLE"
+ extension-attribute-fields = attribute-fields
+
+ pseudo-media-descriptions = *( media-field
+ trickle-ice-attribute-fields )
+ trickle-ice-attribute-fields = *(trickle-ice-attribute-field CRLF)
+ trickle-ice-attribute-field = mid-attribute /
+ candidate-attributes /
+ ice-pwd-attribute /
+ ice-ufrag-attribute /
+ remote-candidate-attribute /
+ end-of-candidates-attribute /
+ rtcp-attribute /
+ rtcp-mux-attribute /
+ rtcp-mux-only-attribute /
+ extension-attribute-fields
+ ; for future extensions
+
+ rtcp-attribute = %s"a" "=" %s"rtcp"
+ rtcp-mux-attribute = %s"a" "=" %s"rtcp-mux"
+ rtcp-mux-only-attribute = %s"a" "=" %s"rtcp-mux-only"
+ candidate-attributes = %s"a" "=" candidate-attribute
+ remote-candidate-attribute = %s"a" "=" remote-candidate-att
+
+ ice-lite, ice-pwd-att, remote-candidate-att, ice-ufrag-att, ice-
+ pacing-att, ice-options, candidate-attribute, and remote-candidate-
+ att are from [RFC8839]; identification-tag and mid-attribute are from
+ [RFC5888]; and media-field and attribute-fields are from [RFC4566].
+ The "rtcp" attribute is defined in [RFC3605], the "rtcp-mux"
+ attribute is defined in [RFC5761], and the "rtcp-mux-only" attribute
+ is defined in [RFC8858]. The latter attributes lack formal grammar
+ in their corresponding RFCs and are reproduced here.
+
+ The "ice-pwd" and "ice-ufrag" attributes MUST appear at the same
+ level as the ones in the Offer/Answer exchange. In other words, if
+ they were present as session-level attributes, they will also appear
+ at the beginning of all INFO request payloads, i.e., preceding all
+ pseudo "m=" lines. If they were originally exchanged as media-level
+ attributes, potentially overriding session-level values, then they
+ will also be included in INFO request payloads following the
+ corresponding pseudo "m=" lines.
+
+ An Agent MUST ignore any received unknown extension-attribute-fields.
+
+10. Info Package
+
+10.1. Rationale -- Why INFO?
+
+ The decision to use SIP INFO requests as a candidate transport method
+ is based primarily on their lightweight nature. Once a dialog has
+ been established, INFO requests can be exchanged both ways with no
+ restrictions on timing and frequency and no risk of collision.
+
+ A critical fact is that the sending of Trickle ICE candidates in one
+ direction is entirely uncoupled from sending candidates in the other
+ direction. Thus, the sending of candidates in each direction can be
+ done by a stream of INFO requests that is not correlated with the
+ stream of INFO requests in the other direction. And since each INFO
+ request cumulatively includes the contents of all previous INFO
+ requests in that direction, the ordering between INFO requests need
+ not be preserved. All of this permits using largely independent INFO
+ requests.
+
+ Contrarily, UPDATE or other Offer/Answer mechanisms assume that the
+ messages in each direction are tightly coupled with messages in the
+ other direction. Using Offer/Answer and UPDATE requests [RFC3311]
+ would introduce the following complications:
+
+ Blocking of messages: Offer/Answer is defined as a strictly
+ sequential mechanism in [RFC3264]. There can only be a maximum of
+ one active exchange at any point of time. Both sides cannot
+ simultaneously send Offers nor can they generate multiple Offers
+ prior to receiving an Answer. Using UPDATE requests for candidate
+ transport would therefore imply the implementation of a candidate
+ pool at every agent where candidates can be stored until it is
+ once again that agent's "turn" to emit an Answer or a new Offer.
+ Such an approach would introduce non-negligible complexity for no
+ additional value.
+
+ Elevated risk of glare: The sequential nature of Offer/Answer also
+ makes it impossible for both sides to send Offers simultaneously.
+ What's worse is that there are no mechanisms in SIP to actually
+ prevent that. [RFC3261], where the situation of Offers crossing
+ on the wire is described as "glare", only defines a procedure for
+ addressing the issue after it has occurred. According to that
+ procedure, both Offers are invalidated and both sides need to
+ retry the negotiation after a period between 0 and 4 seconds. The
+ high likelihood for glare and the average two-second backoff
+ intervals to occur implies that the duration of Trickle ICE
+ processing would not only fail to improve but actually exceed
+ those of regular ICE.
+
+ INFO messages decouple the exchange of candidates from the Offer/
+ Answer negotiation and are subject to none of the glare issues
+ described above, which makes them a very convenient and lightweight
+ mechanism for asynchronous delivery of candidates.
+
+ Using in-dialog INFO messages also provides a way of guaranteeing
+ that candidates are delivered end to end, between the same entities
+ that are actually in the process of initiating a session. Out-of-
+ dialog alternatives would have implied requiring support for GRUU
+ [RFC5627] that, given GRUUs relatively low adoption levels, would
+ have constituted too strong of a constraint to the adoption of
+ Trickle ICE.
+
+10.2. Overall Description
+
+ This specification defines an Info Package for use by SIP UAs
+ implementing Trickle ICE. INFO requests carry ICE candidates
+ discovered after the peer UAs have confirmed mutual support for
+ Trickle ICE.
+
+10.3. Applicability
+
+ The purpose of the ICE protocol is to establish a media path in the
+ presence of NAT and firewalls. The candidates are transported in
+ INFO requests and are part of this establishment.
+
+ Candidates sent by a Trickle ICE Agent after the Offer follow the
+ same signaling path and reach the same entity as the Offer itself.
+ While it is true that GRUUs can be used to achieve this, one of the
+ goals of this specification is to allow operation of Trickle ICE in
+ as many environments as possible including those without GRUU
+ support. Using out-of-dialog SUBSCRIBE/NOTIFY requests would not
+ satisfy this goal.
+
+10.4. Info Package Name
+
+ This document defines a SIP Info Package as per [RFC6086]. The Info
+ Package token name for this package is "trickle-ice".
+
+10.5. Info Package Parameters
+
+ This document does not define any Info Package parameters.
+
+10.6. SIP Option Tags
+
+ [RFC6086] allows Info Package specifications to define SIP option-
+ tags. This specification extends the option-tag construct of the SIP
+ grammar as follows:
+
+ option-tag /= "trickle-ice"
+
+ SIP entities that support this specification MUST place the "trickle-
+ ice" option-tag in a SIP Supported: or Require: header field within
+ all SIP INVITE requests and responses.
+
+ When responding to, or generating, a SIP OPTIONS request, a SIP
+ entity MUST also include the "trickle-ice" option-tag in a SIP
+ Supported: or Require: header field.
+
+10.7. INFO Request Body Parts
+
+ Entities implementing this specification MUST include a payload of
+ type "application/trickle-ice-sdpfrag" in SIP INFO requests as
+ defined in Section 9.2. The payload is used to convey SDP-encoded
+ ICE candidates.
+
+10.8. Info Package Usage Restrictions
+
+ This document does not define any Info Package Usage Restrictions.
+
+10.9. Rate of INFO Requests
+
+ Given that IP addresses may be gathered rapidly, a Trickle ICE Agent
+ with many network interfaces might create a high rate of INFO
+ requests if every newly detected candidate is trickled individually
+ without aggregation. An implementation MUST aggregate ICE candidates
+ in case an unreliable transport protocol such as UDP is used. A
+ Trickle ICE Agent MUST NOT have more than one INFO request pending at
+ any one time. When INFO messages are sent over an unreliable
+ transport, they are retransmitted according to the rules specified in
+ [RFC3261], Section 17.1.2.1.
+
+ If the INFO requests are sent on top of TCP, which is probably the
+ standard way, it is not an issue for the network anymore, but it can
+ remain one for SIP proxies and other intermediaries forwarding the
+ SIP INFO messages. Also, an endpoint may not be able to tell that it
+ has congestion controlled transport all the way.
+
+10.10. Info Package Security Considerations
+
+ See Section 13.
+
+11. Deployment Considerations
+
+ Trickle ICE uses two mechanisms for the exchange of candidate
+ information. This imposes new requirements to certain middleboxes
+ that are used in some networks, e.g., for monitoring purposes. While
+ the first mechanism, SDP Offers and Answers, is already used by
+ regular ICE and is assumed to be supported, the second mechanism,
+ INFO request bodies, needs to be considered by such middleboxes as
+ well when trickle ICE is used. Such middleboxes need to make sure
+ that they remain in the signaling path of the INFO requests and
+ understand the INFO request body.
+
+12. IANA Considerations
+
+12.1. SDP "end-of-candidates" Attribute
+
+ This section defines a new SDP media-level and session-level
+ [RFC4566] "end-of-candidates" attribute, which is a property
+ attribute [RFC4566] and hence has no value.
+
+ Name: end-of-candidates
+
+ Value: N/A
+
+ Usage Level: media and session
+
+ Charset Dependent: no
+
+ Purpose: The sender indicates that it will not trickle further
+ ICE candidates.
+
+ O/A Procedures: RFC 8840 defines the detailed SDP Offer/Answer
+ procedures for the "end-of-candidates" attribute.
+
+ Mux Category: IDENTICAL
+
+ Reference: RFC 8840
+
+ Example: a=end-of-candidates
+
+12.2. Media Type "application/trickle-ice-sdpfrag"
+
+ This document defines the new media type "application/trickle-ice-
+ sdpfrag" in accordance with [RFC6838].
+
+ Type name: application
+
+ Subtype name: trickle-ice-sdpfrag
+
+ Required parameters: None.
+
+ Optional parameters: None.
+
+ Encoding considerations: The media contents follow the same rules as
+ SDP, except as noted in this document. The media contents are
+ text, with the grammar specified in Section 9.2.
+
+ Although the initially defined content of a trickle-ice-sdpfrag
+ body does only include ASCII characters, UTF-8-encoded content
+ might be introduced via extension attributes. The "charset"
+ attribute may be used to signal the presence of other character
+ sets in certain parts of a trickle-ice-sdpfrag body (see
+ [RFC4566]). Arbitrary binary content cannot be directly
+ represented in SDP or a trickle-ice-sdpfrag body.
+
+ Security considerations: See [RFC4566] and RFC 8840
+
+ Interoperability considerations: See RFC 8840
+
+ Published specification: See RFC 8840
+
+ Applications that use this media type: Trickle ICE
+
+ Fragment identifier considerations: N/A
+
+ Additional information:
+
+ Deprecated alias names for this type: N/A
+ Magic number(s): N/A
+ File extension(s): N/A
+ Macintosh File Type Code(s): N/A
+
+ Person and email address to contact for further information: The
+ IESG (iesg@ietf.org)
+
+ Intended usage: Trickle ICE for SIP as specified in RFC 8840.
+
+ Restrictions on usage: N/A
+
+ Author/Change controller: The IESG (iesg@ietf.org)
+
+ Provisional registration? (standards tree only): N/A
+
+12.3. SIP Info Package "trickle-ice"
+
+ This document defines a new SIP Info Package named "trickle-ice" and
+ updates the "Info Packages Registry" with the following entry.
+
+ +=============+===========+
+ | Name | Reference |
+ +=============+===========+
+ | trickle-ice | RFC 8840 |
+ +-------------+-----------+
+
+ Table 1
+
+12.4. SIP Option Tag "trickle-ice"
+
+ This specification registers a new SIP option tag "trickle-ice" as
+ per the guidelines in Section 27.1 of [RFC3261] and updates the
+ "Option Tags" subregistry of the SIP Parameters registry with the
+ following entry:
+
+ +=============+==============================+===========+
+ | Name | Description | Reference |
+ +=============+==============================+===========+
+ | trickle-ice | This option tag is used to | RFC 8840 |
+ | | indicate that a UA supports | |
+ | | and understands Trickle ICE. | |
+ +-------------+------------------------------+-----------+
+
+ Table 2
+
+13. Security Considerations
+
+ The Security Considerations of [RFC6086], [RFC8838], and [RFC8839]
+ apply. This document clarifies how the above specifications are used
+ together for trickling candidates and does not create additional
+ security risks.
+
+ The new Info Package "trickle-ice" and the new media type
+ "application/trickle-ice-sdpfrag" do not introduce additional
+ security considerations when used in the context of Trickle ICE.
+ Both are not intended to be used for other applications, so any
+ security considerations for its use in other contexts is out of the
+ scope of this document
+
+14. References
+
+14.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>.
+
+ [RFC3261] Rosenberg, J., Schulzrinne, H., Camarillo, G., Johnston,
+ A., Peterson, J., Sparks, R., Handley, M., and E.
+ Schooler, "SIP: Session Initiation Protocol", RFC 3261,
+ DOI 10.17487/RFC3261, June 2002,
+ <https://www.rfc-editor.org/info/rfc3261>.
+
+ [RFC3262] Rosenberg, J. and H. Schulzrinne, "Reliability of
+ Provisional Responses in Session Initiation Protocol
+ (SIP)", RFC 3262, DOI 10.17487/RFC3262, June 2002,
+ <https://www.rfc-editor.org/info/rfc3262>.
+
+ [RFC3264] Rosenberg, J. and H. Schulzrinne, "An Offer/Answer Model
+ with Session Description Protocol (SDP)", RFC 3264,
+ DOI 10.17487/RFC3264, June 2002,
+ <https://www.rfc-editor.org/info/rfc3264>.
+
+ [RFC3605] Huitema, C., "Real Time Control Protocol (RTCP) attribute
+ in Session Description Protocol (SDP)", RFC 3605,
+ DOI 10.17487/RFC3605, October 2003,
+ <https://www.rfc-editor.org/info/rfc3605>.
+
+ [RFC4566] Handley, M., Jacobson, V., and C. Perkins, "SDP: Session
+ Description Protocol", RFC 4566, DOI 10.17487/RFC4566,
+ July 2006, <https://www.rfc-editor.org/info/rfc4566>.
+
+ [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>.
+
+ [RFC5761] Perkins, C. and M. Westerlund, "Multiplexing RTP Data and
+ Control Packets on a Single Port", RFC 5761,
+ DOI 10.17487/RFC5761, April 2010,
+ <https://www.rfc-editor.org/info/rfc5761>.
+
+ [RFC5888] Camarillo, G. and H. Schulzrinne, "The Session Description
+ Protocol (SDP) Grouping Framework", RFC 5888,
+ DOI 10.17487/RFC5888, June 2010,
+ <https://www.rfc-editor.org/info/rfc5888>.
+
+ [RFC6086] Holmberg, C., Burger, E., and H. Kaplan, "Session
+ Initiation Protocol (SIP) INFO Method and Package
+ Framework", RFC 6086, DOI 10.17487/RFC6086, January 2011,
+ <https://www.rfc-editor.org/info/rfc6086>.
+
+ [RFC6838] Freed, N., Klensin, J., and T. Hansen, "Media Type
+ Specifications and Registration Procedures", BCP 13,
+ RFC 6838, DOI 10.17487/RFC6838, January 2013,
+ <https://www.rfc-editor.org/info/rfc6838>.
+
+ [RFC7405] Kyzivat, P., "Case-Sensitive String Support in ABNF",
+ RFC 7405, DOI 10.17487/RFC7405, December 2014,
+ <https://www.rfc-editor.org/info/rfc7405>.
+
+ [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>.
+
+ [RFC8445] Keranen, A., Holmberg, C., and J. Rosenberg, "Interactive
+ Connectivity Establishment (ICE): A Protocol for Network
+ Address Translator (NAT) Traversal", RFC 8445,
+ DOI 10.17487/RFC8445, July 2018,
+ <https://www.rfc-editor.org/info/rfc8445>.
+
+ [RFC8838] Ivov, E., Uberti, J., and P. Saint-Andre, "Trickle ICE:
+ Incremental Provisioning of Candidates for the Interactive
+ Connectivity Establishment (ICE) Protocol", RFC 8838,
+ DOI 10.17487/RFC8838, January 2021,
+ <https://www.rfc-editor.org/info/rfc8838>.
+
+ [RFC8839] Petit-Huguenin, M., Nandakumar, S., Holmberg, C., Keränen,
+ A., and R. Shpount, "Session Description Protocol (SDP)
+ Offer/Answer Procedures for Interactive Connectivity
+ Establishment (ICE)", RFC 8839, DOI 10.17487/RFC8839,
+ January 2021, <https://www.rfc-editor.org/info/rfc8839>.
+
+ [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>.
+
+ [RFC8858] Holmberg, C., "Indicating Exclusive Support of RTP and RTP
+ Control Protocol (RTCP) Multiplexing Using the Session
+ Description Protocol (SDP)", RFC 8858,
+ DOI 10.17487/RFC8858, January 2021,
+ <https://www.rfc-editor.org/info/rfc8858>.
+
+ [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>.
+
+14.2. Informative References
+
+ [RFC3311] Rosenberg, J., "The Session Initiation Protocol (SIP)
+ UPDATE Method", RFC 3311, DOI 10.17487/RFC3311, October
+ 2002, <https://www.rfc-editor.org/info/rfc3311>.
+
+ [RFC3840] Rosenberg, J., Schulzrinne, H., and P. Kyzivat,
+ "Indicating User Agent Capabilities in the Session
+ Initiation Protocol (SIP)", RFC 3840,
+ DOI 10.17487/RFC3840, August 2004,
+ <https://www.rfc-editor.org/info/rfc3840>.
+
+ [RFC5389] Rosenberg, J., Mahy, R., Matthews, P., and D. Wing,
+ "Session Traversal Utilities for NAT (STUN)", RFC 5389,
+ DOI 10.17487/RFC5389, October 2008,
+ <https://www.rfc-editor.org/info/rfc5389>.
+
+ [RFC5627] Rosenberg, J., "Obtaining and Using Globally Routable User
+ Agent URIs (GRUUs) in the Session Initiation Protocol
+ (SIP)", RFC 5627, DOI 10.17487/RFC5627, October 2009,
+ <https://www.rfc-editor.org/info/rfc5627>.
+
+ [RFC5766] Mahy, R., Matthews, P., and J. Rosenberg, "Traversal Using
+ Relays around NAT (TURN): Relay Extensions to Session
+ Traversal Utilities for NAT (STUN)", RFC 5766,
+ DOI 10.17487/RFC5766, April 2010,
+ <https://www.rfc-editor.org/info/rfc5766>.
+
+Acknowledgements
+
+ The authors like to thank Flemming Andreasen, Ayush Jain, Paul
+ Kyzivat, Jonathan Lennox, Simon Perreault, Roman Shpount, and Martin
+ Thomson for reviewing and/or making various suggestions for
+ improvements and optimizations.
+
+ The authors also like to thank Flemming Andreasen for shepherding
+ this document and Ben Campbell for his AD review and suggestions. In
+ addition, the authors thank Benjamin Kaduk, Adam Roach, Mirja
+ Kühlewind, and Eric Rescorla for their comments and/or text proposals
+ for improving the document during IESG review.
+
+ Many thanks to Dale Worley for the Gen-Art review and proposed
+ enhancements for several sections.
+
+ Many thanks to Joerg Ott for the TSV-Art review and suggested
+ improvements.
+
+ The authors thank Shawn Emery for the Security Directorate review.
+
+Authors' Addresses
+
+ Emil Ivov
+ Jitsi
+ 67000 Strasbourg
+ France
+
+ Phone: +33 6 72 81 15 55
+ Email: emcho@jitsi.org
+
+
+ Thomas Stach
+ Unaffiliated
+ 1130 Vienna
+ Austria
+
+ Email: thomass.stach@gmail.com
+
+
+ Enrico Marocco
+ Telecom Italia
+ Via G. Reiss Romoli, 274
+ 10148 Turin
+ Italy
+
+ Email: enrico.marocco@telecomitalia.it
+
+
+ Christer Holmberg
+ Ericsson
+ Hirsalantie 11
+ FI-02420 Jorvas
+ Finland
+
+ Email: christer.holmberg@ericsson.com