| rfc8840v3.txt | rfc8840.txt | |||
|---|---|---|---|---|
| Internet Engineering Task Force (IETF) E. Ivov | Internet Engineering Task Force (IETF) E. Ivov | |||
| Request for Comments: 8840 Jitsi | Request for Comments: 8840 Jitsi | |||
| Category: Standards Track T. Stach | Category: Standards Track T. Stach | |||
| ISSN: 2070-1721 Unaffiliated | ISSN: 2070-1721 Unaffiliated | |||
| E. Marocco | E. Marocco | |||
| Telecom Italia | Telecom Italia | |||
| C. Holmberg | C. Holmberg | |||
| Ericsson | Ericsson | |||
| November 2020 | January 2021 | |||
| A Session Initiation Protocol (SIP) Usage for Incremental Provisioning | A Session Initiation Protocol (SIP) Usage for Incremental Provisioning | |||
| of Candidates for the Interactive Connectivity Establishment (Trickle | of Candidates for the Interactive Connectivity Establishment (Trickle | |||
| ICE) | ICE) | |||
| Abstract | Abstract | |||
| The Interactive Connectivity Establishment (ICE) protocol describes a | The Interactive Connectivity Establishment (ICE) protocol describes a | |||
| Network Address Translator (NAT) traversal mechanism for UDP-based | Network Address Translator (NAT) traversal mechanism for UDP-based | |||
| multimedia sessions established with the Offer/Answer model. The ICE | multimedia sessions established with the Offer/Answer model. The ICE | |||
| extension for Incremental Provisioning of Candidates (Trickle ICE) | extension for Incremental Provisioning of Candidates (Trickle ICE) | |||
| defines a mechanism that allows ICE Agents to shorten session | defines a mechanism that allows ICE Agents to shorten session | |||
| establishment delays by making the candidate gathering and | establishment delays by making the candidate gathering and | |||
| connectivity checking phases of ICE non-blocking and by executing | connectivity checking phases of ICE non-blocking and by executing | |||
| them in parallel. | them in parallel. | |||
| This document defines usage semantics for Trickle ICE with the | This document defines usage semantics for Trickle ICE with the | |||
| Session Initiation Protocol (SIP). The document also defines a new | Session Initiation Protocol (SIP). The document also defines a new | |||
| SIP Info Package to support this usage together with the | SIP Info Package to support this usage together with the | |||
| corresponding media type. Additionally, a new Session Description | corresponding media type. Additionally, a new Session Description | |||
| Protocol (SDP) "end-of-candidates" attribute and a new SIP Option Tag | Protocol (SDP) "end-of-candidates" attribute and a new SIP option tag | |||
| "trickle-ice" are defined. | "trickle-ice" are defined. | |||
| Status of This Memo | Status of This Memo | |||
| 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/rfc8840. | https://www.rfc-editor.org/info/rfc8840. | |||
| Copyright Notice | Copyright Notice | |||
| Copyright (c) 2020 IETF Trust and the persons identified as the | Copyright (c) 2021 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 | |||
| skipping to change at line 221 ¶ | skipping to change at line 221 ¶ | |||
| | |<===== MEDIA FLOWS =====>| | | | |<===== MEDIA FLOWS =====>| | | |||
| | | | | | | | | | | |||
| Note: "SRFLX" denotes server-reflexive candidates | Note: "SRFLX" denotes server-reflexive candidates | |||
| Figure 1: Sample Trickle ICE Scenario with SIP | Figure 1: Sample Trickle ICE Scenario with SIP | |||
| 3.1. Discovery Issues | 3.1. Discovery Issues | |||
| In order to benefit from Trickle ICE's full potential and reduce | In order to benefit from Trickle ICE's full potential and reduce | |||
| session establishment latency to a minimum, Trickle ICE agents need | session establishment latency to a minimum, Trickle ICE Agents need | |||
| to generate SDP Offers and Answers that contain incomplete and | to generate SDP Offers and Answers that contain incomplete and | |||
| potentially empty sets of candidates. Such Offers and Answers can | potentially empty sets of candidates. Such Offers and Answers can | |||
| only be handled meaningfully by agents that actually support | only be handled meaningfully by agents that actually support | |||
| incremental candidate provisioning, which implies the need to confirm | incremental candidate provisioning, which implies the need to confirm | |||
| such support before using it. | such support before using it. | |||
| Contrary to other protocols, where "in advance" capability discovery | Contrary to other protocols, where "in advance" capability discovery | |||
| is widely implemented, the mechanisms that allow this for SIP (i.e., | is widely implemented, the mechanisms that allow this for SIP (i.e., | |||
| a combination of UA capabilities [RFC3840] and Globally Routable User | a combination of UA capabilities [RFC3840] and Globally Routable User | |||
| Agent URIs (GRUUs) [RFC5627]) have only seen low levels of adoption. | Agent URIs (GRUUs) [RFC5627]) have only seen low levels of adoption. | |||
| skipping to change at line 354 ¶ | skipping to change at line 354 ¶ | |||
| encode these candidates as specified in [RFC8839]. | encode these candidates as specified in [RFC8839]. | |||
| If the Offerer wants to send its initial Offer before knowing any | 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 | candidate for one or more media descriptions, it MUST set the port to | |||
| the default value '9' for these media descriptions. If the Offerer | the default value '9' for these media descriptions. If the Offerer | |||
| does not want to include the host IP address in the corresponding | 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 | "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 | address in the "c="line, which is set to the IPv4 address 0.0.0.0 or | |||
| to the IPv6 equivalent ::. | to the IPv6 equivalent ::. | |||
| In this case, the Offerer obviously cannot know the RTCP transport | In this case, the Offerer obviously cannot know the RTP Control | |||
| address; thus, it MUST NOT include the "rtcp" attribute [RFC3605]. | Protocol (RTCP) transport address; thus, it MUST NOT include the | |||
| This avoids potential ICE mismatch (see [RFC8839]) for the RTCP | "rtcp" attribute [RFC3605]. This avoids potential ICE mismatch (see | |||
| transport address. | [RFC8839]) for the RTCP transport address. | |||
| If the Offerer wants to use RTCP multiplexing [RFC5761] and/or | If the Offerer wants to use RTCP multiplexing [RFC5761] and/or | |||
| exclusive RTCP multiplexing [RFC8858], it still will include the | exclusive RTCP multiplexing [RFC8858], it still will include the | |||
| "rtcp-mux" and/or "rctp-mux-only" attribute in the initial Offer. | "rtcp-mux" and/or "rctp-mux-only" attribute in the initial Offer. | |||
| In any case, the Offerer MUST include the "ice-options:trickle" | In any case, the Offerer MUST include the "ice-options:trickle" | |||
| attribute in accordance to [RFC8838] and MUST include in each "m=" | attribute in accordance to [RFC8838] and MUST include in each "m=" | |||
| line a "mid" attribute in accordance to [RFC5888]. The "mid" | line a "mid" attribute in accordance to [RFC5888]. The "mid" | |||
| attribute identifies the "m=" line to which a candidate belongs and | attribute identifies the "m=" line to which a candidate belongs and | |||
| helps in case of multiple "m=" lines, when candidate gathering could | helps in case of multiple "m=" lines, when candidate gathering could | |||
| skipping to change at line 423 ¶ | skipping to change at line 423 ¶ | |||
| In case of a "m/c=" line with default values, none of the eventually | In case of a "m/c=" line with default values, none of the eventually | |||
| trickled candidates will match the default destination. This | trickled candidates will match the default destination. This | |||
| situation MUST NOT cause an ICE mismatch (see [RFC8839]). | situation MUST NOT cause an ICE mismatch (see [RFC8839]). | |||
| 4.2. Subsequent Offer/Answer Exchanges | 4.2. Subsequent Offer/Answer Exchanges | |||
| Subsequent Offer/Answer exchanges are handled the same as regular ICE | Subsequent Offer/Answer exchanges are handled the same as regular ICE | |||
| (see Section 4.4 of [RFC8839]). | (see Section 4.4 of [RFC8839]). | |||
| If an Offer or Answer needs to be sent while the ICE agents are in | 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 | the middle of trickling, Section 4.4 of [RFC8839] applies. This | |||
| means that an ICE agent includes candidate attributes for all local | means that an ICE Agent includes candidate attributes for all local | |||
| candidates it had trickled previously for a specific media stream. | candidates it had trickled previously for a specific media stream. | |||
| 4.3. Establishing the Dialog | 4.3. Establishing the Dialog | |||
| In order to be able to start trickling, the following two conditions | In order to be able to start trickling, the following two conditions | |||
| need to be satisfied at the SIP UAs: | need to be satisfied at the SIP UAs: | |||
| * Trickle ICE support at the peer agent MUST be confirmed. | * Trickle ICE support at the peer agent MUST be confirmed. | |||
| * A dialog MUST have been created between the peers. | * A dialog MUST have been created between the peers. | |||
| skipping to change at line 514 ¶ | skipping to change at line 514 ¶ | |||
| Figure 4: A SIP UA that sent an Answer in an unreliable | Figure 4: A SIP UA that sent an Answer in an unreliable | |||
| provisional response does not know if it was received or if the | provisional response does not know if it was received or if the | |||
| dialog at the side of the Offerer has entered the early state | dialog at the side of the Offerer has entered the early state | |||
| In order to clear this ambiguity as soon as possible, the Answerer | In order to clear this ambiguity as soon as possible, the Answerer | |||
| needs to retransmit the provisional response with the exponential | needs to retransmit the provisional response with the exponential | |||
| backoff timers described in [RFC3262]. These retransmissions MUST | backoff timers described in [RFC3262]. These retransmissions MUST | |||
| cease on receipt of an INFO request carrying a "trickle-ice" Info | cease on receipt of an INFO request carrying a "trickle-ice" Info | |||
| Package body, on receipt of any other in-dialog request from the | 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, or on transmission of the Answer in a 2xx response. The | |||
| offerer cannot send in-dialog requests until it receives a response, | Offerer cannot send in-dialog requests until it receives a response, | |||
| so the arrival of such a request proves that the response has | so the arrival of such a request proves that the response has | |||
| arrived. Using the INFO request for dialog confirmation is similar | arrived. Using the INFO request for dialog confirmation is similar | |||
| to the procedure described in Section 7.1.1 of [RFC8839], except that | to the procedure described in Section 7.1.1 of [RFC8839], except that | |||
| the STUN binding Request is replaced by the INFO request. | the STUN binding request is replaced by the INFO request. | |||
| The Offerer MUST send a Trickle ICE INFO request as soon as it | The Offerer MUST send a Trickle ICE INFO request as soon as it | |||
| receives an SDP Answer in an unreliable provisional response. This | receives an SDP Answer in an unreliable provisional response. This | |||
| INFO request MUST repeat the candidates that were already provided in | INFO request MUST repeat the candidates that were already provided in | |||
| the Offer (as would be the case when Half Trickle is performed or | the Offer (as would be the case when Half Trickle is performed or | |||
| when new candidates have not been learned since then). The first | when new candidates have not been learned since then). The first | |||
| case could happen when Half Trickle is used and all candidates are | case could happen when Half Trickle is used and all candidates are | |||
| already in the initial offer. The second case could happen when Full | already in the initial offer. The second case could happen when Full | |||
| Trickle is used and the offerer is currently gathering additional | Trickle is used and the Offerer is currently gathering additional | |||
| candidates but did not yet get them. Also, if the initial Offer did | candidates but did not yet get them. Also, if the initial Offer did | |||
| not contain any candidates, depending on how the Offerer gathers its | not contain any candidates, depending on how the Offerer gathers its | |||
| candidates and how long it takes to do so, this INFO could still | candidates and how long it takes to do so, this INFO could still | |||
| contain no candidates. | contain no candidates. | |||
| When Full Trickle is used and if newly learned candidates are | When Full Trickle is used and if newly learned candidates are | |||
| available, the Offerer SHOULD also deliver these candidates in said | available, the Offerer SHOULD also deliver these candidates in said | |||
| INFO request, unless it wants to hold back some candidates in | INFO request, unless it wants to hold back some candidates in | |||
| reserve, e.g., in case these candidates are expensive to use and | reserve, e.g., in case these candidates are expensive to use and | |||
| would only be trickled if all other candidates failed. | would only be trickled if all other candidates failed. | |||
| skipping to change at line 597 ¶ | skipping to change at line 597 ¶ | |||
| The ability to convey arbitrary candidates in INFO message bodies | The ability to convey arbitrary candidates in INFO message bodies | |||
| allows ICE Agents to initiate trickling without actually sending an | allows ICE Agents to initiate trickling without actually sending an | |||
| Answer. Trickle ICE Agents can therefore respond to an INVITE | Answer. Trickle ICE Agents can therefore respond to an INVITE | |||
| request with provisional responses without an SDP Answer [RFC3261]. | request with provisional responses without an SDP Answer [RFC3261]. | |||
| Such provisional responses serve for establishing an early dialog. | Such provisional responses serve for establishing an early dialog. | |||
| Agents that choose to establish the dialog in this way MUST | Agents that choose to establish the dialog in this way MUST | |||
| retransmit these responses with the exponential backoff timers | retransmit these responses with the exponential backoff timers | |||
| described in [RFC3262]. These retransmissions MUST cease on receipt | described in [RFC3262]. These retransmissions MUST cease on receipt | |||
| of an INFO request carrying a "trickle-ice" Info Package body, on | of an INFO request carrying a "trickle-ice" Info Package body, on | |||
| receipt of any in-dialog requests from the offerer, or on | receipt of any in-dialog requests from the Offerer, or on | |||
| transmission of the Answer in a 2xx response. The offerer cannot | transmission of the Answer in a 2xx response. The Offerer cannot | |||
| send in-dialog requests until it receives a response, so the arrival | send in-dialog requests until it receives a response, so the arrival | |||
| of such a request proves that the response has arrived. This is | of such a request proves that the response has arrived. This is | |||
| again similar to the procedure described in Section 6.1.1 of | again similar to the procedure described in Section 6.1.1 of | |||
| [RFC8839], except that an Answer is not yet provided. | [RFC8839], except that an Answer is not yet provided. | |||
| Note: The "+SRFLX" in Figure 6 indicates that additional newly | Note: The "+SRFLX" in Figure 6 indicates that additional newly | |||
| learned server-reflexive candidates are included. | learned server-reflexive candidates are included. | |||
| Alice Bob | Alice Bob | |||
| | | | | | | |||
| skipping to change at line 694 ¶ | skipping to change at line 694 ¶ | |||
| * The proto value is set to 'RTP/AVP'. | * The proto value is set to 'RTP/AVP'. | |||
| * The fmt field MUST appear only once and is set to '0'. | * 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 | Agents MUST include a pseudo "m=" line and an identification tag in a | |||
| "mid" attribute for every "m=" line whose candidate list they intend | "mid" attribute for every "m=" line whose candidate list they intend | |||
| to update. Such "mid" attributes MUST immediately precede the list | to update. Such "mid" attributes MUST immediately precede the list | |||
| of candidates for that specific "m=" line. | of candidates for that specific "m=" line. | |||
| All "candidate" or "end-of-candidates" attributes following an "mid" | All "candidate" or "end-of-candidates" attributes following a "mid" | |||
| attribute, up until (and excluding) the next occurrence of a pseudo | attribute, up until (and excluding) the next occurrence of a pseudo | |||
| "m=" line, pertain to the "m=" line identified by that identification | "m=" line, pertain to the "m=" line identified by that identification | |||
| tag. | tag. | |||
| Note, that there is no requirement that the INFO request body | Note, that there is no requirement that the INFO request body | |||
| contains as many pseudo "m=" lines as the Offer/Answer contains "m=" | 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 | 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 | "m=" lines that they pertain to. The correspondence can be made via | |||
| the "mid" attributes since candidates are grouped in sections headed | the "mid" attributes since candidates are grouped in sections headed | |||
| by "pseudo" "m=" lines. These sections contain "mid" attribute | by "pseudo" "m=" lines. These sections contain "mid" attribute | |||
| skipping to change at line 760 ¶ | skipping to change at line 760 ¶ | |||
| previously sent under the same combination of "ice-pwd" and "ice- | previously sent under the same combination of "ice-pwd" and "ice- | |||
| ufrag" in the same order as they were sent before. In other words, | 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 | the sequence of a previously sent list of candidates MUST NOT change | |||
| in subsequent INFO requests, and newly gathered candidates MUST be | in subsequent INFO requests, and newly gathered candidates MUST be | |||
| added at the end of that list. Although repeating all candidates | added at the end of that list. Although repeating all candidates | |||
| creates some overhead, it also allows easier handling of problems | creates some overhead, it also allows easier handling of problems | |||
| that could arise from unreliable transports like, e.g., loss of | that could arise from unreliable transports like, e.g., loss of | |||
| messages and reordering, which can be detected through the CSeq: | messages and reordering, which can be detected through the CSeq: | |||
| header field in the INFO request. | header field in the INFO request. | |||
| In addition, an ICE agent needs to adhere to Section 17 of [RFC8838] | In addition, an ICE Agent needs to adhere to Section 17 of [RFC8838] | |||
| on preserving candidate order while trickling. | on preserving candidate order while trickling. | |||
| When receiving INFO requests carrying any candidates, agents MUST | When receiving INFO requests carrying any candidates, agents MUST | |||
| first identify and discard the attribute lines containing candidates | first identify and discard the attribute lines containing candidates | |||
| they have already received in previous INFO requests or in the Offer/ | they have already received in previous INFO requests or in the Offer/ | |||
| Answer exchange preceding them. | Answer exchange preceding them. | |||
| Such candidates are considered to be equal if their IP address port, | Such candidates are considered to be equal if their IP address port, | |||
| transport, and component ID are the same. After identifying and | transport, and component ID are the same. After identifying and | |||
| discarding the known candidates, the agents MUST forward the actual | discarding the known candidates, the agents MUST forward the actual | |||
| skipping to change at line 1085 ¶ | skipping to change at line 1085 ¶ | |||
| supported by the Answerer and if the suggested Offerer BUNDLE address | supported by the Answerer and if the suggested Offerer BUNDLE address | |||
| was selected. In this case, the Offerer does not need to trickle | was selected. In this case, the Offerer does not need to trickle | |||
| further candidates for the remaining "m=" lines in a bundle. | further candidates for the remaining "m=" lines in a bundle. | |||
| However, if BUNDLE is not supported, the Full Trickle Offerer needs | However, if BUNDLE is not supported, the Full Trickle Offerer needs | |||
| to gather and trickle candidates for the remaining "m=" lines as | to gather and trickle candidates for the remaining "m=" lines as | |||
| necessary. If the Answerer selects an Offerer BUNDLE address that is | necessary. If the Answerer selects an Offerer BUNDLE address that is | |||
| different from the suggested Offerer BUNDLE address, the Full Trickle | different from the suggested Offerer BUNDLE address, the Full Trickle | |||
| Offerer needs to gather and trickle candidates for the "m=" line that | Offerer needs to gather and trickle candidates for the "m=" line that | |||
| carries the selected Offerer BUNDLE address. | carries the selected Offerer BUNDLE address. | |||
| A Trickle Answerer SHOULD include an "group:BUNDLE" attribute | A Trickle Answerer SHOULD include a "group:BUNDLE" attribute | |||
| [RFC8843] at session level in the "application/trickle-ice-sdpfrag" | [RFC8843] at session level in the "application/trickle-ice-sdpfrag" | |||
| body if it supports and uses bundling. When doing so, the Answerer | body if it supports and uses bundling. When doing so, the Answerer | |||
| MUST include all identification-tags in the same order that is used | MUST include all identification-tags in the same order that is used | |||
| or will be used in the Answer. | or will be used in the Answer. | |||
| Receipt of this attribute at the Offerer in an INFO request prior to | Receipt of this attribute at the Offerer in an INFO request prior to | |||
| the Answer indicates that the Answerer supports and uses bundling. | the Answer indicates that the Answerer supports and uses bundling. | |||
| The Offerer can use this information, e.g., for stopping the | The Offerer can use this information, e.g., for stopping the | |||
| gathering of candidates for the remaining "m=" lines in a bundle and/ | gathering of candidates for the remaining "m=" lines in a bundle and/ | |||
| or for freeing corresponding resources. | or for freeing corresponding resources. | |||
| skipping to change at line 1127 ¶ | skipping to change at line 1127 ¶ | |||
| a=rtpmap:0 PCMU/8000 | a=rtpmap:0 PCMU/8000 | |||
| a=extmap 1 urn:ietf:params:rtp-hdrext:sdes:mid | a=extmap 1 urn:ietf:params:rtp-hdrext:sdes:mid | |||
| a=candidate:1 1 UDP 1658497328 2001:db8:a0b:12f0::3 10000 typ host | a=candidate:1 1 UDP 1658497328 2001:db8:a0b:12f0::3 10000 typ host | |||
| m=video 10002 RTP/AVP 31 | m=video 10002 RTP/AVP 31 | |||
| a=mid:bar | a=mid:bar | |||
| a=rtcp-mux | a=rtcp-mux | |||
| a=rtpmap:31 H261/90000 | a=rtpmap:31 H261/90000 | |||
| a=extmap 1 urn:ietf:params:rtp-hdrext:sdes:mid | a=extmap 1 urn:ietf:params:rtp-hdrext:sdes:mid | |||
| The example Offer indicates support for RTP and RTCP multiplexing and | The example Offer indicates support for RTP and RTCP multiplexing and | |||
| contains an "candidate" attribute only for the "m=" line with the | contains a "candidate" attribute only for the "m=" line with the | |||
| suggested Offerer bundle address. Once the dialog is established as | suggested Offerer BUNDLE address. Once the dialog is established as | |||
| described in Section 4.3, the Answerer sends the following INFO | described in Section 4.3, the Answerer sends the following INFO | |||
| request. | request. | |||
| INFO sip:alice@example.com SIP/2.0 | INFO sip:alice@example.com SIP/2.0 | |||
| ... | ... | |||
| Info-Package: trickle-ice | Info-Package: trickle-ice | |||
| Content-type: application/trickle-ice-sdpfrag | Content-type: application/trickle-ice-sdpfrag | |||
| Content-Disposition: Info-Package | Content-Disposition: Info-Package | |||
| Content-length: 219 | Content-length: 219 | |||
| skipping to change at line 1153 ¶ | skipping to change at line 1153 ¶ | |||
| a=mid:foo | a=mid:foo | |||
| a=rtcp-mux | a=rtcp-mux | |||
| a=candidate:1 1 UDP 1658497328 2001:db8:a0b:12f0::3 5000 typ host | 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 | This INFO request indicates that the Answerer supports and uses Media | |||
| Multiplexing as well. Note that the Answerer only includes a single | Multiplexing as well. Note that the Answerer only includes a single | |||
| pseudo "m=" line since candidates matching those from the second "m=" | pseudo "m=" line since candidates matching those from the second "m=" | |||
| line in the offer are not needed from the Answerer. | line in the offer are not needed from the Answerer. | |||
| The INFO request also indicates that the Answerer accepted the | The INFO request also indicates that the Answerer accepted the | |||
| suggested Offerer Bundle Address. This allows the Offerer to omit | suggested Offerer BUNDLE address. This allows the Offerer to omit | |||
| gathering RTP and RTCP candidates for the other "m=" lines or | gathering RTP and RTCP candidates for the other "m=" lines or | |||
| releasing already gathered candidates. If the INFO request did not | releasing already gathered candidates. If the INFO request did not | |||
| contain the "group:BUNDLE" attribute, the Offerer has to gather RTP | contain the "group:BUNDLE" attribute, the Offerer has to gather RTP | |||
| and RTCP candidates for the other "m=" lines unless it wants to wait | and RTCP candidates for the other "m=" lines unless it wants to wait | |||
| until receipt of an Answer that eventually confirms support or non- | until receipt of an Answer that eventually confirms support or non- | |||
| support for Media Multiplexing. | support for Media Multiplexing. | |||
| Independent of using Full Trickle or Half Trickle mode, the rules | Independent of using Full Trickle or Half Trickle mode, the rules | |||
| from [RFC8859] apply to both, Offerer and Answerer, when putting | from [RFC8859] apply to both, Offerer and Answerer, when putting | |||
| attributes as specified in Section 9.2 in the "application/trickle- | attributes as specified in Section 9.2 in the "application/trickle- | |||
| skipping to change at line 1320 ¶ | skipping to change at line 1320 ¶ | |||
| A critical fact is that the sending of Trickle ICE candidates in one | A critical fact is that the sending of Trickle ICE candidates in one | |||
| direction is entirely uncoupled from sending candidates in the other | direction is entirely uncoupled from sending candidates in the other | |||
| direction. Thus, the sending of candidates in each direction can be | direction. Thus, the sending of candidates in each direction can be | |||
| done by a stream of INFO requests that is not correlated with the | 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 | stream of INFO requests in the other direction. And since each INFO | |||
| request cumulatively includes the contents of all previous INFO | request cumulatively includes the contents of all previous INFO | |||
| requests in that direction, the ordering between INFO requests need | requests in that direction, the ordering between INFO requests need | |||
| not be preserved. All of this permits using largely independent INFO | not be preserved. All of this permits using largely independent INFO | |||
| requests. | requests. | |||
| Contrarily, UPDATE or other offer/answer mechanisms assume that the | Contrarily, UPDATE or other Offer/Answer mechanisms assume that the | |||
| messages in each direction are tightly coupled with messages in the | messages in each direction are tightly coupled with messages in the | |||
| other direction. Using Offer/Answer and UPDATE requests [RFC3311] | other direction. Using Offer/Answer and UPDATE requests [RFC3311] | |||
| would introduce the following complications: | would introduce the following complications: | |||
| Blocking of messages: Offer/Answer is defined as a strictly | Blocking of messages: Offer/Answer is defined as a strictly | |||
| sequential mechanism in [RFC3264]. There can only be a maximum of | sequential mechanism in [RFC3264]. There can only be a maximum of | |||
| one active exchange at any point of time. Both sides cannot | one active exchange at any point of time. Both sides cannot | |||
| simultaneously send Offers nor can they generate multiple Offers | simultaneously send Offers nor can they generate multiple Offers | |||
| prior to receiving an Answer. Using UPDATE requests for candidate | prior to receiving an Answer. Using UPDATE requests for candidate | |||
| transport would therefore imply the implementation of a candidate | transport would therefore imply the implementation of a candidate | |||
| skipping to change at line 1426 ¶ | skipping to change at line 1426 ¶ | |||
| This document does not define any Info Package Usage Restrictions. | This document does not define any Info Package Usage Restrictions. | |||
| 10.9. Rate of INFO Requests | 10.9. Rate of INFO Requests | |||
| Given that IP addresses may be gathered rapidly, a Trickle ICE Agent | Given that IP addresses may be gathered rapidly, a Trickle ICE Agent | |||
| with many network interfaces might create a high rate of INFO | with many network interfaces might create a high rate of INFO | |||
| requests if every newly detected candidate is trickled individually | requests if every newly detected candidate is trickled individually | |||
| without aggregation. An implementation MUST aggregate ICE candidates | without aggregation. An implementation MUST aggregate ICE candidates | |||
| in case an unreliable transport protocol such as UDP is used. A | 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 | Trickle ICE Agent MUST NOT have more than one INFO request pending at | |||
| any one time. When INFO messages are sent over an unreliable | any one time. When INFO messages are sent over an unreliable | |||
| transport, they are retransmitted according to the rules specified in | transport, they are retransmitted according to the rules specified in | |||
| [RFC3261], Section 17.1.2.1. | [RFC3261], Section 17.1.2.1. | |||
| If the INFO requests are sent on top of TCP, which is probably the | 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 | standard way, it is not an issue for the network anymore, but it can | |||
| remain one for SIP proxies and other intermediaries forwarding the | remain one for SIP proxies and other intermediaries forwarding the | |||
| SIP INFO messages. Also, an endpoint may not be able to tell that it | SIP INFO messages. Also, an endpoint may not be able to tell that it | |||
| has congestion controlled transport all the way. | has congestion controlled transport all the way. | |||
| skipping to change at line 1486 ¶ | skipping to change at line 1486 ¶ | |||
| Reference: RFC 8840 | Reference: RFC 8840 | |||
| Example: a=end-of-candidates | Example: a=end-of-candidates | |||
| 12.2. Media Type "application/trickle-ice-sdpfrag" | 12.2. Media Type "application/trickle-ice-sdpfrag" | |||
| This document defines the new media type "application/trickle-ice- | This document defines the new media type "application/trickle-ice- | |||
| sdpfrag" in accordance with [RFC6838]. | sdpfrag" in accordance with [RFC6838]. | |||
| Type name: application | Type name: application | |||
| Subtype name: trickle-ice-sdpfrag | ||||
| Required parameters: None. | ||||
| Optional parameters: None. | ||||
| Encoding considerations: The media contents follow the same rules | Subtype name: trickle-ice-sdpfrag | |||
| 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 | Required parameters: None. | |||
| 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 | Optional parameters: None. | |||
| Interoperability considerations: See RFC 8840 | 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. | ||||
| Published specification: See RFC 8840 | 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. | ||||
| Applications which use this Media Type: Trickle ICE | Security considerations: See [RFC4566] and RFC 8840 | |||
| Fragment identifier considerations: N/A | Interoperability considerations: See RFC 8840 | |||
| Additional information: | Published specification: See RFC 8840 | |||
| Deprecated alias names for this type: N/A | Applications that use this media type: Trickle ICE | |||
| Magic number(s): N/A | Fragment identifier considerations: N/A | |||
| File extension(s): N/A | Additional information: | |||
| Macintosh File Type Code(s): N/A | 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 | Person and email address to contact for further information: The | |||
| IESG (iesg@ietf.org) | IESG (iesg@ietf.org) | |||
| Intended usage: Trickle ICE for SIP as specified in RFC 8840. | Intended usage: Trickle ICE for SIP as specified in RFC 8840. | |||
| Restrictions on usage: N/A | Restrictions on usage: N/A | |||
| Author/Change controller: The IESG (iesg@ietf.org) | Author/Change controller: The IESG (iesg@ietf.org) | |||
| Provisional registration? (standards tree only): N/A | Provisional registration? (standards tree only): N/A | |||
| 12.3. SIP Info Package "trickle-ice" | 12.3. SIP Info Package "trickle-ice" | |||
| This document defines a new SIP Info Package named "trickle-ice" and | This document defines a new SIP Info Package named "trickle-ice" and | |||
| updates the "Info Packages Registry" with the following entry. | updates the "Info Packages Registry" with the following entry. | |||
| +=============+===========+ | +=============+===========+ | |||
| | Name | Reference | | | Name | Reference | | |||
| +=============+===========+ | +=============+===========+ | |||
| | trickle-ice | RFC 8840 | | | trickle-ice | RFC 8840 | | |||
| skipping to change at line 1657 ¶ | skipping to change at line 1654 ¶ | |||
| [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>. | |||
| [RFC8838] Ivov, E., Uberti, J., and P. Saint-Andre, "Trickle ICE: | [RFC8838] Ivov, E., Uberti, J., and P. Saint-Andre, "Trickle ICE: | |||
| Incremental Provisioning of Candidates for the Interactive | Incremental Provisioning of Candidates for the Interactive | |||
| Connectivity Establishment (ICE) Protocol", RFC 8838, | Connectivity Establishment (ICE) Protocol", RFC 8838, | |||
| DOI 10.17487/RFC8838, November 2020, | DOI 10.17487/RFC8838, January 2021, | |||
| <https://www.rfc-editor.org/info/rfc8838>. | <https://www.rfc-editor.org/info/rfc8838>. | |||
| [RFC8839] Petit-Huguenin, M., Nandakumar, S., Holmberg, C., Keränen, | [RFC8839] Petit-Huguenin, M., Nandakumar, S., Holmberg, C., Keränen, | |||
| A., and R. Shpount, "Session Description Protocol (SDP) | A., and R. Shpount, "Session Description Protocol (SDP) | |||
| Offer/Answer Procedures for Interactive Connectivity | Offer/Answer Procedures for Interactive Connectivity | |||
| Establishment (ICE)", RFC 8839, DOI 10.17487/RFC8839, | Establishment (ICE)", RFC 8839, DOI 10.17487/RFC8839, | |||
| November 2020, <https://www.rfc-editor.org/info/rfc8839>. | January 2021, <https://www.rfc-editor.org/info/rfc8839>. | |||
| [RFC8843] Holmberg, C., Alvestrand, H., and C. Jennings, | [RFC8843] Holmberg, C., Alvestrand, H., and C. Jennings, | |||
| "Negotiating Media Multiplexing Using the Session | "Negotiating Media Multiplexing Using the Session | |||
| Description Protocol (SDP)", RFC 8843, | Description Protocol (SDP)", RFC 8843, | |||
| DOI 10.17487/RFC8843, November 2020, | DOI 10.17487/RFC8843, January 2021, | |||
| <https://www.rfc-editor.org/info/rfc8843>. | <https://www.rfc-editor.org/info/rfc8843>. | |||
| [RFC8858] Holmberg, C., "Indicating Exclusive Support of RTP and RTP | [RFC8858] Holmberg, C., "Indicating Exclusive Support of RTP and RTP | |||
| Control Protocol (RTCP) Multiplexing Using the Session | Control Protocol (RTCP) Multiplexing Using the Session | |||
| Description Protocol (SDP)", RFC 8858, | Description Protocol (SDP)", RFC 8858, | |||
| DOI 10.17487/RFC8858, November 2020, | DOI 10.17487/RFC8858, January 2021, | |||
| <https://www.rfc-editor.org/info/rfc8858>. | <https://www.rfc-editor.org/info/rfc8858>. | |||
| [RFC8859] Nandakumar, S., "A Framework for Session Description | [RFC8859] Nandakumar, S., "A Framework for Session Description | |||
| Protocol (SDP) Attributes When Multiplexing", | Protocol (SDP) Attributes When Multiplexing", RFC 8859, | |||
| DOI 10.17487/RFC8859, RFC 8859, November 2020, | DOI 10.17487/RFC8859, January 2021, | |||
| <https://www.rfc-editor.org/info/rfc8859>. | <https://www.rfc-editor.org/info/rfc8859>. | |||
| 14.2. Informative References | 14.2. Informative References | |||
| [RFC3311] Rosenberg, J., "The Session Initiation Protocol (SIP) | [RFC3311] Rosenberg, J., "The Session Initiation Protocol (SIP) | |||
| UPDATE Method", RFC 3311, DOI 10.17487/RFC3311, October | UPDATE Method", RFC 3311, DOI 10.17487/RFC3311, October | |||
| 2002, <https://www.rfc-editor.org/info/rfc3311>. | 2002, <https://www.rfc-editor.org/info/rfc3311>. | |||
| [RFC3840] Rosenberg, J., Schulzrinne, H., and P. Kyzivat, | [RFC3840] Rosenberg, J., Schulzrinne, H., and P. Kyzivat, | |||
| "Indicating User Agent Capabilities in the Session | "Indicating User Agent Capabilities in the Session | |||
| End of changes. 41 change blocks. | ||||
| 63 lines changed or deleted | 60 lines changed or added | |||
This html diff was produced by rfcdiff 1.48. The latest version is available from http://tools.ietf.org/tools/rfcdiff/ | ||||