draft-ietf-ice-trickle-21auth48.txt | rfc8838.txt | |||
---|---|---|---|---|
Internet Engineering Task Force (IETF) E. Ivov | Internet Engineering Task Force (IETF) E. Ivov | |||
Request for Comments: 8452 Atlassian | Request for Comments: 8838 Atlassian | |||
Category: Standards Track J. Uberti | Category: Standards Track J. Uberti | |||
ISSN: 2070-1721 Google | ISSN: 2070-1721 Google | |||
P. Saint-Andre | P. Saint-Andre | |||
Mozilla | Mozilla | |||
February 2019 | May 2020 | |||
Trickle ICE: Incremental Provisioning of Candidates | Trickle ICE: Incremental Provisioning of Candidates for the Interactive | |||
for the Interactive Connectivity Establishment (ICE) Protocol | Connectivity Establishment (ICE) Protocol | |||
Abstract | Abstract | |||
This document describes "Trickle ICE", an extension to the | This document describes "Trickle ICE", an extension to the | |||
Interactive Connectivity Establishment (ICE) protocol that enables | Interactive Connectivity Establishment (ICE) protocol that enables | |||
ICE agents to begin connectivity checks while they are still | ICE agents to begin connectivity checks while they are still | |||
gathering candidates, by incrementally exchanging candidates over | gathering candidates, by incrementally exchanging candidates over | |||
time instead of all at once. This method can considerably accelerate | time instead of all at once. This method can considerably accelerate | |||
the process of establishing a communication session. | the process of establishing a communication session. | |||
skipping to change at page 1, line 35 ¶ | skipping to change at line 34 ¶ | |||
This is an Internet Standards Track document. | This is an Internet Standards Track document. | |||
This document is a product of the Internet Engineering Task Force | This document is a product of the Internet Engineering Task Force | |||
(IETF). It represents the consensus of the IETF community. It has | (IETF). It represents the consensus of the IETF community. It has | |||
received public review and has been approved for publication by the | received public review and has been approved for publication by the | |||
Internet Engineering Steering Group (IESG). Further information on | Internet Engineering Steering Group (IESG). Further information on | |||
Internet Standards is available in Section 2 of RFC 7841. | Internet Standards is available in Section 2 of RFC 7841. | |||
Information about the current status of this document, any errata, | Information about the current status of this document, any errata, | |||
and how to provide feedback on it may be obtained at | and how to provide feedback on it may be obtained at | |||
https://www.rfc-editor.org/info/rfc8452. | https://www.rfc-editor.org/info/rfc8838. | |||
Copyright Notice | Copyright Notice | |||
Copyright (c) 2019 IETF Trust and the persons identified as the | Copyright (c) 2020 IETF Trust and the persons identified as the | |||
document authors. All rights reserved. | document authors. All rights reserved. | |||
This document is subject to BCP 78 and the IETF Trust's Legal | This document is subject to BCP 78 and the IETF Trust's Legal | |||
Provisions Relating to IETF Documents | Provisions Relating to IETF Documents | |||
(https://trustee.ietf.org/license-info) in effect on the date of | (https://trustee.ietf.org/license-info) in effect on the date of | |||
publication of this document. Please review these documents | publication of this document. Please review these documents | |||
carefully, as they describe your rights and restrictions with respect | carefully, as they describe your rights and restrictions with respect | |||
to this document. Code Components extracted from this document must | to this document. Code Components extracted from this document must | |||
include Simplified BSD License text as described in Section 4.e of | include Simplified BSD License text as described in Section 4.e of | |||
the Trust Legal Provisions and are provided without warranty as | the Trust Legal Provisions and are provided without warranty as | |||
described in the Simplified BSD License. | described in the Simplified BSD License. | |||
Table of Contents | Table of Contents | |||
1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 2 | 1. Introduction | |||
2. Terminology . . . . . . . . . . . . . . . . . . . . . . . . . 4 | 2. Terminology | |||
3. Determining Support for Trickle ICE . . . . . . . . . . . . . 5 | 3. Determining Support for Trickle ICE | |||
4. Generating the Initial ICE Description . . . . . . . . . . . 6 | 4. Generating the Initial ICE Description | |||
5. Handling the Initial ICE Description and Generating the | 5. Handling the Initial ICE Description and Generating the Initial | |||
Initial ICE Response . . . . . . . . . . . . . . . . . . . . 7 | ICE Response | |||
6. Handling the Initial ICE Response . . . . . . . . . . . . . . 7 | 6. Handling the Initial ICE Response | |||
7. Forming Checklists . . . . . . . . . . . . . . . . . . . . . 7 | 7. Forming Checklists | |||
8. Performing Connectivity Checks . . . . . . . . . . . . . . . 8 | 8. Performing Connectivity Checks | |||
9. Gathering and Conveying Newly Gathered Local Candidates . . . 9 | 9. Gathering and Conveying Newly Gathered Local Candidates | |||
10. Pairing Newly Gathered Local Candidates . . . . . . . . . . . 10 | 10. Pairing Newly Gathered Local Candidates | |||
11. Receiving Trickled Candidates . . . . . . . . . . . . . . . . 11 | 11. Receiving Trickled Candidates | |||
12. Inserting Trickled Candidate Pairs into a Checklist . . . . . 12 | 12. Inserting Trickled Candidate Pairs into a Checklist | |||
13. Generating an End-of-Candidates Indication . . . . . . . . . 15 | 13. Generating an End-of-Candidates Indication | |||
14. Receiving an End-of-Candidates Indication . . . . . . . . . . 17 | 14. Receiving an End-of-Candidates Indication | |||
15. Subsequent Exchanges and ICE Restarts . . . . . . . . . . . . 17 | 15. Subsequent Exchanges and ICE Restarts | |||
16. Half Trickle . . . . . . . . . . . . . . . . . . . . . . . . 18 | 16. Half Trickle | |||
17. Preserving Candidate Order While Trickling . . . . . . . . . 19 | 17. Preserving Candidate Order While Trickling | |||
18. Requirements for Using Protocols . . . . . . . . . . . . . . 20 | 18. Requirements for Using Protocols | |||
19. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 20 | 19. IANA Considerations | |||
20. Security Considerations . . . . . . . . . . . . . . . . . . . 21 | 20. Security Considerations | |||
21. References . . . . . . . . . . . . . . . . . . . . . . . . . 21 | 21. References | |||
21.1. Normative References . . . . . . . . . . . . . . . . . . 21 | 21.1. Normative References | |||
21.2. Informative References . . . . . . . . . . . . . . . . . 21 | 21.2. Informative References | |||
Appendix A. Interaction with Regular ICE . . . . . . . . . . . . 23 | Appendix A. Interaction with Regular ICE | |||
Appendix B. Interaction with ICE-Lite . . . . . . . . . . . . . 24 | Appendix B. Interaction with ICE-Lite | |||
Acknowledgements . . . . . . . . . . . . . . . . . . . . . . . . 25 | Acknowledgements | |||
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 26 | Authors' Addresses | |||
1. Introduction | 1. Introduction | |||
The Interactive Connectivity Establishment (ICE) protocol [RFC8445] | The Interactive Connectivity Establishment (ICE) protocol [RFC8445] | |||
describes how an ICE agent gathers candidates, exchanges candidates | describes how an ICE agent gathers candidates, exchanges candidates | |||
with a peer ICE agent, and creates candidate pairs. Once the pairs | with a peer ICE agent, and creates candidate pairs. Once the pairs | |||
have been gathered, the ICE agent will perform connectivity checks | have been gathered, the ICE agent will perform connectivity checks | |||
and eventually nominate and select pairs that will be used for | and eventually nominate and select pairs that will be used for | |||
sending and receiving data within a communication session. | sending and receiving data within a communication session. | |||
skipping to change at page 3, line 24 ¶ | skipping to change at line 116 ¶ | |||
communication session. | communication session. | |||
This document also defines how to discover support for Trickle ICE, | This document also defines how to discover support for Trickle ICE, | |||
how the procedures in [RFC8445] are modified or supplemented when | how the procedures in [RFC8445] are modified or supplemented when | |||
using Trickle ICE, and how a Trickle ICE agent can interoperate with | using Trickle ICE, and how a Trickle ICE agent can interoperate with | |||
an ICE agent compliant to [RFC8445]. | an ICE agent compliant to [RFC8445]. | |||
This document does not define any protocol-specific usage of Trickle | This document does not define any protocol-specific usage of Trickle | |||
ICE. Instead, protocol-specific details for Trickle ICE are defined | ICE. Instead, protocol-specific details for Trickle ICE are defined | |||
in separate usage documents. Examples of such documents are | in separate usage documents. Examples of such documents are | |||
[SIP-TRICKLE-ICE] (which defines usage with the Session Initiation | [RFC8840] (which defines usage with the Session Initiation Protocol | |||
Protocol (SIP) [RFC3261] and the Session Description Protocol (SDP) | (SIP) [RFC3261] and the Session Description Protocol (SDP) [RFC4566]) | |||
[RFC4566]) and [XEP-0176] (which defines usage with the Extensible | and [XEP-0176] (which defines usage with the Extensible Messaging and | |||
Messaging and Presence Protocol (XMPP) [RFC6120]). However, some of | Presence Protocol (XMPP) [RFC6120]). However, some of the examples | |||
the examples in the document use SDP and the Offer/Answer model | in the document use SDP and the Offer/Answer model [RFC3264] to | |||
[RFC3264] to explain the underlying concepts. | explain the underlying concepts. | |||
The following diagram illustrates a successful Trickle ICE exchange | The following diagram illustrates a successful Trickle ICE exchange | |||
with a using protocol that follows the Offer/Answer model: | with a using protocol that follows the Offer/Answer model: | |||
Alice Bob | Alice Bob | |||
| Offer | | | Offer | | |||
|---------------------------------------------->| | |---------------------------------------------->| | |||
| Additional Candidates | | | Additional Candidates | | |||
|---------------------------------------------->| | |---------------------------------------------->| | |||
| Answer | | | Answer | | |||
|<----------------------------------------------| | |<----------------------------------------------| | |||
| Additional Candidates | | | Additional Candidates | | |||
|<----------------------------------------------| | |<----------------------------------------------| | |||
| Additional Candidates and Connectivity Checks | | | Additional Candidates and Connectivity Checks | | |||
|<--------------------------------------------->| | |<--------------------------------------------->| | |||
|<========== CONNECTION ESTABLISHED ===========>| | |<========== CONNECTION ESTABLISHED ===========>| | |||
Figure 1: Flow | Figure 1: Flow | |||
The main body of this document is structured to describe the behavior | The main body of this document is structured to describe the behavior | |||
of Trickle ICE agents in roughly the order of operations and | of Trickle ICE agents in roughly the order of operations and | |||
interactions during an ICE session: | interactions during an ICE session: | |||
1. Determining support for Trickle ICE | 1. Determining support for Trickle ICE | |||
2. Generating the initial ICE description | 2. Generating the initial ICE description | |||
3. Handling the initial ICE description and generating the initial | 3. Handling the initial ICE description and generating the initial | |||
skipping to change at page 4, line 40 ¶ | skipping to change at line 176 ¶ | |||
There is quite a bit of operational experience with the technique | There is quite a bit of operational experience with the technique | |||
behind Trickle ICE, going back as far as 2005 (when the XMPP Jingle | behind Trickle ICE, going back as far as 2005 (when the XMPP Jingle | |||
extension defined a "dribble mode" as specified in [XEP-0176]); this | extension defined a "dribble mode" as specified in [XEP-0176]); this | |||
document incorporates feedback from those who have implemented and | document incorporates feedback from those who have implemented and | |||
deployed the technique over the years. | deployed the technique over the years. | |||
2. Terminology | 2. Terminology | |||
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | |||
"SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and | "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and | |||
"OPTIONAL" in this document are to be interpreted as described in | "OPTIONAL" in this document are to be interpreted as described in BCP | |||
BCP 14 [RFC2119] [RFC8174] when, and only when, they appear in all | 14 [RFC2119] [RFC8174] when, and only when, they appear in all | |||
capitals, as shown here. | capitals, as shown here. | |||
This specification makes use of all terminology defined for | This specification makes use of all terminology defined for | |||
Interactive Connectivity Establishment in [RFC8445]. In addition, it | Interactive Connectivity Establishment in [RFC8445]. In addition, it | |||
defines the following terms: | defines the following terms: | |||
Empty Checklist: A checklist that initially does not contain any | Empty Checklist: A checklist that initially does not contain any | |||
candidate pairs because they will be incrementally added as they | candidate pairs because they will be incrementally added as they | |||
are trickled. (This scenario does not arise with a regular ICE | are trickled. (This scenario does not arise with a regular ICE | |||
agent, because all candidate pairs are known when the agent | agent, because all candidate pairs are known when the agent | |||
skipping to change at page 6, line 23 ¶ | skipping to change at line 254 ¶ | |||
it MUST fall back to using regular ICE or abandon the entire session. | it MUST fall back to using regular ICE or abandon the entire session. | |||
Even if a using protocol does not include a capabilities discovery | Even if a using protocol does not include a capabilities discovery | |||
method, a user agent can provide an indication within the ICE | method, a user agent can provide an indication within the ICE | |||
description that it supports Trickle ICE by communicating an ICE | description that it supports Trickle ICE by communicating an ICE | |||
option of 'trickle'. This token MUST be provided either at the | option of 'trickle'. This token MUST be provided either at the | |||
session level or, if at the data stream level, for every data stream | session level or, if at the data stream level, for every data stream | |||
(an agent MUST NOT specify Trickle ICE support for some data streams | (an agent MUST NOT specify Trickle ICE support for some data streams | |||
but not others). Note: The encoding of the 'trickle' ICE option, and | but not others). Note: The encoding of the 'trickle' ICE option, and | |||
the message(s) used to carry it to the peer, are protocol specific; | the message(s) used to carry it to the peer, are protocol specific; | |||
for instance, the encoding for SDP [RFC4566] is defined in | for instance, the encoding for SDP [RFC4566] is defined in [RFC8840]. | |||
[SIP-TRICKLE-ICE]. | ||||
Dedicated discovery semantics and half trickle are needed only prior | Dedicated discovery semantics and half trickle are needed only prior | |||
to initiation of an ICE session. After an ICE session is established | to initiation of an ICE session. After an ICE session is established | |||
and Trickle ICE support is confirmed for both parties, either agent | and Trickle ICE support is confirmed for both parties, either agent | |||
can use full trickle for subsequent exchanges (see also Section 15). | can use full trickle for subsequent exchanges (see also Section 15). | |||
4. Generating the Initial ICE Description | 4. Generating the Initial ICE Description | |||
An ICE agent can start gathering candidates as soon as it has an | An ICE agent can start gathering candidates as soon as it has an | |||
indication that communication is imminent (e.g., a user-interface cue | indication that communication is imminent (e.g., a user-interface cue | |||
skipping to change at page 8, line 30 ¶ | skipping to change at line 356 ¶ | |||
is performed for the list. Without waiting for timer Ta to expire | is performed for the list. Without waiting for timer Ta to expire | |||
again, the agent selects the next checklist in the Running state, in | again, the agent selects the next checklist in the Running state, in | |||
accordance with Section 6.1.4.2 of [RFC8445]. | accordance with Section 6.1.4.2 of [RFC8445]. | |||
Section 7.2.5.4 of [RFC8445] requires that agents update checklists | Section 7.2.5.4 of [RFC8445] requires that agents update checklists | |||
and timer states upon completing a connectivity check transaction. | and timer states upon completing a connectivity check transaction. | |||
During such an update, regular ICE agents would set the state of a | During such an update, regular ICE agents would set the state of a | |||
checklist to Failed if both of the following two conditions are | checklist to Failed if both of the following two conditions are | |||
satisfied: | satisfied: | |||
o all of the pairs in the checklist are in either the Failed state | * all of the pairs in the checklist are in either the Failed state | |||
or the Succeeded state; and | or the Succeeded state; and | |||
o there is not a pair in the valid list for each component of the | * there is not a pair in the valid list for each component of the | |||
data stream. | data stream. | |||
With Trickle ICE, the above situation would often occur when | With Trickle ICE, the above situation would often occur when | |||
candidate gathering and trickling are still in progress, even though | candidate gathering and trickling are still in progress, even though | |||
it is quite possible that future checks will succeed. For this | it is quite possible that future checks will succeed. For this | |||
reason, Trickle ICE agents add the following conditions to the above | reason, Trickle ICE agents add the following conditions to the above | |||
list: | list: | |||
o all candidate gathering has completed, and the agent is not | * all candidate gathering has completed, and the agent is not | |||
expecting to discover any new local candidates; and | expecting to discover any new local candidates; and | |||
o the remote agent has conveyed an end-of-candidates indication for | * the remote agent has conveyed an end-of-candidates indication for | |||
that checklist as described in Section 13. | that checklist as described in Section 13. | |||
9. Gathering and Conveying Newly Gathered Local Candidates | 9. Gathering and Conveying Newly Gathered Local Candidates | |||
After Trickle ICE agents have conveyed initial ICE descriptions and | After Trickle ICE agents have conveyed initial ICE descriptions and | |||
initial ICE responses, they will most likely continue gathering new | initial ICE responses, they will most likely continue gathering new | |||
local candidates as STUN, TURN, and other non-host candidate | local candidates as STUN, TURN, and other non-host candidate | |||
gathering mechanisms begin to yield results. Whenever an agent | gathering mechanisms begin to yield results. Whenever an agent | |||
discovers such a new candidate, it will compute its priority, type, | discovers such a new candidate, it will compute its priority, type, | |||
foundation, and component ID according to regular ICE procedures. | foundation, and component ID according to regular ICE procedures. | |||
skipping to change at page 12, line 31 ¶ | skipping to change at line 541 ¶ | |||
pair from that local candidate (Section 9), or after a remote agent | pair from that local candidate (Section 9), or after a remote agent | |||
has received a trickled candidate and formed a candidate pair from | has received a trickled candidate and formed a candidate pair from | |||
that remote candidate (Section 11), a Trickle ICE agent adds the new | that remote candidate (Section 11), a Trickle ICE agent adds the new | |||
candidate pair to a checklist as defined in this section. | candidate pair to a checklist as defined in this section. | |||
As an aid to understanding the procedures defined in this section, | As an aid to understanding the procedures defined in this section, | |||
consider the following tabular representation of all checklists in an | consider the following tabular representation of all checklists in an | |||
agent (note that initially for one of the foundations, i.e., f5, | agent (note that initially for one of the foundations, i.e., f5, | |||
there are no candidate pairs): | there are no candidate pairs): | |||
+-----------------+------+------+------+------+------+ | +-----------------+----+----+----+----+----+ | |||
| | f1 | f2 | f3 | f4 | f5 | | | | f1 | f2 | f3 | f4 | f5 | | |||
+-----------------+------+------+------+------+------+ | +=================+====+====+====+====+====+ | |||
| s1 (Audio.RTP) | F | F | F | | | | | s1 (Audio.RTP) | F | F | F | | | | |||
+-----------------+------+------+------+------+------+ | +-----------------+----+----+----+----+----+ | |||
| s2 (Audio.RTCP) | F | F | F | F | | | | s2 (Audio.RTCP) | F | F | F | F | | | |||
+-----------------+------+------+------+------+------+ | +-----------------+----+----+----+----+----+ | |||
| s3 (Video.RTP) | F | | | | | | | s3 (Video.RTP) | F | | | | | | |||
+-----------------+------+------+------+------+------+ | +-----------------+----+----+----+----+----+ | |||
| s4 (Video.RTCP) | F | | | | | | | s4 (Video.RTCP) | F | | | | | | |||
+-----------------+------+------+------+------+------+ | +-----------------+----+----+----+----+----+ | |||
Figure 2: Example of Checklist State | Table 1: TESTING: Example of Checklist State | |||
Each row in the table represents a component for a given data stream | Each row in the table represents a component for a given data stream | |||
(e.g., s1 and s2 might be the RTP and RTP Control Protocol (RTCP) | (e.g., s1 and s2 might be the RTP and RTP Control Protocol (RTCP) | |||
components for audio) and thus a single checklist in the checklist | components for audio) and thus a single checklist in the checklist | |||
set. Each column represents one foundation. Each cell represents | set. Each column represents one foundation. Each cell represents | |||
one candidate pair. In the tables shown in this section, "F" stands | one candidate pair. In the tables shown in this section, "F" stands | |||
for "frozen", "W" stands for "waiting", and "S" stands for | for "frozen", "W" stands for "waiting", and "S" stands for | |||
"succeeded"; in addition, "^^" is used to notate newly added | "succeeded"; in addition, "^^" is used to notate newly added | |||
candidate pairs. | candidate pairs. | |||
skipping to change at page 13, line 26 ¶ | skipping to change at line 583 ¶ | |||
+-----------------+------+------+------+------+------+ | +-----------------+------+------+------+------+------+ | |||
| s1 (Audio.RTP) | W | W | W | | | | | s1 (Audio.RTP) | W | W | W | | | | |||
+-----------------+------+------+------+------+------+ | +-----------------+------+------+------+------+------+ | |||
| s2 (Audio.RTCP) | F | F | F | W | | | | s2 (Audio.RTCP) | F | F | F | W | | | |||
+-----------------+------+------+------+------+------+ | +-----------------+------+------+------+------+------+ | |||
| s3 (Video.RTP) | F | | | | | | | s3 (Video.RTP) | F | | | | | | |||
+-----------------+------+------+------+------+------+ | +-----------------+------+------+------+------+------+ | |||
| s4 (Video.RTCP) | F | | | | | | | s4 (Video.RTCP) | F | | | | | | |||
+-----------------+------+------+------+------+------+ | +-----------------+------+------+------+------+------+ | |||
Figure 3: Initial Checklist State | Figure 2: Initial Checklist State | |||
Then, as the checks proceed (see Section 7.2.5.4 of [RFC8445]), for | Then, as the checks proceed (see Section 7.2.5.4 of [RFC8445]), for | |||
each pair that enters the Succeeded state (denoted here by "S"), the | each pair that enters the Succeeded state (denoted here by "S"), the | |||
agent will unfreeze all pairs for all data streams with the same | agent will unfreeze all pairs for all data streams with the same | |||
foundation (e.g., if the pair in column 1, row 1 succeeds then the | foundation (e.g., if the pair in column 1, row 1 succeeds then the | |||
agent will unfreeze the pairs in column 1, rows 2, 3, and 4). | agent will unfreeze the pairs in column 1, rows 2, 3, and 4). | |||
+-----------------+------+------+------+------+------+ | +-----------------+------+------+------+------+------+ | |||
| | f1 | f2 | f3 | f4 | f5 | | | | f1 | f2 | f3 | f4 | f5 | | |||
+-----------------+------+------+------+------+------+ | +-----------------+------+------+------+------+------+ | |||
| s1 (Audio.RTP) | S | W | W | | | | | s1 (Audio.RTP) | S | W | W | | | | |||
+-----------------+------+------+------+------+------+ | +-----------------+------+------+------+------+------+ | |||
| s2 (Audio.RTCP) | W | F | F | W | | | | s2 (Audio.RTCP) | W | F | F | W | | | |||
+-----------------+------+------+------+------+------+ | +-----------------+------+------+------+------+------+ | |||
| s3 (Video.RTP) | W | | | | | | | s3 (Video.RTP) | W | | | | | | |||
+-----------------+------+------+------+------+------+ | +-----------------+------+------+------+------+------+ | |||
| s4 (Video.RTCP) | W | | | | | | | s4 (Video.RTCP) | W | | | | | | |||
+-----------------+------+------+------+------+------+ | +-----------------+------+------+------+------+------+ | |||
Figure 4: Checklist State with Succeeded Candidate Pair | Figure 3: Checklist State with Succeeded Candidate Pair | |||
Trickle ICE preserves all of these rules as they apply to "static" | Trickle ICE preserves all of these rules as they apply to "static" | |||
checklist sets. This implies that if a Trickle ICE agent were to | checklist sets. This implies that if a Trickle ICE agent were to | |||
begin connectivity checks with all of its pairs already present, the | begin connectivity checks with all of its pairs already present, the | |||
way that pair states change is indistinguishable from that of a | way that pair states change is indistinguishable from that of a | |||
regular ICE agent. | regular ICE agent. | |||
Of course, the major difference with Trickle ICE is that checklist | Of course, the major difference with Trickle ICE is that checklist | |||
sets can be dynamically updated because candidates can arrive after | sets can be dynamically updated because candidates can arrive after | |||
connectivity checks have started. When this happens, an agent sets | connectivity checks have started. When this happens, an agent sets | |||
skipping to change at page 14, line 35 ¶ | skipping to change at line 635 ¶ | |||
+-----------------+------+------+------+------+------+ | +-----------------+------+------+------+------+------+ | |||
| s1 (Audio.RTP) | S | W | W | | ^W^ | | | s1 (Audio.RTP) | S | W | W | | ^W^ | | |||
+-----------------+------+------+------+------+------+ | +-----------------+------+------+------+------+------+ | |||
| s2 (Audio.RTCP) | W | F | F | W | | | | s2 (Audio.RTCP) | W | F | F | W | | | |||
+-----------------+------+------+------+------+------+ | +-----------------+------+------+------+------+------+ | |||
| s3 (Video.RTP) | W | | | | | | | s3 (Video.RTP) | W | | | | | | |||
+-----------------+------+------+------+------+------+ | +-----------------+------+------+------+------+------+ | |||
| s4 (Video.RTCP) | W | | | | | | | s4 (Video.RTCP) | W | | | | | | |||
+-----------------+------+------+------+------+------+ | +-----------------+------+------+------+------+------+ | |||
Figure 5: Checklist State with Newly Formed Pair, Rule 1 | Figure 4: Checklist State with Newly Formed Pair, Rule 1 | |||
Rule 2: If there is at least one pair in the Succeeded state for this | Rule 2: If there is at least one pair in the Succeeded state for this | |||
foundation, set the state to Waiting. For example, this would be the | foundation, set the state to Waiting. For example, this would be the | |||
case if the pair in column 5, row 1 succeeded and the newly formed | case if the pair in column 5, row 1 succeeded and the newly formed | |||
pair were placed in column 5, row 2. This rule is consistent with | pair were placed in column 5, row 2. This rule is consistent with | |||
Section 7.2.5.3.3 of [RFC8445]. | Section 7.2.5.3.3 of [RFC8445]. | |||
+-----------------+------+------+------+------+------+ | +-----------------+------+------+------+------+------+ | |||
| | f1 | f2 | f3 | f4 | f5 | | | | f1 | f2 | f3 | f4 | f5 | | |||
+-----------------+------+------+------+------+------+ | +-----------------+------+------+------+------+------+ | |||
| s1 (Audio.RTP) | S | W | W | | S | | | s1 (Audio.RTP) | S | W | W | | S | | |||
+-----------------+------+------+------+------+------+ | +-----------------+------+------+------+------+------+ | |||
| s2 (Audio.RTCP) | W | F | F | W | ^W^ | | | s2 (Audio.RTCP) | W | F | F | W | ^W^ | | |||
+-----------------+------+------+------+------+------+ | +-----------------+------+------+------+------+------+ | |||
| s3 (Video.RTP) | W | | | | | | | s3 (Video.RTP) | W | | | | | | |||
+-----------------+------+------+------+------+------+ | +-----------------+------+------+------+------+------+ | |||
| s4 (Video.RTCP) | W | | | | | | | s4 (Video.RTCP) | W | | | | | | |||
+-----------------+------+------+------+------+------+ | +-----------------+------+------+------+------+------+ | |||
Figure 6: Checklist State with Newly Formed Pair, Rule 2 | Figure 5: Checklist State with Newly Formed Pair, Rule 2 | |||
Rule 3: In all other cases, set the state to Frozen. For example, | Rule 3: In all other cases, set the state to Frozen. For example, | |||
this would be the case if the newly formed pair were placed in column | this would be the case if the newly formed pair were placed in column | |||
3, row 3. | 3, row 3. | |||
+-----------------+------+------+------+------+------+ | +-----------------+------+------+------+------+------+ | |||
| | f1 | f2 | f3 | f4 | f5 | | | | f1 | f2 | f3 | f4 | f5 | | |||
+-----------------+------+------+------+------+------+ | +-----------------+------+------+------+------+------+ | |||
| s1 (Audio.RTP) | S | W | W | | S | | | s1 (Audio.RTP) | S | W | W | | S | | |||
+-----------------+------+------+------+------+------+ | +-----------------+------+------+------+------+------+ | |||
| s2 (Audio.RTCP) | W | F | F | W | W | | | s2 (Audio.RTCP) | W | F | F | W | W | | |||
+-----------------+------+------+------+------+------+ | +-----------------+------+------+------+------+------+ | |||
| s3 (Video.RTP) | W | | ^F^ | | | | | s3 (Video.RTP) | W | | ^F^ | | | | |||
+-----------------+------+------+------+------+------+ | +-----------------+------+------+------+------+------+ | |||
| s4 (Video.RTCP) | W | | | | | | | s4 (Video.RTCP) | W | | | | | | |||
+-----------------+------+------+------+------+------+ | +-----------------+------+------+------+------+------+ | |||
Figure 7: Checklist State with Newly Formed Pair, Rule 3 | Figure 6: Checklist State with Newly Formed Pair, Rule 3 | |||
13. Generating an End-of-Candidates Indication | 13. Generating an End-of-Candidates Indication | |||
Once all candidate gathering is completed or expires for an ICE | Once all candidate gathering is completed or expires for an ICE | |||
session associated with a specific data stream, the agent will | session associated with a specific data stream, the agent will | |||
generate an "end-of-candidates" indication for that session and | generate an "end-of-candidates" indication for that session and | |||
convey it to the remote agent via the signaling channel. Although | convey it to the remote agent via the signaling channel. Although | |||
the exact form of the indication depends on the using protocol, the | the exact form of the indication depends on the using protocol, the | |||
indication MUST specify the generation (Username Fragment and | indication MUST specify the generation (Username Fragment and | |||
Password combination), so that an agent can correlate the end-of- | Password combination), so that an agent can correlate the end-of- | |||
candidates indication with a particular ICE session. The indication | candidates indication with a particular ICE session. The indication | |||
can be conveyed in the following ways: | can be conveyed in the following ways: | |||
o As part of an initiation request (which would typically be the | * As part of an initiation request (which would typically be the | |||
case with the initial ICE description for half trickle) | case with the initial ICE description for half trickle) | |||
o Along with the last candidate an agent can send for a stream | * Along with the last candidate an agent can send for a stream | |||
o As a standalone notification (e.g., after STUN Binding requests or | * As a standalone notification (e.g., after STUN Binding requests or | |||
TURN Allocate requests to a server time out and the agent is no | TURN Allocate requests to a server time out and the agent is no | |||
longer actively gathering candidates) | longer actively gathering candidates) | |||
Conveying an end-of-candidates indication in a timely manner is | Conveying an end-of-candidates indication in a timely manner is | |||
important in order to avoid ambiguities and speed up the conclusion | important in order to avoid ambiguities and speed up the conclusion | |||
of ICE processing. In particular: | of ICE processing. In particular: | |||
o A controlled Trickle ICE agent SHOULD convey an end-of-candidates | * A controlled Trickle ICE agent SHOULD convey an end-of-candidates | |||
indication after it has completed gathering for a data stream, | indication after it has completed gathering for a data stream, | |||
unless ICE processing terminates before the agent has had a chance | unless ICE processing terminates before the agent has had a chance | |||
to complete gathering. | to complete gathering. | |||
o A controlling agent MAY conclude ICE processing prior to conveying | * A controlling agent MAY conclude ICE processing prior to conveying | |||
end-of-candidates indications for all streams. However, it is | end-of-candidates indications for all streams. However, it is | |||
RECOMMENDED for a controlling agent to convey end-of-candidates | RECOMMENDED for a controlling agent to convey end-of-candidates | |||
indications whenever possible for the sake of consistency and to | indications whenever possible for the sake of consistency and to | |||
keep middleboxes and controlled agents up-to-date on the state of | keep middleboxes and controlled agents up-to-date on the state of | |||
ICE processing. | ICE processing. | |||
When conveying an end-of-candidates indication during trickling | When conveying an end-of-candidates indication during trickling | |||
(rather than as a part of the initial ICE description or a response | (rather than as a part of the initial ICE description or a response | |||
thereto), it is the responsibility of the using protocol to define | thereto), it is the responsibility of the using protocol to define | |||
methods for associating the indication with one or more specific data | methods for associating the indication with one or more specific data | |||
skipping to change at page 20, line 12 ¶ | skipping to change at line 885 ¶ | |||
For this candidate information, the RTCP host candidate would not be | For this candidate information, the RTCP host candidate would not be | |||
conveyed prior to the RTP host candidate. Similarly, the RTP server- | conveyed prior to the RTP host candidate. Similarly, the RTP server- | |||
reflexive candidate would be conveyed together with or prior to the | reflexive candidate would be conveyed together with or prior to the | |||
RTCP server-reflexive candidate. | RTCP server-reflexive candidate. | |||
18. Requirements for Using Protocols | 18. Requirements for Using Protocols | |||
In order to fully enable the use of Trickle ICE, this specification | In order to fully enable the use of Trickle ICE, this specification | |||
defines the following requirements for using protocols. | defines the following requirements for using protocols. | |||
o A using protocol SHOULD provide a way for parties to advertise and | * A using protocol SHOULD provide a way for parties to advertise and | |||
discover support for Trickle ICE before an ICE session begins (see | discover support for Trickle ICE before an ICE session begins (see | |||
Section 3). | Section 3). | |||
o A using protocol MUST provide methods for incrementally conveying | * A using protocol MUST provide methods for incrementally conveying | |||
(i.e., "trickling") additional candidates after conveying the | (i.e., "trickling") additional candidates after conveying the | |||
initial ICE description (see Section 9). | initial ICE description (see Section 9). | |||
o A using protocol MUST deliver each trickled candidate or end-of- | * A using protocol MUST deliver each trickled candidate or end-of- | |||
candidates indication exactly once and in the same order it was | candidates indication exactly once and in the same order it was | |||
conveyed (see Section 9). | conveyed (see Section 9). | |||
o A using protocol MUST provide a mechanism for both parties to | * A using protocol MUST provide a mechanism for both parties to | |||
indicate and agree on the ICE session in force (see Section 9). | indicate and agree on the ICE session in force (see Section 9). | |||
o A using protocol MUST provide a way for parties to communicate the | * A using protocol MUST provide a way for parties to communicate the | |||
end-of-candidates indication, which MUST specify the particular | end-of-candidates indication, which MUST specify the particular | |||
ICE session to which the indication applies (see Section 13). | ICE session to which the indication applies (see Section 13). | |||
19. IANA Considerations | 19. IANA Considerations | |||
IANA has registered the following ICE option in the "ICE Options" | IANA has registered the following ICE option in the "ICE Options" | |||
subregistry of the "Interactive Connectivity Establishment (ICE) | subregistry of the "Interactive Connectivity Establishment (ICE) | |||
registry", following the procedures defined in [RFC6336]. | registry", following the procedures defined in [RFC6336]. | |||
ICE Option: trickle | ICE Option: trickle | |||
Contact: IESG <iesg@ietf.org> | Contact: IESG <iesg@ietf.org> | |||
Change controller: IESG | Change controller: IESG | |||
Description: An ICE option of 'trickle' indicates support for | Description: An ICE option of 'trickle' indicates support for | |||
incremental communication of ICE candidates. | incremental communication of ICE candidates. | |||
Reference: RFC 8452 | Reference: RFC 8838 | |||
20. Security Considerations | 20. Security Considerations | |||
This specification inherits most of its semantics from [RFC8445], and | This specification inherits most of its semantics from [RFC8445], and | |||
as a result, all security considerations described there apply to | as a result, all security considerations described there apply to | |||
Trickle ICE. | Trickle ICE. | |||
If the privacy implications of revealing host addresses on an | If the privacy implications of revealing host addresses on an | |||
endpoint device are a concern (see, for example, the discussion in | endpoint device are a concern (see, for example, the discussion in | |||
[WebRTC-IP-HANDLING] and in Section 19 of [RFC8445]), agents can | [RFC8828] and in Section 19 of [RFC8445]), agents can generate ICE | |||
generate ICE descriptions that contain no candidates and then only | descriptions that contain no candidates and then only trickle | |||
trickle candidates that do not reveal host addresses (e.g., relayed | candidates that do not reveal host addresses (e.g., relayed | |||
candidates). | candidates). | |||
21. References | 21. References | |||
21.1. Normative References | 21.1. Normative References | |||
[RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | |||
Requirement Levels", BCP 14, RFC 2119, | Requirement Levels", BCP 14, RFC 2119, | |||
DOI 10.17487/RFC2119, March 1997, | DOI 10.17487/RFC2119, March 1997, | |||
<https://www.rfc-editor.org/info/rfc2119>. | <https://www.rfc-editor.org/info/rfc2119>. | |||
skipping to change at page 21, line 39 ¶ | skipping to change at line 955 ¶ | |||
May 2017, <https://www.rfc-editor.org/info/rfc8174>. | May 2017, <https://www.rfc-editor.org/info/rfc8174>. | |||
[RFC8445] Keranen, A., Holmberg, C., and J. Rosenberg, "Interactive | [RFC8445] Keranen, A., Holmberg, C., and J. Rosenberg, "Interactive | |||
Connectivity Establishment (ICE): A Protocol for Network | Connectivity Establishment (ICE): A Protocol for Network | |||
Address Translator (NAT) Traversal", RFC 8445, | Address Translator (NAT) Traversal", RFC 8445, | |||
DOI 10.17487/RFC8445, July 2018, | DOI 10.17487/RFC8445, July 2018, | |||
<https://www.rfc-editor.org/info/rfc8445>. | <https://www.rfc-editor.org/info/rfc8445>. | |||
21.2. Informative References | 21.2. Informative References | |||
[RFC1918] Rekhter, Y., Moskowitz, B., Karrenberg, D., de Groot, G., | [RFC1918] Rekhter, Y., Moskowitz, B., Karrenberg, D., de Groot, G. | |||
and E. Lear, "Address Allocation for Private Internets", | J., and E. Lear, "Address Allocation for Private | |||
BCP 5, RFC 1918, DOI 10.17487/RFC1918, February 1996, | Internets", BCP 5, RFC 1918, DOI 10.17487/RFC1918, | |||
<https://www.rfc-editor.org/info/rfc1918>. | February 1996, <https://www.rfc-editor.org/info/rfc1918>. | |||
[RFC3261] Rosenberg, J., Schulzrinne, H., Camarillo, G., Johnston, | [RFC3261] Rosenberg, J., Schulzrinne, H., Camarillo, G., Johnston, | |||
A., Peterson, J., Sparks, R., Handley, M., and E. | A., Peterson, J., Sparks, R., Handley, M., and E. | |||
Schooler, "SIP: Session Initiation Protocol", RFC 3261, | Schooler, "SIP: Session Initiation Protocol", RFC 3261, | |||
DOI 10.17487/RFC3261, June 2002, | DOI 10.17487/RFC3261, June 2002, | |||
<https://www.rfc-editor.org/info/rfc3261>. | <https://www.rfc-editor.org/info/rfc3261>. | |||
[RFC3264] Rosenberg, J. and H. Schulzrinne, "An Offer/Answer Model | [RFC3264] Rosenberg, J. and H. Schulzrinne, "An Offer/Answer Model | |||
with Session Description Protocol (SDP)", RFC 3264, | with Session Description Protocol (SDP)", RFC 3264, | |||
DOI 10.17487/RFC3264, June 2002, | DOI 10.17487/RFC3264, June 2002, | |||
skipping to change at page 22, line 39 ¶ | skipping to change at line 1000 ¶ | |||
[RFC6120] Saint-Andre, P., "Extensible Messaging and Presence | [RFC6120] Saint-Andre, P., "Extensible Messaging and Presence | |||
Protocol (XMPP): Core", RFC 6120, DOI 10.17487/RFC6120, | Protocol (XMPP): Core", RFC 6120, DOI 10.17487/RFC6120, | |||
March 2011, <https://www.rfc-editor.org/info/rfc6120>. | March 2011, <https://www.rfc-editor.org/info/rfc6120>. | |||
[RFC6336] Westerlund, M. and C. Perkins, "IANA Registry for | [RFC6336] Westerlund, M. and C. Perkins, "IANA Registry for | |||
Interactive Connectivity Establishment (ICE) Options", | Interactive Connectivity Establishment (ICE) Options", | |||
RFC 6336, DOI 10.17487/RFC6336, July 2011, | RFC 6336, DOI 10.17487/RFC6336, July 2011, | |||
<https://www.rfc-editor.org/info/rfc6336>. | <https://www.rfc-editor.org/info/rfc6336>. | |||
[SIP-TRICKLE-ICE] | [RFC8828] Uberti, J. and G. Shieh, "WebRTC IP Address Handling | |||
Ivov, E., Stach, T., Marocco, E., and C. Holmberg, "A | Requirements", DOI 10.17487/RFC8828, RFC 8828, May 2020, | |||
<https://www.rfc-editor.org/info/rfc8828>. | ||||
[RFC8840] Ivov, E., Stach, T., Marocco, E., and C. Holmberg, "A | ||||
Session Initiation Protocol (SIP) Usage for Incremental | Session Initiation Protocol (SIP) Usage for Incremental | |||
Provisioning of Candidates for the Interactive | Provisioning of Candidates for the Interactive | |||
Connectivity Establishment (Trickle ICE)", Work in | Connectivity Establishment (Trickle ICE)", | |||
Progress, draft-ietf-mmusic-trickle-ice-sip-18, June 2018. | DOI 10.17487/RFC8840, RFC 8840, June 2018, | |||
<https://www.rfc-editor.org/info/rfc8840>. | ||||
[WebRTC-IP-HANDLING] | [RFC8851] Roach, A.B., Ed., "RTP Payload Format Restrictions", | |||
Uberti, J. and G. Shieh, "WebRTC IP Address Handling | DOI 10.17487/RFC8851, RFC 8851, April 2020, | |||
Requirements", Work in Progress, draft-ietf-rtcweb-ip- | <https://www.rfc-editor.org/info/rfc8851>. | |||
handling-09, June 2018. | ||||
[XEP-0030] | [XEP-0030] Hildebrand, J., Millard, P., Eatmon, R., and P. Saint- | |||
Hildebrand, J., Millard, P., Eatmon, R., and P. Saint- | ||||
Andre, "XEP-0030: Service Discovery", XMPP Standards | Andre, "XEP-0030: Service Discovery", XMPP Standards | |||
Foundation, XEP-0030, June 2008. | Foundation, XEP-0030, June 2008. | |||
[XEP-0176] | [XEP-0176] Beda, J., Ludwig, S., Saint-Andre, P., Hildebrand, J., | |||
Beda, J., Ludwig, S., Saint-Andre, P., Hildebrand, J., | ||||
Egan, S., and R. McQueen, "XEP-0176: Jingle ICE-UDP | Egan, S., and R. McQueen, "XEP-0176: Jingle ICE-UDP | |||
Transport Method", XMPP Standards Foundation, XEP-0176, | Transport Method", XMPP Standards Foundation, XEP-0176, | |||
June 2009. | June 2009. | |||
Appendix A. Interaction with Regular ICE | Appendix A. Interaction with Regular ICE | |||
The ICE protocol was designed to be flexible enough to work in and | The ICE protocol was designed to be flexible enough to work in and | |||
adapt to as many network environments as possible. Despite that | adapt to as many network environments as possible. Despite that | |||
flexibility, ICE as specified in [RFC8445] does not by itself support | flexibility, ICE as specified in [RFC8445] does not by itself support | |||
Trickle ICE. This section describes how trickling of candidates | Trickle ICE. This section describes how trickling of candidates | |||
skipping to change at page 25, line 29 ¶ | skipping to change at line 1131 ¶ | |||
|---------------------------------------------->| | |---------------------------------------------->| | |||
| |no cand | | |no cand | |||
| Answer (a=ice-options:trickle) |trickling | | Answer (a=ice-options:trickle) |trickling | |||
|<----------------------------------------------| | |<----------------------------------------------| | |||
| Connectivity Checks | | | Connectivity Checks | | |||
|<--------------------------------------------->| | |<--------------------------------------------->| | |||
peer rflx| | | peer rflx| | | |||
cand disco| | | cand disco| | | |||
|<========== CONNECTION ESTABLISHED ===========>| | |<========== CONNECTION ESTABLISHED ===========>| | |||
Figure 8: Example | Figure 7: Example | |||
In addition to reducing signaling traffic, this approach also removes | In addition to reducing signaling traffic, this approach also removes | |||
the need to discover STUN Bindings or make TURN allocations, which | the need to discover STUN Bindings or make TURN allocations, which | |||
can considerably lighten ICE processing. | can considerably lighten ICE processing. | |||
Acknowledgements | Acknowledgements | |||
The authors would like to thank Bernard Aboba, Flemming Andreasen, | The authors would like to thank Bernard Aboba, Flemming Andreasen, | |||
Rajmohan Banavi, Taylor Brandstetter, Philipp Hancke, Christer | Rajmohan Banavi, Taylor Brandstetter, Philipp Hancke, Christer | |||
Holmberg, Ari Keranen, Paul Kyzivat, Jonathan Lennox, Enrico Marocco, | Holmberg, Ari Kerรคnen, Paul Kyzivat, Jonathan Lennox, Enrico Marocco, | |||
Pal Martinsen, Nils Ohlmeier, Thomas Stach, Peter Thatcher, Martin | Pal Martinsen, Nils Ohlmeier, Thomas Stach, Peter Thatcher, Martin | |||
Thomson, Brandon Williams, and Dale Worley for their reviews and | Thomson, Brandon Williams, and Dale Worley for their reviews and | |||
suggestions on improving this document. Sarah Banks, Roni Even, and | suggestions on improving this document. Sarah Banks, Roni Even, and | |||
David Mandelberg completed OPSDIR, GenART, and security reviews, | David Mandelberg completed OPSDIR, GenART, and security reviews, | |||
respectively. Thanks also to Ari Keranen and Peter Thatcher in their | respectively. Thanks also to Ari Keranen and Peter Thatcher in their | |||
role as chairs and Ben Campbell in his role as responsible Area | role as chairs and Ben Campbell in his role as responsible Area | |||
Director. | Director. | |||
Authors' Addresses | Authors' Addresses | |||
Emil Ivov | Emil Ivov | |||
Atlassian | Atlassian | |||
303 Colorado Street, #1600 | 303 Colorado Street, #1600 | |||
Austin, TX 78701 | Austin, TX 78701 | |||
United States of America | United States of America | |||
Phone: +1 512 640 3000 | Phone: +1 512 640 3000 | |||
Email: emcho@jitsi.org | Email: emcho@jitsi.org | |||
Justin Uberti | Justin Uberti | |||
747 6th Street S | 747 6th Street S | |||
Kirkland, WA 98033 | Kirkland, WA 98033 | |||
United States of America | United States of America | |||
Phone: +1 857 288 8888 | Phone: +1 857 288 8888 | |||
Email: justin@uberti.name | Email: justin@uberti.name | |||
Peter Saint-Andre | Peter Saint-Andre | |||
Mozilla | Mozilla | |||
P.O. Box 787 | P.O. Box 787 | |||
Parker, CO 80134 | Parker, CO 80134 | |||
United States of America | United States of America | |||
Phone: +1 720 256 6756 | Phone: +1 720 256 6756 | |||
Email: stpeter@mozilla.com | Email: stpeter@mozilla.com | |||
URI: https://www.mozilla.com/ | URI: https://www.mozilla.com/ | |||
End of changes. 44 change blocks. | ||||
101 lines changed or deleted | 101 lines changed or added | |||
This html diff was produced by rfcdiff 1.45. The latest version is available from http://tools.ietf.org/tools/rfcdiff/ |