| rfc8832xml2.original.xml | rfc8832.xml | |||
|---|---|---|---|---|
| <?xml version='1.0' encoding="US-ASCII"?> | <?xml version='1.0' encoding='utf-8'?> | |||
| <!DOCTYPE rfc SYSTEM "rfc2629-xhtml.ent"> | ||||
| <?rfc symrefs='yes'?> | ||||
| <!DOCTYPE rfc SYSTEM 'rfc2629.dtd'> | ||||
| <?rfc toc='yes' ?> | ||||
| <?rfc compact='yes' ?> | ||||
| <?rfc subcompact='no' ?> | ||||
| <?rfc sortrefs='no' ?> | ||||
| <?rfc strict='yes' ?> | ||||
| <rfc category='std' | ||||
| ipr='trust200902' | ||||
| number="XXXX" | ||||
| submissionType="IETF" | ||||
| consensus="yes" | ||||
| > | ||||
| <front> | ||||
| <title>WebRTC Data Channel Establishment Protocol</title> | ||||
| <author initials='R.' surname='Jesup' fullname='Randell Jesup'> | ||||
| <organization>Mozilla</organization> | ||||
| <address> | ||||
| <postal> | ||||
| <street></street> | ||||
| <code></code> | ||||
| <city></city> | ||||
| <country>United States of America</country> | ||||
| </postal> | ||||
| <email>randell-ietf@jesup.org</email> | ||||
| </address> | ||||
| </author> | ||||
| <author initials='S.' surname='Loreto' fullname='Salvatore Loreto'> | ||||
| <organization>Ericsson</organization> | ||||
| <address> | ||||
| <postal> | ||||
| <street>Hirsalantie 11</street> | ||||
| <code>02420</code> | ||||
| <city>Jorvas</city> | ||||
| <country>Finland</country> | ||||
| </postal> | ||||
| <email>salvatore.loreto@ericsson.com</email> | ||||
| </address> | ||||
| </author> | ||||
| <author initials='M.' surname='Tuexen' fullname='Michael Tuexen'> | ||||
| <organization abbrev='Muenster Univ. of Appl. Sciences'> | ||||
| Muenster University of Applied Sciences</organization> | ||||
| <address> | ||||
| <postal> | ||||
| <street>Stegerwaldstrasse 39</street> | ||||
| <code>48565</code> | ||||
| <city> Steinfurt</city> | ||||
| <country>Germany</country> | ||||
| </postal> | ||||
| <email>tuexen@fh-muenster.de</email> | ||||
| </address> | ||||
| </author> | ||||
| <date month="October" year="2018" /> | <rfc xmlns:xi="http://www.w3.org/2001/XInclude" category="std" | |||
| <area>RAI</area> | ipr="trust200902" number="8832" submissionType="IETF" consensus="true" | |||
| obsoletes="" updates="" xml:lang="en" symRefs="true" tocInclude="true" | ||||
| sortRefs="false" version="3" docName="draft-ietf-rtcweb-data-protocol-09"> | ||||
| <!-- [rfced] Please insert any keywords (beyond those that appear in | <!-- xml2rfc v2v3 conversion 2.30.0 --> | |||
| the title) for use on https://www.rfc-editor.org/search. | <front> | |||
| <title>WebRTC Data Channel Establishment Protocol</title> | ||||
| <seriesInfo name="RFC" value="8832"/> | ||||
| <author initials="R." surname="Jesup" fullname="Randell Jesup"> | ||||
| <organization>Mozilla</organization> | ||||
| <address> | ||||
| <postal> | ||||
| <street/> | ||||
| <code/> | ||||
| <city/> | ||||
| <country>United States of America</country> | ||||
| </postal> | ||||
| <email>randell-ietf@jesup.org</email> | ||||
| </address> | ||||
| </author> | ||||
| <author initials="S." surname="Loreto" fullname="Salvatore Loreto"> | ||||
| <organization>Ericsson</organization> | ||||
| <address> | ||||
| <postal> | ||||
| <street>Hirsalantie 11</street> | ||||
| <code>02420</code> | ||||
| <city>Jorvas</city> | ||||
| <country>Finland</country> | ||||
| </postal> | ||||
| <email>salvatore.loreto@ericsson.com</email> | ||||
| </address> | ||||
| </author> | ||||
| <author initials="M." surname="Tüxen" fullname="Michael Tüxen"> | ||||
| <organization abbrev="Münster Univ. of Appl. Sciences"> | ||||
| Münster University of Applied Sciences</organization> | ||||
| <address> | ||||
| <postal> | ||||
| <street>Stegerwaldstrasse 39</street> | ||||
| <code>48565</code> | ||||
| <city> Steinfurt</city> | ||||
| <country>Germany</country> | ||||
| </postal> | ||||
| <email>tuexen@fh-muenster.de</email> | ||||
| </address> | ||||
| </author> | ||||
| <keyword>example</keyword> | <date month="October" year="2020"/> | |||
| <area>ART</area> | ||||
| <abstract> | <abstract> | |||
| <t>The WebRTC framework specifies protocol support for direct interactive | <t>The WebRTC framework specifies protocol support for direct interactive | |||
| rich communication using audio, video, and data between two peers' web browsers. | rich communication using audio, video, and data between two peers' web browsers. | |||
| This document specifies a simple protocol for establishing symmetric | This document specifies a simple protocol for establishing symmetric | |||
| data channels between the peers. It uses a two-way handshake and allows | data channels between the peers. It uses a two-way handshake and allows | |||
| sending of user data without waiting for the handshake to complete.</t> | sending of user data without waiting for the handshake to complete.</t> | |||
| </abstract> | </abstract> | |||
| </front> | </front> | |||
| <middle> | ||||
| <middle> | <section numbered="true" toc="default"> | |||
| <section title='Introduction'> | <name>Introduction</name> | |||
| <t>The Data Channel Establishment Protocol (DCEP) is designed to provide, in the | <t>The Data Channel Establishment Protocol (DCEP) is designed to provide, | |||
| WebRTC data channel context <xref target='RFCYYYY'/>, | in the | |||
| WebRTC data channel context <xref target="RFC8831" format="default"/>, | ||||
| a simple in-band method for opening symmetric data channels. | a simple in-band method for opening symmetric data channels. | |||
| As discussed in <xref target='RFCYYYY'/>, the protocol uses | As discussed in <xref target="RFC8831" format="default"/>, the protocol uses | |||
| the Stream Control Transmission Protocol (SCTP) <xref target='RFC4960'/> | the Stream Control Transmission Protocol (SCTP) <xref target="RFC4960" format="d | |||
| encapsulated in the Datagram Transport Layer Security (DTLS) (described in | efault"/> | |||
| <xref target='RFC8261'/>). This allows the DCEP to benefit from the | encapsulated in Datagram Transport Layer Security (DTLS) (described in | |||
| <xref target="RFC8261" format="default"/>). This allows DCEP to benefit from the | ||||
| already standardized transport | already standardized transport | |||
| and security features of SCTP and DTLS. DTLS 1.0 is defined in <xref target='RFC | and security features of SCTP and DTLS. DTLS 1.0 is defined in <xref target="RFC | |||
| 4347'/>, and the | 4347" format="default"/>, and the | |||
| present latest version, DTLS 1.2, is defined in <xref target='RFC6347'/>. | present latest version, DTLS 1.2, is defined in <xref target="RFC6347" format="d | |||
| efault"/>. | ||||
| </t> | </t> | |||
| </section> | </section> | |||
| <section numbered="true" toc="default"> | ||||
| <section title='Conventions'> | <name>Conventions</name> | |||
| <t> | <t> | |||
| The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL | The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14>REQU | |||
| NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", | IRED</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>", "<bcp14> | |||
| described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> | RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>", | |||
| "<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are to | ||||
| be interpreted as | ||||
| described in BCP?14 <xref target="RFC2119" format="default"/> <xref target=" | ||||
| RFC8174" format="default"/> | ||||
| when, and only when, they appear in all capitals, as shown here. | when, and only when, they appear in all capitals, as shown here. | |||
| </t> | </t> | |||
| </section> | ||||
| </section> | <section numbered="true" toc="default"> | |||
| <name>Terminology</name> | ||||
| <t>This document uses the following terms: | ||||
| </t> | ||||
| <section title='Terminology'> | <dl newline="false" spacing="normal"> | |||
| <t>This document uses the following terms: | <dt>Association:</dt> | |||
| <list style='hanging'> | <dd>An SCTP association.</dd> | |||
| <t hangText='Association:'> | <dt>Stream:</dt> | |||
| An SCTP association.</t> | <dd> | |||
| <t hangText='Stream:'> | ||||
| A unidirectional stream of an SCTP association. It is uniquely identified | A unidirectional stream of an SCTP association. It is uniquely identified | |||
| by an SCTP stream identifier (0-65534). | by an SCTP stream identifier (0-65534). | |||
| Note: The SCTP stream identifier 65535 is reserved due to SCTP INIT and | Note: The SCTP stream identifier 65535 is reserved due to SCTP INIT and | |||
| INIT-ACK chunks only allowing a maximum of 65535 Streams to be | INIT-ACK chunks only allowing a maximum of 65535 streams to be | |||
| negotiated (0-65534).</t> | negotiated (0-65534).</dd> | |||
| <t hangText='stream identifier:'> | <dt>Stream Identifier:</dt> | |||
| The SCTP stream identifier uniquely identifying a Stream.</t> | <dd> | |||
| <t hangText='Data Channel:'> | The SCTP stream identifier uniquely identifying a stream.</dd> | |||
| Two Streams with the same stream identifier, one in each direction, | <dt>Data Channel:</dt> | |||
| which are managed together.</t> | <dd> | |||
| </list></t> | Two streams with the same stream identifier, one in each direction, | |||
| </section> | which are managed together.</dd> | |||
| </dl> | ||||
| <section title='Protocol Overview'> | </section> | |||
| <t>The Data Channel Establishment Protocol is a simple, low-overhead way | <section numbered="true" toc="default"> | |||
| <name>Protocol Overview</name> | ||||
| <t>The Data Channel Establishment Protocol is a simple, low-overhead way | ||||
| to establish bidirectional data channels over an SCTP association with a | to establish bidirectional data channels over an SCTP association with a | |||
| consistent set of properties.</t> | consistent set of properties.</t> | |||
| <t>The set of consistent properties includes: | <t>The set of consistent properties includes: | |||
| <list style='symbols'> | </t> | |||
| <t>reliable or unreliable message transmission. In case of unreliable | <ul spacing="normal"> | |||
| transmissions, the same level of unreliability is used.</t> | <li>reliable or unreliable message transmission. In case of unreliable | |||
| <t>in-order or out-of-order message delivery.</t> | transmissions, the same level of unreliability is used.</li> | |||
| <t>the priority of the data channel.</t> | <li>in-order or out-of-order message delivery.</li> | |||
| <t>an optional label for the data channel.</t> | <li>the priority of the data channel.</li> | |||
| <t>an optional protocol for the data channel.</t> | <li>an optional label for the data channel.</li> | |||
| <t>the Streams.</t> | <li>an optional protocol for the data channel.</li> | |||
| </list></t> | <li>the streams.</li> | |||
| <t>This protocol uses a two-way handshake to open a data channel. | </ul> | |||
| The handshake pairs one incoming and one outgoing Stream, both having the | <t>This protocol uses a two-way handshake to open a data channel. | |||
| The handshake pairs one incoming and one outgoing stream, both having the | ||||
| same stream identifier, into a single bidirectional data channel. | same stream identifier, into a single bidirectional data channel. | |||
| The peer that initiates opening a data channel selects a Stream | The peer that initiates opening a data channel selects a stream | |||
| Identifier for which the corresponding incoming and outgoing Streams | identifier for which the corresponding incoming and outgoing streams | |||
| are unused and sends a DATA_CHANNEL_OPEN message on the outgoing Stream. | are unused and sends a DATA_CHANNEL_OPEN message on the outgoing stream. | |||
| The peer responds with a DATA_CHANNEL_ACK message on its corresponding | The peer responds with a DATA_CHANNEL_ACK message on its corresponding | |||
| outgoing Stream. Then the data channel is open. | outgoing stream. Then the data channel is open. | |||
| DCEP messages are sent on the same Stream as | DCEP messages are sent on the same stream as | |||
| the user messages belonging to the data channel. | the user messages belonging to the data channel. | |||
| The demultiplexing is based on the SCTP payload protocol identifier (PPID), | The demultiplexing is based on the SCTP Payload Protocol Identifier (PPID), | |||
| since the Data Channel Establishment Protocol uses a specific PPID.</t> | since DCEP uses a specific PPID.</t> | |||
| <t>Note: The opening side MAY send user messages before the DATA_CHANNEL_ACK | <aside><t>Note: The opening side <bcp14>MAY</bcp14> send user messages bef | |||
| is received.</t> | ore the DATA_CHANNEL_ACK | |||
| <t>To avoid collisions where both sides try to open a data channel with | is received.</t></aside> | |||
| the same stream identifiers, each side MUST use Streams with either even or | <t>To avoid collisions where both sides try to open a data channel with | |||
| the same stream identifiers, each side <bcp14>MUST</bcp14> use streams with eith | ||||
| er even or | ||||
| odd stream identifiers when sending a DATA_CHANNEL_OPEN message. | odd stream identifiers when sending a DATA_CHANNEL_OPEN message. | |||
| When using SCTP over DTLS <xref target='RFC8261'/>, | When using SCTP over DTLS <xref target="RFC8261" format="default"/>, | |||
| the method used to determine which side uses odd or even is based on the | the method used to determine which side uses odd or even is based on the | |||
| underlying DTLS connection role: | underlying DTLS connection role: | |||
| the side acting as the DTLS client MUST use Streams with even | the side acting as the DTLS client <bcp14>MUST</bcp14> use streams with even | |||
| stream identifiers; the side acting as the DTLS server MUST use Streams | stream identifiers; the side acting as the DTLS server <bcp14>MUST</bcp14> use s | |||
| treams | ||||
| with odd stream identifiers.</t> | with odd stream identifiers.</t> | |||
| <t>Note: There is no attempt to ensure uniqueness for the label; | <aside><t>Note: There is no attempt to ensure uniqueness for the label; | |||
| if both sides open a data channel labeled "x" at the same time, there will be | if both sides open a data channel labeled "x" at the same time, there will be | |||
| two data channels labeled "x" -- one on an even Stream pair, one on an odd pair. | two data channels labeled "x" -- one on an even stream pair, one on an odd pair. | |||
| </t> | </t></aside> | |||
| <!--[rfced] FYI, we changed the following sentence for clarity; please check | ||||
| that it still conveys the intended meaning. | ||||
| Original: | ||||
| The protocol field is to ease cross-application interoperation | ||||
| ("federation") by identifying the user data being passed with an | ||||
| IANA-registered string ('WebSocket Subprotocol Name Registry' defined | ||||
| in [RFC6455]), and may be useful for homogeneous applications which | ||||
| may create more than one type of Data Channel. | ||||
| New: | <t>The purpose of the protocol field is to ease cross-application interope | |||
| The purpose of the protocol field is to ease cross-application | ration ("federation") | |||
| interoperation ("federation") by identifying the user data being | ||||
| passed by means of an IANA-registered string from the "WebSocket | ||||
| Subprotocol Name Registry" defined in [RFC6455]. The field may be | ||||
| useful for homogeneous applications that may create more than one | ||||
| type of data channel. | ||||
| <t>The purpose of the protocol field is to ease cross-application interoperation | ||||
| ("federation") | ||||
| by identifying the user data being passed by means of an IANA-registered string | by identifying the user data being passed by means of an IANA-registered string | |||
| from the "WebSocket Subprotocol Name Registry" defined in <xref target='RFC6455' />. | from the "WebSocket Subprotocol Name Registry" defined in <xref target="RFC6455" format="default"/>. | |||
| The field may be useful for homogeneous applications that may create more than o ne | The field may be useful for homogeneous applications that may create more than o ne | |||
| type of data channel. | type of data channel. | |||
| Please note that there is no attempt to ensure uniqueness for the protocol | Note that there is no attempt to ensure uniqueness for the protocol | |||
| field.</t> | field.</t> | |||
| </section> | </section> | |||
| <section anchor="msg_format" numbered="true" toc="default"> | ||||
| <section title='Message Formats' | <name>Message Formats</name> | |||
| anchor='msg_format'> | <t>Every DCEP message starts with a one-byte | |||
| <t>Every DCEP message starts with a one-byte | ||||
| field called "Message Type" that indicates the type of the message. | field called "Message Type" that indicates the type of the message. | |||
| The corresponding values are managed by IANA | The corresponding values are managed by IANA | |||
| (see <xref target='iana_msg_type'/>).</t> | (see <xref target="iana_msg_type" format="default"/>).</t> | |||
| <section anchor="open_msg_format" numbered="true" toc="default"> | ||||
| <section title='DATA_CHANNEL_OPEN Message' | <name>DATA_CHANNEL_OPEN Message</name> | |||
| anchor='open_msg_format'> | <t>This message is initially sent using the data channel on the stream u | |||
| <t>This message is initially sent using the data channel on the Stream used | sed | |||
| for user messages.</t> | for user messages.</t> | |||
| <figure> | <artwork align="center" name="" type="" alt=""><![CDATA[ | |||
| <artwork align='center'> | ||||
| 0 1 2 3 | 0 1 2 3 | |||
| 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 | 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | Message Type | Channel Type | Priority | | | Message Type | Channel Type | Priority | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | Reliability Parameter | | | Reliability Parameter | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | Label Length | Protocol Length | | | Label Length | Protocol Length | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| \ / | \ / | |||
| | Label | | | Label | | |||
| / \ | / \ | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| \ / | \ / | |||
| | Protocol | | | Protocol | | |||
| / \ | / \ | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| </artwork> | ]]></artwork> | |||
| </figure> | <dl newline="true" spacing="normal"> | |||
| <t><list style='hanging'> | <dt>Message Type: 1 byte (unsigned integer)</dt><dd> | |||
| <t hangText='Message Type: 1 byte (unsigned integer)'> | <!-- [MT] Changed the formatting to have the type on the same line as the name - | |||
| <vspace blankLines='0'/> | -> | |||
| <t> | ||||
| This field holds the IANA-defined message type for the DATA_CHANNEL_OPEN | This field holds the IANA-defined message type for the DATA_CHANNEL_OPEN | |||
| message. The value of this field is 0x03, as specified in | message. The value of this field is 0x03, as specified in | |||
| <xref target='iana_msg_type'/>.</t> | <xref target="iana_msg_type" format="default"/>.</t></dd> | |||
| <t hangText='Channel Type: 1 byte (unsigned integer)'> | <dt>Channel Type: 1 byte (unsigned integer)</dt><dd> | |||
| <vspace blankLines='0'/> | <!-- [MT] Changed the formatting to have the type on the same line as the name - | |||
| -> | ||||
| <t> | ||||
| This field specifies the type of data channel to be opened. The | This field specifies the type of data channel to be opened. The | |||
| values are managed by IANA (see <xref target='iana_channel_type'/>): | values are managed by IANA (see <xref target="iana_channel_type" format="default | |||
| <list style='hanging'> | "/>): | |||
| <t hangText='DATA_CHANNEL_RELIABLE (0x00):'> | </t> | |||
| The data channel provides a reliable in-order bidirectional communication.</t> | <dl newline="false" spacing="normal"> | |||
| <t hangText='DATA_CHANNEL_RELIABLE_UNORDERED (0x80):'> | <dt>DATA_CHANNEL_RELIABLE (0x00):</dt> | |||
| The data channel provides a reliable unordered bidirectional communication.</t> | <dd> | |||
| The data channel provides a reliable in-order bidirectional communication.</dd> | ||||
| <!--[rfced] The rest of this document refers to "partial reliable" | <dt>DATA_CHANNEL_RELIABLE_UNORDERED (0x80):</dt> | |||
| communication, but the following sentence uses "partially | <dd> | |||
| reliable". Please let us know which wording, if any, should be changed. | The data channel provides a reliable unordered bidirectional communication.</dd> | |||
| ORIGINAL: | <dt>DATA_CHANNEL_PARTIAL_RELIABLE_REXMIT (0x01):</dt> | |||
| The Data Channel provides a partially reliable in-order bidirectional | <dd> | |||
| communication. | ||||
| <t hangText='DATA_CHANNEL_PARTIAL_RELIABLE_REXMIT (0x01):'> | ||||
| The data channel provides a partially reliable in-order bidirectional | The data channel provides a partially reliable in-order bidirectional | |||
| communication. User messages will not be retransmitted more times | communication. User messages will not be retransmitted more times | |||
| than specified in the Reliability Parameter.</t> | than specified in the Reliability Parameter.</dd> | |||
| <t hangText='DATA_CHANNEL_PARTIAL_RELIABLE_REXMIT_UNORDERED (0x81):'> | <dt>DATA_CHANNEL_PARTIAL_RELIABLE_REXMIT_UNORDERED (0x81):</dt> | |||
| The data channel provides a partial reliable unordered bidirectional | <dd> | |||
| The data channel provides a partially reliable unordered bidirectional | ||||
| communication. User messages will not be retransmitted more times | communication. User messages will not be retransmitted more times | |||
| than specified in the Reliability Parameter.</t> | than specified in the Reliability Parameter.</dd> | |||
| <t hangText='DATA_CHANNEL_PARTIAL_RELIABLE_TIMED (0x02):'> | <dt>DATA_CHANNEL_PARTIAL_RELIABLE_TIMED (0x02):</dt> | |||
| The data channel provides a partial reliable in-order bidirectional | <dd> | |||
| The data channel provides a partially reliable in-order bidirectional | ||||
| communication. User messages might not be transmitted or | communication. User messages might not be transmitted or | |||
| retransmitted after a specified lifetime given in milliseconds in the | retransmitted after a specified lifetime given in milliseconds in the | |||
| Reliability Parameter. This lifetime starts when providing the user | Reliability Parameter. This lifetime starts when providing the user | |||
| message to the protocol stack.</t> | message to the protocol stack.</dd> | |||
| <t hangText='DATA_CHANNEL_PARTIAL_RELIABLE_TIMED_UNORDERED (0x82):'> | <dt>DATA_CHANNEL_PARTIAL_RELIABLE_TIMED_UNORDERED (0x82):</dt> | |||
| The data channel provides a partial reliable unordered bidirectional | <dd> | |||
| The data channel provides a partially reliable unordered bidirectional | ||||
| communication. User messages might not be transmitted or | communication. User messages might not be transmitted or | |||
| retransmitted after a specified lifetime given in milliseconds in the | retransmitted after a specified lifetime given in milliseconds in the | |||
| Reliability Parameter. This lifetime starts when providing the user | Reliability Parameter. This lifetime starts when providing the user | |||
| message to the protocol stack.</t> | message to the protocol stack.</dd> | |||
| </list></t> | </dl> | |||
| <t hangText='Priority: 2 bytes (unsigned integer)'> | </dd> | |||
| <vspace blankLines='0'/> | <dt>Priority: 2 bytes (unsigned integer)</dt><dd> | |||
| <!-- [MT] Changed the formatting to have the type on the same line as the name - | ||||
| -> | ||||
| <t> | ||||
| The priority of the data channel, as described in | The priority of the data channel, as described in | |||
| <xref target='RFCYYYY'/>.</t> | <xref target="RFC8831" format="default"/>.</t></dd> | |||
| <t hangText='Reliability Parameter: 4 bytes (unsigned integer)'> | <dt>Reliability Parameter: 4 bytes (unsigned integer)</dt><dd> | |||
| <vspace blankLines='0'/> | <!-- [MT] Changed the formatting to have the type on the same line as the name - | |||
| For reliable data channels, this field MUST be set to 0 on the sending side | -> | |||
| and MUST be ignored on the receiving side. | <t> | |||
| If a partial reliable data channel with a limited number of retransmissions is | For reliable data channels, this field <bcp14>MUST</bcp14> be set to 0 on the se | |||
| used, this field specifies the number of retransmissions. If a partial | nding side | |||
| and <bcp14>MUST</bcp14> be ignored on the receiving side. | ||||
| If a partially reliable data channel with a limited number of retransmissions is | ||||
| used, this field specifies the number of retransmissions. If a partially | ||||
| reliable data channel with a limited lifetime is used, this field specifies | reliable data channel with a limited lifetime is used, this field specifies | |||
| the maximum lifetime in milliseconds. The following table summarizes this:</t> | the maximum lifetime in milliseconds. The following table summarizes this:</t></ | |||
| </list></t> | dd> | |||
| <texttable> | </dl> | |||
| <ttcol align='left'>Channel Type</ttcol> | <table align="center"> | |||
| <ttcol align='center'>Reliability Parameter</ttcol> | <thead> | |||
| <c>DATA_CHANNEL_RELIABLE</c> <c>Ignored</c> | <tr> | |||
| <c>DATA_CHANNEL_RELIABLE_UNORDERED</c> <c>Ignored</c> | <th align="left">Channel Type</th> | |||
| <c>DATA_CHANNEL_PARTIAL_RELIABLE_REXMIT</c> <c>Number of RTX</c> | <th align="center">Reliability Parameter</th> | |||
| <c>DATA_CHANNEL_PARTIAL_RELIABLE_REXMIT_UNORDERED</c><c>Number of RTX</c> | </tr> | |||
| <c>DATA_CHANNEL_PARTIAL_RELIABLE_TIMED</c> <c>Lifetime in ms</c> | </thead> | |||
| <c>DATA_CHANNEL_PARTIAL_RELIABLE_TIMED_UNORDERED</c> <c>Lifetime in ms</c> | <tbody> | |||
| </texttable> | <tr> | |||
| <t><list style='hanging'> | <td align="left">DATA_CHANNEL_RELIABLE</td> | |||
| <t hangText='Label Length: 2 bytes (unsigned integer)'> | <td align="center">Ignored</td> | |||
| <vspace blankLines='0'/> | </tr> | |||
| The length of the label field in bytes.</t> | <tr> | |||
| <t hangText='Protocol Length: 2 bytes (unsigned integer)'> | <td align="left">DATA_CHANNEL_RELIABLE_UNORDERED</td> | |||
| <vspace blankLines='0'/> | <td align="center">Ignored</td> | |||
| The length of the protocol field in bytes.</t> | </tr> | |||
| <t hangText='Label: Variable Length (sequence of characters)'> | <tr> | |||
| <vspace blankLines='0'/> | <td align="left">DATA_CHANNEL_PARTIAL_RELIABLE_REXMIT</td> | |||
| <td align="center">Number of RTX</td> | ||||
| </tr> | ||||
| <tr> | ||||
| <td align="left">DATA_CHANNEL_PARTIAL_RELIABLE_REXMIT_UNORDERED</t | ||||
| d> | ||||
| <td align="center">Number of RTX</td> | ||||
| </tr> | ||||
| <tr> | ||||
| <td align="left">DATA_CHANNEL_PARTIAL_RELIABLE_TIMED</td> | ||||
| <td align="center">Lifetime in ms</td> | ||||
| </tr> | ||||
| <tr> | ||||
| <td align="left">DATA_CHANNEL_PARTIAL_RELIABLE_TIMED_UNORDERED</td | ||||
| > | ||||
| <td align="center">Lifetime in ms</td> | ||||
| </tr> | ||||
| </tbody> | ||||
| </table> | ||||
| <dl newline="true" spacing="normal"> | ||||
| <dt>Label Length: 2 bytes (unsigned integer)</dt><dd> | ||||
| <!-- [MT] Changed the formatting to have the type on the same line as the name - | ||||
| -> | ||||
| <t> | ||||
| The length of the label field in bytes.</t></dd> | ||||
| <dt>Protocol Length: 2 bytes (unsigned integer)</dt><dd> | ||||
| <!-- [MT] Changed the formatting to have the type on the same line as the name - | ||||
| -> | ||||
| <t> | ||||
| The length of the protocol field in bytes.</t></dd> | ||||
| <dt>Label: Variable Length (sequence of characters)</dt><dd> | ||||
| <!-- [MT] Changed the formatting to have the type on the same line as the name - | ||||
| -> | ||||
| <t> | ||||
| The name of the data channel as a UTF-8-encoded string, as specified in | The name of the data channel as a UTF-8-encoded string, as specified in | |||
| <xref target='RFC3629'/>. This may be an empty string.</t> | <xref target="RFC3629" format="default"/>. This may be an empty string.</t></dd> | |||
| <t hangText='Protocol: Variable Length (sequence of characters)'> | <dt>Protocol: Variable Length (sequence of characters)</dt><dd> | |||
| <vspace blankLines='0'/> | <!-- [MT] Changed the formatting to have the type on the same line as the name - | |||
| -> | ||||
| <t> | ||||
| If this is an empty string, the protocol is unspecified. | If this is an empty string, the protocol is unspecified. | |||
| If it is a non-empty string, it specifies a protocol registered in the | If it is a non-empty string, it specifies a protocol registered in the | |||
| "WebSocket Subprotocol Name Registry" created in | "WebSocket Subprotocol Name Registry" created in | |||
| <xref target='RFC6455'/>. This string is UTF-8 encoded, as specified in | <xref target="RFC6455" format="default"/>. This string is UTF-8 encoded, as spec | |||
| <xref target='RFC3629'/>.</t> | ified in | |||
| </list></t> | <xref target="RFC3629" format="default"/>.</t></dd> | |||
| </section> | </dl> | |||
| </section> | ||||
| <section title='DATA_CHANNEL_ACK Message'> | <section numbered="true" toc="default"> | |||
| <t>This message is sent in response to a | <name>DATA_CHANNEL_ACK Message</name> | |||
| DATA_CHANNEL_OPEN_RESPONSE message. It is sent on the Stream used for user | <t>This message is sent in response to a | |||
| DATA_CHANNEL_OPEN_RESPONSE message. It is sent on the stream used for user | ||||
| messages using the data channel. | messages using the data channel. | |||
| Reception of this message tells the opener that the data channel setup | Reception of this message tells the opener that the data channel setup | |||
| handshake is complete.</t> | handshake is complete.</t> | |||
| <figure> | <artwork align="center" name="" type="" alt=""><![CDATA[ | |||
| <artwork align='center'> | ||||
| 0 1 2 3 | 0 1 2 3 | |||
| 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 | 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | Message Type | | | Message Type | | |||
| +-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+ | |||
| </artwork> | ]]></artwork> | |||
| </figure> | <dl newline="true" spacing="normal"> | |||
| <t><list style='hanging'> | <dt>Message Type: 1 byte (unsigned integer)</dt><dd> | |||
| <t hangText='Message Type: 1 byte (unsigned integer)'> | <!-- [MT] Changed the formatting to have the type on the same line as the name - | |||
| <vspace blankLines='0'/> | -> | |||
| <t> | ||||
| This field holds the IANA-defined message type for the DATA_CHANNEL_ACK | This field holds the IANA-defined message type for the DATA_CHANNEL_ACK | |||
| message. The value of this field is 0x02, as specified in | message. The value of this field is 0x02, as specified in | |||
| <xref target='iana_msg_type'/>.</t> | <xref target="iana_msg_type" format="default"/>.</t></dd> | |||
| </list></t> | </dl> | |||
| </section> | </section> | |||
| </section> | </section> | |||
| <section numbered="true" toc="default"> | ||||
| <section title='Procedures'> | <name>Procedures</name> | |||
| <t>All DCEP messages MUST be sent using ordered delivery and reliable | <t>All DCEP messages <bcp14>MUST</bcp14> be sent using ordered delivery an | |||
| transmission. They MUST be sent on the same outgoing Stream as the user messages | d reliable | |||
| transmission. They <bcp14>MUST</bcp14> be sent on the same outgoing stream as th | ||||
| e user messages | ||||
| belonging to the corresponding data channel. | belonging to the corresponding data channel. | |||
| Multiplexing and demultiplexing is done by using the SCTP payload protocol | Multiplexing and demultiplexing is done by using the SCTP PPID. | |||
| identifier (PPID). | Therefore, a DCEP message <bcp14>MUST</bcp14> be sent with the | |||
| Therefore, a DCEP message MUST be sent with the | ||||
| assigned PPID for the Data Channel Establishment Protocol | assigned PPID for the Data Channel Establishment Protocol | |||
| (see <xref target='iana_ppid'/>). | (see <xref target="iana_ppid" format="default"/>). | |||
| Other messages MUST NOT be sent using this PPID.</t> | Other messages <bcp14>MUST NOT</bcp14> be sent using this PPID.</t> | |||
| <t>The peer that initiates opening a data channel selects a stream identifier | <t>The peer that initiates opening a data channel selects a stream identif | |||
| for which the corresponding incoming and outgoing Streams are unused. | ier | |||
| If the side is the DTLS client, it MUST choose an even stream identifier; | for which the corresponding incoming and outgoing streams are unused. | |||
| if the side is the DTLS server, it MUST choose an odd one. The initiating peer | If the side is acting as the DTLS client, it <bcp14>MUST</bcp14> choose an even | |||
| stream identifier; | ||||
| if the side is acting as the DTLS server, it <bcp14>MUST</bcp14> choose an odd o | ||||
| ne. The initiating peer | ||||
| fills in the parameters of the DATA_CHANNEL_OPEN message and sends it on | fills in the parameters of the DATA_CHANNEL_OPEN message and sends it on | |||
| the chosen Stream.</t> | the chosen stream.</t> | |||
| <t>If a DATA_CHANNEL_OPEN message is received on an unused Stream, | <t>If a DATA_CHANNEL_OPEN message is received on an unused stream, | |||
| the stream identifier corresponds to the role of the peer, and | the stream identifier corresponds to the role of the peer, and | |||
| all parameters in the DATA_CHANNEL_OPEN message are valid, | all parameters in the DATA_CHANNEL_OPEN message are valid, | |||
| then a corresponding DATA_CHANNEL_ACK message is sent on the Stream with the | then a corresponding DATA_CHANNEL_ACK message is sent on the stream with the | |||
| same stream identifier as the one the DATA_CHANNEL_OPEN message was | same stream identifier as the one the DATA_CHANNEL_OPEN message was | |||
| received on.</t> | received on.</t> | |||
| <t>If the DATA_CHANNEL_OPEN message doesn't satisfy the conditions above, the | <t>If the DATA_CHANNEL_OPEN message doesn't satisfy the conditions above, | |||
| receiver MUST close the corresponding data channel using the procedure | the | |||
| described in <xref target='RFCYYYY'/> and MUST NOT send a DATA_CHANNEL_ACK | receiver <bcp14>MUST</bcp14> close the corresponding data channel using the proc | |||
| edure | ||||
| described in <xref target="RFC8831" format="default"/> and <bcp14>MUST NOT</bcp1 | ||||
| 4> send a DATA_CHANNEL_ACK | ||||
| message in response to the received message. This might occur if, for example, | message in response to the received message. This might occur if, for example, | |||
| a DATA_CHANNEL_OPEN message is received on an already used Stream, there are | a DATA_CHANNEL_OPEN message is received on an already used stream, there are | |||
| problems with parameters within the DATA_CHANNEL_OPEN | problems with parameters within the DATA_CHANNEL_OPEN | |||
| message, the odd/even rule is violated, or the DATA_CHANNEL_OPEN message itself | message, the odd/even rule is violated, or the DATA_CHANNEL_OPEN message itself | |||
| is not well formed. Therefore, receiving an SCTP Stream-reset request for a Stre am on which | is not well formed. Therefore, receiving an SCTP stream-reset request for a stre am on which | |||
| no DATA_CHANNEL_ACK message has been received indicates to the sender of the | no DATA_CHANNEL_ACK message has been received indicates to the sender of the | |||
| corresponding DATA_CHANNEL_OPEN message the failure of the data channel | corresponding DATA_CHANNEL_OPEN message the failure of the data channel | |||
| setup procedure. After also successfully resetting the corresponding outgoing | setup procedure. After also successfully resetting the corresponding outgoing | |||
| Stream, which concludes the data channel closing initiated by the peer, | stream, which concludes the data channel closing initiated by the peer, | |||
| a new DATA_CHANNEL_OPEN message can be sent on the Stream.</t> | a new DATA_CHANNEL_OPEN message can be sent on the stream.</t> | |||
| <t>After the DATA_CHANNEL_OPEN message has been sent, the sender of that m | ||||
| <t>After the DATA_CHANNEL_OPEN message has been sent, the sender of that message | essage | |||
| MAY start sending messages containing user data without | <bcp14>MAY</bcp14> start sending messages containing user data without | |||
| waiting for the reception of the corresponding DATA_CHANNEL_ACK message. | waiting for the reception of the corresponding DATA_CHANNEL_ACK message. | |||
| However, before the DATA_CHANNEL_ACK message or any other message has been | However, before the DATA_CHANNEL_ACK message or any other message has been | |||
| received on a data channel, all other messages containing user data and | received on a data channel, all other messages containing user data and | |||
| belonging to this data channel MUST be sent ordered, no matter whether the | belonging to this data channel <bcp14>MUST</bcp14> be sent ordered, no matter | |||
| data channel is ordered or not. | whether the data channel is ordered or not. | |||
| After the DATA_CHANNEL_ACK or any other message has been received on the | After the DATA_CHANNEL_ACK or any other message has been received on the | |||
| data channel, messages containing user data MUST be sent ordered on ordered | data channel, messages containing user data <bcp14>MUST</bcp14> be sent ordered | |||
| data channels and MUST be sent unordered on unordered data channels. | on ordered | |||
| Therefore, receiving a message containing user data on an unused Stream | data channels and <bcp14>MUST</bcp14> be sent unordered on unordered data channe | |||
| indicates an error. In that case, the corresponding data channel MUST be closed, | ls. | |||
| as described | Therefore, receiving a message containing user data on an unused stream | |||
| in <xref target='RFCYYYY'/>.</t> | indicates an error. In that case, the corresponding data channel <bcp14>MUST</bc | |||
| </section> | p14> be closed, as described | |||
| in <xref target="RFC8831" format="default"/>.</t> | ||||
| <section title='Security Considerations' | </section> | |||
| anchor='sec-security'> | <section anchor="sec-security" numbered="true" toc="default"> | |||
| <t>The DATA_CHANNEL_OPEN message contains two variable-length fields: | <name>Security Considerations</name> | |||
| <t>The DATA_CHANNEL_OPEN message contains two variable-length fields: | ||||
| the protocol and the label. A receiver must be prepared to receive | the protocol and the label. A receiver must be prepared to receive | |||
| DATA_CHANNEL_OPEN messages where these field have the maximum length of | DATA_CHANNEL_OPEN messages where these fields have the maximum length of | |||
| 65535 bytes. Error cases such as using inconsistent lengths of fields, | 65535 bytes. Error cases such as using inconsistent lengths of fields, | |||
| using unknown parameter values, or violating the odd/even rule must also be hand led | using unknown parameter values, or violating the odd/even rule must also be hand led | |||
| by closing the corresponding data channel. An end point must also be prepared | by closing the corresponding data channel. An end point must also be prepared | |||
| for the peer to open the maximum number of data channels.</t> | for the peer to open the maximum number of data channels.</t> | |||
| <t>This protocol does not provide privacy, integrity, or authentication. | <t>This protocol does not provide privacy, integrity, or authentication. | |||
| It needs to be used as part of a protocol suite that contains all these things. | It needs to be used as part of a protocol suite that contains all these things. | |||
| Such a protocol suite is specified in | Such a protocol suite is specified in | |||
| <xref target='RFC8261'/>.</t> | <xref target="RFC8261" format="default"/>.</t> | |||
| <t>For general considerations, see <xref target='SECURITY'/> and | <t>For general considerations, see <xref target="RFC8826" format="default" | |||
| <xref target='SECURITY-ARCH'/>.</t> | /> and | |||
| </section> | <xref target="RFC8827" format="default"/>.</t> | |||
| </section> | ||||
| <section numbered="true" toc="default"> | ||||
| <name>IANA Considerations</name> | ||||
| <t>IANA has updated the reference of an already existing SCTP PPID | ||||
| assignment (<xref target="iana_ppid" format="default"/>) and created a new | ||||
| standalone registry with its own URL for DCEP (<xref | ||||
| target="iana_dcep_registry" format="default"/>) containing two new | ||||
| registration tables (Sections <xref format="counter" target="iana_msg_type"/> | ||||
| and <xref format="counter" target="iana_channel_type"/>).</t> | ||||
| <section title='IANA Considerations'> | <section anchor="iana_ppid" numbered="true" toc="default"> | |||
| <t>IANA is asked to update the reference of an already existing SCTP PPID | <name>SCTP Payload Protocol Identifier</name> | |||
| assignment (<xref target='iana_ppid'/>) and create a new standalone registry | <t>This document uses an SCTP Payload Protocol | |||
| with its own URL for the DCEP (<xref target='iana_dcep_registry'/>) containing | Identifier (PPID) previously registered as "WebRTC Control". | |||
| two new registration tables (Sections <xref format="counter" target='iana_msg_ty | ||||
| pe'/> and | ||||
| <xref format="counter" target='iana_channel_type'/>).</t> | ||||
| <section title='SCTP Payload Protocol Identifier' | <xref target="RFC4960" format="default"/> creates the | |||
| anchor='iana_ppid'> | "SCTP Payload Protocol Identifiers" registry, in which this identifier was assig | |||
| <t>This document uses one already registered SCTP Payload Protocol | ned. | |||
| Identifier (PPID) named "WebRTC Control". | IANA has updated the PPID name from "WebRTC Control" to "WebRTC DCEP" and has | |||
| <xref target='RFC4960'/> creates the registry | updated the reference to point to this document. The corresponding date has been | |||
| "SCTP Payload Protocol Identifiers", from which this identifier was assigned. | ||||
| IANA is requested to update name of the registry and update the reference of | ||||
| this assignment to point to this document. The corresponding date should be | ||||
| kept.</t> | kept.</t> | |||
| <t>Therefore, this assignment should be updated to read:</t> | <t>Therefore, this assignment now appears as follows:</t> | |||
| <texttable> | <table align="center"> | |||
| <ttcol align='left'>Value</ttcol> | <thead> | |||
| <ttcol align='left'>SCTP PPID</ttcol> | <tr> | |||
| <ttcol align='left'>Reference</ttcol> | <th align="left">Value</th> | |||
| <ttcol align='left'>Date</ttcol> | <th align="left">SCTP PPID</th> | |||
| <c>WebRTC DCEP</c> <c>50</c> <c>[RFCXXXX]</c> <c>2013-09-20</c> | <th align="left">Reference</th> | |||
| </texttable> | <th align="left">Date</th> | |||
| </section> | </tr> | |||
| </thead> | ||||
| <section title='New Standalone Registry for the DCEP' | <tbody> | |||
| anchor='iana_dcep_registry'> | <tr> | |||
| <t>IANA is requested to create a new standalone registry (a.k.a. webpage) with | <td align="left">WebRTC DCEP</td> | |||
| its own URL for the Data Channel Establishment Protocol (DCEP). | <td align="left">50</td> | |||
| The title should be "Data Channel Establishment Protocol (DCEP) Parameters". | <td align="left">RFC 8832</td> | |||
| It will contain the two tables provided in Sections <xref format="counter" targe | <td align="left">2013-09-20</td> | |||
| t='iana_msg_type'/> | </tr> | |||
| and <xref format="counter" target='iana_channel_type'/>.</t> | </tbody> | |||
| </table> | ||||
| </section> | ||||
| <section title='New Message Type Registry' | <section anchor="iana_dcep_registry" numbered="true" toc="default"> | |||
| anchor ='iana_msg_type'> | <name>New Standalone Registry for DCEP</name> | |||
| <t>IANA is requested to create a new registration table, "Message Type Registry" | <t>IANA has created the "Data Channel Establishment Protocol (DCEP) | |||
| , | Parameters" registry. It contains the two tables provided in Sections | |||
| for the Data Channel Establishment Protocol (DCEP) to manage the one-byte | <xref format="counter" target="iana_msg_type"/> | |||
| "Message Type" field in DCEP messages (see <xref target='msg_format'/>). | and <xref format="counter" target="iana_channel_type"/>.</t> | |||
| This registration table should be part of the registry described in | ||||
| <xref target='iana_dcep_registry'/>.</t> | ||||
| <!-- [rfced] The following RFC has been obsoleted. We have updated this | ||||
| reference as follows. Please let us know any objections. | ||||
| Original: | <section anchor="iana_msg_type" numbered="true" toc="default"> | |||
| The assignment of new message types is done through an RFC Required | <name>New Message Type Registry</name> | |||
| action, as defined in [RFC5226]. | ||||
| New: | <t>IANA has created the "Message Types" registry for DCEP to manage | |||
| The assignment of new message types is done through an RFC Required | the one-byte "Message Type" field in DCEP messages (see <xref | |||
| action, as defined in [RFC8126]. | target="msg_format" format="default"/>). This registration table | |||
| <t>The assignment of new message types is done through an RFC Required action, | is a subregistry of the registry described in <xref | |||
| as defined in <xref target='RFC8126'/>. | target="iana_dcep_registry" format="default"/>.</t> | |||
| Documentation of the new message type MUST contain the following information: | ||||
| <list style="numbers"> | ||||
| <t>A name for the new message type;</t> | ||||
| <t>A detailed procedural description of the use of messages with the new type | ||||
| within the operation of the Data Channel Establishment Protocol.</t> | ||||
| </list></t> | ||||
| <t>Initially, the following values need to be registered:</t> | ||||
| <texttable> | ||||
| <ttcol align='left'>Name</ttcol> | ||||
| <ttcol align='left'>Type</ttcol> | ||||
| <ttcol align='left'>Reference</ttcol> | ||||
| <c>Reserved</c> <c>0x00 </c> <c>[RFCXXXX]</c> | ||||
| <c>Reserved</c> <c>0x01 </c> <c>[RFCXXXX]</c> | ||||
| <c>DATA_CHANNEL_ACK</c> <c>0x02 </c> <c>[RFCXXXX]</c> | ||||
| <c>DATA_CHANNEL_OPEN</c> <c>0x03 </c> <c>[RFCXXXX]</c> | ||||
| <c>Unassigned</c> <c>0x04-0xfe</c> <c> </c> | ||||
| <c>Reserved</c> <c>0xff </c> <c>[RFCXXXX]</c> | ||||
| </texttable> | ||||
| <!--[rfced] In the following sentence, does "the document" refer to this | <t>The assignment of new message types is done through an RFC Required | |||
| document? | action, | |||
| as defined in <xref target="RFC8126" format="default"/>. | ||||
| Documentation of new message types <bcp14>MUST</bcp14> contain the following inf | ||||
| ormation: | ||||
| </t> | ||||
| <ol spacing="normal" type="1"> | ||||
| <li>A name for the new message type.</li> | ||||
| Original: | <li>A detailed procedural description of how each message type is us | |||
| Please note that the values 0x00 and 0x01 are reserved to avoid | ed with | |||
| interoperability problems, since they have been used in earlier | within DCEP.</li> | |||
| versions of the document. | </ol> | |||
| <t>The following are the inital registrations:</t> | ||||
| <table align="center"> | ||||
| <thead> | ||||
| <tr> | ||||
| <th align="left">Name</th> | ||||
| <th align="left">Type</th> | ||||
| <th align="left">Reference</th> | ||||
| </tr> | ||||
| </thead> | ||||
| <tbody> | ||||
| <tr> | ||||
| <td align="left">Reserved</td> | ||||
| <td align="left">0x00 </td> | ||||
| <td align="left">RFC 8832</td> | ||||
| </tr> | ||||
| <tr> | ||||
| <td align="left">Reserved</td> | ||||
| <td align="left">0x01 </td> | ||||
| <td align="left">RFC 8832</td> | ||||
| </tr> | ||||
| <tr> | ||||
| <td align="left">DATA_CHANNEL_ACK</td> | ||||
| <td align="left">0x02 </td> | ||||
| <td align="left">RFC 8832</td> | ||||
| </tr> | ||||
| <tr> | ||||
| <td align="left">DATA_CHANNEL_OPEN</td> | ||||
| <td align="left">0x03 </td> | ||||
| <td align="left">RFC 8832</td> | ||||
| </tr> | ||||
| <tr> | ||||
| <td align="left">Unassigned</td> | ||||
| <td align="left">0x04-0xfe</td> | ||||
| <td align="left"> </td> | ||||
| </tr> | ||||
| <tr> | ||||
| <td align="left">Reserved</td> | ||||
| <td align="left">0xff </td> | ||||
| <td align="left">RFC 8832</td> | ||||
| </tr> | ||||
| </tbody> | ||||
| </table> | ||||
| Perhaps: | <t>Note that values 0x00 and 0x01 are reserved to avoid | |||
| Please note that the values 0x00 and 0x01 are reserved to avoid | interoperability problems, since they have been used in draft versions | |||
| interoperability problems, since they have been used in draft | ||||
| versions of this document. | ||||
| <t>Please note that the values 0x00 and 0x01 are reserved to avoid | ||||
| interoperability problems, since they have been used in earlier versions | ||||
| of the document. | of the document. | |||
| The value 0xff has been reserved for future extensibility. | The value 0xff has been reserved for future extensibility. | |||
| The range of possible values is from 0x00 to 0xff.</t> | The range of possible values is from 0x00 to 0xff.</t> | |||
| </section> | </section> | |||
| <section title='New Channel Type Registry' | <section anchor="iana_channel_type" numbered="true" toc="default"> | |||
| anchor='iana_channel_type'> | <name>New Channel Type Registry</name> | |||
| <t>IANA is requested to create a new registration table, "Channel Type Registry" | <t>IANA has created the "Channel Types" registry | |||
| , | for DCEP to manage the one-byte | |||
| for the Data Channel Establishment Protocol to manage the one-byte | ||||
| "Channel Type" field in DATA_CHANNEL_OPEN messages | "Channel Type" field in DATA_CHANNEL_OPEN messages | |||
| (see <xref target='open_msg_format'/>). | (see <xref target="open_msg_format" format="default"/>). | |||
| This registration table should be part of the registry described in | This registration table is a subregistry within the registry described in | |||
| <xref target='iana_dcep_registry'/>.</t> | <xref target="iana_dcep_registry" format="default"/>.</t> | |||
| <t>The assignment of new message types is done through an RFC Required action, | <t>The assignment of new message types is done through an RFC Required | |||
| as defined in <xref target='RFC8126'/>. | action, | |||
| Documentation of the new Channel Type MUST contain the following information: | as defined in <xref target="RFC8126" format="default"/>. | |||
| <list style="numbers"> | Documentation of new Channel Types <bcp14>MUST</bcp14> contain the following inf | |||
| <t>A name for the new Channel Type;</t> | ormation: | |||
| <t>A detailed procedural description of the user message handling for | </t> | |||
| data channels using this new Channel Type.</t> | <ol spacing="normal" type="1"> | |||
| </list> | <li>A name for the new Channel Type.</li> | |||
| Please note that if new Channel Types support ordered and unordered message | <li>A detailed procedural description of the user message handling f | |||
| delivery, the high-order bit MUST be used to indicate whether the message | or | |||
| delivery is unordered or not.</t> | data channels using this new Channel Type.</li> | |||
| <t>Initially, the following values need to be registered:</t> | </ol> | |||
| <texttable> | <t> | |||
| <ttcol align='left'>Name</ttcol> | If new Channel Types support ordered and unordered message | |||
| <ttcol align='left'>Type</ttcol> | delivery, the high-order bit <bcp14>MUST</bcp14> be used to indicate whether | |||
| <ttcol align='left'>Reference</ttcol> | or not the message delivery is unordered.</t> | |||
| <c>DATA_CHANNEL_RELIABLE</c> <c>0x00</c> <c>[RFCXXXX]</ | <t>The following are the initial registrations:</t> | |||
| c> | <table align="center"> | |||
| <c>DATA_CHANNEL_RELIABLE_UNORDERED</c> <c>0x80</c> <c>[RFCXXXX]</ | <thead> | |||
| c> | <tr> | |||
| <c>DATA_CHANNEL_PARTIAL_RELIABLE_REXMIT</c> <c>0x01</c> <c>[RFCXXXX]</ | <th align="left">Name</th> | |||
| c> | <th align="left">Type</th> | |||
| <c>DATA_CHANNEL_PARTIAL_RELIABLE_REXMIT_UNORDERED</c> <c>0x81</c> <c>[RFCXXXX]</ | <th align="left">Reference</th> | |||
| c> | </tr> | |||
| <c>DATA_CHANNEL_PARTIAL_RELIABLE_TIMED</c> <c>0x02</c> <c>[RFCXXXX]</ | </thead> | |||
| c> | <tbody> | |||
| <c>DATA_CHANNEL_PARTIAL_RELIABLE_TIMED_UNORDERED</c> <c>0x82</c> <c>[RFCXXXX]</ | <tr> | |||
| c> | <td align="left">DATA_CHANNEL_RELIABLE</td> | |||
| <c>Reserved</c> <c>0x7f</c> <c>[RFCXXXX]</ | <td align="left">0x00</td> | |||
| c> | <td align="left">RFC 8832</td> | |||
| <c>Reserved</c> <c>0xff</c> <c>[RFCXXXX]</ | </tr> | |||
| c> | <tr> | |||
| <c>Unassigned</c> <c>rest</c> <c> </ | <td align="left">DATA_CHANNEL_RELIABLE_UNORDERED</td> | |||
| c> | <td align="left">0x80</td> | |||
| </texttable> | <td align="left">RFC 8832</td> | |||
| <t>Please note that the values 0x7f and 0xff have been reserved for future | </tr> | |||
| <tr> | ||||
| <td align="left">DATA_CHANNEL_PARTIAL_RELIABLE_REXMIT</td> | ||||
| <td align="left">0x01</td> | ||||
| <td align="left">RFC 8832</td> | ||||
| </tr> | ||||
| <tr> | ||||
| <td align="left">DATA_CHANNEL_PARTIAL_RELIABLE_REXMIT_UNORDERED< | ||||
| /td> | ||||
| <td align="left">0x81</td> | ||||
| <td align="left">RFC 8832</td> | ||||
| </tr> | ||||
| <tr> | ||||
| <td align="left">DATA_CHANNEL_PARTIAL_RELIABLE_TIMED</td> | ||||
| <td align="left">0x02</td> | ||||
| <td align="left">RFC 8832</td> | ||||
| </tr> | ||||
| <tr> | ||||
| <td align="left">DATA_CHANNEL_PARTIAL_RELIABLE_TIMED_UNORDERED</ | ||||
| td> | ||||
| <td align="left">0x82</td> | ||||
| <td align="left">RFC 8832</td> | ||||
| </tr> | ||||
| <tr> | ||||
| <td align="left">Reserved</td> | ||||
| <td align="left">0x7f</td> | ||||
| <td align="left">RFC 8832</td> | ||||
| </tr> | ||||
| <tr> | ||||
| <td align="left">Reserved</td> | ||||
| <td align="left">0xff</td> | ||||
| <td align="left">RFC 8832</td> | ||||
| </tr> | ||||
| <tr> | ||||
| <td align="left">Unassigned</td> | ||||
| <td align="left">rest</td> | ||||
| <td align="left"> </td> | ||||
| </tr> | ||||
| </tbody> | ||||
| </table> | ||||
| <t>Values 0x7f and 0xff have been reserved for future | ||||
| extensibility. | extensibility. | |||
| The range of possible values is from 0x00 to 0xff.</t> | The range of possible values is from 0x00 to 0xff.</t> | |||
| </section> | </section> | |||
| </section> | </section> | |||
| </section> | </section> | |||
| </middle> | ||||
| </middle> | <back> | |||
| <references> | ||||
| <name>References</name> | ||||
| <references> | ||||
| <name>Normative References</name> | ||||
| <back> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.2119. | |||
| <references title='Normative References'> | xml"/> | |||
| <?rfc include='reference.RFC.2119'?> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.8174. | |||
| <?rfc include='reference.RFC.8174'?> | xml"/> | |||
| <?rfc include='reference.RFC.3629'?> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.3629. | |||
| <?rfc include='reference.RFC.4347'?> | xml"/> | |||
| <?rfc include='reference.RFC.4960'?> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.4347. | |||
| <?rfc include='reference.RFC.8126'?> | xml"/> | |||
| <?rfc include='reference.RFC.6347'?> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.4960. | |||
| <?rfc include='reference.RFC.8261'?> | xml"/> | |||
| <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.8126. | ||||
| xml"/> | ||||
| <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.6347. | ||||
| xml"/> | ||||
| <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.8261. | ||||
| xml"/> | ||||
| <reference anchor="RFCYYYY" target="https://www.rfc-editor.org/info/rfcYYYY"> | <!-- draft-ietf-rtcweb-data-channel (RFC 8831) --> | |||
| <reference anchor="RFC8831" target="https://www.rfc-editor.org/info/rfc8831"> | ||||
| <front> | <front> | |||
| <title>WebRTC Data Channels</title> | <title>WebRTC Data Channels</title> | |||
| <author initials='R' surname='Jesup' fullname='Randell Jesup'> | <author initials="R." surname="Jesup" fullname="Randell Jesup"> | |||
| <organization/> | <organization/> | |||
| </author> | </author> | |||
| <author initials='S' surname='Loreto' fullname='Salvatore Loreto'> | <author initials="S." surname="Loreto" fullname="Salvatore Loreto"> | |||
| <organization/> | <organization/> | |||
| </author> | </author> | |||
| <author initials='M' surname='Tuexen' fullname='Michael Tuexen'> | <author initials="M." surname="Tüxen" fullname="Michael Tüxen"> | |||
| <organization/> | <organization/> | |||
| </author> | </author> | |||
| <date month='October' year='2018'/> | <date month='October' year='2020'/> | |||
| </front> | ||||
| <seriesInfo name="RFC" value="YYYY"/> | ||||
| <seriesInfo name="DOI" value="10.17487/RFCYYYY"/> | ||||
| </reference> | ||||
| </references> | ||||
| <references title='Informative References'> | ||||
| <?rfc include='reference.RFC.6455'?> | ||||
| <!-- draft-ietf-rtcweb-security-10 exists --> | ||||
| <reference anchor='SECURITY'> | ||||
| <front> | ||||
| <title>Security Considerations for WebRTC</title> | ||||
| <author initials='E' surname='Rescorla' fullname='Eric Rescorla'> | ||||
| <organization /> | ||||
| </author> | ||||
| <date month='January' day='22' year='2018' /> | ||||
| </front> | </front> | |||
| <seriesInfo name="RFC" value="8831"/> | ||||
| <seriesInfo name='Work in Progress,' value='draft-ietf-rtcweb-security-10' /> | <seriesInfo name="DOI" value="10.17487/RFC8831"/> | |||
| </reference> | </reference> | |||
| <!-- draft-ietf-rtcweb-security-arch-15 exists --> | </references> | |||
| <reference anchor='SECURITY-ARCH'> | ||||
| <front> | ||||
| <title>WebRTC Security Architecture</title> | ||||
| <author initials='E' surname='Rescorla' fullname='Eric Rescorla'> | ||||
| <organization /> | ||||
| </author> | ||||
| <date month='July' day='17' year='2018' /> | <references> | |||
| <name>Informative References</name> | ||||
| </front> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.6455. xml"/> | |||
| <seriesInfo name='Work in Progress,' value='draft-ietf-rtcweb-security-arch-15' | <!--draft-ietf-rtcweb-security: RFC 8826 --> | |||
| /> | <reference anchor="RFC8826" target="https://www.rfc-editor.org/info/rfc8826"> | |||
| <front> | ||||
| <title>Security Considerations for WebRTC</title> | ||||
| <author initials='E.' surname='Rescorla' fullname='Eric Rescorla'> | ||||
| <organization/> | ||||
| </author> | ||||
| <date month='October' year='2020'/> | ||||
| </front> | ||||
| <seriesInfo name="RFC" value="8826"/> | ||||
| <seriesInfo name="DOI" value="10.17487/RFC8826"/> | ||||
| </reference> | ||||
| </reference> | <!--draft-ietf-rtcweb-security-arch: 8827 --> | |||
| <reference anchor="RFC8827" target="https://www.rfc-editor.org/info/rfc8827"> | ||||
| <front> | ||||
| <title>WebRTC Security Architecture</title> | ||||
| <author initials='E.' surname='Rescorla' fullname='Eric Rescorla'> | ||||
| <organization/> | ||||
| </author> | ||||
| <date month='October' year='2020'/> | ||||
| </front> | ||||
| <seriesInfo name="RFC" value="8827"/> | ||||
| <seriesInfo name="DOI" value="10.17487/RFC8827"/> | ||||
| </reference> | ||||
| </references> | </references> | |||
| <section title='Acknowledgments' numbered="no"> | </references> | |||
| <t>The authors wish to thank | <section numbered="false" toc="default"> | |||
| Harald Alvestrand, | <name>Acknowledgements</name> | |||
| Richard Barnes, | <t>The authors wish to thank | |||
| Adam Bergkvist, | <contact fullname="Harald Alvestrand"/>, | |||
| Spencer Dawkins, | <contact fullname="Richard Barnes"/>, | |||
| Barry Dingle, | <contact fullname="Adam Bergkvist"/>, | |||
| Stefan Haekansson, | <contact fullname="Spencer Dawkins"/>, | |||
| Cullen Jennings, | <contact fullname="Barry Dingle"/>, | |||
| Paul Kyzivat, | <contact fullname="Stefan Haekansson"/>, | |||
| Doug Leonard, | <contact fullname="Cullen Jennings"/>, | |||
| Alexey Melnikov, | <contact fullname="Paul Kyzivat"/>, | |||
| Pete Resnick, | <contact fullname="Doug Leonard"/>, | |||
| Irene Ruengeler, | <contact fullname="Alexey Melnikov"/>, | |||
| Randall Stewart, | <contact fullname="Pete Resnick"/>, | |||
| Peter Thatcher, | <contact fullname="Irene Rüngeler"/>, | |||
| Martin Thompson, | <contact fullname="Randall Stewart"/>, | |||
| Justin Uberti, | <contact fullname="Peter Thatcher"/>, | |||
| <contact fullname="Martin Thompson"/>, | ||||
| <contact fullname="Justin Uberti"/>, | ||||
| and many others for their invaluable comments.</t> | and many others for their invaluable comments.</t> | |||
| </section> | </section> | |||
| </back> | </back> | |||
| </rfc> | </rfc> | |||
| End of changes. 82 change blocks. | ||||
| 502 lines changed or deleted | 611 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/ | ||||