| rfc8840xml2.original.xml | rfc8840.xml | |||
|---|---|---|---|---|
| <?xml version="1.0" encoding="UTF-8"?> | <?xml version='1.0' encoding='utf-8'?> | |||
| <?xml-stylesheet type='text/xsl' href='rfc2629.xslt' ?> | ||||
| <!DOCTYPE rfc SYSTEM "rfc2629.dtd"> | ||||
| <rfc category='std' ipr='trust200902' | <!DOCTYPE rfc SYSTEM "rfc2629-xhtml.ent"> | |||
| docName='draft-ietf-mmusic-trickle-ice-sip-18'> | <rfc xmlns:xi="http://www.w3.org/2001/XInclude" category="std" ipr="trust200902" | |||
| docName="draft-ietf-mmusic-trickle-ice-sip-18" obsoletes="" updates="" submissi | ||||
| onType="IETF" xml:lang="en" tocInclude="true" symRefs="true" sortRefs="true" ver | ||||
| sion="3" consensus="true" number="8840"> | ||||
| <!-- xml2rfc v2v3 conversion 2.34.0 --> | ||||
| <?rfc toc='yes' ?> | ||||
| <?rfc symrefs='yes' ?> | ||||
| <?rfc sortrefs='yes'?> | ||||
| <?rfc iprnotified='no' ?> | ||||
| <?rfc strict='yes' ?> | ||||
| <?rfc compact='yes' ?> | ||||
| <front> | <front> | |||
| <title abbrev="Trickle ICE for SIP"> | ||||
| <title abbrev='Trickle ICE for SIP'> | ||||
| A Session Initiation Protocol (SIP) Usage for | A Session Initiation Protocol (SIP) Usage for | |||
| Incremental Provisioning of Candidates for | Incremental Provisioning of Candidates for | |||
| the Interactive Connectivity Establishment (Trickle ICE) | the Interactive Connectivity Establishment (Trickle ICE) | |||
| </title> | </title> | |||
| <author initials='E.' surname='Ivov' | <seriesInfo name="RFC" value="8840"/> | |||
| fullname='Emil Ivov'> | <author initials="E." surname="Ivov" fullname="Emil Ivov"> | |||
| <organization abbrev='Jitsi'>Jitsi</organization> | <organization abbrev="Jitsi">Jitsi</organization> | |||
| <address> | <address> | |||
| <postal> | <postal> | |||
| <street></street> | <street/> | |||
| <city>Strasbourg</city> | <city>Strasbourg</city> | |||
| <code>67000</code> | <code>67000</code> | |||
| <country>France</country> | <country>France</country> | |||
| </postal> | </postal> | |||
| <phone>+33 6 72 81 15 55</phone> | <phone>+33 6 72 81 15 55</phone> | |||
| <email>emcho@jitsi.org</email> | <email>emcho@jitsi.org</email> | |||
| </address> | </address> | |||
| </author> | </author> | |||
| <author initials="T." surname="Stach" fullname="Thomas Stach" > | <author initials="T." surname="Stach" fullname="Thomas Stach"> | |||
| <organization>Unaffiliated</organization> | <organization>Unaffiliated</organization> | |||
| <address> | <address> | |||
| <postal> | <postal> | |||
| <street></street> | <street/> | |||
| <city>Vienna</city> | <city>Vienna</city> | |||
| <region></region> | <region/> | |||
| <code>1130</code> | <code>1130</code> | |||
| <country>Austria</country> | <country>Austria</country> | |||
| </postal> | </postal> | |||
| <email>thomass.stach@gmail.com</email> | <email>thomass.stach@gmail.com</email> | |||
| </address> | </address> | |||
| </author> | </author> | |||
| <author initials='E.' surname='Marocco' fullname='Enrico Marocco'> | <author initials="E." surname="Marocco" fullname="Enrico Marocco"> | |||
| <organization>Telecom Italia</organization> | <organization>Telecom Italia</organization> | |||
| <address> | <address> | |||
| <postal> | <postal> | |||
| <street>Via G. Reiss Romoli, 274</street> | <street>Via G. Reiss Romoli, 274</street> | |||
| <city>Turin</city> | <city>Turin</city> | |||
| <code>10148</code> | <code>10148</code> | |||
| <country>Italy</country> | <country>Italy</country> | |||
| </postal> | </postal> | |||
| <email>enrico.marocco@telecomitalia.it</email> | <email>enrico.marocco@telecomitalia.it</email> | |||
| </address> | </address> | |||
| </author> | </author> | |||
| <author initials="C.H." surname="Holmberg" | <author initials="C." surname="Holmberg" fullname="Christer Holmberg"> | |||
| fullname="Christer Holmberg"> | ||||
| <organization>Ericsson</organization> | <organization>Ericsson</organization> | |||
| <address> | <address> | |||
| <postal> | <postal> | |||
| <street>Hirsalantie 11</street> | <street>Hirsalantie 11</street> | |||
| <code>02420</code> | <code>02420</code> | |||
| <city>Jorvas</city> | <city>Jorvas</city> | |||
| <country>Finland</country> | <country>Finland</country> | |||
| </postal> | </postal> | |||
| <email>christer.holmberg@ericsson.com</email> | <email>christer.holmberg@ericsson.com</email> | |||
| </address> | </address> | |||
| </author> | </author> | |||
| <date /> | <date month="January" year="2021"/> | |||
| <abstract> | <abstract> | |||
| <t> | <t> | |||
| The Interactive Connectivity Establishment (ICE) protocol | The Interactive Connectivity Establishment (ICE) protocol | |||
| describes a Network Address Translator (NAT) traversal mechanism | describes a Network Address Translator (NAT) traversal mechanism | |||
| for UDP-based multimedia sessions established with the | for UDP-based multimedia sessions established with the | |||
| Offer/Answer model. The ICE extension for Incremental | Offer/Answer model. The ICE extension for Incremental | |||
| Provisioning of Candidates (Trickle ICE) defines a mechanism | Provisioning of Candidates (Trickle ICE) defines a mechanism | |||
| that allows ICE Agents to shorten session establishment delays | that allows ICE Agents to shorten session establishment delays | |||
| by making the candidate gathering and connectivity checking | by making the candidate gathering and connectivity checking | |||
| phases of ICE non-blocking and by executing them in parallel. | phases of ICE non-blocking and by executing them in parallel. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| This document defines usage semantics for Trickle ICE with the | This document defines usage semantics for Trickle ICE with the Session | |||
| Session Initiation Protocol (SIP). | Initiation Protocol (SIP). The document also defines a new SIP Info | |||
| The document also defines | Package to support this usage together with the corresponding media | |||
| a new SIP Info Package to support this usage | type. Additionally, a new Session Description Protocol (SDP) | |||
| together with the corresponding media type. | "end-of-candidates" attribute and a new SIP option tag "trickle-ice" | |||
| Additionally, a new SDP 'end-of-candidates' attribute and | are defined. | |||
| a new SIP Option Tag 'trickle-ice' are defined. | ||||
| </t> | </t> | |||
| </abstract> | </abstract> | |||
| </front> | </front> | |||
| <middle> | <middle> | |||
| <section title="Introduction"> | <section numbered="true" toc="default"> | |||
| <name>Introduction</name> | ||||
| <t> | <t> | |||
| The Interactive Connectivity Establishment (ICE) protocol | The Interactive Connectivity Establishment (ICE) protocol | |||
| <xref target="I-D.ietf-ice-rfc5245bis"/> describes | <xref target="RFC8445" format="default"/> describes | |||
| a mechanism for Network Address Translator (NAT) traversal | a mechanism for Network Address Translator (NAT) traversal | |||
| that consists of three main phases. | that consists of three main phases. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| During the first phase an agent gathers a set of candidate | During the first phase, an agent gathers a set of candidate | |||
| transport addresses (source IP address, port and transport | transport addresses (source IP, port, and transport | |||
| protocol). | protocol). | |||
| This is followed by a second phase | This is followed by a second phase | |||
| where these candidates are sent to a | where these candidates are sent to a | |||
| remote agent within | remote agent within | |||
| the Session Description Protocol (SDP) body of a SIP message. | the Session Description Protocol (SDP) body of a SIP message. | |||
| At the remote agent the gathering procedure is repeated and | At the remote agent, the gathering procedure is repeated and | |||
| candidates are sent to the first agent. | candidates are sent to the first agent. | |||
| Once the candidate information is available, a third phase | Once the candidate information is available, a third phase | |||
| starts in parallel where connectivity between all candidates | starts in parallel where connectivity between all candidates | |||
| in both sets is checked (connectivity checks). | in both sets is checked (connectivity checks). | |||
| Once these phases | Once these phases | |||
| have been completed, and only then, both agents can begin | have been completed, and only then, both agents can begin | |||
| communication. | communication. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| According to <xref target="I-D.ietf-ice-rfc5245bis"/> | According to <xref target="RFC8445" format="default"/>, | |||
| the three phases above happen consecutively, in a blocking way, | the three phases above happen consecutively, in a blocking way, | |||
| which can introduce undesirable setup delay during session | which can introduce undesirable setup delay during session | |||
| establishment. | establishment. | |||
| The Trickle ICE extension | The Trickle ICE extension | |||
| <xref target="I-D.ietf-ice-trickle"/> defines generic | <xref target="RFC8838" format="default"/> defines generic | |||
| semantics required for these ICE phases to happen | semantics required for these ICE phases to happen | |||
| in a parallel, non-blocking way and hence speed up session | in a parallel, non-blocking way and hence speeds up session | |||
| establishment. | establishment. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| This specification defines a usage of Trickle ICE with | This specification defines a usage of Trickle ICE with | |||
| the Session Initiation Protocol (SIP)<xref target="RFC3261"/>. | the Session Initiation Protocol (SIP)<xref target="RFC3261" format="defa ult"/>. | |||
| It describes how ICE | It describes how ICE | |||
| candidates are to be exchanged incrementally using SIP INFO | candidates are to be exchanged incrementally using SIP INFO | |||
| requests <xref target="RFC6086"/> | requests <xref target="RFC6086" format="default"/> | |||
| and how the Half Trickle and Full Trickle modes defined in | and how the Half Trickle and Full Trickle modes defined in | |||
| <xref target="I-D.ietf-ice-trickle"/> are to be used by | <xref target="RFC8838" format="default"/> are to be used by | |||
| SIP User Agents (UAs) depending on their expectations for | SIP User Agents (UAs) depending on their expectations for | |||
| support of Trickle ICE by a remote agent. | support of Trickle ICE by a remote agent. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| This document defines a new Info Package as specified in | This document defines a new Info Package as specified in | |||
| <xref target="RFC6086"/> for use with Trickle ICE together | <xref target="RFC6086" format="default"/> for use with Trickle ICE toget her | |||
| with the corresponding media type, | with the corresponding media type, | |||
| SDP attribute and SIP option tag. | SDP attribute, and SIP option tag. | |||
| </t> | </t> | |||
| </section> | </section> | |||
| <section title="Terminology"> | <section numbered="true" toc="default"> | |||
| <name>Terminology</name> | ||||
| <t> | <t> | |||
| The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL | The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", | |||
| NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", | "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL | |||
| "MAY", and "OPTIONAL" in this document are to be interpreted as | NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", | |||
| described in BCP 14 <xref target="RFC2119"/>, | "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>", | |||
| <xref target="RFC8174"/> when, and only when, they | "<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are | |||
| appear in all capitals, as shown here. | to be interpreted as described in BCP 14 <xref target="RFC2119"/> | |||
| <xref target="RFC8174"/> when, and only when, they appear in all capitals, | ||||
| as shown here. | ||||
| </t> | </t> | |||
| <t> | <t> | |||
| This specification makes use of terminology defined by the | This specification makes use of terminology defined by the | |||
| protocol for Interactive Connectivity Establishment in | ICE protocol in | |||
| <xref target="I-D.ietf-ice-rfc5245bis"/> and its Trickle ICE extension | <xref target="RFC8445" format="default"/> and by its Trickle ICE extensi | |||
| <xref target="I-D.ietf-ice-trickle"/>. It is assumed that | on in | |||
| <xref target="RFC8838" format="default"/>. It is assumed that | ||||
| the reader is familiar with the terminology from both documents. | the reader is familiar with the terminology from both documents. | |||
| </t> | </t> | |||
| <t> <xref target="I-D.ietf-ice-rfc5245bis"/> also describes | <t> <xref target="RFC8445" format="default"/> also describes | |||
| how ICE makes use of the | how ICE makes use of the | |||
| Session Traversal Utilities for NAT (STUN) protocol | Session Traversal Utilities for NAT (STUN) protocol | |||
| <xref target="RFC5389"/> and its extension | <xref target="RFC5389" format="default"/> and its extension | |||
| Traversal Using Relay NAT (TURN) <xref target="RFC5766"/>. | Traversal Using Relays around NAT (TURN) <xref target="RFC5766" format= | |||
| "default"/>. | ||||
| </t> | </t> | |||
| </section> | </section> | |||
| <section title="Protocol Overview" anchor='overview'> | <section anchor="overview" numbered="true" toc="default"> | |||
| <name>Protocol Overview</name> | ||||
| <t> | <t> | |||
| When using ICE for SIP according to | When using ICE for SIP according to | |||
| <xref target="I-D.ietf-mmusic-ice-sip-sdp"/> | <xref target="RFC8839" format="default"/>, | |||
| the ICE candidates are exchanged solely via | the ICE candidates are exchanged solely via | |||
| SDP Offer/Answer as per <xref target="RFC3264"/>. | SDP Offer/Answer as per <xref target="RFC3264" format="default"/>. | |||
| This specification defines an additional mechanism | This specification defines an additional mechanism | |||
| where candidates can be exchanged using SIP INFO messages | where candidates can be exchanged using SIP INFO messages | |||
| and a newly defined Info Package <xref target="RFC6086"/>. | and a newly defined Info Package <xref target="RFC6086" format="default" | |||
| This allows ICE | />. | |||
| candidates also to be sent in parallel to an ongoing Offer/Answer | This also allows ICE | |||
| candidates to be sent in parallel to an ongoing Offer/Answer | ||||
| negotiation and/or after the completion of the Offer/Answer | negotiation and/or after the completion of the Offer/Answer | |||
| negotiation. | negotiation. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| Typically, in cases where Trickle ICE is fully supported, | Typically, in cases where Trickle ICE is fully supported, | |||
| the Offerer sends an INVITE request | the Offerer sends an INVITE request | |||
| containing a subset of candidates. | containing a subset of candidates. | |||
| Once an early dialog is established | Once an early dialog is established, | |||
| the Offerer can continue sending | the Offerer can continue sending | |||
| candidates in INFO requests within that dialog. | candidates in INFO requests within that dialog. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| Similarly, an Answerer can send | Similarly, an Answerer can send | |||
| ICE candidates using INFO requests within | ICE candidates using INFO requests within | |||
| the dialog established by its 18x provisional response. | the dialog established by its 18x provisional response. | |||
| <xref target="fig-intro-example"/> shows such a sample | <xref target="fig-intro-example" format="default"/> shows such a sample | |||
| exchange: | exchange: | |||
| </t> | </t> | |||
| <t> | ||||
| <figure title="Sample Trickle ICE scenario with SIP" | <figure anchor="fig-intro-example"> | |||
| anchor="fig-intro-example"> | <name>Sample Trickle ICE Scenario with SIP</name> | |||
| <artwork><![CDATA[ | <artwork name="" type="" align="left" alt=""><![CDATA[ | |||
| STUN/Turn STUN/TURN | STUN/TURN STUN/TURN | |||
| Servers Alice Bob Servers | Servers Alice Bob Servers | |||
| | | | | | | | | | | |||
| | STUN Bi.Req. | INVITE (Offer) | | | | STUN Bi.Req. | INVITE (Offer) | | | |||
| |<--------------|------------------------>| | | |<--------------|------------------------>| | | |||
| | | 183 (Answer) | TURN Alloc Req | | | | 183 (Answer) | TURN Alloc Req | | |||
| | STUN Bi.Resp. |<------------------------|--------------->| | | STUN Bi.Resp. |<------------------------|--------------->| | |||
| |-------------->| INFO/OK (SRFLX Cand.) | | | |-------------->| INFO/OK (SRFLX Cand.) | | | |||
| | |------------------------>| TURN Alloc Resp| | | |------------------------>| TURN Alloc Resp| | |||
| | | INFO/OK (Relay Cand.) |<---------------| | | | INFO/OK (Relay Cand.) |<---------------| | |||
| | |<------------------------| | | | |<------------------------| | | |||
| skipping to change at line 230 ¶ | skipping to change at line 225 ¶ | |||
| | |<=======================>| | | | |<=======================>| | | |||
| | | | | | | | | | | |||
| | | 200 OK | | | | | 200 OK | | | |||
| | |<------------------------| | | | |<------------------------| | | |||
| | | ACK | | | | | ACK | | | |||
| | |------------------------>| | | | |------------------------>| | | |||
| | | | | | | | | | | |||
| | |<===== MEDIA FLOWS =====>| | | | |<===== MEDIA FLOWS =====>| | | |||
| | | | | | | | | | | |||
| Note: SRFLX denotes server-reflexive candidates | Note: "SRFLX" denotes server-reflexive candidates ]]></artwork> | |||
| ]]></artwork> | </figure> | |||
| </figure> | <section anchor="disco-issues" numbered="true" toc="default"> | |||
| </t> | <name>Discovery Issues</name> | |||
| <section title="Discovery issues" anchor="disco-issues"> | ||||
| <t> | <t> | |||
| In order to benefit from Trickle ICE's full potential and | In order to benefit from Trickle ICE's full potential and | |||
| reduce session establishment latency to a minimum, Trickle ICE | reduce session establishment latency to a minimum, Trickle ICE | |||
| agents need to generate SDP Offers and Answers that contain | Agents need to generate SDP Offers and Answers that contain | |||
| incomplete, potentially empty sets of candidates. Such Offers | incomplete and potentially empty sets of candidates. Such Offers | |||
| and Answers can only be handled meaningfully by agents that | and Answers can only be handled meaningfully by agents that | |||
| actually support incremental candidate provisioning, which | actually support incremental candidate provisioning, which | |||
| implies the need to confirm such support before using | implies the need to confirm such support before using | |||
| it. | it. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| Contrary to other protocols, | Contrary to other protocols, | |||
| where "in advance" capability | where "in advance" capability | |||
| discovery is widely implemented, the mechanisms that allow this | discovery is widely implemented, the mechanisms that allow this | |||
| for SIP (i.e., a combination of UA Capabilities | for SIP (i.e., a combination of UA capabilities | |||
| <xref target="RFC3840"/> and Globally Routable User Agent URIs (GRUU) | <xref target="RFC3840" format="default"/> and Globally Routable User A | |||
| <xref target="RFC5627"/>) | gent URIs (GRUUs) <xref target="RFC5627" format="default"/>) | |||
| have only seen low levels of adoption. | have only seen low levels of adoption. | |||
| This presents an issue | This presents an issue | |||
| for Trickle ICE implementations as SIP UAs do not have an | for Trickle ICE implementations as SIP UAs do not have an | |||
| obvious means of verifying that their peer will support | obvious means of verifying that their peer will support | |||
| incremental candidate provisioning. | incremental candidate provisioning. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| The Half Trickle mode of operation defined in the Trickle | The Half Trickle mode of operation defined in the Trickle | |||
| ICE specification <xref target="I-D.ietf-ice-trickle"/> | ICE specification <xref target="RFC8838" format="default"/> | |||
| provides one way around this, by requiring the first Offer to | provides one way around this, by requiring the first Offer to | |||
| contain a complete set of local ICE candidates | contain a complete set of local ICE candidates | |||
| and only using | and using only | |||
| incremental provisioning of remote candidates | incremental provisioning of remote candidates | |||
| for the rest of the session. | for the rest of the session. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| While using Half Trickle does provide a working solution it | While using Half Trickle does provide a working solution, it | |||
| also comes at the price of increased latency. | also comes at the price of increased latency. Therefore, | |||
| <xref target="disco"/> therefore makes several alternative | <xref target="disco" format="default"/> makes several alternative | |||
| suggestions that enable SIP UAs to engage in Full Trickle | suggestions that enable SIP UAs to engage in Full Trickle | |||
| right from their first Offer: <xref target="disco-prov"/> | right from their first Offer: <xref target="disco-prov" format="defaul | |||
| discusses the use of on-line provisioning as a means of | t"/> | |||
| allowing use of Trickle ICE for all endpoints in controlled | discusses the use of online provisioning as a means of | |||
| environments. <xref target="disco-gruu"/> describes | allowing the use of Trickle ICE for all endpoints in controlled | |||
| environments. <xref target="disco-gruu" format="default"/> describes | ||||
| anticipatory discovery for implementations that actually do | anticipatory discovery for implementations that actually do | |||
| support GRUU and UA Capabilities and | support GRUU and UA capabilities, and | |||
| <xref target="half-full-trickle"/> discusses the implementation | <xref target="half-full-trickle" format="default"/> discusses the impl | |||
| ementation | ||||
| and use of Half Trickle by SIP UAs where none of the above | and use of Half Trickle by SIP UAs where none of the above | |||
| are an option. | are an option. | |||
| </t> | </t> | |||
| </section> | </section> | |||
| <section title="Relationship with the Offer/Answer Model"> | <section numbered="true" toc="default"> | |||
| <name>Relationship with the Offer/Answer Model</name> | ||||
| <t> | <t> | |||
| From the perspective of SIP middle boxes and proxies | From the perspective of SIP middleboxes and proxies, | |||
| the Offer/Answer exchange for | the Offer/Answer exchange for | |||
| Trickle ICE looks partly similar to the Offer/Answer exchange | Trickle ICE looks partly similar to the Offer/Answer exchange | |||
| for regular ICE for SIP | for regular ICE for SIP | |||
| <xref target="I-D.ietf-mmusic-ice-sip-sdp"/>. | <xref target="RFC8839" format="default"/>. | |||
| However, in order to have the full picture of the candidate | However, in order to have the full picture of the candidate | |||
| exchange, the newly introduced INFO messages | exchange, the newly introduced INFO messages | |||
| need to be considered as well. | need to be considered as well. | |||
| </t> | </t> | |||
| <t> | <figure anchor="fig-oa-and-trickle"> | |||
| <figure title="Distinguishing between Trickle ICE and | <name>Distinguishing between Trickle ICE and Traditional Signaling</na | |||
| traditional signaling." anchor="fig-oa-and-trickle"> | me> | |||
| <artwork> | <artwork name="" type="" align="left" alt=""><![CDATA[ | |||
| <![CDATA[ | ||||
| +-------------------------------+ +-------------------------------+ | +-------------------------------+ +-------------------------------+ | |||
| | Alice +--------------+ | | +--------------+ Bob | | | Alice +--------------+ | | +--------------+ Bob | | |||
| | | Offer/Answer | | | | Offer/Answer | | | | | Offer/Answer | | | | Offer/Answer | | | |||
| | +--------+ | Module | | | | Module | +--------+ | | | +--------+ | Module | | | | Module | +--------+ | | |||
| | | ICE | +--------------+ | | +--------------+ | ICE | | | | | ICE | +--------------+ | | +--------------+ | ICE | | | |||
| | | Module | | | | | | Module | | | | | Module | | | | | | Module | | | |||
| | +--------+ | | | | +--------+ | | | +--------+ | | | | +--------+ | | |||
| +-------------------------------+ +-------------------------------+ | +-------------------------------+ +-------------------------------+ | |||
| | | | | | | | | | | |||
| | | INVITE (Offer) | | | | | INVITE (Offer) | | | |||
| skipping to change at line 323 ¶ | skipping to change at line 315 ¶ | |||
| | | | | | | |||
| | SIP INFO (more candidates) | | | SIP INFO (more candidates) | | |||
| |----------------------------------------------------->| | |----------------------------------------------------->| | |||
| | SIP INFO (more candidates) | | | SIP INFO (more candidates) | | |||
| |<-----------------------------------------------------| | |<-----------------------------------------------------| | |||
| | | | | | | |||
| | STUN Binding Requests/Responses | | | STUN Binding Requests/Responses | | |||
| |----------------------------------------------------->| | |----------------------------------------------------->| | |||
| | STUN Binding Requests/Responses | | | STUN Binding Requests/Responses | | |||
| |<-----------------------------------------------------| | |<-----------------------------------------------------| | |||
| | | | | |]]></artwork> | |||
| </figure> | ||||
| ]]> | ||||
| </artwork> | ||||
| </figure> | ||||
| </t> | ||||
| <t> | <t> | |||
| From an architectural viewpoint, as displayed in | From an architectural viewpoint, as displayed in | |||
| <xref target="fig-oa-and-trickle"/>, exchanging candidates | <xref target="fig-oa-and-trickle" format="default"/>, exchanging candi dates | |||
| through SIP INFO requests could be represented as signaling | through SIP INFO requests could be represented as signaling | |||
| between ICE modules and not between Offer/Answer modules of | between ICE modules and not between Offer/Answer modules of | |||
| SIP User Agents. Then, such INFO requests | SIP UAs. Then, such INFO requests | |||
| do not impact the state of the Offer/Answer transaction other | do not impact the state of the Offer/Answer transaction other | |||
| than providing additional candidates. | than providing additional candidates. | |||
| Consequently, INFO requests are not considered Offers or Answers. | Consequently, INFO requests are not considered Offers or Answers. | |||
| Nevertheless, candidates that have been exchanged | Nevertheless, candidates that have been exchanged | |||
| using INFO requests | using INFO requests | |||
| SHALL be included in subsequent Offers or Answers. | <bcp14>SHALL</bcp14> be included in subsequent Offers or Answers. | |||
| The version number in the "o=" line of that subsequent Offer | The version number in the "o=" line of that subsequent Offer | |||
| needs to be incremented by 1 per the rules | needs to be incremented by 1 per the rules | |||
| in <xref target="RFC3264"/>. | in <xref target="RFC3264" format="default"/>. | |||
| </t> | </t> | |||
| </section> | </section> | |||
| </section> | </section> | |||
| <section title="Incremental Signaling of ICE candidates" anchor="OAproc"> | <section anchor="OAproc" numbered="true" toc="default"> | |||
| <t> | <name>Incremental Signaling of ICE Candidates</name> | |||
| <t> | ||||
| Trickle ICE Agents will exchange | Trickle ICE Agents will exchange | |||
| ICE descriptions compliant to | ICE descriptions compliant to | |||
| <xref target="I-D.ietf-ice-trickle"/> | <xref target="RFC8838" format="default"/> | |||
| via Offer/Answer procedures and/or INFO request bodies. | via Offer/Answer procedures and/or INFO request bodies. | |||
| This requires the following SIP-specific extensions: | This requires the following SIP-specific extensions: | |||
| </t> | </t> | |||
| <t> | <ol spacing="normal" type="1"> | |||
| <list style="numbers"> | <li> | |||
| <t> | Trickle ICE Agents <bcp14>MUST</bcp14> indicate support for Trickle | |||
| Trickle ICE Agents MUST indicate support for Trickle ICE by | ICE by | |||
| including the SIP option-tag 'trickle-ice' in a SIP Supported: heade | including the SIP option-tag "trickle-ice" in a SIP Supported: heade | |||
| r field | r field | |||
| within all SIP INVITE requests and responses. | within all SIP INVITE requests and responses. | |||
| </t> | </li> | |||
| <t> | <li> | |||
| Trickle ICE Agents MUST indicate support for Trickle ICE by | Trickle ICE Agents <bcp14>MUST</bcp14> indicate support for Trickle | |||
| including the ice-option 'trickle' | ICE by | |||
| including the ice-option "trickle" | ||||
| within all SDP Offers and Answers in accordance to | within all SDP Offers and Answers in accordance to | |||
| <xref target="I-D.ietf-ice-trickle"/>. | <xref target="RFC8838" format="default"/>. | |||
| </t> | </li> | |||
| <t> | <li> | |||
| Trickle ICE Agents MAY include any number of ICE candidates, | Trickle ICE Agents <bcp14>MAY</bcp14> include any number of ICE candid | |||
| i.e. from zero to the complete set of candidates, | ates, | |||
| i.e., from zero to the complete set of candidates, | ||||
| in their initial Offer or Answer. | in their initial Offer or Answer. | |||
| If the complete candidate set is included already | If the complete candidate set is already included | |||
| in the initial Offer, this is called Half-Trickle. | in the initial Offer, it is called Half Trickle. | |||
| </t> | </li> | |||
| <t> | <li> | |||
| Trickle ICE Agents MAY exchange additional ICE candidates using INFO | Trickle ICE Agents <bcp14>MAY</bcp14> exchange additional ICE candid | |||
| requests | ates using INFO requests | |||
| within an existing INVITE dialog usage (including an early dialog) | within an existing INVITE dialog usage (including an early dialog) | |||
| as specified in <xref target="RFC6086"/>. | as specified in <xref target="RFC6086" format="default"/>. | |||
| The INFO requests carry an Info-Package: trickle-ice. | The INFO requests carry an Info-Package: trickle-ice. | |||
| Trickle ICE Agents MUST be prepared to receive INFO requests | Trickle ICE Agents <bcp14>MUST</bcp14> be prepared to receive INFO r equests | |||
| within that same dialog usage, | within that same dialog usage, | |||
| containing additional candidates and/or | containing additional candidates and/or | |||
| an indication that trickling of such candidates has ended. | an indication that trickling of such candidates has ended. | |||
| </t> | </li> | |||
| <t> | <li> | |||
| Trickle ICE Agents MAY exchange additional ICE candidates | Trickle ICE Agents <bcp14>MAY</bcp14> exchange additional ICE candid | |||
| ates | ||||
| before the Answerer has sent the Answer provided that | before the Answerer has sent the Answer provided that | |||
| an invite dialog usage is established at both Trickle ICE Agents. | an invite dialog usage is established at both Trickle ICE Agents. | |||
| Note that in case of forking multiple early dialogs may exist. | Note that in case of forking, multiple early dialogs may exist. | |||
| </t> | </li> | |||
| </list> | </ol> | |||
| </t> | ||||
| <t> | <t> | |||
| The following sections provide further details on how | The following sections provide further details on how | |||
| Trickle ICE Agents perform the initial Offer/Answer exchange | Trickle ICE Agents perform the initial Offer/Answer exchange | |||
| (<xref target="InitialOA"/>), | (<xref target="InitialOA" format="default"/>), | |||
| perform subsequent Offer/Answer exchanges | perform subsequent Offer/Answer exchanges | |||
| (<xref target="subsOA"/>) | (<xref target="subsOA" format="default"/>), | |||
| and establish the INVITE dialog usage | and establish the INVITE dialog usage | |||
| (<xref target="dialog-est"/>) | (<xref target="dialog-est" format="default"/>) | |||
| such that they can incrementally trickle candidates | such that they can incrementally trickle candidates | |||
| (<xref target="info-sdp"/>). | (<xref target="info-sdp" format="default"/>). | |||
| </t> | </t> | |||
| <section title="Initial Offer/Answer Exchange" anchor="InitialOA"> | <section anchor="InitialOA" numbered="true" toc="default"> | |||
| <section title="Sending the Initial Offer" anchor="IniOS"> | <name>Initial Offer/Answer Exchange</name> | |||
| <t> | <section anchor="IniOS" numbered="true" toc="default"> | |||
| <name>Sending the Initial Offer</name> | ||||
| <t> | ||||
| If the Offerer includes candidates in its initial Offer, | If the Offerer includes candidates in its initial Offer, | |||
| it MUST encode these candidates as specified in | it <bcp14>MUST</bcp14> encode these candidates as specified in | |||
| <xref target="I-D.ietf-mmusic-ice-sip-sdp"/>. | <xref target="RFC8839" format="default"/>. | |||
| </t> | </t> | |||
| <t>If the Offerer wants to send its initial Offer | <t>If the Offerer wants to send its initial Offer | |||
| before knowing any candidate for one or more media descriptions , | before knowing any candidate for one or more media descriptions , | |||
| it MUST set the port to the default value '9' for these media descriptions. | it <bcp14>MUST</bcp14> set the port to the default value '9' f or these media descriptions. | |||
| If the Offerer does not want to include the | If the Offerer does not want to include the | |||
| host IP address in the corresponding c-line, | host IP address in the corresponding "c="line, | |||
| e.g. due to privacy reasons, | e.g., due to privacy reasons, | |||
| it SHOULD include a default address in the c-line, | it <bcp14>SHOULD</bcp14> include a default address in the "c="l | |||
| ine, | ||||
| which is set to the IPv4 address 0.0.0.0 or | which is set to the IPv4 address 0.0.0.0 or | |||
| to the IPv6 equivalent ::. | to the IPv6 equivalent ::. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| In this case, the Offerer obviously cannot know the RTCP transp | In this case, the Offerer obviously cannot know the | |||
| ort address and, | RTP Control Protocol (RTCP) transport address; | |||
| thus, MUST NOT include the "a=rtcp" attribute <xref target="RF | thus, it <bcp14>MUST NOT</bcp14> include the "rtcp" attribute < | |||
| C6086"/>. | xref target="RFC3605" format="default"/>. | |||
| This avoids potential ICE mismatch | This avoids potential ICE mismatch | |||
| (see <xref target="I-D.ietf-mmusic-ice-sip-sdp"/>) for the RTCP | (see <xref target="RFC8839" format="default"/>) for the RTCP tr | |||
| transport address. | ansport address. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| If the Offerer wants to use RTCP multiplexing | If the Offerer wants to use RTCP multiplexing | |||
| <xref target="RFC5761"/> | <xref target="RFC5761" format="default"/> | |||
| and/or exclusive RTCP multiplexing | and/or exclusive RTCP multiplexing | |||
| <xref target="I-D.ietf-mmusic-mux-exclusive"/>, | <xref target="RFC8858" format="default"/>, | |||
| it still will include the "a=rtcp-mux" and/or | it still will include the "rtcp-mux" and/or | |||
| "a=rctp-mux-only" attribute | "rctp-mux-only" attribute | |||
| in the initial Offer. | in the initial Offer. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| In any case, the Offerer MUST include | In any case, the Offerer <bcp14>MUST</bcp14> include | |||
| the attribute "a=ice-options:trickle" in accordance to | the "ice-options:trickle" attribute in accordance to | |||
| <xref target="I-D.ietf-ice-trickle"/> and | <xref target="RFC8838" format="default"/> and | |||
| MUST include in each "m="-line a "a=mid:" attribute | <bcp14>MUST</bcp14> include in each "m=" line a "mid" attribute | |||
| in accordance to <xref target="RFC5888"/>. | in accordance to <xref target="RFC5888" format="default"/>. | |||
| The "a=mid:" attribute identifies the "m="-line | The "mid" attribute identifies the "m=" line | |||
| to which a candidate belongs and | to which a candidate belongs and | |||
| helps in case of multiple "m="-lines, | helps in case of multiple "m=" lines, | |||
| when candidates gathering could occur in a order different | when candidate gathering could occur in an order different | |||
| from the order of the "m="-lines. | from the order of the "m=" lines. | |||
| </t> | </t> | |||
| </section> | </section> | |||
| <section title="Receiving the Initial Offer" anchor="IniOR"> | <section anchor="IniOR" numbered="true" toc="default"> | |||
| <t> | <name>Receiving the Initial Offer</name> | |||
| <t> | ||||
| If the initial Offer included candidates, | If the initial Offer included candidates, | |||
| the Answerer uses these candidates to start ICE processing | the Answerer uses these candidates to start ICE processing | |||
| as specified in <xref target="I-D.ietf-ice-trickle"/>. | as specified in <xref target="RFC8838" format="default"/>. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| If the initial Offer included the attribute a=ice-options:trick | If the initial Offer included the "ice-options:trickle" attribu | |||
| le, | te, | |||
| the Answerer MUST be prepared for receiving trickled candidates | the Answerer <bcp14>MUST</bcp14> be prepared for receiving tric | |||
| later on. | kled candidates later on. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| In case of a "m/c=" line with default values | In case of a "m/c=" line with default values, | |||
| none of the eventually trickled candidates | none of the eventually trickled candidates | |||
| will match the default destination. | will match the default destination. | |||
| This situation MUST NOT cause an ICE mismatch | This situation <bcp14>MUST NOT</bcp14> cause an ICE mismatch | |||
| (see <xref target="I-D.ietf-mmusic-ice-sip-sdp"/>). | (see <xref target="RFC8839" format="default"/>). | |||
| </t> | </t> | |||
| </section> | </section> | |||
| <section title="Sending the Initial Answer" anchor="IniAS"> | <section anchor="IniAS" numbered="true" toc="default"> | |||
| <t> | <name>Sending the Initial Answer</name> | |||
| <t> | ||||
| If the Answerer includes candidates in its initial Answer, | If the Answerer includes candidates in its initial Answer, | |||
| it MUST encode these candidates as specified in | it <bcp14>MUST</bcp14> encode these candidates as specified in | |||
| <xref target="I-D.ietf-mmusic-ice-sip-sdp"/>. | <xref target="RFC8839" format="default"/>. | |||
| </t> | </t> | |||
| <t>If the Answerer wants to send its initial Answer | ||||
| <t>If the Answerer wants to send its initial Answer | ||||
| before knowing any candidate for one or more media descriptions , | before knowing any candidate for one or more media descriptions , | |||
| it MUST set the port to the default value '9' for these media descriptions. | it <bcp14>MUST</bcp14> set the port to the default value '9' f or these media descriptions. | |||
| If the Answerer does not want to include the | If the Answerer does not want to include the | |||
| host IP address in the corresponding c-line, | host IP address in the corresponding "c="line, | |||
| e.g. due to privacy reasons, | e.g., due to privacy reasons, | |||
| it SHOULD include a default address in the c-line, | it <bcp14>SHOULD</bcp14> include a default address in the "c="l | |||
| ine, | ||||
| which is set to the IPv4 address 0.0.0.0 or | which is set to the IPv4 address 0.0.0.0 or | |||
| to the IPv6 equivalent ::. | to the IPv6 equivalent ::. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| In this case, the Answerer obviously cannot know the RTCP trans | In this case, the Answerer obviously cannot know the RTCP trans | |||
| port address and, | port address; thus, | |||
| thus, MUST NOT include the "a=rtcp" attribute <xref target="RF | it <bcp14>MUST NOT</bcp14> include the "rtcp" attribute <xref t | |||
| C6086"/>. | arget="RFC6086" format="default"/>. | |||
| This avoids potential ICE mismatch | This avoids potential ICE mismatch | |||
| (see <xref target="I-D.ietf-mmusic-ice-sip-sdp"/>) for the RTCP | (see <xref target="RFC8839" format="default"/>) for the RTCP tr | |||
| transport address. | ansport address. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| If the Answerer accepts to use RTCP multiplexing | If the Answerer accepts the use of RTCP multiplexing | |||
| <xref target="RFC5761"/> | <xref target="RFC5761" format="default"/> | |||
| and/or exclusive RTCP multiplexing | and/or exclusive RTCP multiplexing | |||
| <xref target="I-D.ietf-mmusic-mux-exclusive"/>, | <xref target="RFC8858" format="default"/>, | |||
| it will include the "a=rtcp-mux" attribute | it will include the "rtcp-mux" attribute | |||
| in the initial Answer. | in the initial Answer. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| In any case, the Answerer MUST include | In any case, the Answerer <bcp14>MUST</bcp14> include | |||
| the attribute "a=ice-options:trickle" in accordance to | the "ice-options:trickle" attribute in accordance to | |||
| <xref target="I-D.ietf-ice-trickle"/> and | <xref target="RFC8838" format="default"/> and | |||
| MUST include in each "m="-line | <bcp14>MUST</bcp14> include in each "m=" line | |||
| a "a=mid:" attribute in accordance to | a "mid" attribute in accordance to | |||
| <xref target="RFC5888"/>. | <xref target="RFC5888" format="default"/>. | |||
| </t> | </t> | |||
| </section> | ||||
| </section> | <section anchor="IniAR" numbered="true" toc="default"> | |||
| <section title="Receiving the Initial Answer" anchor="IniAR"> | <name>Receiving the Initial Answer</name> | |||
| <t> | <t> | |||
| If the initial Answer included candidates, | If the initial Answer included candidates, | |||
| the Offerer uses these candidates to start ICE processing | the Offerer uses these candidates to start ICE processing | |||
| as specified in <xref target="I-D.ietf-ice-trickle"/>. | as specified in <xref target="RFC8838" format="default"/>. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| In case of a "m/c=" line with default values | In case of a "m/c=" line with default values, | |||
| none of the eventually trickled candidates | none of the eventually trickled candidates | |||
| will match the default destination. | will match the default destination. | |||
| This situation MUST NOT cause an ICE mismatch | This situation <bcp14>MUST NOT</bcp14> cause an ICE mismatch | |||
| (see <xref target="I-D.ietf-mmusic-ice-sip-sdp"/>). | (see <xref target="RFC8839" format="default"/>). | |||
| </t> | </t> | |||
| </section> | ||||
| </section> | </section> | |||
| <section title="Subsequent Offer/Answer Exchanges" anchor="subsOA"> | </section> | |||
| <section anchor="subsOA" numbered="true" toc="default"> | ||||
| <name>Subsequent Offer/Answer Exchanges</name> | ||||
| <t> | <t> | |||
| Subsequent Offer/Answer exchanges are handled | Subsequent Offer/Answer exchanges are handled | |||
| as for regular ICE (see section 4.2 of | the same as regular ICE (see <xref target="RFC8839" sectionFormat="o | |||
| <xref target="I-D.ietf-mmusic-ice-sip-sdp"/>). | f" section="4.4"/>). | |||
| </t> | </t> | |||
| <t> If an Offer or Answer needs to be sent while the ICE agents | <t> If an Offer or Answer needs to be sent while the ICE Agents | |||
| are in the middle of trickling | are in the middle of trickling, | |||
| section 3.2 of <xref target="I-D.ietf-mmusic-ice-sip-sdp"/>) applies | <xref target="RFC8839" sectionFormat="of" section="4.4"/> applies. | |||
| . | This means that an ICE Agent includes candidate attributes | |||
| This means that an ICE agent includes candidate attributes | ||||
| for all local candidates it had trickled previously | for all local candidates it had trickled previously | |||
| for a specific media stream. | for a specific media stream. | |||
| </t> | ||||
| <t> | ||||
| [RFC EDITOR NOTE: The section 3.2 in above sentence is correct for version 20 o | ||||
| f said I-D. | ||||
| Authors need to cross-check during Auth48 since it could have have changed in t | ||||
| he meantime.] | ||||
| </t> | ||||
| </section> | ||||
| <section title="Establishing the Dialog" anchor="dialog-est"> | ||||
| <t> | ||||
| In order to be able to start trickling, the | ||||
| following two conditions need to be satisfied at the SIP UAs: | ||||
| </t> | </t> | |||
| </section> | ||||
| <section anchor="dialog-est" numbered="true" toc="default"> | ||||
| <name>Establishing the Dialog</name> | ||||
| <t> | <t> | |||
| <list style="symbols"> | In order to be able to start trickling, the | |||
| <t> | following two conditions need to be satisfied at the SIP UAs: | |||
| Trickle ICE support at the peer agent MUST be confirmed. | ||||
| </t> | ||||
| <t> | ||||
| A dialog MUST have been created between the peers. | ||||
| </t> | ||||
| </list> | ||||
| </t> | </t> | |||
| <ul spacing="normal"> | ||||
| <li> | ||||
| Trickle ICE support at the peer agent <bcp14>MUST</bcp14> be confi | ||||
| rmed. | ||||
| </li> | ||||
| <li> | ||||
| A dialog <bcp14>MUST</bcp14> have been created between the peers. | ||||
| </li> | ||||
| </ul> | ||||
| <t> | <t> | |||
| <xref target="disco"/> discusses in detail the various options | <xref target="disco" format="default"/> discusses in detail the variou | |||
| for satisfying the first of the above conditions. Regardless | s options | |||
| of those mechanisms, however, agents are certain to have a | for satisfying the first of the above conditions. However, regardless | |||
| of those mechanisms, agents are certain to have a | ||||
| clear understanding of whether their peers support trickle | clear understanding of whether their peers support trickle | |||
| ICE once an Offer and an Answer have been exchanged, | ICE once an Offer and an Answer have been exchanged, | |||
| which also allows for ICE processing to commence | which also allows for ICE processing to commence | |||
| (see <xref target="offerer-can-trickle"/>). | (see <xref target="offerer-can-trickle" format="default"/>). | |||
| </t> | </t> | |||
| <section title="Establishing Dialog State through Reliable Offer/Answe | <section anchor="relprov" numbered="true" toc="default"> | |||
| r Delivery" anchor="relprov"> | <name>Establishing Dialog State through Reliable Offer/Answer Delivery | |||
| <t> | </name> | |||
| <figure title="SIP Offerer can freely trickle as soon as it | <figure anchor="offerer-can-trickle"> | |||
| receives an Answer." | <name>A SIP Offerer can freely trickle as soon as it receives an Ans | |||
| anchor="offerer-can-trickle"> | wer</name> | |||
| <artwork><![CDATA[ | <artwork name="" type="" align="left" alt=""><![CDATA[ | |||
| Alice Bob | Alice Bob | |||
| | | | | | | |||
| | INVITE (Offer) | | | INVITE (Offer) | | |||
| |------------------------>| | |------------------------>| | |||
| | 183 (Answer) | | | 183 (Answer) | | |||
| |<------------------------| | |<------------------------| | |||
| | PRACK/OK | | | PRACK/OK | | |||
| |------------------------>| | |------------------------>| | |||
| | | | | | | |||
| +----------------------------------------+ | +----------------------------------------+ | |||
| skipping to change at line 594 ¶ | skipping to change at line 578 ¶ | |||
| |and know that the dialog is in the early| | |and know that the dialog is in the early| | |||
| |state. Send INFO! | | |state. Send INFO! | | |||
| +----------------------------------------+ | +----------------------------------------+ | |||
| | | | | | | |||
| | INFO/OK (+SRFLX Cand.) | | | INFO/OK (+SRFLX Cand.) | | |||
| |------------------------>| | |------------------------>| | |||
| | INFO/OK (+SRFLX Cand.) | | | INFO/OK (+SRFLX Cand.) | | |||
| |<------------------------| | |<------------------------| | |||
| | | | | | | |||
| Note: SRFLX denotes server-reflexive candidates | Note: "SRFLX" denotes server-reflexive candidates]]></artwork> | |||
| </figure> | ||||
| ]]></artwork> | ||||
| </figure> | ||||
| </t> | ||||
| <t> | <t> | |||
| As shown in <xref target="offerer-can-trickle"/> | As shown in <xref target="offerer-can-trickle" format="default"/>, | |||
| satisfying both conditions is relatively trivial for | satisfying both conditions is relatively trivial for | |||
| ICE Agents that have sent an Offer in an INVITE and that have | ICE Agents that have sent an Offer in an INVITE and that have | |||
| received an Answer in a reliable provisional response. | received an Answer in a reliable provisional response. | |||
| It is guaranteed to have confirmed support for | It is guaranteed to have confirmed support (or lack thereof) for | |||
| Trickle ICE at the Answerer (or lack thereof) and to have | Trickle ICE at the Answerer and to have | |||
| fully initialized the SIP dialog at both ends. | fully initialized the SIP dialog at both ends. | |||
| Offerers and Answerers (after receipt of the PRACK request) | Offerers and Answerers (after receipt of the PRACK request) | |||
| in the above situation can therefore | in the above situation can therefore | |||
| freely commence trickling within the newly established dialog. | freely commence trickling within the newly established dialog. | |||
| </t> | </t> | |||
| </section> | </section> | |||
| <section title="Establishing Dialog State through Unreliable Offer/Ans | <section anchor="unrelprov" numbered="true" toc="default"> | |||
| wer Delivery" anchor="unrelprov"> | <name>Establishing Dialog State through Unreliable Offer/Answer Delive | |||
| ry</name> | ||||
| <t> | <t> | |||
| The situation is a bit more delicate for agents that have | The situation is a bit more delicate for agents that have | |||
| received an Offer in an INVITE request and have sent an Answer | received an Offer in an INVITE request and have sent an Answer | |||
| in an unreliable provisional response because, once the | in an unreliable provisional response because, once the | |||
| response has been sent, the Answerer does not | response has been sent, the Answerer does not | |||
| know when or if it has been received | know when or if it has been received | |||
| (<xref target="answerer-cant-trickle"/>). | (<xref target="answerer-cant-trickle" format="default"/>). | |||
| </t> | </t> | |||
| <t> | <figure anchor="answerer-cant-trickle"> | |||
| <figure title="A SIP UA that sent an Answer in an unreliable | <name>A SIP UA that sent an Answer in an unreliable provisional resp | |||
| provisional response does not know if | onse does not know if it was received or if the dialog at the side of the Offere | |||
| it was received and if the dialog at the | r has entered the early state</name> | |||
| side of the Offerer has entered the early | <artwork name="" type="" align="left" alt=""><![CDATA[ | |||
| state" | ||||
| anchor="answerer-cant-trickle"> | ||||
| <artwork><![CDATA[ | ||||
| Alice Bob | Alice Bob | |||
| | | | | | | |||
| | INVITE (Offer) | | | INVITE (Offer) | | |||
| |------------------------>| | |------------------------>| | |||
| | 183 (Answer) | | | 183 (Answer) | | |||
| |<------------------------| | |<------------------------| | |||
| | | | | | | |||
| | +----------------------+ | | +----------------------+ | |||
| | |Bob: I don't know if | | | |Bob: I don't know if | | |||
| | |Alice got my 183 or if| | | |Alice got my 183 or if| | |||
| | |her dialog is already | | | |her dialog is already | | |||
| | |in the early state. | | | |in the early state. | | |||
| | | Can I send INFO??? | | | | Can I send INFO??? | | |||
| | +----------------------+ | | +----------------------+ | |||
| | | | | | ]]></artwork> | |||
| ]]></artwork> | </figure> | |||
| </figure> | ||||
| </t> | ||||
| <t> | <t> | |||
| In order to clear this ambiguity as soon as possible, | In order to clear this ambiguity as soon as possible, | |||
| the Answerer needs to retransmit the provisional response | the Answerer needs to retransmit the provisional response | |||
| with the exponential back-off timers described in | with the exponential backoff timers described in | |||
| <xref target="RFC3262"/>. | <xref target="RFC3262" format="default"/>. | |||
| These retransmissions MUST cease on receipt | These retransmissions <bcp14>MUST</bcp14> cease on receipt | |||
| of an INFO request carrying a 'trickle-ice' Info Package body, | of an INFO request carrying a "trickle-ice" Info Package body, | |||
| on receipt of any other in-dialog request from the offerer or | on receipt of any other in-dialog request from the Offerer, or | |||
| on transmission of the Answer in a 2xx response. | on transmission of the Answer in a 2xx response. | |||
| The offerer cannot send in-dialog requests until it receives | The Offerer cannot send in-dialog requests until it receives | |||
| a response, so the arrival of such a request proves that | a response, so the arrival of such a request proves that | |||
| the response has arrived. | the response has arrived. | |||
| Using the INFO request for dialog confirmation | Using the INFO request for dialog confirmation | |||
| is similar to the procedure described in section | is similar to the procedure described in | |||
| 6.1.1 of <xref target="I-D.ietf-mmusic-ice-sip-sdp"/> except that | <xref target="RFC8839" sectionFormat="of" section="7.1.1"/>, except | |||
| the STUN binding Request is replaced by the INFO request. | that | |||
| </t> | the STUN binding request is replaced by the INFO request. | |||
| <t> | ||||
| [RFC EDITOR NOTE: The section 6.1.1 in above sentence is correct for version 20 | ||||
| of said I-D. | ||||
| Authors need to cross-check during Auth48 since it could have have changed in t | ||||
| he meantime.] | ||||
| </t> | </t> | |||
| <t> | <t> | |||
| The Offerer MUST send a Trickle ICE INFO request as soon as | The Offerer <bcp14>MUST</bcp14> send a Trickle ICE INFO request as s oon as | |||
| it receives an SDP Answer in an unreliable provisional | it receives an SDP Answer in an unreliable provisional | |||
| response. This INFO request MUST repeat the candidates | response. This INFO request <bcp14>MUST</bcp14> repeat the candidate s | |||
| that were already provided in the Offer (as would be the case | that were already provided in the Offer (as would be the case | |||
| when Half Trickle is performed or when new candidates have not | when Half Trickle is performed or when new candidates have not | |||
| been learned since then). | been learned since then). | |||
| The first case could happen when Half Trickle is used and | The first case could happen when Half Trickle is used and | |||
| all candidate are already in the initial offer. | all candidates are already in the initial offer. | |||
| The second case could happen when Full Trickle is used and | The second case could happen when Full Trickle is used and | |||
| the offerer is currently gathering additional candidates, | the Offerer is currently gathering additional candidates | |||
| but did not yet get them. | but did not yet get them. | |||
| Also, if the initial Offer did not contain any candidates, | Also, if the initial Offer did not contain any candidates, | |||
| depending on how the Offerer gathers its candidates and | depending on how the Offerer gathers its candidates and | |||
| how long it takes to do so, this INFO could still contain no candida tes. | how long it takes to do so, this INFO could still contain no candida tes. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| When Full Trickle is used and if newly learned candidates | When Full Trickle is used and if newly learned candidates | |||
| are available, the Offerer SHOULD also deliver | are available, the Offerer <bcp14>SHOULD</bcp14> also deliver | |||
| these candidates in said INFO request, | these candidates in said INFO request, | |||
| unless it wants to hold back some candidates in reserve, | unless it wants to hold back some candidates in reserve, | |||
| e.g. in case that these candidates | e.g., in case these candidates | |||
| are expensive to use and would only be trickled | are expensive to use and would only be trickled | |||
| if all other candidates failed. | if all other candidates failed. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| The Offerer SHOULD include an end-of-candidates attribute | The Offerer <bcp14>SHOULD</bcp14> include an "end-of-candidates" att | |||
| in case candidate discovery has ended in the mean time | ribute | |||
| in case candidate discovery has ended in the meantime | ||||
| and no further candidates are to be trickled. | and no further candidates are to be trickled. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| As soon as an Answerer has received such an INFO request, | As soon as an Answerer has received such an INFO request, | |||
| the Answerer has an indication that a dialog is established | the Answerer has an indication that a dialog is established | |||
| at both ends and can begin trickling | at both ends and trickling can begin | |||
| (<xref target="answerer-can-now-trickle"/>). | (<xref target="answerer-can-now-trickle" format="default"/>). | |||
| </t> | </t> | |||
| <t> | <t> | |||
| Note: The +SRFLX in | Note: The "+SRFLX" in | |||
| <xref target="answerer-can-now-trickle"/> | <xref target="answerer-can-now-trickle" format="default"/> | |||
| indicates that additionally newly learned server-reflexive candidat | indicates that additional newly learned server-reflexive candidates | |||
| es are included. | are included. | |||
| </t> | </t> | |||
| <t> | <figure anchor="answerer-can-now-trickle"> | |||
| <figure title="A SIP UA that received an INFO request | <name>A SIP UA that received an INFO request after sending an unreli | |||
| after sending an unreliable | able provisional response knows that the dialog at th | |||
| provisional response knows that the dialog at the | e side of the receiver has entered the early state</name> | |||
| side of the receiver has entered the early | <artwork name="" type="" align="left" alt=""><![CDATA[ | |||
| state" anchor="answerer-can-now-trickle"> | ||||
| <artwork><![CDATA[ | ||||
| Alice Bob | Alice Bob | |||
| | | | | | | |||
| | INVITE (Offer) | | | INVITE (Offer) | | |||
| |------------------------>| | |------------------------>| | |||
| | 183 (Answer) | | | 183 (Answer) | | |||
| |<------------------------| | |<------------------------| | |||
| | INFO/OK (+SRFLX Cand.) | | | INFO/OK (+SRFLX Cand.) | | |||
| |------------------------>| | |------------------------>| | |||
| | | | | | | |||
| | +----------------------+ | | +----------------------+ | |||
| | |Bob: Now I know Alice| | | |Bob: Now I know Alice| | |||
| | | is ready. Send INFO! | | | | is ready. Send INFO! | | |||
| | +----------------------+ | | +----------------------+ | |||
| | INFO/OK (+SRFLX Cand.) | | | INFO/OK (+SRFLX Cand.) | | |||
| |<------------------------| | |<------------------------| | |||
| | | | | | | |||
| | 200/ACK (Answer) | | | 200/ACK (Answer) | | |||
| |<------------------------| | |<------------------------| | |||
| Note: SRFLX denotes server-reflexive candidates | Note: "SRFLX" denotes server-reflexive candidates ]]></artwork> | |||
| </figure> | ||||
| ]]></artwork> | ||||
| </figure> | ||||
| </t> | ||||
| <t> | <t> | |||
| When sending the Answer in the 200 OK response to the INVITE request, | When sending the Answer in the 200 OK response to the INVITE request, | |||
| the Answerer needs to repeat | the Answerer needs to repeat | |||
| exactly the same Answer that was previously sent | exactly the same Answer that was previously sent | |||
| in the unreliable provisional | in the unreliable provisional | |||
| response in order to fulfill the corresponding requirements in | response in order to fulfill the corresponding requirements in | |||
| <xref target="RFC3264"/>. | <xref target="RFC3264" format="default"/>. | |||
| Thus, the Offerer needs to be prepared | Thus, the Offerer needs to be prepared | |||
| for receiving a different number of candidates | for receiving a different number of candidates | |||
| in that repeated Answer than previously exchanged via trickling | in that repeated Answer than previously exchanged via trickling | |||
| and MUST ignore the candidate information | and <bcp14>MUST</bcp14> ignore the candidate information | |||
| in that 200 OK response. | in that 200 OK response. | |||
| </t> | </t> | |||
| </section> | </section> | |||
| <section title="Initiating Trickle ICE without an SDP Answer" | <section anchor="head-start" numbered="true" toc="default"> | |||
| anchor="head-start"> | <name>Initiating Trickle ICE without an SDP Answer</name> | |||
| <t> | <t> | |||
| The ability to convey arbitrary candidates in INFO | The ability to convey arbitrary candidates in INFO | |||
| message bodies allows ICE Agents to initiate trickling | message bodies allows ICE Agents to initiate trickling | |||
| without actually sending an Answer. | without actually sending an Answer. | |||
| Trickle ICE Agents can therefore respond to an INVITE request | Trickle ICE Agents can therefore respond to an INVITE request | |||
| with provisional responses without an SDP Answer | with provisional responses without an SDP Answer | |||
| <xref target="RFC3261"/>. | <xref target="RFC3261" format="default"/>. | |||
| Such provisional responses serve for establishing an early dialog. | Such provisional responses serve for establishing an early dialog. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| Agents that choose to establish the dialog in this way, | Agents that choose to establish the dialog in this way | |||
| MUST retransmit these responses | <bcp14>MUST</bcp14> retransmit these responses | |||
| with the exponential back-off timers described in | with the exponential backoff timers described in | |||
| <xref target="RFC3262"/>. | <xref target="RFC3262" format="default"/>. | |||
| These retransmissions MUST cease on receipt | These retransmissions <bcp14>MUST</bcp14> cease on receipt | |||
| of an INFO request carrying a 'trickle-ice' Info Package body, | of an INFO request carrying a "trickle-ice" Info Package body, | |||
| on receipt any in-dialog request from the offerer or | on receipt of any in-dialog requests from the Offerer, or | |||
| on transmission of the Answer in a 2xx response. | on transmission of the Answer in a 2xx response. | |||
| The offerer cannot send in-dialog requests until it receives | The Offerer cannot send in-dialog requests until it receives | |||
| a response, so the arrival of such a request proves that | a response, so the arrival of such a request proves that | |||
| the response has arrived. | the response has arrived. | |||
| This is again similar to the procedure described in section | This is again similar to the procedure described in | |||
| 6.1.1 of <xref target="I-D.ietf-mmusic-ice-sip-sdp"/> | <xref target="RFC8839" sectionFormat="of" section="6.1.1"/>, | |||
| except that an Answer is not yet provided. | except that an Answer is not yet provided. | |||
| </t> | ||||
| <t> | ||||
| [RFC EDITOR NOTE: The section 6.1.1 in above sentence is correct for version 20 | ||||
| of said I-D. | ||||
| Authors need to cross-check during Auth48 since it could have have changed in t | ||||
| he meantime.] | ||||
| </t> | </t> | |||
| <t> | <t> | |||
| Note: The +SRFLX in | Note: The "+SRFLX" in | |||
| <xref target="can-now-trickle-unrelprov"/> | <xref target="can-now-trickle-unrelprov" format="default"/> | |||
| indicates that additionally newly learned server-reflexive candidat | indicates that additional newly learned server-reflexive candidates | |||
| es are included. | are included. | |||
| </t> | </t> | |||
| <t> | <figure anchor="can-now-trickle-unrelprov"> | |||
| <figure title="A SIP UA sends an unreliable | <name>A SIP UA sends an unreliable provisional response without an A | |||
| provisional response without an Answer for establishi | nswer for establishing an early dialog</name> | |||
| ng an early dialog" | <artwork name="" type="" align="left" alt=""><![CDATA[ | |||
| anchor="can-now-trickle-unrelprov"> | ||||
| <artwork><![CDATA[ | ||||
| Alice Bob | Alice Bob | |||
| | | | | | | |||
| | INVITE (Offer) | | | INVITE (Offer) | | |||
| |------------------------>| | |------------------------>| | |||
| | 183 (-) | | | 183 (-) | | |||
| |<------------------------| | |<------------------------| | |||
| | INFO/OK (SRFLX Cand.) | | | INFO/OK (SRFLX Cand.) | | |||
| |------------------------>| | |------------------------>| | |||
| | | | | | | |||
| | +----------------------+ | | +----------------------+ | |||
| skipping to change at line 818 ¶ | skipping to change at line 776 ¶ | |||
| | +----------------------+ | | +----------------------+ | |||
| | INFO/OK (SRFLX Cand.) | | | INFO/OK (SRFLX Cand.) | | |||
| |<------------------------| | |<------------------------| | |||
| | 183 (Answer) opt. | | | 183 (Answer) opt. | | |||
| |<------------------------| | |<------------------------| | |||
| | INFO/OK (SRFLX Cand.) | | | INFO/OK (SRFLX Cand.) | | |||
| |<------------------------| | |<------------------------| | |||
| | 200/ACK (Answer) | | | 200/ACK (Answer) | | |||
| |<------------------------| | |<------------------------| | |||
| Note: SRFLX denotes server-reflexive candidates | Note: "SRFLX" denotes server-reflexive candidates]]></artwork> | |||
| </figure> | ||||
| ]]></artwork> | <t> | |||
| </figure> | When sending the Answer, the agent <bcp14>MUST</bcp14> repeat all curren | |||
| </t> | tly | |||
| <t> | ||||
| When sending the Answer, the agent MUST repeat all currently | ||||
| known and used candidates, if any, | known and used candidates, if any, | |||
| and MAY include all newly gathered candidates since the last INFO reques | and <bcp14>MAY</bcp14> include all newly gathered candidates since the l | |||
| t was sent. | ast INFO request was sent. | |||
| However, if that Answer was already sent in a unreliable provisional res | However, if that Answer was already sent in an unreliable provisional re | |||
| ponse, | sponse, | |||
| the Answerers MUST repeat | the Answerers <bcp14>MUST</bcp14> repeat | |||
| exactly the same Answer in the 200 OK response to the INVITE request | exactly the same Answer in the 200 OK response to the INVITE request | |||
| in order to fulfill the corresponding requirements in | in order to fulfill the corresponding requirements in | |||
| <xref target="RFC3264"/>. | <xref target="RFC3264" format="default"/>. | |||
| In case that trickling continued, | In case that trickling continued, | |||
| an Offerer needs to be prepared for receiving fewer candidates | an Offerer needs to be prepared for receiving fewer candidates | |||
| in that repeated Answer than previously exchanged via trickling | in that repeated Answer than previously exchanged via trickling | |||
| and MUST ignore the candidate information in that 200 OK response. | and <bcp14>MUST</bcp14> ignore the candidate information in that 200 OK | |||
| </t> | response. | |||
| </t> | ||||
| </section> | </section> | |||
| </section> | </section> | |||
| <section title="Delivering Candidates in INFO Requests" anchor="info-sdp | <section anchor="info-sdp" numbered="true" toc="default"> | |||
| "> | <name>Delivering Candidates in INFO Requests</name> | |||
| <t> | <t> | |||
| Whenever new ICE candidates become available for sending, | Whenever new ICE candidates become available for sending, | |||
| agents encode them in "a=candidate:" attributes as described | agents encode them in "candidate" attributes as described | |||
| by <xref target="I-D.ietf-mmusic-ice-sip-sdp"/>. For example: | by <xref target="RFC8839" format="default"/>. For example: | |||
| </t> | ||||
| <t> | ||||
| <figure> | ||||
| <artwork> | ||||
| <![CDATA[ | ||||
| a=candidate:1 1 UDP 2130706432 200a0b:12f0::1 5000 typ host | ||||
| ]]> | ||||
| </artwork> | ||||
| </figure> | ||||
| </t> | </t> | |||
| <sourcecode type="sdp"><![CDATA[ | ||||
| a=candidate:1 1 UDP 2130706432 200a0b:12f0::1 5000 typ host ]]></sourcecode> | ||||
| <t> | <t> | |||
| The use of SIP INFO requests happens within the context of the | The use of SIP INFO requests happens within the context of the | |||
| Info Package as defined <xref target="info-package"/>. | Info Package as defined in <xref target="info-package" format="default | |||
| "/>. | ||||
| The Media Type | The media type | |||
| <xref target="RFC6838"/> | <xref target="RFC6838" format="default"/> | |||
| for their payload MUST be set to | for their payload <bcp14>MUST</bcp14> be set to | |||
| 'application/trickle-ice-sdpfrag' as defined in | "application/trickle-ice-sdpfrag" as defined in | |||
| <xref target="trickle_ice_sdpfrag_def"/>. | <xref target="trickle_ice_sdpfrag_def" format="default"/>. | |||
| The Info request body adheres to the grammar as specified in | The INFO request body adheres to the grammar as specified in | |||
| <xref target="trickle_ice_sdpfrag_grammar"/>. | <xref target="trickle_ice_sdpfrag_grammar" format="default"/>. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| Since neither the "a=candidate:" nor the "a=end-of-candidates" | Since neither the "candidate" nor the "end-of-candidates" | |||
| attributes contain information that would allow correlating them to | attributes contain information that would allow correlating them to | |||
| a specific "m=" line, | a specific "m=" line, | |||
| this is handled through the use of | it is handled through the use of | |||
| pseudo "m=" lines. | pseudo "m=" lines. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| Pseudo "m=" lines follow the SDP syntax for "m=" lines as | Pseudo "m=" lines follow the SDP syntax for "m=" lines as | |||
| defined in | defined in | |||
| <xref target="RFC4566"/> and are linked to the corresponding "m=" line | <xref target="RFC4566" format="default"/> and are linked to the corres ponding "m=" line | |||
| in the SDP Offer or Answer via the identification tag | in the SDP Offer or Answer via the identification tag | |||
| in a "a=mid:" attribute | in a "mid" attribute | |||
| <xref target="RFC5888"/>. | <xref target="RFC5888" format="default"/>. | |||
| A pseudo "m=" line does not provide semantics other | A pseudo "m=" line does not provide semantics other | |||
| than indicating to which "m=" line a candidate belongs. | than indicating to which "m=" line a candidate belongs. | |||
| Consequently, the receiving agent MUST ignore any remaining content of the pseudo "m=" line, | Consequently, the receiving agent <bcp14>MUST</bcp14> ignore any remai ning content of the pseudo "m=" line, | |||
| which is not defined in this document. | which is not defined in this document. | |||
| This guarantees that the 'application/trickle-ice-sdpfrag' bodies do | This guarantees that the "application/trickle-ice-sdpfrag" bodies do | |||
| not interfere with the Offer/Answer | not interfere with the Offer/Answer | |||
| procedures as specified in <xref target="RFC3264"/>. | procedures as specified in <xref target="RFC3264" format="default"/>. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| When sending the INFO request, the agent MAY, | When sending the INFO request, the agent <bcp14>MAY</bcp14>, | |||
| if already known to the agent, include the same content into | if already known to the agent, include the same content into | |||
| the pseudo "m=" line as for the "m=" line in the corresponding Offer or Answer. | the pseudo "m=" line as for the "m=" line in the corresponding Offer or Answer. | |||
| However, since Trickle-ICE might be decoupled from the Offer/Answer nego | However, since Trickle ICE might be decoupled from the Offer/Answer nego | |||
| tiation this content might | tiation, the content might | |||
| be unknown to the agent. In this case, the agent MUST include the follow | be unknown to the agent. In this case, the agent <bcp14>MUST</bcp14> inc | |||
| ing default values. | lude the following default values: | |||
| </t> | </t> | |||
| <t> | <ul spacing="normal"> | |||
| <list style="symbols"> | <li> | |||
| <t> | ||||
| The media field is set to 'audio'. | The media field is set to 'audio'. | |||
| </t> | </li> | |||
| <t> | <li> | |||
| The port value is set to '9'. | The port value is set to '9'. | |||
| </t> | </li> | |||
| <t> | <li> | |||
| The proto value is set to 'RTP/AVP'. | The proto value is set to 'RTP/AVP'. | |||
| </t> | </li> | |||
| <t> | <li> | |||
| The fmt field MUST appear only once and is set to '0' | The fmt field <bcp14>MUST</bcp14> appear only once and is set to ' | |||
| </t> | 0'. | |||
| </list> | </li> | |||
| </t> | </ul> | |||
| <t> | <t> | |||
| Agents MUST include a pseudo "m=" line and an | Agents <bcp14>MUST</bcp14> include a pseudo "m=" line and an | |||
| identification tag in a "a=mid:" attribute for every "m=" line | identification tag in a "mid" attribute for every "m=" line | |||
| whose candidate list they intend to update. | whose candidate list they intend to update. | |||
| Such "a=mid:" attributes MUST | Such "mid" attributes <bcp14>MUST</bcp14> | |||
| immediately precede the list of candidates for that specific | immediately precede the list of candidates for that specific | |||
| "m=" line. | "m=" line. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| All "a=candidate:" or "a=end-of-candidates" attributes | All "candidate" or "end-of-candidates" attributes | |||
| following an "a=mid:" attribute, up until (and excluding) the next | following a "mid" attribute, up until (and excluding) the next | |||
| occurrence of a pseudo "m=" line, pertain to the "m=" line | occurrence of a pseudo "m=" line, pertain to the "m=" line | |||
| identified by that identification tag. | identified by that identification tag. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| 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 as many pseudo "m=" lines as the Offer/Answer | |||
| contains m=lines, nor that the pseudo m= lines be in the same | contains "m=" lines, nor that the pseudo "m=" lines be in the same | |||
| order as the m=lines that they pertain to. | order as the "m=" lines that they pertain to. | |||
| The correspondence can be made via the "a=mid:" attributes | The correspondence can be made via the "mid" attributes | |||
| since candidates are grouped in sections headed | since candidates are grouped in sections headed | |||
| by "pseudo" m=lines. | by "pseudo" "m=" lines. | |||
| These sections contain "a=mid:" attribute values which point | These sections contain "mid" attribute values that point | |||
| back to the true m=line. | back to the true "m=" line. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| An "a=end-of-candidates" attribute, preceding | An "end-of-candidates" attribute, preceding | |||
| the first pseudo "m=" line, indicates the end of all trickling | the first pseudo "m=" line, indicates the end of all trickling | |||
| from that agent, | from that agent, | |||
| as opposed to end of trickling for a specific "m=" line, | as opposed to end of trickling for a specific "m=" line, | |||
| which would be indicated by a media level | which would be indicated by a media-level | |||
| "a=end-of-candidates" attribute. | "end-of-candidates" attribute. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| Refer to | Refer to | |||
| <xref target="INFOexample"/> | <xref target="INFOexample" format="default"/> | |||
| for an example of the INFO request content. | for an example of the INFO request content. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| The use of pseudo "m=" lines allows for a structure similar to | The use of pseudo "m=" lines allows for a structure similar to | |||
| the one in SDP Offers and Answers where | the one in SDP Offers and Answers where | |||
| separate media-level and session-level sections can be distinguished. | separate media-level and session-level sections can be distinguished. | |||
| In the current case, lines preceding the first | In the current case, lines preceding the first | |||
| pseudo "m=" line are considered to be session-level. | pseudo "m=" line are considered to be session level. | |||
| Lines appearing in between or after | Lines appearing in between or after | |||
| pseudo "m=" lines will be interpreted as media-level. | pseudo "m=" lines will be interpreted as media level. | |||
| </t> | </t> | |||
| <t> | ||||
| <list> | <ul empty="true" spacing="normal"> | |||
| <t> | <li> | |||
| Note that while this specification uses the "a=mid:" | Note that while this specification uses the "mid" | |||
| attribute from <xref target="RFC5888"/>, it does not | attribute from <xref target="RFC5888" format="default"/>, it does | |||
| not | ||||
| define any grouping semantics. | define any grouping semantics. | |||
| </t> | </li> | |||
| </list> | </ul> | |||
| </t> | ||||
| <t> | <t> | |||
| All INFO requests MUST carry the "a=ice-pwd:" and "a=ice-ufrag:" | All INFO requests <bcp14>MUST</bcp14> carry the "ice-pwd" and "ice-ufr ag" | |||
| attributes that allow mapping them to a specific ICE generation. | attributes that allow mapping them to a specific ICE generation. | |||
| An agent MUST discard any received INFO requests containing "a=ice-pwd :" and "a=ice-ufrag:" | An agent <bcp14>MUST</bcp14> discard any received INFO requests contai ning "ice-pwd" and "ice-ufrag" | |||
| attributes that do not match those of the current ICE Negotiation Sess ion. | attributes that do not match those of the current ICE Negotiation Sess ion. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| The "a=ice-pwd:" and "a=ice-ufrag:" attributes MUST appear at the same level | The "ice-pwd" and "ice-ufrag" attributes <bcp14>MUST</bcp14> appear at the same level | |||
| as the ones in the Offer/Answer exchange. | as the ones in the Offer/Answer exchange. | |||
| In other words, if they were present | In other words, if they were present | |||
| as session-level attributes, they will also appear | as session-level attributes, they will also appear | |||
| at the beginning of all INFO request payloads, i.e. preceding | at the beginning of all INFO request payloads, i.e., preceding | |||
| the first pseudo "m=" line. | the first pseudo "m=" line. | |||
| If they were originally exchanged as media | If they were originally exchanged as media-level | |||
| level attributes, potentially overriding session-level values, | attributes, potentially overriding session-level values, | |||
| then they will also be included in INFO request payloads | then they will also be included in INFO request payloads | |||
| following the corresponding pseudo "m=" lines. | following the corresponding pseudo "m=" lines. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| Note that <xref target="I-D.ietf-ice-trickle"/> requires that | Note that | |||
| when candidates are trickled, each candidate must be delivered | when candidates are trickled, <xref target="RFC8838" format="default"/ | |||
| > | ||||
| requires that each candidate must be delivered | ||||
| to the receiving Trickle ICE implementation not more than once | to the receiving Trickle ICE implementation not more than once | |||
| and in the same order as it was conveyed. | and in the same order as it was conveyed. | |||
| If the signaling protocol provides any candidate retransmissions, | If the signaling protocol provides any candidate retransmissions, | |||
| they need to be hidden from the ICE implementation. | they need to be hidden from the ICE implementation. | |||
| This requirement is fulfilled as follows. | This requirement is fulfilled as follows. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| Since the agent is not fully aware of the state of the ICE Negotiation | Since the agent is not fully aware of the state of the ICE Negotiation | |||
| Session at its peer | Session at its peer, | |||
| it MUST include all currently known and used local candidates in every | it <bcp14>MUST</bcp14> include all currently known and used local cand | |||
| INFO request. | idates in every INFO request. | |||
| I.e. the agent MUST repeat in the INFO request body | That is, the agent <bcp14>MUST</bcp14> repeat in the INFO request body | |||
| all candidates that were previously sent under the same | all candidates that were previously sent under the same | |||
| combination of "a=ice-pwd:" and "a=ice-ufrag:" | combination of "ice-pwd" and "ice-ufrag" | |||
| in the same order as they were sent before. | in the same order as they were sent before. | |||
| In other words, the sequence of a previously sent | In other words, the sequence of a previously sent | |||
| list of candidates MUST NOT change in subsequent INFO requests | list of candidates <bcp14>MUST NOT</bcp14> change in subsequent INFO r | |||
| and newly gathered candidates MUST be added | equests, | |||
| and newly gathered candidates <bcp14>MUST</bcp14> be added | ||||
| at the end of that list. | at the end of that list. | |||
| Although repeating all candidates creates some overhead, it also allow s easier handling of problems | Although repeating all candidates creates some overhead, it also allow s easier handling of problems | |||
| that could arise from unreliable transports, like e.g. loss of message s and reordering, | that could arise from unreliable transports like, e.g., loss of messag es and reordering, | |||
| which can be detected through the CSeq: header field in the INFO reque st. | which can be detected through the CSeq: header field in the INFO reque st. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| In addition, an ICE agent needs to adhere to | In addition, an ICE Agent needs to adhere to | |||
| section 17 of <xref target="I-D.ietf-ice-trickle"/> | <xref target="RFC8838" sectionFormat="of" section="17"/> | |||
| on preserving candidate order while trickling. | on preserving candidate order while trickling. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| When receiving INFO requests carrying any candidates, agents | When receiving INFO requests carrying any candidates, agents | |||
| MUST therefore first identify and discard the attribute lines | <bcp14>MUST</bcp14> first identify and discard the attribute lines | |||
| containing candidates they have already received in previous | containing candidates they have already received in previous | |||
| INFO requests or in the Offer/Answer exchange preceding them. | INFO requests or in the Offer/Answer exchange preceding them. | |||
| </t> | </t> | |||
| <t> Such candidates are considered to be equal if their IP address | <t> Such candidates are considered to be equal if their IP address | |||
| port, transport and component ID are the same. | port, transport, and component ID are the same. | |||
| After identifying and discarding the known candidates, | After identifying and discarding the known candidates, | |||
| the agents MUST forward the actually new candidates to the ICE Agents | the agents <bcp14>MUST</bcp14> forward the actual new candidates to th e ICE Agents | |||
| in the same order as they were received in the INFO request body. | in the same order as they were received in the INFO request body. | |||
| The ICE Agents will then process the new candidates | The ICE Agents will then process the new candidates | |||
| according to the rules described in <xref target="I-D.ietf-ice-trickle "/>. | according to the rules described in <xref target="RFC8838" format="def ault"/>. | |||
| </t> | </t> | |||
| <t> Receiving an "a=end-of-candidates" attribute in an INFO request body | <t> Receiving an "end-of-candidates" attribute in an INFO request body | |||
| - with the "a=ice-ufrag" and "a=ice-pwd" attributes matching the current | -- with the "ice-ufrag" and "ice-pwd" attributes matching the current IC | |||
| ICE generation - | E generation -- | |||
| is an indication from the peer agent that it will not send any further c andidates. | is an indication from the peer agent that it will not send any further c andidates. | |||
| When included at session level, i.e. before any pseudo "m=" line, | When included at the session level, i.e., before any pseudo "m=" line, | |||
| this indication applies to the whole session; | this indication applies to the whole session; | |||
| when included at media level the indication applies | when included at the media level, the indication applies | |||
| only to the corresponding "m=" line. | only to the corresponding "m=" line. | |||
| Handling of such end-of-candidates indications is defined in | Handling of such end-of-candidates indications is defined in | |||
| <xref target="I-D.ietf-ice-trickle"/>. | <xref target="RFC8838" format="default"/>. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| The example in <xref target="INFOexample"/> shows the content | The example in <xref target="INFOexample" format="default"/> shows the | |||
| of a candidate delivering INFO request. In the example the | content | |||
| "a=end-of-candidates" attributes indicate that | of a candidate delivering INFO request. In the example, the | |||
| "end-of-candidates" attributes indicate that | ||||
| the candidate gathering is finished and | the candidate gathering is finished and | |||
| that no further INFO requests follow. | that no further INFO requests follow. | |||
| </t> | </t> | |||
| <t> | <figure anchor="INFOexample"> | |||
| <figure title="An Example for the Content of an INFO Request" | <name>An Example for the Content of an INFO Request</name> | |||
| anchor="INFOexample"> | ||||
| <artwork> | ||||
| <![CDATA[ | ||||
| INFO sip:alice@example.com SIP/2.0 | ||||
| ... | ||||
| Info-Package: trickle-ice | ||||
| Content-type: application/trickle-ice-sdpfrag | ||||
| Content-Disposition: Info-Package | ||||
| Content-length: 862 | ||||
| a=ice-pwd:asd88fgpdd777uzjYhagZg | <sourcecode><![CDATA[ | |||
| a=ice-ufrag:8hhY | INFO sip:alice@example.com SIP/2.0 | |||
| m=audio 9 RTP/AVP 0 | ... | |||
| a=mid:1 | Info-Package: trickle-ice | |||
| a=candidate:1 1 UDP 2130706432 2001:db8:a0b:12f0::1 5000 typ host | Content-type: application/trickle-ice-sdpfrag | |||
| a=candidate:1 2 UDP 2130706432 2001:db8:a0b:12f0::1 5001 typ host | Content-Disposition: Info-Package | |||
| a=candidate:1 1 UDP 2130706431 192.0.2.1 5010 typ host | Content-length: 862 | |||
| a=candidate:1 2 UDP 2130706431 192.0.2.1 5011 typ host | ||||
| a=candidate:2 1 UDP 1694498815 192.0.2.3 5010 typ srflx | ||||
| raddr 192.0.2.1 rport 8998 | ||||
| a=candidate:2 2 UDP 1694498815 192.0.2.3 5011 typ srflx | ||||
| raddr 192.0.2.1 rport 8998 | ||||
| a=end-of-candidates | ||||
| m=audio 9 RTP/AVP 0 | ||||
| a=mid:2 | ||||
| a=candidate:1 1 UDP 2130706432 2001:db8:a0b:12f0::1 6000 typ host | ||||
| a=candidate:1 2 UDP 2130706432 2001:db8:a0b:12f0::1 6001 typ host | ||||
| a=candidate:1 1 UDP 2130706431 192.0.2.1 6010 typ host | ||||
| a=candidate:1 2 UDP 2130706431 192.0.2.1 6011 typ host | ||||
| a=candidate:2 1 UDP 1694498815 192.0.2.3 6010 typ srflx | ||||
| raddr 192.0.2.1 rport 9998 | ||||
| a=candidate:2 2 UDP 1694498815 192.0.2.3 6011 typ srflx | ||||
| raddr 192.0.2.1 rport 9998 | ||||
| a=end-of-candidates | ||||
| Note: In a real INFO request there will be no line breaks | a=ice-pwd:asd88fgpdd777uzjYhagZg | |||
| in the a=candidate: attributes | a=ice-ufrag:8hhY | |||
| ]]> | m=audio 9 RTP/AVP 0 | |||
| </artwork> | a=mid:1 | |||
| </figure> | a=candidate:1 1 UDP 2130706432 2001:db8:a0b:12f0::1 5000 typ host | |||
| </t> | a=candidate:1 2 UDP 2130706432 2001:db8:a0b:12f0::1 5001 typ host | |||
| </section> | a=candidate:1 1 UDP 2130706431 192.0.2.1 5010 typ host | |||
| a=candidate:1 2 UDP 2130706431 192.0.2.1 5011 typ host | ||||
| a=candidate:2 1 UDP 1694498815 192.0.2.3 5010 typ srflx | ||||
| raddr 192.0.2.1 rport 8998 | ||||
| a=candidate:2 2 UDP 1694498815 192.0.2.3 5011 typ srflx | ||||
| raddr 192.0.2.1 rport 8998 | ||||
| a=end-of-candidates | ||||
| m=audio 9 RTP/AVP 0 | ||||
| a=mid:2 | ||||
| a=candidate:1 1 UDP 2130706432 2001:db8:a0b:12f0::1 6000 typ host | ||||
| a=candidate:1 2 UDP 2130706432 2001:db8:a0b:12f0::1 6001 typ host | ||||
| a=candidate:1 1 UDP 2130706431 192.0.2.1 6010 typ host | ||||
| a=candidate:1 2 UDP 2130706431 192.0.2.1 6011 typ host | ||||
| a=candidate:2 1 UDP 1694498815 192.0.2.3 6010 typ srflx | ||||
| raddr 192.0.2.1 rport 9998 | ||||
| a=candidate:2 2 UDP 1694498815 192.0.2.3 6011 typ srflx | ||||
| raddr 192.0.2.1 rport 9998 | ||||
| a=end-of-candidates | ||||
| Note: In a real INFO request, there will be no line breaks | ||||
| in the "candidate" attributes ]]></sourcecode> | ||||
| </figure> | ||||
| </section> | ||||
| </section> | </section> | |||
| <section title="Initial Discovery of Trickle ICE Support" anchor="disco"> | <section anchor="disco" numbered="true" toc="default"> | |||
| <t> | <name>Initial Discovery of Trickle ICE Support</name> | |||
| SIP User Agents (UAs) that support and intend to use trickle | <t> | |||
| ICE are required by | SIP UAs are required by <xref target="RFC8838" format="default"/> to in | |||
| <xref target="I-D.ietf-ice-trickle"/> to indicate | dicate their support of and intent to use Trickle ICE in their Offers and Answer | |||
| that in their Offers and Answers using the attribute | s by using the "ice-options:trickle" attribute, and they <bcp14>MUST</bcp14> inc | |||
| "a=ice-options:trickle" | lude the SIP option-tag "trickle-ice" in | |||
| and MUST include the SIP option-tag "trickle-ice" in | ||||
| a SIP Supported: or Require: header field. | a SIP Supported: or Require: header field. | |||
| This makes discovery | This makes discovery | |||
| fairly straightforward for Answerers or for cases where | fairly straightforward for Answerers or for cases where | |||
| Offers need to be generated within existing dialogs (i.e., | Offers need to be generated within existing dialogs (i.e., | |||
| when sending UPDATE or re-INVITE requests). | when sending UPDATE or re-INVITE requests). | |||
| In both scenarios prior | In both scenarios, prior | |||
| SDP bodies will have provided the necessary information. | SDP bodies will have provided the necessary information. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| Obviously, such information is not available at the time a first | Obviously, such information is not available at the time a first | |||
| Offer is being constructed and it is therefore impossible | Offer is being constructed, and it is therefore impossible | |||
| for ICE Agents to determine support for incremental | for ICE Agents to determine support for incremental | |||
| provisioning that way. The following options are suggested as | provisioning that way. The following options are suggested as | |||
| ways of addressing this issue. | ways of addressing this issue. | |||
| </t> | </t> | |||
| <section title="Provisioning Support for Trickle ICE" | <section anchor="disco-prov" numbered="true" toc="default"> | |||
| anchor="disco-prov"> | <name>Provisioning Support for Trickle ICE</name> | |||
| <t> | <t> | |||
| In certain situations it may be possible for integrators | In certain situations, it may be possible for integrators | |||
| deploying Trickle ICE to know in advance that some or all | deploying Trickle ICE to know in advance that some or all | |||
| endpoints reachable from within the deployment will support | endpoints reachable from within the deployment will support | |||
| Trickle ICE. | Trickle ICE. | |||
| This is the case, for example, if Session Border Controllers | This is the case, for example, if Session Border Controllers | |||
| (SBC) with support for this specification are used | (SBCs) with support for this specification are used | |||
| to connect to UAs that do not support Trickle ICE. | to connect to UAs that do not support Trickle ICE. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| While the exact mechanism for allowing such provisioning | While the exact mechanism for allowing such provisioning | |||
| is out of scope here, this specification encourages trickle | is out of scope here, this specification encourages trickle | |||
| ICE implementations to allow the option in the way they find | ICE implementations to allow the option in the way they find | |||
| most appropriate. | most appropriate. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| However, an Offerer assuming Trickle ICE support MUST | However, an Offerer assuming Trickle ICE support <bcp14>MUST</bcp14> | |||
| include a SIP Require: trickle-ice header field. | include a SIP Require: trickle-ice header field. | |||
| That way, if the provisioned assumption of Trickle ICE support | That way, if the provisioned assumption of Trickle ICE support | |||
| ends up being incorrect, the failure is (a) operationally | ends up being incorrect, the failure is (a) operationally | |||
| easy to track down, and (b) recoverable by the client, | easy to track down and (b) recoverable by the client, | |||
| i.e., they can re-send the request without the | i.e., they can resend the request without the | |||
| SIP Require: header field and without | SIP Require: header field and without | |||
| the assumption of Trickle ICE support. | the assumption of Trickle ICE support. | |||
| </t> | </t> | |||
| </section> | </section> | |||
| <section title="Trickle ICE Discovery with Globally Routable User Agent | <section anchor="disco-gruu" numbered="true" toc="default"> | |||
| URIs (GRUU)" | <name>Trickle ICE Discovery with Globally Routable User Agent URIs (GRUU | |||
| anchor="disco-gruu"> | s)</name> | |||
| <t> | <t> | |||
| <xref target="RFC3840"/> provides a way for SIP User Agents | <xref target="RFC3840" format="default"/> provides a way for SIP UAs | |||
| to query for support of specific capabilities using, among | to query for support of specific capabilities using, among | |||
| others, OPTIONS requests. Support for | others, OPTIONS requests. On the other hand, support for | |||
| GRUU according to | GRUU according to | |||
| <xref target="RFC5627"/> on the other hand | <xref target="RFC5627" format="default"/> | |||
| allows SIP requests to be addressed to specific UAs (as | allows SIP requests to be addressed to specific UAs (as | |||
| opposed to arbitrary instances of an address of record). | opposed to arbitrary instances of an address of record). | |||
| Combining the two and using the "trickle-ice" option tag | Combining the two and using the "trickle-ice" option tag | |||
| defined in <xref target="option-tag"/> provides SIP UAs with | defined in <xref target="option-tag" format="default"/> provides SIP UAs with | |||
| a way of learning the capabilities of specific SIP UA instances | a way of learning the capabilities of specific SIP UA instances | |||
| and then addressing them directly with INVITE requests that | and then addressing them directly with INVITE requests that | |||
| require Trickle ICE support. | require Trickle ICE support. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| Such learning of capabilities may happen in different ways. | Such learning of capabilities may happen in different ways. | |||
| One option for a SIP UA is to learn the | One option for a SIP UA is to learn the | |||
| GRUU instance ID of a peer through presence and then to query | GRUU instance ID of a peer through presence and then to query | |||
| its capabilities with an OPTIONS request. | its capabilities with an OPTIONS request. | |||
| Alternatively, it can also just send an OPTIONS request to | Alternatively, it can also just send an OPTIONS request to | |||
| the Address of Record (AOR) it intends to contact and then inspect t he returned | the Address of Record (AOR) it intends to contact and then inspect t he returned | |||
| response(s) for support of both GRUU and Trickle ICE | response(s) for support of both GRUU and Trickle ICE | |||
| (<xref target="options-gruu"/>). | (<xref target="options-gruu" format="default"/>). | |||
| It is noted that using the GRUU means that the INVITE request | It is noted that using the GRUU means that the INVITE request | |||
| can go only to that particular device. | can go only to that particular device. | |||
| This prevents the use of forking for that request. | This prevents the use of forking for that request. | |||
| </t> | </t> | |||
| <t> | <figure anchor="options-gruu"> | |||
| <figure title="Trickle ICE support discovery with OPTIONS and | <name>Trickle ICE Support Discovery with OPTIONS and GRUU</name> | |||
| GRUU" | <artwork name="" type="" align="left" alt=""><![CDATA[ | |||
| anchor="options-gruu"> | ||||
| <artwork><![CDATA[ | ||||
| Alice Bob | Alice Bob | |||
| | | | | | | |||
| | OPTIONS sip:b1@example.com SIP/2.0 | | | OPTIONS sip:b1@example.com SIP/2.0 | | |||
| |-------------------------------------------------->| | |-------------------------------------------------->| | |||
| | | | | | | |||
| | 200 OK | | | 200 OK | | |||
| | Contact: sip:b1@example.com;gr=hha9s8d-999a | | | Contact: sip:b1@example.com;gr=hha9s8d-999a | | |||
| | ;audio;video|;trickle-ice;... | | | ;audio;video|;trickle-ice;... | | |||
| |<--------------------------------------------------| | |<--------------------------------------------------| | |||
| | | | | | | |||
| skipping to change at line 1196 ¶ | skipping to change at line 1132 ¶ | |||
| | Supported: trickle-ice | | | Supported: trickle-ice | | |||
| | (Offer) | | | (Offer) | | |||
| |-------------------------------------------------->| | |-------------------------------------------------->| | |||
| | | | | | | |||
| | 183 (Answer) | | | 183 (Answer) | | |||
| |<--------------------------------------------------| | |<--------------------------------------------------| | |||
| | INFO/OK (Trickling) | | | INFO/OK (Trickling) | | |||
| |<------------------------------------------------->| | |<------------------------------------------------->| | |||
| | | | | | | |||
| | ... | | | ... | | |||
| | | | | |]]></artwork> | |||
| </figure> | ||||
| ]]></artwork> | <t> | |||
| </figure> | ||||
| </t> | ||||
| <t> | ||||
| Confirming support for Trickle ICE through | Confirming support for Trickle ICE through | |||
| <xref target="RFC3840"/> gives SIP UAs the options to engage | <xref target="RFC3840" format="default"/> gives SIP UAs the option t o engage | |||
| in Full Trickle negotiation (as opposed to the more lengthy | in Full Trickle negotiation (as opposed to the more lengthy | |||
| Half Trickle) from the very first Offer they send. | Half Trickle) from the very first Offer they send. | |||
| </t> | </t> | |||
| </section> | </section> | |||
| <section title="Fall-back to Half Trickle" | <section anchor="half-full-trickle" numbered="true" toc="default"> | |||
| anchor="half-full-trickle"> | <name>Fall Back to Half Trickle</name> | |||
| <t> | <t> | |||
| In cases where none of the other mechanisms in this section | In cases where none of the other mechanisms in this section | |||
| are acceptable, SIP UAs should use the Half Trickle mode | are acceptable, SIP UAs should use the Half Trickle mode | |||
| defined in <xref target="I-D.ietf-ice-trickle"/>. | defined in <xref target="RFC8838" format="default"/>. | |||
| With Half Trickle, agents initiate sessions the same way | With Half Trickle, agents initiate sessions the same way | |||
| they would when using ICE for SIP | they would when using ICE for SIP | |||
| <xref target="I-D.ietf-mmusic-ice-sip-sdp"/>. | <xref target="RFC8839" format="default"/>. | |||
| This means that, prior to actually sending an Offer, agents | This means that, prior to actually sending an Offer, agents | |||
| first gather ICE candidates in a blocking way and then | first gather ICE candidates in a blocking way and then | |||
| send them all in that Offer. The blocking nature of the | send them all in that Offer. The blocking nature of the | |||
| process implies that some amount of latency will | process implies that some amount of latency will | |||
| be accumulated and it is advised that agents try to | be accumulated, and it is advised that agents try to | |||
| anticipate it where possible, for example, when user | anticipate it where possible, for example, when user | |||
| actions indicate a high likelihood for an imminent call | actions indicate a high likelihood for an imminent call | |||
| (e.g., activity on a keypad or a phone going off-hook). | (e.g., activity on a keypad or a phone going off hook). | |||
| </t> | </t> | |||
| <t> | <t> | |||
| Using Half Trickle results in Offers that are | Using Half Trickle results in Offers that are | |||
| compatible with both ICE SIP endpoints and legacy | compatible with both ICE SIP endpoints <xref target="RFC8839" format | |||
| <xref target="RFC3264"/> endpoints. | ="default"/> and legacy | |||
| </t> | endpoints <xref target="RFC3264" format="default"/>. | |||
| <t> | </t> | |||
| <figure title="Example - A typical (Half) Trickle ICE exchange with | <figure anchor="fig-half-trickle"> | |||
| SIP " anchor="fig-half-trickle"> | <name>Example of a Typical (Half) Trickle ICE Exchange with SIP</name> | |||
| <artwork> | <artwork name="" type="" align="left" alt=""><![CDATA[ | |||
| <![CDATA[ | STUN/TURN STUN/TURN | |||
| STUN/Turn STUN/TURN | ||||
| Servers Alice Bob Servers | Servers Alice Bob Servers | |||
| | | | | | | | | | | |||
| |<--------------| | | | |<--------------| | | | |||
| | | | | | | | | | | |||
| | | | | | | | | | | |||
| | Candidate | | | | | Candidate | | | | |||
| | | | | | | | | | | |||
| | | | | | | | | | | |||
| | Discovery | | | | | Discovery | | | | |||
| | | | | | | | | | | |||
| skipping to change at line 1267 ¶ | skipping to change at line 1199 ¶ | |||
| | |<===========================>| Discovery | | | |<===========================>| Discovery | | |||
| | | INFO (more candidates) | | | | | INFO (more candidates) | | | |||
| | |<----------------------------| | | | |<----------------------------| | | |||
| | | Connectivity Checks |<--------------| | | | Connectivity Checks |<--------------| | |||
| | |<===========================>| | | | |<===========================>| | | |||
| | | | | | | | | | | |||
| | | 200 OK | | | | | 200 OK | | | |||
| | |<----------------------------| | | | |<----------------------------| | | |||
| | | | | | | | | | | |||
| | |<======= MEDIA FLOWS =======>| | | | |<======= MEDIA FLOWS =======>| | | |||
| | | | | | | | | | ]]></artwork> | |||
| ]]> | </figure> | |||
| </artwork> | ||||
| </figure> | ||||
| </t> | ||||
| <t> | <t> | |||
| It is worth reminding that once a single Offer or Answer had | ||||
| As a reminder, once a single Offer or Answer has | ||||
| been exchanged within a specific dialog, support for | been exchanged within a specific dialog, support for | |||
| Trickle ICE will have been determined. | Trickle ICE will have been determined. | |||
| No further use of Half Trickle will therefore be necessary | No further use of Half Trickle will therefore be necessary | |||
| within that same dialog | within that same dialog, | |||
| and all subsequent exchanges can use the Full Trickle mode | and all subsequent exchanges can use the Full Trickle mode | |||
| of operation. | of operation. | |||
| </t> | </t> | |||
| </section> | </section> | |||
| </section> | </section> | |||
| <section title="Considerations for RTP and RTCP Multiplexing" anchor="rtcp-c | <section anchor="rtcp-cons" numbered="true" toc="default"> | |||
| ons"> | <name>Considerations for RTP and RTCP Multiplexing</name> | |||
| <t> | <t> | |||
| The following consideration describe options for Trickle-ICE | The following consideration describes options for Trickle ICE | |||
| in order to give some guidance to implementors on how trickling | in order to give some guidance to implementers on how trickling | |||
| can be optimized with respect to providing RTCP candidates. | can be optimized with respect to providing RTCP candidates. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| Handling of the "a=rtcp" attribute <xref target="RFC3605"/> | Handling of the "rtcp" attribute <xref target="RFC3605" format="default" | |||
| and the "a=rtcp-mux" attribute for RTP/RTCP multiplexing <xref target="R | /> | |||
| FC5761"/> | and the "rtcp-mux" attribute for RTP/RTCP multiplexing <xref target="RFC | |||
| is already considered in section 5.1.1.1. | 5761" format="default"/> | |||
| of <xref target="I-D.ietf-ice-rfc5245bis"/> and | is already considered in | |||
| as well in <xref target="RFC5761"/> itself. | <xref target="RFC8445" sectionFormat="of" section="5.1.1.1"/> and | |||
| These considerations are still valid for Trickle ICE, however, | in <xref target="RFC5761" format="default"/>. | |||
| These considerations are still valid for Trickle ICE; however, | ||||
| trickling provides more flexibility for the sequence of candidate exchan ge in case of RTCP multiplexing. | trickling provides more flexibility for the sequence of candidate exchan ge in case of RTCP multiplexing. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| [RFC EDITOR NOTE: The section 5.1.1.1 in above sentence is correct for version 1 | ||||
| 7 of said I-D. | ||||
| Authors need to cross-check during Auth48 since it could have have changed in th | ||||
| e meantime.] | ||||
| </t> | ||||
| <t> | ||||
| If the Offerer supports RTP/RTCP multiplexing exclusively as specified | If the Offerer supports RTP/RTCP multiplexing exclusively as specified | |||
| in <xref target="I-D.ietf-mmusic-mux-exclusive"/>, | in <xref target="RFC8858" format="default"/>, | |||
| the procedures in that document apply for the handling of the "a=rtcp-mu | the procedures in that document apply for the handling of the "rtcp-mux- | |||
| x-only", "a=rtcp" and the "a=rtcp-mux" attributes. | only", "rtcp", and "rtcp-mux" attributes. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| While a Half Trickle Offerer has to send an Offer compliant to | While a Half Trickle Offerer has to send an Offer compliant to | |||
| <xref target="I-D.ietf-mmusic-ice-sip-sdp"/> and <xref target="RFC5761"/ | <xref target="RFC8839" format="default"/> and <xref target="RFC5761" for | |||
| > including candidates for all components, | mat="default"/> including candidates for all components, the flexibility of a Fu | |||
| the flexibility of a Full Trickle Offerer allows | ll Trickle Offerer allows | |||
| to send only RTP candidates (component 1) in the initial Offer | the sending of only RTP candidates (component 1) in the initial Offer | |||
| assuming that RTCP multiplexing is supported by the Answerer. | assuming that RTCP multiplexing is supported by the Answerer. | |||
| A Full Trickle Offerer would need to start gathering and trickling | A Full Trickle Offerer would need to start gathering and trickling | |||
| RTCP candidates (component 2) | RTCP candidates (component 2) | |||
| only after having received an indication in the Answer that | only after having received an indication in the Answer that | |||
| the Answerer unexpectedly does not support RTCP multiplexing. | the Answerer unexpectedly does not support RTCP multiplexing. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| A Trickle Answerer MAY include an "a=rtcp-mux" attribute | A Trickle Answerer <bcp14>MAY</bcp14> include an "rtcp-mux" attribute | |||
| <xref target="RFC5761"/> in the application/trickle-ice-sdpfrag body | <xref target="RFC5761" format="default"/> in the "application/trickle-ic | |||
| e-sdpfrag" body | ||||
| if it supports and uses RTP and RTCP multiplexing. | if it supports and uses RTP and RTCP multiplexing. | |||
| The Trickle Answerer needs to follow the guidance on the usage of the "a | The Trickle Answerer needs to follow the guidance on the usage of the "r | |||
| =rtcp" attribute as given in | tcp" attribute as given in | |||
| <xref target="I-D.ietf-mmusic-ice-sip-sdp"/> and | <xref target="RFC8839" format="default"/> and | |||
| <xref target="RFC3605"/>. | <xref target="RFC3605" format="default"/>. | |||
| Receipt of this attribute at the Offerer in an INFO request prior to the Answer | Receipt of this attribute at the Offerer in an INFO request prior to the Answer | |||
| indicates that the Answerer supports and uses RTP and RTCP multiplexing. | indicates that the Answerer supports and uses RTP and RTCP multiplexing. | |||
| The Offerer can use this information e.g. for stopping gathering of RTCP candidates | The Offerer can use this information, e.g., for stopping the gathering o f RTCP candidates | |||
| and/or for freeing corresponding resources. | and/or for freeing corresponding resources. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| This behavior is illustrated by the following example Offer that indicat es support for RTP and RTCP multiplexing. | This behavior is illustrated by the following example Offer that indicat es support for RTP and RTCP multiplexing. | |||
| </t> | </t> | |||
| <t> | ||||
| <figure> | <sourcecode type="sdp"><![CDATA[ | |||
| <artwork> | v=0 | |||
| <![CDATA[ | o=alice 2890844526 2890844526 IN IP6 atlanta.example.com | |||
| v=0 | s= | |||
| o=alice 2890844526 2890844526 IN IP6 atlanta.example.com | c=IN IP6 2001:db8:a0b:12f0::3 | |||
| s= | t=0 0 | |||
| c=IN IP6 2001:db8:a0b:12f0::3 | a=ice-pwd:777uzjYhagZgasd88fgpdd | |||
| t=0 0 | a=ice-ufrag:Yhh8 | |||
| a=ice-pwd:777uzjYhagZgasd88fgpdd | m=audio 5000 RTP/AVP 0 | |||
| a=ice-ufrag:Yhh8 | a=mid:1 | |||
| m=audio 5000 RTP/AVP 0 | a=rtcp-mux | |||
| a=mid:1 | a=candidate:1 1 UDP 1658497328 2001:db8:a0b:12f0::3 5000 typ host]]></sourceco | |||
| a=rtcp-mux | de> | |||
| a=candidate:1 1 UDP 1658497328 2001:db8:a0b:12f0::3 5000 typ host | <t> | |||
| ]]> | Once the dialog is established as described in <xref target="dialog-est" | |||
| </artwork> | format="default"/>, the Answerer | |||
| </figure> | ||||
| </t> | ||||
| <t> | ||||
| Once the dialog is established as described in section <xref target="dia | ||||
| log-est"/> the Answerer | ||||
| sends the following INFO request. | sends the following INFO request. | |||
| </t> | </t> | |||
| <t> | ||||
| <figure> | ||||
| <artwork> | ||||
| <![CDATA[ | ||||
| INFO sip:alice@example.com SIP/2.0 | ||||
| ... | ||||
| Info-Package: trickle-ice | ||||
| Content-type: application/trickle-ice-sdpfrag | ||||
| Content-Disposition: Info-Package | ||||
| Content-length: 161 | ||||
| a=ice-pwd:asd88fgpdd777uzjYhagZg | <sourcecode><![CDATA[ | |||
| a=ice-ufrag:8hhY | INFO sip:alice@example.com SIP/2.0 | |||
| m=audio 9 RTP/AVP 0 | ... | |||
| a=mid:1 | Info-Package: trickle-ice | |||
| a=rtcp-mux | Content-type: application/trickle-ice-sdpfrag | |||
| a=candidate:1 1 UDP 1658497382 2001:db8:a0b:12f0::4 6000 typ host | Content-Disposition: Info-Package | |||
| ]]> | Content-length: 161 | |||
| </artwork> | ||||
| </figure> | a=ice-pwd:asd88fgpdd777uzjYhagZg | |||
| </t> | a=ice-ufrag:8hhY | |||
| <t> | m=audio 9 RTP/AVP 0 | |||
| a=mid:1 | ||||
| a=rtcp-mux | ||||
| a=candidate:1 1 UDP 1658497382 2001:db8:a0b:12f0::4 6000 typ host ]]></sourcec | ||||
| ode> | ||||
| <t> | ||||
| This INFO request indicates that the Answerer supports and uses | This INFO request indicates that the Answerer supports and uses | |||
| RTP and RTCP multiplexing as well. | RTP and RTCP multiplexing as well. | |||
| It allows the Offerer to omit gathering of RTCP candidates or | It allows the Offerer to omit gathering RTCP candidates or | |||
| releasing already gathered RTCP candidates. | releasing already gathered RTCP candidates. | |||
| If the INFO request did not contain the a=rtcp-mux attribute, | If the INFO request did not contain the "rtcp-mux" attribute, | |||
| the Offerer has to gather RTCP candidates | the Offerer has to gather RTCP candidates | |||
| unless it wants to wait until receipt of an Answer that eventually confi rms | unless it wants to wait until receipt of an Answer that eventually confi rms | |||
| support or non-support for RTP and RTCP multiplexing. | support or non-support for RTP and RTCP multiplexing. | |||
| In case the Offerer had sent RTCP candidates in a previous INFO request, | In case the Offerer already sent RTCP candidates in a previous INFO requ est, | |||
| it still needs to repeat them in subsequent INFO requests, | it still needs to repeat them in subsequent INFO requests, | |||
| even in case that support for RTCP multiplexing was confirmed | even when that support for RTCP multiplexing was confirmed | |||
| by the Answerer and the Offerer has released its RTCP candidates. | by the Answerer and the Offerer has released its RTCP candidates. | |||
| </t> | </t> | |||
| </section> | ||||
| </section> | <section anchor="bundle-cons" numbered="true" toc="default"> | |||
| <section title="Considerations for Media Multiplexing" anchor="bundle-cons"> | <name>Considerations for Media Multiplexing</name> | |||
| <t> | <t> | |||
| The following considerations describe options for Trickle-ICE | The following considerations describe options for Trickle ICE | |||
| in order to give some guidance to implementors on how trickling | in order to give some guidance to implementers on how trickling | |||
| can be optimized with respect to providing candidates in case of Media M ultiplexing | can be optimized with respect to providing candidates in case of Media M ultiplexing | |||
| <xref target="I-D.ietf-mmusic-sdp-bundle-negotiation"/>. | <xref target="RFC8843" format="default"/>. | |||
| It is assumed that the reader is familiar with <xref target="I-D.ietf-mm | It is assumed that the reader is familiar with <xref target="RFC8843" fo | |||
| usic-sdp-bundle-negotiation"/>. | rmat="default"/>. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| ICE candidate exchange is already considered | ICE candidate exchange is already considered in | |||
| in section 11 of | <xref target="RFC8843" sectionFormat="of" section="10"/>. | |||
| <xref target="I-D.ietf-mmusic-sdp-bundle-negotiation"/>. | These considerations are still valid for Trickle ICE; however, | |||
| These considerations are still valid for Trickle ICE, however, | ||||
| trickling provides more flexibility for the sequence of candidate exchan ge, | trickling provides more flexibility for the sequence of candidate exchan ge, | |||
| especially in Full Trickle mode. | especially in Full Trickle mode. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| Except for bundle-only "m=" lines, a Half Trickle Offerer has to | Except for bundle-only "m=" lines, a Half Trickle Offerer has to | |||
| send an Offer with candidates for all bundled "m=" lines. | send an Offer with candidates for all bundled "m=" lines. | |||
| The additional flexibility, however, allows a Full Trickle Offerer | The additional flexibility, however, allows a Full Trickle Offerer | |||
| to initially send only candidates for the "m=" line with the | to initially send only candidates for the "m=" line with the | |||
| suggested Offerer BUNDLE address. | suggested Offerer BUNDLE address. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| On receipt of the Answer, the Offerer will detect | On receipt of the Answer, the Offerer will detect | |||
| if BUNDLE is supported by the Answerer and if the suggested Offerer BUND LE address was selected. | if BUNDLE is supported by the Answerer and if the suggested Offerer BUND LE address was selected. | |||
| In this case, the Offerer does not need to trickle further candidates fo r the remaining "m=" lines in a bundle. | In this case, the Offerer does not need to trickle further candidates fo r the remaining "m=" lines in a bundle. | |||
| However, if BUNDLE is not supported, the Full Trickle Offerer needs to g ather and trickle candidates | However, if BUNDLE is not supported, the Full Trickle Offerer needs to g ather and trickle candidates | |||
| for the remaining "m=" lines as necessary. | for the remaining "m=" lines as necessary. | |||
| If the Answerer selects an Offerer BUNDLE address different from the sug gested Offerer BUNDLE address, | If the Answerer selects an Offerer BUNDLE address that is different from the suggested Offerer BUNDLE address, | |||
| the Full Trickle Offerer needs to gather and trickle candidates | the Full Trickle Offerer needs to gather and trickle candidates | |||
| for the "m=" line that carries the selected Offerer BUNDLE address. | for the "m=" line that carries the selected Offerer BUNDLE address. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| A Trickle Answerer SHOULD include an "a=group:BUNDLE" attribute | A Trickle Answerer <bcp14>SHOULD</bcp14> include a "group:BUNDLE" attrib | |||
| <xref target="I-D.ietf-mmusic-sdp-bundle-negotiation"/> | ute | |||
| at session level in the application/trickle-ice-sdpfrag body | <xref target="RFC8843" format="default"/> | |||
| at session level in the "application/trickle-ice-sdpfrag" body | ||||
| if it supports and uses bundling. | if it supports and uses bundling. | |||
| When doing so, the Answerer MUST include all identification-tags in the | When doing so, the Answerer <bcp14>MUST</bcp14> include all identificati | |||
| same order that is used or will be used in the Answer. | on-tags in the same order that is used or will be used in the Answer. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| Receipt of this attribute at the Offerer in an INFO request prior to the Answer indicates that the Answerer | Receipt of this attribute at the Offerer in an INFO request prior to the Answer indicates that the Answerer | |||
| supports and uses bundling. | supports and uses bundling. | |||
| The Offerer can use this information e.g. for stopping the gathering of candidates | The Offerer can use this information, e.g., for stopping the gathering o f candidates | |||
| for the remaining "m=" lines in a bundle and/or for freeing correspondin g resources. | for the remaining "m=" lines in a bundle and/or for freeing correspondin g resources. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| This behaviour is illustrated by the following example Offer that indica | This behavior is illustrated by the following example Offer that indicat | |||
| tes support for Media Multiplexing. | es support for Media Multiplexing. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| In case the Offerer had sent already candidates for "m="-lines | If the Offerer already sent candidates for "m=" lines | |||
| in a bundle in a previous INFO request, | in a bundle in a previous INFO request, | |||
| it still needs to repeat them in subsequent INFO requests, | it still needs to repeat them in subsequent INFO requests, | |||
| even in case that support for bundling was confirmed | even when that support for bundling was confirmed | |||
| by the Answerer and the Offerer has released no longer needed candidates | by the Answerer and the Offerer has released candidates that are no long | |||
| . | er needed. | |||
| </t> | </t> | |||
| <t> | ||||
| <figure> | <sourcecode type="sdp"><![CDATA[ | |||
| <artwork> | v=0 | |||
| <![CDATA[ | o=alice 2890844526 2890844526 IN IP6 atlanta.example.com | |||
| v=0 | s= | |||
| o=alice 2890844526 2890844526 IN IP6 atlanta.example.com | c=IN IP6 2001:db8:a0b:12f0::3 | |||
| s= | t=0 0 | |||
| c=IN IP6 2001:db8:a0b:12f0::3 | a=group:BUNDLE foo bar | |||
| t=0 0 | a=ice-pwd:777uzjYhagZgasd88fgpdd | |||
| a=group:BUNDLE foo bar | a=ice-ufrag:Yhh8 | |||
| a=ice-pwd:777uzjYhagZgasd88fgpdd | m=audio 10000 RTP/AVP 0 | |||
| a=ice-ufrag:Yhh8 | a=mid:foo | |||
| m=audio 10000 RTP/AVP 0 | a=rtcp-mux | |||
| a=mid:foo | a=rtpmap:0 PCMU/8000 | |||
| a=rtcp-mux | a=extmap 1 urn:ietf:params:rtp-hdrext:sdes:mid | |||
| a=rtpmap:0 PCMU/8000 | a=candidate:1 1 UDP 1658497328 2001:db8:a0b:12f0::3 10000 typ host | |||
| a=extmap 1 urn:ietf:params:rtp-hdrext:sdes:mid | m=video 10002 RTP/AVP 31 | |||
| a=candidate:1 1 UDP 1658497328 2001:db8:a0b:12f0::3 10000 typ host | a=mid:bar | |||
| m=video 10002 RTP/AVP 31 | a=rtcp-mux | |||
| a=mid:bar | a=rtpmap:31 H261/90000 | |||
| a=rtcp-mux | a=extmap 1 urn:ietf:params:rtp-hdrext:sdes:mid]]></sourcecode> | |||
| a=rtpmap:31 H261/90000 | <t> | |||
| a=extmap 1 urn:ietf:params:rtp-hdrext:sdes:mid]]> | ||||
| </artwork> | ||||
| </figure> | ||||
| </t> | ||||
| <t> | ||||
| The example Offer indicates support for RTP and RTCP multiplexing | The example Offer indicates support for RTP and RTCP multiplexing | |||
| and contains a "a=candidate:" attribute only for the "m="-line | and contains a "candidate" attribute only for the "m=" line | |||
| with the suggested Offerer bundle address. | with the suggested Offerer BUNDLE address. | |||
| Once the dialog is established as described in <xref target="dialog-est | Once the dialog is established as described in <xref target="dialog-est | |||
| "/> the Answerer | " format="default"/>, the Answerer | |||
| sends the following INFO request. | sends the following INFO request. | |||
| </t> | </t> | |||
| <t> | ||||
| <figure> | ||||
| <artwork> | ||||
| <![CDATA[ | ||||
| INFO sip:alice@example.com SIP/2.0 | ||||
| ... | ||||
| Info-Package: trickle-ice | ||||
| Content-type: application/trickle-ice-sdpfrag | ||||
| Content-Disposition: Info-Package | ||||
| Content-length: 219 | ||||
| a=group:BUNDLE foo bar | <sourcecode><![CDATA[ | |||
| a=ice-pwd:asd88fgpdd777uzjYhagZg | INFO sip:alice@example.com SIP/2.0 | |||
| a=ice-ufrag:8hhY | ... | |||
| m=audio 9 RTP/AVP 0 | Info-Package: trickle-ice | |||
| a=mid:foo | Content-type: application/trickle-ice-sdpfrag | |||
| a=rtcp-mux | Content-Disposition: Info-Package | |||
| a=candidate:1 1 UDP 1658497328 2001:db8:a0b:12f0::3 5000 typ host | Content-length: 219 | |||
| ]]> | a=group:BUNDLE foo bar | |||
| </artwork> | a=ice-pwd:asd88fgpdd777uzjYhagZg | |||
| </figure> | a=ice-ufrag:8hhY | |||
| </t> | m=audio 9 RTP/AVP 0 | |||
| <t> | a=mid:foo | |||
| a=rtcp-mux | ||||
| a=candidate:1 1 UDP 1658497328 2001:db8:a0b:12f0::3 5000 typ host ]]></source | ||||
| code> | ||||
| <t> | ||||
| This INFO request indicates that the Answerer supports and uses Media Mu ltiplexing as well. | This INFO request indicates that the Answerer supports and uses Media Mu ltiplexing as well. | |||
| Note that the Answerer only includes a single pseudo "m="-line since can | Note that the Answerer only includes a single pseudo "m=" line since can | |||
| didates | didates | |||
| matching those from the second "m="-line in the offer are not needed fr | matching those from the second "m=" line in the offer are not needed fr | |||
| om the Answerer. | om the Answerer. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| The INFO request also indicates that the Answerer accepted the suggested | The INFO request also indicates that the Answerer accepted the suggested | |||
| Offerer Bundle Address. | Offerer BUNDLE address. | |||
| This allows the Offerer to omit gathering of RTP and RTCP candidates for | This allows the Offerer to omit gathering RTP and RTCP candidates for th | |||
| the other "m=" lines | e other "m=" lines | |||
| or releasing already gathered candidates. | or releasing already gathered candidates. | |||
| If the INFO request did not contain the a=group:BUNDLE attribute, the Of | If the INFO request did not contain the "group:BUNDLE" attribute, the Of | |||
| ferer has to gather | ferer has to gather | |||
| RTP and RTCP candidates for the other "m=" lines unless it wants to wa it until receipt | RTP and RTCP candidates for the other "m=" lines unless it wants to wa it until receipt | |||
| of an Answer that eventually confirms | of an Answer that eventually confirms | |||
| support or non-support for Media Multiplexing. | support or non-support for Media Multiplexing. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| Independent of using Full Trickle or Half Trickle mode, the rules from | Independent of using Full Trickle or Half Trickle mode, the rules from | |||
| <xref target="I-D.ietf-mmusic-sdp-mux-attributes"/> apply to both, Offe rer and Answerer, | <xref target="RFC8859" format="default"/> apply to both, Offerer and An swerer, | |||
| when putting attributes as specified in | when putting attributes as specified in | |||
| <xref target="trickle_ice_sdpfrag_grammar"/> | <xref target="trickle_ice_sdpfrag_grammar" format="default"/> | |||
| in the application/trickle-ice-sdpfrag body. | in the "application/trickle-ice-sdpfrag" body. | |||
| </t> | ||||
| </section> | ||||
| <section anchor="sec-eoc" toc="default" numbered="true"> | ||||
| <name>SDP "end-of-candidates" Attribute</name> | ||||
| <section anchor="eoc-def" numbered="true" toc="default"> | ||||
| <name>Definition</name> | ||||
| <t> | ||||
| This section defines the new SDP media-level and session-level | ||||
| <xref target="RFC4566" format="default"/> | ||||
| "end-of-candidates" attribute. "end-of-candidates" is a property attribute | ||||
| <xref target="RFC4566" format="default"/>; hence, it has no value. | ||||
| By including this attribute in an Offer or Answer, the sending agent indic | ||||
| ates | ||||
| that it will not trickle further candidates. | ||||
| When included at the session level, this indication applies to the whole s | ||||
| ession; | ||||
| when included at the media level, the indication applies only to the corre | ||||
| sponding media description. | ||||
| </t> | </t> | |||
| </section> | <ul empty="true"> | |||
| <li> | ||||
| <dl spacing="normal"> | ||||
| <dt>Name:</dt><dd>end-of-candidates</dd> | ||||
| <section anchor="sec-eoc" title="SDP 'end-of-candidates' Attribute" toc="defa | <dt>Value:</dt><dd>N/A</dd> | |||
| ult"> | ||||
| <section title="Definition" anchor="eoc-def"> | ||||
| <t> | ||||
| This section defines a new SDP media-level and session-level attribute | ||||
| <xref target="RFC4566" pageno="false" format="default"/> | ||||
| 'end-of-candidates'. 'end-of-candidates' is a property attribute | ||||
| <xref target="RFC4566" pageno="false" format="default"/>, and hence has no | ||||
| value. | ||||
| By including this attribute in an Offer or Answer the sending agent indica | ||||
| tes | ||||
| that it will not trickle further candidates. | ||||
| When included at session level this indication applies to the whole sessio | ||||
| n, | ||||
| when included at media level the indication applies only to the correspond | ||||
| ing media description. | ||||
| </t> | <dt>Usage Level:</dt><dd>media and session level</dd> | |||
| <t> | <dt>Charset Dependent:</dt><dd>no</dd> | |||
| <list style="none"> | ||||
| <t> | ||||
| Name: end-of-candidates | ||||
| </t> | ||||
| <t> | ||||
| Value: N/A | ||||
| </t> | ||||
| <t> | ||||
| Usage Level: media and session-level | ||||
| </t> | ||||
| <t> | ||||
| Charset Dependent: no | ||||
| </t> | ||||
| <t> | ||||
| Mux Category: IDENTICAL | ||||
| </t> | ||||
| <t> | ||||
| Example: a=end-of-candidates | ||||
| </t> | ||||
| </list> | ||||
| </t> | ||||
| </section> | <dt>Mux Category:</dt><dd>IDENTICAL</dd> | |||
| <section title="Offer/Answer Procedures" anchor="eoc-ind"> | ||||
| <t>The Offerer or Answerer MAY include an "a=end-of-candidates" attrib | <dt>Example:</dt> | |||
| ute | <dd>a=end-of-candidates</dd> | |||
| </dl> | ||||
| </li> | ||||
| </ul> | ||||
| </section> | ||||
| <section anchor="eoc-ind" numbered="true" toc="default"> | ||||
| <name>Offer/Answer Procedures</name> | ||||
| <t>The Offerer or Answerer <bcp14>MAY</bcp14> include an "end-of-candida | ||||
| tes" attribute | ||||
| in case candidate discovery has ended | in case candidate discovery has ended | |||
| and no further candidates are to be trickled. | and no further candidates are to be trickled. | |||
| The Offerer or Answerer MUST provide the "a=end-of-candidates" attribu | The Offerer or Answerer <bcp14>MUST</bcp14> provide the "end-of-candid | |||
| te | ates" attribute | |||
| together with the "a=ice-ufrag" and "a=ice-pwd" attributes of the curr | together with the "ice-ufrag" and "ice-pwd" attributes of the current | |||
| ent | ||||
| ICE generation as required by | ICE generation as required by | |||
| <xref target="I-D.ietf-ice-trickle"/>. | <xref target="RFC8838" format="default"/>. | |||
| When included at session level | When included at the session level, | |||
| this indication applies to the whole session; | this indication applies to the whole session; | |||
| when included at media level the indication applies | when included at the media level, the indication applies | |||
| only to the corresponding media description. | only to the corresponding media description. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| Receipt of an "a=end-of-candidates" attribute at an | Receipt of an "end-of-candidates" attribute at an | |||
| Offerer or Answerer | Offerer or Answerer | |||
| - with the "a=ice-ufrag" and "a=ice-pwd" attributes matching the curre | -- with the "ice-ufrag" and "ice-pwd" attributes matching the current | |||
| nt ICE generation - | ICE generation -- | |||
| indicates that gathering of candidates | indicates that the gathering of candidates | |||
| has ended at the peer, either for the session or only for the | has ended at the peer, for either the session or only the | |||
| corresponding media description as specified above. | corresponding media description as specified above. | |||
| The receiving agent forwards an end-of-candidates indication | The receiving agent forwards an end-of-candidates indication | |||
| to the ICE Agent, which in turn acts as specified in | to the ICE Agent, which in turn acts as specified in | |||
| <xref target="I-D.ietf-ice-trickle"/>. | <xref target="RFC8838" format="default"/>. | |||
| </t> | </t> | |||
| </section> | ||||
| </section> | </section> | |||
| </section> | ||||
| <section title="Content Type 'application/trickle-ice-sdpfrag'" anchor="tric | <section anchor="trickle_ice_sdpfrag_def" numbered="true" toc="default"> | |||
| kle_ice_sdpfrag_def"> | <name>Content Type "application/trickle-ice-sdpfrag"</name> | |||
| <section numbered="true" toc="default"> | ||||
| <section title="Overall Description"> | <name>Overall Description</name> | |||
| <t> | <t> | |||
| A application/trickle-ice-sdpfrag body is used exclusively by the 'trick | An "application/trickle-ice-sdpfrag" body is used exclusively by the "tr | |||
| le-ice' Info Package. | ickle-ice" Info Package. | |||
| Other SDP related applications need to define their own media type. | Other SDP-related applications need to define their own media type. | |||
| The INFO request body uses a subset of the possible SDP lines | The INFO request body uses a subset of the possible SDP lines | |||
| as defined by the grammar defined in <xref target="RFC4566"/>. | as defined by the grammar in <xref target="RFC4566" format="default"/>. | |||
| A valid body uses only pseudo "m=" lines and certain attributes | A valid body uses only pseudo "m=" lines and certain attributes | |||
| that are needed and/or useful for trickling candidates. | that are needed and/or useful for trickling candidates. | |||
| The content adheres to the following grammar. | The content adheres to the following grammar. | |||
| </t> | </t> | |||
| </section> | </section> | |||
| <section anchor="trickle_ice_sdpfrag_grammar" numbered="true" toc="default | ||||
| <section title="Grammar" anchor="trickle_ice_sdpfrag_grammar"> | "> | |||
| <name>Grammar</name> | ||||
| <t> | <t> | |||
| The grammar of an 'application/trickle-ice-sdpfrag' body is | The grammar of an "application/trickle-ice-sdpfrag" body is | |||
| based on the following ABNF <xref target="RFC5234"/>. | based on the following ABNF <xref target="RFC5234" format="default"/> | |||
| It specifies the subset of existing SDP attributes, | . | |||
| It specifies the subset of existing SDP attributes | ||||
| that is needed or useful for trickling candidates. | that is needed or useful for trickling candidates. | |||
| The grammar uses the indicator for case-sensitivity %s | The grammar uses the indicator for case-sensitive %s, | |||
| as defined in <xref target="RFC7405"/>, | as defined in <xref target="RFC7405" format="default"/>, | |||
| but also imports grammars for other SDP attributes that | but it also imports grammar for other SDP attributes that | |||
| precede the production of <xref target="RFC7405"/>. | precede the production of <xref target="RFC7405" format="default"/>. | |||
| A sender SHOULD use lower-case for attributes | A sender <bcp14>SHOULD</bcp14> use lower case for attributes | |||
| from such earlier grammars, but a receiver MUST treat | from such earlier grammar, but a receiver <bcp14>MUST</bcp14> treat | |||
| them case-insensitively. | them as case insensitive. | |||
| </t> | </t> | |||
| <sourcecode type="abnf"><![CDATA[ | ||||
| <t> | ; Syntax | |||
| <figure><artwork align="left"> | trickle-ice-sdpfrag = session-level-fields | |||
| ; Syntax | pseudo-media-descriptions | |||
| trickle-ice-sdpfrag = session-level-fields | session-level-fields = *(session-level-field CRLF) | |||
| pseudo-media-descriptions | ||||
| session-level-fields = *(session-level-field CRLF) | ||||
| session-level-field = ice-lite-attribute / | ||||
| ice-pwd-attribute / | ||||
| ice-ufrag-attribute / | ||||
| ice-options-attribute / | ||||
| ice-pacing-attribute / | ||||
| end-of-candidates-attribute / | ||||
| bundle-group-attribute / | ||||
| extension-attribute-fields | ||||
| ; for future extensions | ||||
| ice-lite-attribute = %s"a" "=" ice-lite | session-level-field = ice-lite-attribute / | |||
| ice-pwd-attribute = %s"a" "=" ice-pwd-att | ice-pwd-attribute / | |||
| ice-ufrag-attribute = %s"a" "=" ice-ufrag-att | ice-ufrag-attribute / | |||
| ice-pacing-attribute = %s"a" "=" ice-pacing-att | ice-options-attribute / | |||
| ice-options-attribute = %s"a" "=" ice-options | ice-pacing-attribute / | |||
| end-of-candidates-attribute = %s"a" "=" end-of-candidates | end-of-candidates-attribute / | |||
| end-of-candidates = %s"end-of-candidates" | bundle-group-attribute / | |||
| bundle-group-attribute = %s"a" "=" %s"group:" bundle-semantics | extension-attribute-fields | |||
| *(SP identification-tag) | ; for future extensions | |||
| bundle-semantics = "BUNDLE" | ||||
| extension-attribute-fields = attribute-fields | ||||
| pseudo-media-descriptions = *( media-field | ice-lite-attribute = %s"a" "=" ice-lite | |||
| trickle-ice-attribute-fields ) | ice-pwd-attribute = %s"a" "=" ice-pwd-att | |||
| trickle-ice-attribute-fields = *(trickle-ice-attribute-field CRLF) | ice-ufrag-attribute = %s"a" "=" ice-ufrag-att | |||
| trickle-ice-attribute-field = mid-attribute / | ice-pacing-attribute = %s"a" "=" ice-pacing-att | |||
| candidate-attributes / | ice-options-attribute = %s"a" "=" ice-options | |||
| ice-pwd-attribute / | end-of-candidates-attribute = %s"a" "=" end-of-candidates | |||
| ice-ufrag-attribute / | end-of-candidates = %s"end-of-candidates" | |||
| remote-candidate-attribute / | bundle-group-attribute = %s"a" "=" %s"group:" bundle-semantics | |||
| end-of-candidates-attribute / | *(SP identification-tag) | |||
| rtcp-attribute / | bundle-semantics = "BUNDLE" | |||
| rtcp-mux-attribute / | extension-attribute-fields = attribute-fields | |||
| rtcp-mux-only-attribute / | ||||
| extension-attribute-fields | ||||
| ; for future extensions | ||||
| rtcp-attribute = %s"a" "=" %s"rtcp" | pseudo-media-descriptions = *( media-field | |||
| rtcp-mux-attribute = %s"a" "=" %s"rtcp-mux" | trickle-ice-attribute-fields ) | |||
| rtcp-mux-only-attribute = %s"a" "=" %s"rtcp-mux-only" | trickle-ice-attribute-fields = *(trickle-ice-attribute-field CRLF) | |||
| candidate-attributes = %s"a" "=" candidate-attribute | trickle-ice-attribute-field = mid-attribute / | |||
| remote-candidate-attribute = %s"a" "=" remote-candidate-att | candidate-attributes / | |||
| ice-pwd-attribute / | ||||
| ice-ufrag-attribute / | ||||
| remote-candidate-attribute / | ||||
| end-of-candidates-attribute / | ||||
| rtcp-attribute / | ||||
| rtcp-mux-attribute / | ||||
| rtcp-mux-only-attribute / | ||||
| extension-attribute-fields | ||||
| ; for future extensions | ||||
| </artwork></figure> | rtcp-attribute = %s"a" "=" %s"rtcp" | |||
| </t> | rtcp-mux-attribute = %s"a" "=" %s"rtcp-mux" | |||
| <t> | rtcp-mux-only-attribute = %s"a" "=" %s"rtcp-mux-only" | |||
| with ice-lite, ice-pwd-att, remote-candidate-att, ice-ufrag-att, | candidate-attributes = %s"a" "=" candidate-attribute | |||
| ice-pacing-att, ice-options, candidate-attribute remote-candidate-att | remote-candidate-attribute = %s"a" "=" remote-candidate-att ]]></sourcecod | |||
| from <xref target="I-D.ietf-mmusic-ice-sip-sdp"/>, | e> | |||
| identification-tag, mid-attribute ; from <xref target="RFC5888"/>, | <t> | |||
| media-field, attribute-fields from <xref target="RFC4566"/>. | ice-lite, ice-pwd-att, remote-candidate-att, ice-ufrag-att, ice-pacing-att, | |||
| The "a=rtcp" attribute is defined in <xref target="RFC3605"/>, | ice-options, candidate-attribute, and remote-candidate-att are from <xref | |||
| the "a=rtcp-mux" attribute in <xref target="RFC5761"/> and | target="RFC8839"/>; identification-tag and mid-attribute are from <xref | |||
| the "a=rtcp-mux-only" attribute in <xref target="I-D.ietf-mmusic-mux-ex | target="RFC5888"/>; and media-field and attribute-fields are from <xref | |||
| clusive"/>. | target="RFC4566"/>. The "rtcp" attribute is defined in <xref | |||
| The latter attributes lack a formal grammar in their corresponding RFC | target="RFC3605" format="default"/>, the "rtcp-mux" attribute is defined | |||
| and are reproduced here. | in <xref target="RFC5761" format="default"/>, and the "rtcp-mux-only" | |||
| </t> | attribute is defined in <xref target="RFC8858" format="default"/>. The | |||
| <t> | latter attributes lack formal grammar in their corresponding RFCs and are | |||
| The "a=ice-pwd:" and "a=ice-ufrag:" attributes MUST appear at the | reproduced here. | |||
| </t> | ||||
| <t> | ||||
| The "ice-pwd" and "ice-ufrag" attributes <bcp14>MUST</bcp14> appear at | ||||
| the | ||||
| same level as the ones in the Offer/Answer exchange. In other words, | same level as the ones in the Offer/Answer exchange. In other words, | |||
| if they were present as session-level attributes, they will also | if they were present as session-level attributes, they will also | |||
| appear at the beginning of all INFO request payloads, i.e. preceding | appear at the beginning of all INFO request payloads, i.e., preceding | |||
| all pseudo "m=" lines. If they were originally exchanged as media | all pseudo "m=" lines. If they were originally exchanged as media-lev | |||
| level attributes, potentially overriding session-level values, then | el | |||
| attributes, potentially overriding session-level values, then | ||||
| they will also be included in INFO request payloads following the | they will also be included in INFO request payloads following the | |||
| corresponding pseudo "m=" lines. | corresponding pseudo "m=" lines. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| An Agent MUST ignore any received unknown extension-attribute-fields. | An Agent <bcp14>MUST</bcp14> ignore any received unknown extension-attr | |||
| </t> | ibute-fields. | |||
| </section> | </t> | |||
| </section> | ||||
| </section> | </section> | |||
| <section anchor="info-package" numbered="true" toc="default"> | ||||
| <section title="Info Package" anchor="info-package"> | <name>Info Package</name> | |||
| <section title="Rationale - Why INFO?" anchor="rationale"> | <section anchor="rationale" numbered="true" toc="default"> | |||
| <name>Rationale -- Why INFO?</name> | ||||
| <t> | <t> | |||
| The decision to use SIP INFO requests as a candidate transport | The decision to use SIP INFO requests as a candidate transport | |||
| method is based primarily on their lightweight nature. Once a | method is based primarily on their lightweight nature. Once a | |||
| dialog has been established, INFO requests can be exchanged | dialog has been established, INFO requests can be exchanged | |||
| both ways with no restrictions on timing and frequency and no | both ways with no restrictions on timing and frequency and no | |||
| risk of collision. | risk of collision. | |||
| </t> | </t> | |||
| <t> A critical fact is that the sending of Trickle ICE candidates | <t> A critical fact is that the sending of Trickle ICE candidates | |||
| in one direction is entirely uncoupled from sending candidates | in one direction is entirely uncoupled from sending candidates | |||
| in the other direction. | in the other direction. | |||
| Thus, the sending of candidates in each direction can be | Thus, the sending of candidates in each direction can be | |||
| done by a stream of INFO requests that is not correlated with | done by a stream of INFO requests that is not correlated with | |||
| the stream of INFO requests in the other direction. | the stream of INFO requests in the other direction. | |||
| And since each INFO request cumulatively includes | And since each INFO request cumulatively includes | |||
| the contents of all previous INFO requests in that direction, | the contents of all previous INFO requests in that direction, | |||
| ordering between INFO requests need not be preserved. | the ordering between INFO requests need not be preserved. | |||
| All of this permits using largely-independent INFO requests. | All of this permits using largely independent INFO requests. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| Contrarily, UPDATE or other offer/answer mechanisms assume | Contrarily, UPDATE or other Offer/Answer mechanisms assume | |||
| that the messages in each direction are tightly coupled | that the messages in each direction are tightly coupled | |||
| with messages in the other direction. | with messages in the other direction. | |||
| Using Offer/Answer and UPDATE requests | Using Offer/Answer and UPDATE requests | |||
| <xref target="RFC3311"/> | <xref target="RFC3311" format="default"/> | |||
| would introduce the following complications: | would introduce the following complications: | |||
| </t> | </t> | |||
| <t> | <dl newline="false" spacing="normal"> | |||
| <list style="hanging"> | <dt>Blocking of messages: </dt> | |||
| <t hangText="Blocking of messages: "> | <dd> | |||
| <xref target="RFC3264"/> defines Offer/Answer as a | Offer/Answer is defined as a | |||
| strictly sequential mechanism. | strictly sequential mechanism in <xref target="RFC3264" format="de | |||
| fault"/>. | ||||
| There can only be a maximum of one active exchange | There can only be a maximum of one active exchange | |||
| at any point of time. | at any point of time. | |||
| Both sides cannot simultaneously send Offers nor | Both sides cannot simultaneously send Offers nor | |||
| can they generate multiple Offers prior to | can they generate multiple Offers prior to | |||
| receiving an Answer. | receiving an Answer. | |||
| Using UPDATE requests for | Using UPDATE requests for | |||
| candidate transport would therefore imply the | candidate transport would therefore imply the | |||
| implementation of a candidate pool at every agent where | implementation of a candidate pool at every agent where | |||
| candidates can be stored until it is once again that | candidates can be stored until it is once again that | |||
| agent's "turn" to emit an Answer or a new Offer. | agent's "turn" to emit an Answer or a new Offer. | |||
| Such an approach would introduce non-negligible | Such an approach would introduce non-negligible | |||
| complexity for no additional value. | complexity for no additional value. | |||
| </t> | </dd> | |||
| <t hangText="Elevated risk of glare: "> | <dt>Elevated risk of glare: </dt> | |||
| <dd> | ||||
| The sequential nature of Offer/Answer also makes it | The sequential nature of Offer/Answer also makes it | |||
| impossible for both sides to send Offers simultaneously. | impossible for both sides to send Offers simultaneously. | |||
| What's worse is that there are no mechanisms in SIP to | What's worse is that there are no mechanisms in SIP to | |||
| actually prevent that. <xref target="RFC3261"/>, where | actually prevent that. <xref target="RFC3261" format="default"/>, where | |||
| the situation of Offers crossing on the wire is described | the situation of Offers crossing on the wire is described | |||
| as "glare", only defines a procedure for addressing the | as "glare", only defines a procedure for addressing the | |||
| issue after it has occurred. According to that procedure | issue after it has occurred. According to that procedure, | |||
| both Offers are invalidated and both sides need to retry | both Offers are invalidated and both sides need to retry | |||
| the negotiation after a period between 0 and 4 seconds. | the negotiation after a period between 0 and 4 seconds. | |||
| The high likelihood for glare to occur and the average two | ||||
| second back-off intervals implies that the duration of | The high likelihood for glare and the average two-second | |||
| Trickle ICE processing would not only fail to improve but | backoff intervals to occur implies that the duration of | |||
| Trickle ICE processing would not only fail to improve but | ||||
| actually exceed those of regular ICE. | actually exceed those of regular ICE. | |||
| </t> | </dd> | |||
| </list> | </dl> | |||
| </t> | ||||
| <t> | <t> | |||
| INFO messages decouple the exchange of candidates from the | INFO messages decouple the exchange of candidates from the | |||
| Offer/Answer negotiation | Offer/Answer negotiation | |||
| and are subject to none of the glare issues described above, | and are subject to none of the glare issues described above, | |||
| which makes them a very convenient and lightweight mechanism | which makes them a very convenient and lightweight mechanism | |||
| for asynchronous delivery of candidates. | for asynchronous delivery of candidates. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| Using in-dialog INFO messages also provides a way of | Using in-dialog INFO messages also provides a way of | |||
| guaranteeing that candidates are delivered end-to-end, between | guaranteeing that candidates are delivered end to end, between | |||
| the same entities that are actually in the process of | the same entities that are actually in the process of | |||
| initiating a session. Out-of-dialog alternatives would have implied | initiating a session. Out-of-dialog alternatives would have implied | |||
| requiring support for Globally Routable UA URI (GRUU) | requiring support for GRUU | |||
| <xref target="RFC5627"/> which, given GRUUs relatively low | <xref target="RFC5627" format="default"/> that, given GRUUs relatively | |||
| low | ||||
| adoption levels, would have constituted too strong of a | adoption levels, would have constituted too strong of a | |||
| constraint to the adoption of Trickle ICE. | constraint to the adoption of Trickle ICE. | |||
| </t> | </t> | |||
| </section> | </section> | |||
| <section title="Overall Description"> | <section numbered="true" toc="default"> | |||
| <name>Overall Description</name> | ||||
| <t> | <t> | |||
| This specification defines an Info Package for use by | This specification defines an Info Package for use by | |||
| SIP User Agents implementing Trickle ICE. | SIP UAs implementing Trickle ICE. | |||
| INFO requests carry ICE candidates discovered after the peer user | INFO requests carry ICE candidates discovered after the peer UAs have | |||
| agents have confirmed mutual support for Trickle ICE. | confirmed mutual support for Trickle ICE. | |||
| </t> | </t> | |||
| </section> | </section> | |||
| <section title="Applicability"> | <section numbered="true" toc="default"> | |||
| <name>Applicability</name> | ||||
| <t> | <t> | |||
| The purpose of the ICE protocol is to establish a media path | The purpose of the ICE protocol is to establish a media path | |||
| in the presence of NAT and firewalls. | in the presence of NAT and firewalls. | |||
| The candidates are transported in INFO requests and are | The candidates are transported in INFO requests and are | |||
| part of this establishment. | part of this establishment. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| Candidates sent by a Trickle ICE Agent after the Offer, | Candidates sent by a Trickle ICE Agent after the Offer | |||
| follow the same signaling path and reach the same | follow the same signaling path and reach the same | |||
| entity as the Offer itself. While it is true that GRUUs can | entity as the Offer itself. While it is true that GRUUs can | |||
| be used to achieve this, one of the goals of this | be used to achieve this, one of the goals of this | |||
| specification is to allow operation of Trickle ICE in as many | specification is to allow operation of Trickle ICE in as many | |||
| environments as possible including those without GRUU support. | environments as possible including those without GRUU support. | |||
| Using out-of-dialog SUBSCRIBE/NOTIFY requests would not | Using out-of-dialog SUBSCRIBE/NOTIFY requests would not | |||
| satisfy this goal. | satisfy this goal. | |||
| </t> | </t> | |||
| </section> | </section> | |||
| <section title="Info Package Name"> | <section numbered="true" toc="default"> | |||
| <name>Info Package Name</name> | ||||
| <t> | <t> | |||
| This document defines a SIP Info Package as per | This document defines a SIP Info Package as per | |||
| <xref target="RFC6086"/>. The Info Package token name for this | <xref target="RFC6086" format="default"/>. The Info Package token name | |||
| package is "trickle-ice" | for this | |||
| package is "trickle-ice". | ||||
| </t> | </t> | |||
| </section> | </section> | |||
| <section title="Info Package Parameters"> | <section numbered="true" toc="default"> | |||
| <name>Info Package Parameters</name> | ||||
| <t> | <t> | |||
| This document does not define any Info Package parameters. | This document does not define any Info Package parameters. | |||
| </t> | </t> | |||
| </section> | </section> | |||
| <section title="SIP Option Tags" anchor="option-tag"> | <section anchor="option-tag" numbered="true" toc="default"> | |||
| <name>SIP Option Tags</name> | ||||
| <t> | <t> | |||
| <xref target="RFC6086"/> allows Info Package specifications to | <xref target="RFC6086" format="default"/> allows Info Package specific ations to | |||
| define SIP option-tags. This specification extends the option-tag | define SIP option-tags. This specification extends the option-tag | |||
| construct of the SIP grammar as follows: | construct of the SIP grammar as follows: | |||
| </t> | ||||
| <t> | ||||
| <figure><artwork align="left"> | ||||
| option-tag /= "trickle-ice" | ||||
| </artwork></figure> | ||||
| </t> | </t> | |||
| <artwork align="left" name="" type="" alt=""><![CDATA[ | ||||
| option-tag /= "trickle-ice" ]]></artwork> | ||||
| <t> | <t> | |||
| SIP entities that support this | SIP entities that support this | |||
| specification MUST place the 'trickle-ice' option-tag in a SIP | specification <bcp14>MUST</bcp14> place the "trickle-ice" option-tag i n a SIP | |||
| Supported: or Require: header field within | Supported: or Require: header field within | |||
| all SIP INVITE requests and responses. | all SIP INVITE requests and responses. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| When responding to, or generating a SIP OPTIONS request a SIP | When responding to, or generating, a SIP OPTIONS request, a SIP | |||
| entity MUST also include the 'trickle-ice' option-tag in a SIP | entity <bcp14>MUST</bcp14> also include the "trickle-ice" option-tag i | |||
| n a SIP | ||||
| Supported: or Require: header field. | Supported: or Require: header field. | |||
| </t> | </t> | |||
| </section> | </section> | |||
| <section title="Info Request Body Parts"> | <section numbered="true" toc="default"> | |||
| <name>INFO Request Body Parts</name> | ||||
| <t> | <t> | |||
| Entities implementing this specification MUST include a | Entities implementing this specification <bcp14>MUST</bcp14> include a | |||
| payload of type 'application/trickle-ice-sdpfrag' as defined | payload of type "application/trickle-ice-sdpfrag" in SIP INFO requests | |||
| in <xref target="trickle_ice_sdpfrag_grammar"/> | as defined | |||
| in SIP INFO requests. | in <xref target="trickle_ice_sdpfrag_grammar" format="default"/>. | |||
| The payload is used to convey SDP-encoded ICE candidates. | The payload is used to convey SDP-encoded ICE candidates. | |||
| </t> | </t> | |||
| </section> | </section> | |||
| <section title="Info Package Usage Restrictions"> | <section numbered="true" toc="default"> | |||
| <name>Info Package Usage Restrictions</name> | ||||
| <t> | <t> | |||
| This document does not define any Info Package Usage Restrictions. | This document does not define any Info Package Usage Restrictions. | |||
| </t> | </t> | |||
| </section> | </section> | |||
| <section title="Rate of INFO Requests"> | <section numbered="true" toc="default"> | |||
| <name>Rate of INFO Requests</name> | ||||
| <t> | <t> | |||
| Given that IP addresses may be gathered rapidly a | Given that IP addresses may be gathered rapidly, a | |||
| Trickle ICE Agent with many network interfaces might create a | Trickle ICE Agent with many network interfaces might create a | |||
| high rate of INFO requests if every newly | high rate of INFO requests if every newly | |||
| detected candidate is trickled individually without aggregation. | detected candidate is trickled individually without aggregation. | |||
| An implementation MUST aggregate ICE candidates in case that an | An implementation <bcp14>MUST</bcp14> aggregate ICE candidates in case an | |||
| unreliable transport protocol such as UDP is used. | unreliable transport protocol such as UDP is used. | |||
| A Trickle ICE agent MUST NOT have more than one INFO request | A Trickle ICE Agent <bcp14>MUST NOT</bcp14> have more than one INFO re quest | |||
| pending at any one time. | pending at any one time. | |||
| When INFO messages are sent over an unreliable transport, | When INFO messages are sent over an unreliable transport, | |||
| they are retransmitted according to the rules specified in | they are retransmitted according to the rules specified in | |||
| <xref target="RFC3261" pageno="false" format="default"/> section 17.1. 2.1." | <xref target="RFC3261" sectionFormat="comma" section="17.1.2.1"/>. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| If the INFO requests are sent on top of TCP, | If the INFO requests are sent on top of TCP, | |||
| which is probably the standard way, | which is probably the standard way, | |||
| this is not an issue for the network anymore, | it is not an issue for the network anymore, | |||
| but it can remain one for SIP proxies and other intermediaries | but it can remain one for SIP proxies and other intermediaries | |||
| forwarding the SIP INFO messages. | forwarding the SIP INFO messages. | |||
| Also, an endpoint may not be able to tell that it has congestion | Also, an endpoint may not be able to tell that it has congestion | |||
| controlled transport all the way. | controlled transport all the way. | |||
| </t> | </t> | |||
| </section> | </section> | |||
| <section title="Info Package Security Considerations"> | <section numbered="true" toc="default"> | |||
| <name>Info Package Security Considerations</name> | ||||
| <t> | <t> | |||
| See <xref target="sec-cons"/> | See <xref target="sec-cons" format="default"/>. | |||
| </t> | </t> | |||
| </section> | </section> | |||
| </section> | </section> | |||
| <section title="Deployment Considerations" anchor="deploy-cons"> | <section anchor="deploy-cons" numbered="true" toc="default"> | |||
| <t> | <name>Deployment Considerations</name> | |||
| Trickle ICE uses two mechanisms for exchange of candidate information. | <t> | |||
| Trickle ICE uses two mechanisms for the exchange of candidate informatio | ||||
| n. | ||||
| This imposes new requirements to certain middleboxes | This imposes new requirements to certain middleboxes | |||
| that are used in some networks, e.g. for monitoring purposes. | that are used in some networks, e.g., for monitoring purposes. | |||
| While the first mechanism, SDP Offers and Answers, | While the first mechanism, SDP Offers and Answers, | |||
| is already used by regular ICE and is assumed to be supported, | is already used by regular ICE and is assumed to be supported, | |||
| the second mechanism, INFO request bodies, | the second mechanism, INFO request bodies, | |||
| needs to be considered by such middleboxes as well when | needs to be considered by such middleboxes as well when | |||
| trickle ICE is used. | trickle ICE is used. | |||
| Such middleboxes need to make sure that they remain | Such middleboxes need to make sure that they remain | |||
| in the signaling path of the INFO requests and | in the signaling path of the INFO requests and | |||
| need to understand the INFO request body. | understand the INFO request body. | |||
| </t> | ||||
| </section> | ||||
| <section title="IANA Considerations" anchor="IANA"> | ||||
| <t> | ||||
| [RFC EDITOR NOTE: Please replace RFCXXXX with the RFC number of this docum | ||||
| ent. ] | ||||
| </t> | ||||
| <section anchor="sec-eoc-iana" title="SDP 'end-of-candidates' Attribute | ||||
| " toc="default"> | ||||
| <t> | ||||
| This section defines a new SDP media-level and session-level attribute | ||||
| <xref target="RFC4566" pageno="false" format="default"/> | ||||
| , 'end-of-candidates'. 'end-of-candidates' is a property attribute | ||||
| <xref target="RFC4566" pageno="false" format="default"/> | ||||
| , and hence has no value. | ||||
| </t> | </t> | |||
| <figure> | </section> | |||
| <preamble/> | <section anchor="IANA" numbered="true" toc="default"> | |||
| <artwork> | <name>IANA Considerations</name> | |||
| <![CDATA[ | <section anchor="sec-eoc-iana" toc="default" numbered="true"> | |||
| Name: end-of-candidates | <name>SDP "end-of-candidates" Attribute</name> | |||
| <t> | ||||
| This section defines a new SDP media-level and session-level | ||||
| <xref target="RFC4566" format="default"/> "end-of-candidates" attribute, w | ||||
| hich is a property attribute | ||||
| <xref target="RFC4566" format="default"/> and hence has no value. | ||||
| </t> | ||||
| <ul empty="true"><li> | ||||
| <dl newline="false" spacing="normal"> | ||||
| Value: N/A | <dt>Name:</dt><dd>end-of-candidates</dd> | |||
| Usage Level: media and session | <dt>Value:</dt><dd>N/A</dd> | |||
| Charset Dependent: no | <dt>Usage Level:</dt><dd>media and session</dd> | |||
| Purpose: The sender indicates that it will not trickle | <dt>Charset Dependent:</dt><dd>no</dd> | |||
| further ICE candidates. | ||||
| O/A Procedures: RFCXXX defines the detailed | <dt>Purpose:</dt><dd>The sender indicates that it will not trickle | |||
| further ICE candidates.</dd> | ||||
| <dt>O/A Procedures:</dt><dd>RFC 8840 defines the detailed | ||||
| SDP Offer/Answer procedures for | SDP Offer/Answer procedures for | |||
| the 'end-of-candidates' attribute. | the "end-of-candidates" attribute.</dd> | |||
| Mux Category: IDENTICAL | <dt>Mux Category:</dt><dd>IDENTICAL</dd> | |||
| Reference: RFCXXXX | <dt>Reference:</dt><dd>RFC 8840</dd> | |||
| Example: | <dt>Example:</dt><dd>a=end-of-candidates</dd> | |||
| </dl></li></ul> | ||||
| a=end-of-candidates | ||||
| ]]> | ||||
| </artwork> | ||||
| </figure> | ||||
| </section> | </section> | |||
| <section anchor="sdpfrag-reg" numbered="true" toc="default"> | ||||
| <name>Media Type "application/trickle-ice-sdpfrag"</name> | ||||
| <t> | ||||
| This document defines the new media type "application/trickle-ice-sdpfrag" | ||||
| in accordance with <xref target="RFC6838" format="default"/>. | ||||
| </t> | ||||
| <section title="Media Type 'application/trickle-ice-sdpfrag' " anchor="sdp | <dl spacing="normal"> | |||
| frag-reg"> | <dt>Type name:</dt><dd>application</dd> | |||
| <t> | <dt>Subtype name:</dt><dd>trickle-ice-sdpfrag</dd> | |||
| This document defines a new Media Type 'application/trickle-ice-sdpfrag' | <dt>Required parameters:</dt><dd>None.</dd> | |||
| in accordance with <xref target="RFC6838"/>. | <dt>Optional parameters:</dt><dd>None.</dd> | |||
| </t> | <dt>Encoding considerations:</dt><dd><t> | |||
| <t> | ||||
| <list style="none"> | ||||
| <t> Type name: application</t> | ||||
| <t> Subtype name: trickle-ice-sdpfrag</t> | ||||
| <t> Required parameters: None.</t> | ||||
| <t> Optional parameters: None. </t> | ||||
| <t> Encoding considerations:</t> | ||||
| <t><list style="none"> | ||||
| <t> | ||||
| The media contents follow the same rules as SDP, | The media contents follow the same rules as SDP, | |||
| except as noted in this document. | except as noted in this document. | |||
| The media contents are text, with the grammar specified | The media contents are text, with the grammar specified | |||
| in <xref target="trickle_ice_sdpfrag_grammar"/>. | in <xref target="trickle_ice_sdpfrag_grammar" format="default"/>. | |||
| </t> | </t><t> | |||
| <t> | ||||
| Although the initially defined content of a trickle-ice-sdpfrag body | Although the initially defined content of a trickle-ice-sdpfrag body | |||
| does only include ASCII characters, | does only include ASCII characters, | |||
| UTF-8 encoded content might be introduced via extension attributes. | UTF-8-encoded content might be introduced via extension attributes. | |||
| The "a=charset:" attribute may be used to signal the presence of oth | The "charset" attribute may be used to signal the presence of other | |||
| er | ||||
| character sets in certain parts of a trickle-ice-sdpfrag body (see | character sets in certain parts of a trickle-ice-sdpfrag body (see | |||
| <xref target="RFC4566"/>). | <xref target="RFC4566" format="default"/>). | |||
| Arbitrary binary content cannot be directly represented | Arbitrary binary content cannot be directly represented | |||
| in SDP or a trickle-ice-sdpfrag body. | in SDP or a trickle-ice-sdpfrag body. | |||
| </t> | </t></dd> | |||
| </list></t> | ||||
| <t> Security considerations: </t> | <dt>Security considerations:</dt><dd>See <xref target="RFC4566" format | |||
| <t><list style="none"> | ="default"/> and RFC 8840</dd> | |||
| <t> | <dt>Interoperability considerations:</dt><dd>See RFC 8840</dd> | |||
| See <xref target="RFC4566"/> and RFCXXXX | <dt>Published specification:</dt><dd>See RFC 8840</dd> | |||
| </t> | <dt>Applications that use this media type:</dt><dd>Trickle ICE</dd> | |||
| </list></t> | <dt>Fragment identifier considerations:</dt><dd>N/A</dd> | |||
| <t> Interoperability considerations:</t> | ||||
| <t><list style="none"> | <dt>Additional information:</dt> | |||
| <t> | <dd><t><br/></t> | |||
| See RFCXXXX | <dl newline="false" spacing="compact"> | |||
| </t> | <dt>Deprecated alias names for this type:</dt><dd>N/A</dd> | |||
| </list></t> | <dt>Magic number(s):</dt><dd>N/A</dd> | |||
| <t> Published specification:</t> | <dt>File extension(s):</dt><dd>N/A</dd> | |||
| <t><list style="none"> | <dt>Macintosh File Type Code(s):</dt><dd>N/A</dd> | |||
| <t> | </dl> | |||
| See RFCXXXX | </dd> | |||
| </t> | ||||
| </list></t> | <dt>Person and email address to contact for further information:</dt> | |||
| <t> Applications which use this Media Type:</t> | <dd>The IESG (iesg@ietf.org)</dd> | |||
| <t><list style="none"> | ||||
| <t> | <dt>Intended usage:</dt> | |||
| Trickle-ICE | <dd>Trickle ICE for SIP as specified in RFC 8840.</dd> | |||
| </t> | ||||
| </list></t> | <dt>Restrictions on usage:</dt><dd>N/A</dd> | |||
| <t> Fragment identifier considerations: N/A</t> | <dt>Author/Change controller:</dt><dd>The IESG (iesg@ietf.org)</dd> | |||
| <t> Additional information: </t> | <dt>Provisional registration? (standards tree only):</dt><dd>N/A</dd> | |||
| <t><list style="none"> | </dl> | |||
| <t> Deprecated alias names for this type: N/A </t> | ||||
| <t> Magic number(s): N/A</t> | </section> | |||
| <t>File extension(s): N/A</t> | <section anchor="package-reg" numbered="true" toc="default"> | |||
| <t>Macintosh File Type Code(s): N/A</t> | <name>SIP Info Package "trickle-ice"</name> | |||
| </list></t> | ||||
| <t> Person and email address to contact for further information:</t> | ||||
| <t><list style="none"> | ||||
| <t> | ||||
| The IESG (iesg@ietf.org) | ||||
| </t> | ||||
| </list></t> | ||||
| <t> Intended usage: </t> | ||||
| <t><list style="none"> | ||||
| <t> | <t> | |||
| Trickle-ICE for SIP as specified in RFCXXXX. | This document defines a new SIP Info Package named "trickle-ice" | |||
| and updates the "Info Packages Registry" with the following entry. | ||||
| </t> | </t> | |||
| </list></t> | <table anchor="table_1" align="left"> | |||
| <t> Restrictions on usage: N/A</t> | <thead> | |||
| <t> Author/Change controller:</t> | <tr> | |||
| <t><list style="none"> | <th align='center'>Name</th> | |||
| <t> | <th align='center'>Reference</th> | |||
| The IESG (iesg@ietf.org) | </tr> | |||
| </t> | </thead> | |||
| </list></t> | <tbody> | |||
| <t> Provisional registration? (standards tree only): N/A </t> | <tr> | |||
| <td>trickle-ice</td> | ||||
| <td>RFC 8840</td> | ||||
| </tr> | ||||
| </tbody> | ||||
| </table> | ||||
| </section> | ||||
| </list> | <section anchor="optag-reg" numbered="true" toc="default"> | |||
| </t> | <name>SIP Option Tag "trickle-ice"</name> | |||
| <t> | ||||
| This specification registers a new SIP option tag "trickle-ice" | ||||
| as per the guidelines in <xref target="RFC3261" sectionFormat="of" | ||||
| section="27.1"/> | ||||
| and updates the "Option Tags" subregistry of the | ||||
| SIP Parameters registry with the following entry: | ||||
| </t> | ||||
| </section> | <table anchor="table_2" align="left"> | |||
| <section title="SIP Info Package 'trickle-ice' " anchor="package-r | <thead> | |||
| eg"> | <tr> | |||
| <t> | <th align='center'>Name</th> | |||
| This document defines a new SIP Info Package named 'trickle-ice' | <th align='center'>Description</th> | |||
| and updates the Info Packages Registry with the following entry. | <th align='center'>Reference</th> | |||
| </t> | </tr> | |||
| <t> | </thead> | |||
| <figure><artwork align="left"> | <tbody> | |||
| +-------------+-----------+ | <tr> | |||
| | Name | Reference | | <td>trickle&nbhy;ice</td> | |||
| +-------------+-----------+ | <td>This option tag is used to indicate that a UA supports and understands T | |||
| | trickle-ice | [RFCXXXX] | | rickle ICE.</td> | |||
| | | | | <td>RFC 8840</td> | |||
| +-------------+-----------+ | </tr> | |||
| </artwork></figure> | </tbody> | |||
| </t> | </table> | |||
| </section> | ||||
| <section title="SIP Option Tag 'trickle-ice'" anchor="optag-reg"> | </section> | |||
| <t> | ||||
| This specification registers a new SIP option tag 'trickle-ice' | ||||
| as per the guidelines in Section 27.1 of <xref target="RFC3261"/> | ||||
| and updates the "Option Tags" section of the | ||||
| SIP Parameter Registry with the following entry: | ||||
| </t> | ||||
| <t> | ||||
| <figure><artwork align="left"> | ||||
| +-------------+-------------------------------------+-----------+ | ||||
| | Name | Description | Reference | | ||||
| +-------------+-------------------------------------+-----------+ | ||||
| | trickle-ice | This option tag is used to indicate | [RFCXXXX] | | ||||
| | | that a UA supports and understands | | | ||||
| | | Trickle-ICE. | | | ||||
| +-------------+-------------------------------------+-----------+ | ||||
| </artwork></figure> | ||||
| </t> | ||||
| </section> | ||||
| </section> | </section> | |||
| <section title='Security Considerations' anchor="sec-cons"> | <section anchor="sec-cons" numbered="true" toc="default"> | |||
| <name>Security Considerations</name> | ||||
| <t> | <t> | |||
| The Security Considerations of | The Security Considerations of | |||
| <xref target="I-D.ietf-mmusic-ice-sip-sdp"/>, | <xref target="RFC6086" format="default"/>, <xref target="RFC8838" forma | |||
| <xref target="RFC6086"/> and | t="default"/>, and | |||
| <xref target="I-D.ietf-ice-trickle"/> apply. | <xref target="RFC8839" format="default"/> apply. | |||
| This document clarifies how the above specifications are used together f or trickling | This document clarifies how the above specifications are used together f or trickling | |||
| candidates and does not create additional security risks. | candidates and does not create additional security risks. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| The new Info Package 'trickle-ice' and | The new Info Package "trickle-ice" and | |||
| the new Media Type 'application/trickle-ice-sdpfrag' | the new media type "application/trickle-ice-sdpfrag" | |||
| do not introduce additional security considerations | do not introduce additional security considerations | |||
| when used in the context of Trickle ICE. | when used in the context of Trickle ICE. | |||
| Both are not intended to be used for other applications, | Both are not intended to be used for other applications, | |||
| so any security considerations for its use in other contexts | so any security considerations for its use in other contexts | |||
| is out of the scope of this document | is out of the scope of this document | |||
| </t> | </t> | |||
| </section> | </section> | |||
| <section title='Acknowledgements'> | </middle> | |||
| <back> | ||||
| <references> | ||||
| <name>References</name> | ||||
| <references> | ||||
| <name>Normative References</name> | ||||
| <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | ||||
| ence.RFC.2119.xml"/> | ||||
| <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | ||||
| ence.RFC.3261.xml"/> | ||||
| <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | ||||
| ence.RFC.3262.xml"/> | ||||
| <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | ||||
| ence.RFC.3264.xml"/> | ||||
| <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | ||||
| ence.RFC.3605.xml"/> | ||||
| <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | ||||
| ence.RFC.4566.xml"/> | ||||
| <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | ||||
| ence.RFC.5234.xml"/> | ||||
| <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | ||||
| ence.RFC.5761.xml"/> | ||||
| <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | ||||
| ence.RFC.5888.xml"/> | ||||
| <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | ||||
| ence.RFC.6086.xml"/> | ||||
| <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | ||||
| ence.RFC.6838.xml"/> | ||||
| <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | ||||
| ence.RFC.7405.xml"/> | ||||
| <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | ||||
| ence.RFC.8174.xml"/> | ||||
| <!--Note: I-D.ietf-ice-rfc5245bis-20.xml is now RFC 8445--> | ||||
| <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | ||||
| ence.RFC.8445.xml"/> | ||||
| <!--draft-ietf-mmusic-ice-sip-sdp-39; C238 companion doc--> | ||||
| <reference anchor='RFC8839' target="https://www.rfc-editor.org/info/rfc8839"> | ||||
| <front> | ||||
| <title>Session Description Protocol (SDP) Offer/Answer Procedures for Interactiv | ||||
| e Connectivity Establishment (ICE)</title> | ||||
| <author initials='M' surname='Petit-Huguenin' fullname='Marc Petit-Huguenin'> | ||||
| <organization /> | ||||
| </author> | ||||
| <author initials='S' surname='Nandakumar' fullname='Suhas Nandakumar'> | ||||
| <organization /> | ||||
| </author> | ||||
| <author initials='C' surname='Holmberg' fullname='Christer Holmberg'> | ||||
| <organization /> | ||||
| </author> | ||||
| <author initials='A' surname='Keränen' fullname='Ari Keränen'> | ||||
| <organization /> | ||||
| </author> | ||||
| <author initials='R' surname='Shpount' fullname='Roman Shpount'> | ||||
| <organization /> | ||||
| </author> | ||||
| <date month="January" year="2021"/> | ||||
| </front> | ||||
| <seriesInfo name="RFC" value="8839"/> | ||||
| <seriesInfo name="DOI" value="10.17487/RFC8839"/> | ||||
| </reference> | ||||
| <!--draft-ietf-ice-trickle-21; C238; RFC 8838 --> | ||||
| <reference anchor="RFC8838" target="https://www.rfc-editor.org/info/rfc8838"> | ||||
| <front> | ||||
| <title>Trickle ICE: Incremental Provisioning of Candidates for the | ||||
| Interactive Connectivity Establishment (ICE) Protocol</title> | ||||
| <author initials="E" surname="Ivov" fullname="Emil Ivov"> | ||||
| <organization /> | ||||
| </author> | ||||
| <author initials="J" surname="Uberti" fullname="Justin Uberti"> | ||||
| <organization /> | ||||
| </author> | ||||
| <author initials="P" surname="Saint-Andre" fullname="Peter Saint-Andre"> | ||||
| <organization /> | ||||
| </author> | ||||
| <date month="January" year="2021" /> | ||||
| </front> | ||||
| <seriesInfo name="RFC" value="8838" /> | ||||
| <seriesInfo name="DOI" value="10.17487/RFC8838"/> | ||||
| </reference> | ||||
| <!--draft-ietf-mmusic-sdp-bundle-negotiation-54; C238; RFC 8843 --> | ||||
| <reference anchor="RFC8843" target="https://www.rfc-editor.org/info/rfc8843" | ||||
| > | ||||
| <front> | ||||
| <title>Negotiating Media Multiplexing Using the Session Description Prot | ||||
| ocol (SDP)</title> | ||||
| <author initials="C" surname="Holmberg" fullname="Christer Holmberg"> | ||||
| <organization/> | ||||
| </author> | ||||
| <author initials="H" surname="Alvestrand" fullname="Harald Alvestrand"> | ||||
| <organization/> | ||||
| </author> | ||||
| <author initials="C" surname="Jennings" fullname="Cullen Jennings"> | ||||
| <organization/> | ||||
| </author> | ||||
| <date month="January" year="2021"/> | ||||
| </front> | ||||
| <seriesInfo name="RFC" value="8843"/> | ||||
| <seriesInfo name="DOI" value="10.17487/RFC8843"/> | ||||
| </reference> | ||||
| <!--draft-ietf-mmusic-sdp-mux-attributes-17; C238; RFC 8859--> | ||||
| <reference anchor="RFC8859" target="https://www.rfc-editor.org/info/rfc8 | ||||
| 859"> | ||||
| <front> | ||||
| <title>A Framework for Session Description Protocol (SDP) | ||||
| Attributes When Multiplexing</title> | ||||
| <author initials="S" surname="Nandakumar" fullname="Suhas Nandakumar | ||||
| "> | ||||
| <organization/> | ||||
| </author> | ||||
| <date month="January" year="2021"/> | ||||
| </front> | ||||
| <seriesInfo name="RFC" value="8859"/> | ||||
| <seriesInfo name="DOI" value="10.17487/RFC8859"/> | ||||
| </reference> | ||||
| <!--draft-ietf-mmusic-mux-exclusive-12; C238; RFC 8858 --> | ||||
| <reference anchor='RFC8858' target="https://www.rfc-editor.org/info/rfc8858"> | ||||
| <front> | ||||
| <title>Indicating Exclusive Support of RTP and RTP Control Protocol (RTCP) | ||||
| Multiplexing Using the Session Description Protocol (SDP)</title> | ||||
| <author initials='C.' surname='Holmberg' fullname='Christer Holmberg'> | ||||
| <organization /> | ||||
| </author> | ||||
| <date month="January" year="2021" /> | ||||
| </front> | ||||
| <seriesInfo name='RFC' value='8858' /> | ||||
| <seriesInfo name="DOI" value="10.17487/RFC8858"/> | ||||
| </reference> | ||||
| </references> | ||||
| <references> | ||||
| <name>Informative References</name> | ||||
| <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | ||||
| ence.RFC.3311.xml"/> | ||||
| <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | ||||
| ence.RFC.3840.xml"/> | ||||
| <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | ||||
| ence.RFC.5389.xml"/> | ||||
| <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | ||||
| ence.RFC.5627.xml"/> | ||||
| <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | ||||
| ence.RFC.5766.xml"/> | ||||
| </references> | ||||
| </references> | ||||
| <section numbered="false" toc="default"> | ||||
| <name>Acknowledgements</name> | ||||
| <t> | <t> | |||
| The authors like to thank | The authors like to thank | |||
| Flemming Andreasen, | <contact fullname="Flemming Andreasen"/>, | |||
| Ayush Jain, | <contact fullname="Ayush Jain"/>, | |||
| Paul Kyzivat, | <contact fullname="Paul Kyzivat"/>, | |||
| Jonathan Lennox, | <contact fullname="Jonathan Lennox"/>, | |||
| Simon Perreault, | <contact fullname="Simon Perreault"/>, | |||
| Roman Shpount | <contact fullname="Roman Shpount"/>, | |||
| and | and | |||
| Martin Thomson | <contact fullname="Martin Thomson"/> | |||
| for reviewing and/or making various suggestions for | for reviewing and/or making various suggestions for | |||
| improvements and optimizations. | improvements and optimizations. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| The authors also like to thank | The authors also like to thank | |||
| Flemming Andreasen for shepherding this document and | <contact fullname="Flemming Andreasen"/> for shepherding this document a | |||
| Ben Campbell for his AD review and suggestions. | nd | |||
| In addition, the author like to thank | <contact fullname="Ben Campbell"/> for his AD review and suggestions. | |||
| Benjamin Kaduk, | In addition, the authors thank | |||
| Adam Roach, | <contact fullname="Benjamin Kaduk"/>, | |||
| Mirja Kühlewind and | <contact fullname="Adam Roach"/>, | |||
| Eric Rescorla | <contact fullname="Mirja Kühlewind"/>, and | |||
| <contact fullname="Eric Rescorla"/> | ||||
| for their comments and/or text proposals for improving | for their comments and/or text proposals for improving | |||
| the document during IESG review. | the document during IESG review. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| Many thanks to Dale Worley for Gen-Art review and proposed | Many thanks to <contact fullname="Dale Worley"/> for the Gen-Art review and proposed | |||
| enhancements for several sections. | enhancements for several sections. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| Many thanks to Joerg Ott for TSV-Art review and suggested improvements. | Many thanks to <contact fullname="Joerg Ott"/> for the TSV-Art review an d suggested improvements. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| The authors thank Shawn Emery for Security Directorate review. | The authors thank <contact fullname="Shawn Emery"/> for the Security D irectorate review. | |||
| </t> | </t> | |||
| </section> | </section> | |||
| <section title='Change Log'> | ||||
| <t> | ||||
| [RFC EDITOR NOTE: Please remove this section when publishing]. | ||||
| </t> | ||||
| <t> | ||||
| Changes from draft-ietf-mmusic-trickle-ice-sip-01 | ||||
| <list style="symbols"> | ||||
| <t> Editorial Clean up</t> | ||||
| <t> IANA Consideration added</t> | ||||
| <t> Security Consideration added</t> | ||||
| <t> RTCP and BUNDLE Consideration added with rules for including "a=rtc | ||||
| p-mux" and "a=group: BUNDLLE" attributes </t> | ||||
| <t> 3PCC Consideration added</t> | ||||
| <t> Clarified that 18x w/o answer is sufficient to create a dialog that | ||||
| allows for trickling to start </t> | ||||
| <t> Added remaining Info Package definition sections as outlined in sect | ||||
| ion 10 of <xref target="RFC6086"/></t> | ||||
| <t> Added definition of application/sdpfrag making draft-ivov-mmusic-sdp | ||||
| frag obsolete</t> | ||||
| <t> Added pseudo m-lines as additional separator in sdpfrag bodies for T | ||||
| rickle ICE </t> | ||||
| <t> Added ABNF for sdp-frag bodies and Trickle-ICE package </t> | ||||
| </list> | ||||
| </t> | ||||
| <t> | ||||
| Changes from draft-ietf-mmusic-trickle-ice-sip-02 | ||||
| <list style="symbols"> | ||||
| <t> Removed definition of application/sdpfrag </t> | ||||
| <t> Replaced with new type application/trickle-ice-sdpfrag </t> | ||||
| <t> RTCP and BUNDLE Consideration enhanced with some examples </t> | ||||
| <t> draft-ietf-mmusic-sdp-bundle-negotiation and RFC5761 changed to norm | ||||
| ative reference </t> | ||||
| <t> Removed reference to 4566bis </t> | ||||
| <t> Addressed review comment from Simon Perreault </t> | ||||
| </list> | ||||
| </t> | ||||
| <t> | ||||
| Changes from draft-ietf-mmusic-trickle-ice-sip-03 | ||||
| <list style="symbols"> | ||||
| <t> replaced reference to RFC5245 with draft-ietf-mmusic-rfc5245bis and | ||||
| draft-ietf-mmusic-ice-sip-sdp </t> | ||||
| <t> Corrected Figure 10, credits to Ayush Jain for finding the bug </t> | ||||
| <t> Referencing a=rtcp and a=rtcp-mux handling from draft-ietf-mmusic-ic | ||||
| e-sip-sdp </t> | ||||
| <t> Referencing a=rtcp-mux-exclusive handling from draft-ietf-mmusic-mux | ||||
| -exclusive, enhanced ABNF to support a=rtcp-mux-exclusive </t> | ||||
| <t> Clarifying that draft-ietf-mmusic-sdp-mux-attributes applies for the | ||||
| application/trickle-ice-sdpfrag body </t> | ||||
| </list> | ||||
| </t> | ||||
| <t> | ||||
| Changes from draft-ietf-mmusic-trickle-ice-sip-04 | ||||
| <list style="symbols"> | ||||
| <t> considered comments from Christer Holmberg </t> | ||||
| <t> corrected grammar for INFO package, such that ice-ufrag/pwd are also | ||||
| allowed on media-level as specified in <xref target="I-D.ietf-mmusic-ice-sip-sd | ||||
| p"/> </t> | ||||
| <t> Added new ice-pacing-attribute fom <xref target="I-D.ietf-mmusic-ice | ||||
| -sip-sdp"/> </t> | ||||
| <t> Added formal definition for the end-of-candidates attribute </t> | ||||
| </list> | ||||
| </t> | ||||
| <t> | ||||
| Changes from draft-ietf-mmusic-trickle-ice-sip-05 | ||||
| <list style="symbols"> | ||||
| <t> considered further comments from Christer Holmberg </t> | ||||
| <t> editorial comments on section 3 addressed </t> | ||||
| <t> moved section 3.1 to section 10.1 and applied some edits</t> | ||||
| <t> replaced the term "previously sent candidates" with "currently known | ||||
| and used candidates".</t> | ||||
| </list> | ||||
| </t> | ||||
| <t> | ||||
| Changes from draft-ietf-mmusic-trickle-ice-sip-06 | ||||
| <list style="symbols"> | ||||
| <t> editorial fixes</t> | ||||
| <t> additional text on the content of the INFO messages.</t> | ||||
| <t> recommendation on what to do if a previously sent candidate is unex | ||||
| pectedly missing in a subsequent INFO </t> | ||||
| <t> terminology alignment with draft-ietf-ice-trickle-07 </t> | ||||
| </list> | ||||
| </t> | ||||
| <t> | ||||
| Changes from draft-ietf-mmusic-trickle-ice-sip-07 | ||||
| <list style="symbols"> | ||||
| <t> editorial fixes</t> | ||||
| <t> clarification on ordering of candidates for alignment with draft-iet | ||||
| f-ice-trickle-12 </t> | ||||
| <t> O/A procedures for end-of-candidates attribute described here after | ||||
| corresponding procedures | ||||
| have been removed from draft-ietf-ice-trickle-11</t> | ||||
| <t> using IPv6 addresses in examples </t> | ||||
| </list> | ||||
| </t> | ||||
| <t> | ||||
| Changes from draft-ietf-mmusic-trickle-ice-sip-08 | ||||
| <list style="symbols"> | ||||
| <t> editorial fixes/clarification based on Flemmings review</t> | ||||
| <t> Description of Trickle specifics in O/A procedures for initial O/A e | ||||
| xchange and specification of ICE mismatch exception</t> | ||||
| </list> | ||||
| </t> | ||||
| <t> | ||||
| Changes from draft-ietf-mmusic-trickle-ice-sip-09 | ||||
| <list style="symbols"> | ||||
| <t> editorial fixes/correction of references</t> | ||||
| <t> adding missing Ref to RFC3605 in section 6, 5th para</t> | ||||
| <t> replaced remaining IPv4 adresses with IPv6 </t> | ||||
| <t> | ||||
| Added text for handling a=rtcp in case of default RTP address 0.0.0. | ||||
| 0:9 based on comment from Roman Shpount. | ||||
| </t> | ||||
| </list> | ||||
| </t> | ||||
| <t> | ||||
| Changes from draft-ietf-mmusic-trickle-ice-sip-10 | ||||
| <list style="symbols"> | ||||
| <t> editorial fixes due to idnits output</t> | ||||
| </list> | ||||
| </t> | ||||
| <t> | ||||
| Changes from draft-ietf-mmusic-trickle-ice-sip-11 | ||||
| <list style="symbols"> | ||||
| <t> addressing comments from Ben Campell's AD review and Christer's revi | ||||
| ew | ||||
| </t> | ||||
| <t> | ||||
| Numerous editorial improvements/corrections | ||||
| </t> | ||||
| <t> | ||||
| Added [RFC8174] boiler plate and adapted usage of normative language | ||||
| </t> | ||||
| <t> | ||||
| Clarified terminology ICE modules .vs. ICE agent | ||||
| </t> | ||||
| <t> | ||||
| Added more detailed OA procedures | ||||
| </t> | ||||
| <t> | ||||
| Corrected default values in m-line | ||||
| and usage of "a=mid:" attribute explicitly mentioned for offer/answer | ||||
| </t> | ||||
| <t> Removed explicit mentioning of XMPP | ||||
| </t> | ||||
| <t> | ||||
| Added Deployment Considerations section | ||||
| </t> | ||||
| <t> | ||||
| Fixed ref for rfc5245bis | ||||
| </t> | ||||
| </list> | ||||
| </t> | ||||
| <t> | ||||
| Changes from draft-ietf-mmusic-trickle-ice-sip-12 | ||||
| <list style="symbols"> | ||||
| <t> addressing comments from Gen-Art review, TSV-Art review and | ||||
| Security Directorate review | ||||
| </t> | ||||
| <t> | ||||
| Numerous editorial improvements/corrections/clarifications | ||||
| </t> | ||||
| </list> | ||||
| </t> | ||||
| <t> | ||||
| Changes from draft-ietf-mmusic-trickle-ice-sip-13 | ||||
| <list style="symbols"> | ||||
| <t> added expansions for SDP,GRUU, AOR, STUN, TURN | ||||
| </t> | ||||
| <t> | ||||
| some editorial corrections | ||||
| </t> | ||||
| </list> | ||||
| </t> | ||||
| <t> | ||||
| Changes from draft-ietf-mmusic-trickle-ice-sip-14 | ||||
| </t> | ||||
| <t> | ||||
| Addressing comments from IESG review | ||||
| <list style="symbols"> | ||||
| <t> | ||||
| Clarification/enhancement in section 5 and Fig. 10 based on comments | ||||
| from Benjamin Kaduk | ||||
| </t> | ||||
| <t> | ||||
| Clarification on sequence for sending candidates, | ||||
| definition of pseudo m-lines, | ||||
| usage of a=mid attribute, | ||||
| usage of INFO as ACK for receipt of 18x based on comments from Eric Re | ||||
| scorla | ||||
| </t> | ||||
| <t> | ||||
| Removal of 3PCC Section 3.4, | ||||
| removal of NATted IPv6 addresses, | ||||
| adding more flexibility to in the grammar, | ||||
| explicit mentioning of Require: header field, | ||||
| usage of Require: header field in case of provisioning, | ||||
| text on repetition of candidates in case of RTCP mux and Bundle, | ||||
| various other editorial improvements/corrections | ||||
| based on comments from Adam Roach | ||||
| </t> | ||||
| <t> | ||||
| Modified text on rate limitation of INFO requests based on | ||||
| comments of Mirja Kühlewind, Adam Roach and Roman Shpount | ||||
| </t> | ||||
| <t> | ||||
| some editorial corrections | ||||
| </t> | ||||
| </list> | ||||
| </t> | ||||
| <t> | ||||
| Changes from draft-ietf-mmusic-trickle-ice-sip-15 | ||||
| <list style="symbols"> | ||||
| <t> | ||||
| Corrections in section 7 on Media Multiplexing | ||||
| </t> | ||||
| </list> | ||||
| </t> | ||||
| <t> | ||||
| Changes from draft-ietf-mmusic-trickle-ice-sip-16 | ||||
| <list style="symbols"> | ||||
| <t> | ||||
| some editorial corrections | ||||
| </t> | ||||
| </list> | ||||
| </t> | ||||
| <t> | ||||
| Changes from draft-ietf-mmusic-trickle-ice-sip-16 | ||||
| <list style="symbols"> | ||||
| <t> | ||||
| Changed IPv6 candidate example from srflx to host | ||||
| </t> | ||||
| </list> | ||||
| </t> | ||||
| </section> | ||||
| </middle> | ||||
| <back> | ||||
| <references title='Normative References'> | ||||
| <?rfc include="reference.RFC.2119"?> | ||||
| <?rfc include="reference.RFC.3261"?> | ||||
| <?rfc include="reference.RFC.3262"?> | ||||
| <?rfc include="reference.RFC.3264"?> | ||||
| <?rfc include="reference.RFC.3605"?> | ||||
| <?rfc include="reference.RFC.4566"?> | ||||
| <?rfc include="reference.RFC.5234"?> | ||||
| <?rfc include="reference.RFC.5761"?> | ||||
| <?rfc include="reference.RFC.5888"?> | ||||
| <?rfc include="reference.RFC.6086"?> | ||||
| <?rfc include="reference.RFC.6838"?> | ||||
| <?rfc include="reference.RFC.7405"?> | ||||
| <?rfc include="reference.RFC.8085"?> | ||||
| <?rfc include="reference.RFC.8174"?> | ||||
| <?rfc include="reference.I-D.ietf-ice-rfc5245bis"?> | ||||
| <?rfc include="reference.I-D.ietf-mmusic-ice-sip-sdp"?> | ||||
| <?rfc include="reference.I-D.ietf-ice-trickle"?> | ||||
| <?rfc include="reference.I-D.ietf-mmusic-sdp-bundle-negotiation"?> | ||||
| <?rfc include="reference.I-D.ietf-mmusic-sdp-mux-attributes"?> | ||||
| <?rfc include="reference.I-D.ietf-mmusic-mux-exclusive"?> | ||||
| </references> | ||||
| <references title='Informative References'> | ||||
| <?rfc include="reference.RFC.3311"?> | ||||
| <?rfc include="reference.RFC.3725"?> | ||||
| <?rfc include="reference.RFC.3840"?> | ||||
| <?rfc include="reference.RFC.5389"?> | ||||
| <?rfc include="reference.RFC.5627"?> | ||||
| <?rfc include="reference.RFC.5766"?> | ||||
| </references> | ||||
| </back> | </back> | |||
| </rfc> | </rfc> | |||
| End of changes. 342 change blocks. | ||||
| 1503 lines changed or deleted | 1293 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/ | ||||