<?xml version='1.0'encoding="US-ASCII"?> <?rfc symrefs='yes'?>encoding='utf-8'?> <!DOCTYPE rfc SYSTEM'rfc2629.dtd'> <?rfc toc='yes' ?> <?rfc compact='yes' ?> <?rfc subcompact='no' ?> <?rfc sortrefs='no' ?> <?rfc strict='yes' ?>"rfc2629-xhtml.ent"> <rfccategory='std' ipr='trust200902' number="XXXX"xmlns:xi="http://www.w3.org/2001/XInclude" category="std" ipr="trust200902" number="8832" submissionType="IETF"consensus="yes" >consensus="true" obsoletes="" updates="" xml:lang="en" symRefs="true" tocInclude="true" sortRefs="false" version="3" docName="draft-ietf-rtcweb-data-protocol-09"> <!-- xml2rfc v2v3 conversion 2.30.0 --> <front> <title>WebRTC Data Channel Establishment Protocol</title> <seriesInfo name="RFC" value="8832"/> <authorinitials='R.' surname='Jesup' fullname='Randell Jesup'>initials="R." surname="Jesup" fullname="Randell Jesup"> <organization>Mozilla</organization> <address> <postal><street></street> <code></code> <city></city><street/> <code/> <city/> <country>United States of America</country> </postal> <email>randell-ietf@jesup.org</email> </address> </author> <authorinitials='S.' surname='Loreto' fullname='Salvatore Loreto'>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> <authorinitials='M.' surname='Tuexen' fullname='Michael Tuexen'>initials="M." surname="Tüxen" fullname="Michael Tüxen"> <organizationabbrev='Muensterabbrev="Münster Univ. of Appl.Sciences'> MuensterSciences"> 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> <date month="October"year="2018" /> <area>RAI</area> <!-- [rfced] Please insert any keywords (beyond those that appear in the title) for use on https://www.rfc-editor.org/search. --> <keyword>example</keyword>year="2020"/> <area>ART</area> <abstract> <t>The WebRTC framework specifies protocol support for direct interactive rich communication using audio, video, and data between two peers' web browsers. This document specifies a simple protocol for establishing symmetric 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> </abstract> </front> <middle> <sectiontitle='Introduction'>numbered="true" toc="default"> <name>Introduction</name> <t>The Data Channel Establishment Protocol (DCEP) is designed to provide, in the WebRTC data channel context <xreftarget='RFCYYYY'/>,target="RFC8831" format="default"/>, a simple in-band method for opening symmetric data channels. As discussed in <xreftarget='RFCYYYY'/>,target="RFC8831" format="default"/>, the protocol uses the Stream Control Transmission Protocol (SCTP) <xreftarget='RFC4960'/>target="RFC4960" format="default"/> encapsulated intheDatagram Transport Layer Security (DTLS) (described in <xreftarget='RFC8261'/>).target="RFC8261" format="default"/>). This allowstheDCEP to benefit from the already standardized transport and security features of SCTP and DTLS. DTLS 1.0 is defined in <xreftarget='RFC4347'/>,target="RFC4347" format="default"/>, and the present latest version, DTLS 1.2, is defined in <xreftarget='RFC6347'/>.target="RFC6347" format="default"/>. </t> </section> <sectiontitle='Conventions'>numbered="true" toc="default"> <name>Conventions</name> <t> The key words"MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY","<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>", "<bcp14>MAY</bcp14>", and"OPTIONAL""<bcp14>OPTIONAL</bcp14>" in this document are to be interpreted as described inBCP 14BCP?14 <xreftarget="RFC2119"/>target="RFC2119" format="default"/> <xreftarget="RFC8174"/>target="RFC8174" format="default"/> when, and only when, they appear in all capitals, as shown here. </t> </section> <sectiontitle='Terminology'>numbered="true" toc="default"> <name>Terminology</name> <t>This document uses the following terms:<list style='hanging'> <t hangText='Association:'> An</t> <dl newline="false" spacing="normal"> <dt>Association:</dt> <dd>An SCTPassociation.</t> <t hangText='Stream:'>association.</dd> <dt>Stream:</dt> <dd> A unidirectional stream of an SCTP association. It is uniquely identified by an SCTP stream identifier (0-65534). Note: The SCTP stream identifier 65535 is reserved due to SCTP INIT and INIT-ACK chunks only allowing a maximum of 65535Streamsstreams to be negotiated(0-65534).</t> <t hangText='stream identifier:'>(0-65534).</dd> <dt>Stream Identifier:</dt> <dd> The SCTP stream identifier uniquely identifying aStream.</t> <t hangText='Data Channel:'>stream.</dd> <dt>Data Channel:</dt> <dd> TwoStreamsstreams with the same stream identifier, one in each direction, which are managedtogether.</t> </list></t>together.</dd> </dl> </section> <sectiontitle='Protocol Overview'>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 consistent set of properties.</t> <t>The set of consistent properties includes:<list style='symbols'> <t>reliable</t> <ul spacing="normal"> <li>reliable or unreliable message transmission. In case of unreliable transmissions, the same level of unreliability isused.</t> <t>in-orderused.</li> <li>in-order or out-of-order messagedelivery.</t> <t>thedelivery.</li> <li>the priority of the datachannel.</t> <t>anchannel.</li> <li>an optional label for the datachannel.</t> <t>anchannel.</li> <li>an optional protocol for the datachannel.</t> <t>the Streams.</t> </list></t>channel.</li> <li>the streams.</li> </ul> <t>This protocol uses a two-way handshake to open a data channel. The handshake pairs one incoming and one outgoingStream,stream, both having the same stream identifier, into a single bidirectional data channel. The peer that initiates opening a data channel selects aStream Identifierstream identifier for which the corresponding incoming and outgoingStreamsstreams are unused and sends a DATA_CHANNEL_OPEN message on the outgoingStream.stream. The peer responds with a DATA_CHANNEL_ACK message on its corresponding outgoingStream.stream. Then the data channel is open. DCEP messages are sent on the sameStreamstream as the user messages belonging to the data channel. The demultiplexing is based on the SCTPpayload protocol identifierPayload Protocol Identifier (PPID), sincethe Data Channel Establishment ProtocolDCEP uses a specific PPID.</t><t>Note:<aside><t>Note: The opening sideMAY<bcp14>MAY</bcp14> send user messages before the DATA_CHANNEL_ACK isreceived.</t>received.</t></aside> <t>To avoid collisions where both sides try to open a data channel with the same stream identifiers, each sideMUST<bcp14>MUST</bcp14> useStreamsstreams with either even or odd stream identifiers when sending a DATA_CHANNEL_OPEN message. When using SCTP over DTLS <xreftarget='RFC8261'/>,target="RFC8261" format="default"/>, the method used to determine which side uses odd or even is based on the underlying DTLS connection role: the side acting as the DTLS clientMUST<bcp14>MUST</bcp14> useStreamsstreams with even stream identifiers; the side acting as the DTLS serverMUST<bcp14>MUST</bcp14> useStreamsstreams with odd stream identifiers.</t><t>Note:<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 two data channels labeled "x" -- one on an evenStreamstream pair, one on an oddpair.</t> <!--[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: 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 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. -->pair.</t></aside> <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 from the "WebSocket Subprotocol Name Registry" defined in <xreftarget='RFC6455'/>.target="RFC6455" format="default"/>. The field may be useful for homogeneous applications that may create more than one type of data channel.Please noteNote that there is no attempt to ensure uniqueness for the protocol field.</t> </section> <sectiontitle='Message Formats' anchor='msg_format'>anchor="msg_format" numbered="true" toc="default"> <name>Message Formats</name> <t>Every DCEP message starts with a one-byte field called "Message Type" that indicates the type of the message. The corresponding values are managed by IANA (see <xreftarget='iana_msg_type'/>).</t>target="iana_msg_type" format="default"/>).</t> <sectiontitle='DATA_CHANNEL_OPEN Message' anchor='open_msg_format'>anchor="open_msg_format" numbered="true" toc="default"> <name>DATA_CHANNEL_OPEN Message</name> <t>This message is initially sent using the data channel on theStreamstream used for user messages.</t><figure><artworkalign='center'>align="center" name="" type="" alt=""><![CDATA[ 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 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Message Type | Channel Type | Priority | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Reliability Parameter | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Label Length | Protocol Length | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ \ / | Label | / \ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ \ / | Protocol | / \ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+</artwork> </figure> <t><list style='hanging'> <t hangText='Message]]></artwork> <dl newline="true" spacing="normal"> <dt>Message Type: 1 byte (unsignedinteger)'> <vspace blankLines='0'/>integer)</dt><dd> <!-- [MT] Changed the formatting to have the type on the same line as the name --> <t> This field holds the IANA-defined message type for the DATA_CHANNEL_OPEN message. The value of this field is 0x03, as specified in <xreftarget='iana_msg_type'/>.</t> <t hangText='Channeltarget="iana_msg_type" format="default"/>.</t></dd> <dt>Channel Type: 1 byte (unsignedinteger)'> <vspace blankLines='0'/>integer)</dt><dd> <!-- [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 values are managed by IANA (see <xreftarget='iana_channel_type'/>): <list style='hanging'> <t hangText='DATA_CHANNEL_RELIABLE (0x00):'>target="iana_channel_type" format="default"/>): </t> <dl newline="false" spacing="normal"> <dt>DATA_CHANNEL_RELIABLE (0x00):</dt> <dd> The data channel provides a reliable in-order bidirectionalcommunication.</t> <t hangText='DATA_CHANNEL_RELIABLE_UNORDERED (0x80):'>communication.</dd> <dt>DATA_CHANNEL_RELIABLE_UNORDERED (0x80):</dt> <dd> The data channel provides a reliable unordered bidirectionalcommunication.</t> <!--[rfced] The rest of this document refers to "partial reliable" communication, but the following sentence uses "partially reliable". Please let us know which wording, if any, should be changed. ORIGINAL: The Data Channel provides a partially reliable in-order bidirectional communication. --> <t hangText='DATA_CHANNEL_PARTIAL_RELIABLE_REXMIT (0x01):'>communication.</dd> <dt>DATA_CHANNEL_PARTIAL_RELIABLE_REXMIT (0x01):</dt> <dd> The data channel provides a partially reliable in-order bidirectional communication. User messages will not be retransmitted more times than specified in the ReliabilityParameter.</t> <t hangText='DATA_CHANNEL_PARTIAL_RELIABLE_REXMIT_UNORDERED (0x81):'>Parameter.</dd> <dt>DATA_CHANNEL_PARTIAL_RELIABLE_REXMIT_UNORDERED (0x81):</dt> <dd> The data channel provides apartialpartially reliable unordered bidirectional communication. User messages will not be retransmitted more times than specified in the ReliabilityParameter.</t> <t hangText='DATA_CHANNEL_PARTIAL_RELIABLE_TIMED (0x02):'>Parameter.</dd> <dt>DATA_CHANNEL_PARTIAL_RELIABLE_TIMED (0x02):</dt> <dd> The data channel provides apartialpartially reliable in-order bidirectional communication. User messages might not be transmitted or retransmitted after a specified lifetime given in milliseconds in the Reliability Parameter. This lifetime starts when providing the user message to the protocolstack.</t> <t hangText='DATA_CHANNEL_PARTIAL_RELIABLE_TIMED_UNORDERED (0x82):'>stack.</dd> <dt>DATA_CHANNEL_PARTIAL_RELIABLE_TIMED_UNORDERED (0x82):</dt> <dd> The data channel provides apartialpartially reliable unordered bidirectional communication. User messages might not be transmitted or retransmitted after a specified lifetime given in milliseconds in the Reliability Parameter. This lifetime starts when providing the user message to the protocolstack.</t> </list></t> <t hangText='Priority:stack.</dd> </dl> </dd> <dt>Priority: 2 bytes (unsignedinteger)'> <vspace blankLines='0'/>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 <xreftarget='RFCYYYY'/>.</t> <t hangText='Reliabilitytarget="RFC8831" format="default"/>.</t></dd> <dt>Reliability Parameter: 4 bytes (unsignedinteger)'> <vspace blankLines='0'/>integer)</dt><dd> <!-- [MT] Changed the formatting to have the type on the same line as the name --> <t> For reliable data channels, this fieldMUST<bcp14>MUST</bcp14> be set to 0 on the sending side andMUST<bcp14>MUST</bcp14> be ignored on the receiving side. If apartialpartially reliable data channel with a limited number of retransmissions is used, this field specifies the number of retransmissions. If apartialpartially reliable data channel with a limited lifetime is used, this field specifies the maximum lifetime in milliseconds. The following table summarizesthis:</t> </list></t> <texttable> <ttcol align='left'>Channel Type</ttcol> <ttcol align='center'>Reliability Parameter</ttcol> <c>DATA_CHANNEL_RELIABLE</c> <c>Ignored</c> <c>DATA_CHANNEL_RELIABLE_UNORDERED</c> <c>Ignored</c> <c>DATA_CHANNEL_PARTIAL_RELIABLE_REXMIT</c> <c>Number of RTX</c> <c>DATA_CHANNEL_PARTIAL_RELIABLE_REXMIT_UNORDERED</c><c>Number of RTX</c> <c>DATA_CHANNEL_PARTIAL_RELIABLE_TIMED</c> <c>Lifetime in ms</c> <c>DATA_CHANNEL_PARTIAL_RELIABLE_TIMED_UNORDERED</c> <c>Lifetime in ms</c> </texttable> <t><list style='hanging'> <t hangText='Labelthis:</t></dd> </dl> <table align="center"> <thead> <tr> <th align="left">Channel Type</th> <th align="center">Reliability Parameter</th> </tr> </thead> <tbody> <tr> <td align="left">DATA_CHANNEL_RELIABLE</td> <td align="center">Ignored</td> </tr> <tr> <td align="left">DATA_CHANNEL_RELIABLE_UNORDERED</td> <td align="center">Ignored</td> </tr> <tr> <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</td> <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 (unsignedinteger)'> <vspace blankLines='0'/>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 inbytes.</t> <t hangText='Protocolbytes.</t></dd> <dt>Protocol Length: 2 bytes (unsignedinteger)'> <vspace blankLines='0'/>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 inbytes.</t> <t hangText='Label:bytes.</t></dd> <dt>Label: Variable Length (sequence ofcharacters)'> <vspace blankLines='0'/> The name ofcharacters)</dt><dd> <!-- [MT] Changed thedata channelformatting 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 <xreftarget='RFC3629'/>.target="RFC3629" format="default"/>. This may be an emptystring.</t> <t hangText='Protocol:string.</t></dd> <dt>Protocol: Variable Length (sequence ofcharacters)'> <vspace blankLines='0'/>characters)</dt><dd> <!-- [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 it is a non-empty string, it specifies a protocol registered in the "WebSocket Subprotocol Name Registry" created in <xreftarget='RFC6455'/>.target="RFC6455" format="default"/>. This string is UTF-8 encoded, as specified in <xreftarget='RFC3629'/>.</t> </list></t>target="RFC3629" format="default"/>.</t></dd> </dl> </section> <sectiontitle='DATA_CHANNEL_ACK Message'>numbered="true" toc="default"> <name>DATA_CHANNEL_ACK Message</name> <t>This message is sent in response to a DATA_CHANNEL_OPEN_RESPONSE message. It is sent on theStreamstream used for user messages using the data channel. Reception of this message tells the opener that the data channel setup handshake is complete.</t><figure><artworkalign='center'>align="center" name="" type="" alt=""><![CDATA[ 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 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Message Type | +-+-+-+-+-+-+-+-+</artwork> </figure> <t><list style='hanging'> <t hangText='Message]]></artwork> <dl newline="true" spacing="normal"> <dt>Message Type: 1 byte (unsignedinteger)'> <vspace blankLines='0'/>integer)</dt><dd> <!-- [MT] Changed the formatting to have the type on the same line as the name --> <t> This field holds the IANA-defined message type for the DATA_CHANNEL_ACK message. The value of this field is 0x02, as specified in <xreftarget='iana_msg_type'/>.</t> </list></t>target="iana_msg_type" format="default"/>.</t></dd> </dl> </section> </section> <sectiontitle='Procedures'>numbered="true" toc="default"> <name>Procedures</name> <t>All DCEP messagesMUST<bcp14>MUST</bcp14> be sent using ordered delivery and reliable transmission. TheyMUST<bcp14>MUST</bcp14> be sent on the same outgoingStreamstream as the user messages belonging to the corresponding data channel. Multiplexing and demultiplexing is done by using the SCTPpayload protocol identifier (PPID).PPID. Therefore, a DCEP messageMUST<bcp14>MUST</bcp14> be sent with the assigned PPID for the Data Channel Establishment Protocol (see <xreftarget='iana_ppid'/>).target="iana_ppid" format="default"/>). Other messagesMUST NOT<bcp14>MUST NOT</bcp14> be sent using this PPID.</t> <t>The peer that initiates opening a data channel selects a stream identifier for which the corresponding incoming and outgoingStreamsstreams are unused. If the side is acting as the DTLS client, itMUST<bcp14>MUST</bcp14> choose an even stream identifier; if the side is acting as the DTLS server, itMUST<bcp14>MUST</bcp14> choose an odd one. The initiating peer fills in the parameters of the DATA_CHANNEL_OPEN message and sends it on the chosenStream.</t>stream.</t> <t>If a DATA_CHANNEL_OPEN message is received on an unusedStream,stream, the stream identifier corresponds to the role of the peer, and all parameters in the DATA_CHANNEL_OPEN message are valid, then a corresponding DATA_CHANNEL_ACK message is sent on theStreamstream with the same stream identifier as the one the DATA_CHANNEL_OPEN message was received on.</t> <t>If the DATA_CHANNEL_OPEN message doesn't satisfy the conditions above, the receiverMUST<bcp14>MUST</bcp14> close the corresponding data channel using the procedure described in <xreftarget='RFCYYYY'/>target="RFC8831" format="default"/> andMUST NOT<bcp14>MUST NOT</bcp14> send a DATA_CHANNEL_ACK message in response to the received message. This might occur if, for example, a DATA_CHANNEL_OPEN message is received on an already usedStream,stream, there are problems with parameters within the DATA_CHANNEL_OPEN message, the odd/even rule is violated, or the DATA_CHANNEL_OPEN message itself is not well formed. Therefore, receiving an SCTPStream-resetstream-reset request for aStreamstream on which 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 setup procedure. After also successfully resetting the corresponding outgoingStream,stream, which concludes the data channel closing initiated by the peer, a new DATA_CHANNEL_OPEN message can be sent on theStream.</t>stream.</t> <t>After the DATA_CHANNEL_OPEN message has been sent, the sender of that messageMAY<bcp14>MAY</bcp14> start sending messages containing user data without waiting for the reception of the corresponding DATA_CHANNEL_ACK message. 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 belonging to this data channelMUST<bcp14>MUST</bcp14> be sent ordered, no matter whether the data channel is ordered or not. After the DATA_CHANNEL_ACK or any other message has been received on the data channel, messages containing user dataMUST<bcp14>MUST</bcp14> be sent ordered on ordered data channels andMUST<bcp14>MUST</bcp14> be sent unordered on unordered data channels. Therefore, receiving a message containing user data on an unusedStreamstream indicates an error. In that case, the corresponding data channelMUST<bcp14>MUST</bcp14> be closed, as described in <xreftarget='RFCYYYY'/>.</t>target="RFC8831" format="default"/>.</t> </section> <sectiontitle='Security Considerations' anchor='sec-security'>anchor="sec-security" numbered="true" toc="default"> <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 DATA_CHANNEL_OPEN messages where thesefieldfields have the maximum length of 65535 bytes. Error cases such as using inconsistent lengths of fields, using unknown parameter values, or violating the odd/even rule must also be handled 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> <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. Such a protocol suite is specified in <xreftarget='RFC8261'/>.</t>target="RFC8261" format="default"/>.</t> <t>For general considerations, see <xreftarget='SECURITY'/>target="RFC8826" format="default"/> and <xreftarget='SECURITY-ARCH'/>.</t>target="RFC8827" format="default"/>.</t> </section> <sectiontitle='IANA Considerations'>numbered="true" toc="default"> <name>IANA Considerations</name> <t>IANAis asked to updatehas updated the reference of an already existing SCTP PPID assignment (<xreftarget='iana_ppid'/>)target="iana_ppid" format="default"/>) andcreatecreated a new standalone registry with its own URL fortheDCEP (<xreftarget='iana_dcep_registry'/>)target="iana_dcep_registry" format="default"/>) containing two new registration tables (Sections <xref format="counter"target='iana_msg_type'/>target="iana_msg_type"/> and <xref format="counter"target='iana_channel_type'/>).</t>target="iana_channel_type"/>).</t> <sectiontitle='SCTPanchor="iana_ppid" numbered="true" toc="default"> <name>SCTP Payload ProtocolIdentifier' anchor='iana_ppid'>Identifier</name> <t>This document usesone already registeredan SCTP Payload Protocol Identifier (PPID)namedpreviously registered as "WebRTC Control". <xreftarget='RFC4960'/>target="RFC4960" format="default"/> creates theregistry"SCTP Payload ProtocolIdentifiers", fromIdentifiers" registry, in which this identifier was assigned. IANAis requested to update name ofhas updated theregistryPPID name from "WebRTC Control" to "WebRTC DCEP" andupdatehas updated the referenceof this assignmentto point to this document. The corresponding dateshould behas been kept.</t> <t>Therefore, this assignmentshould be updated to read:</t> <texttable> <ttcol align='left'>Value</ttcol> <ttcol align='left'>SCTP PPID</ttcol> <ttcol align='left'>Reference</ttcol> <ttcol align='left'>Date</ttcol> <c>WebRTC DCEP</c> <c>50</c> <c>[RFCXXXX]</c> <c>2013-09-20</c> </texttable>now appears as follows:</t> <table align="center"> <thead> <tr> <th align="left">Value</th> <th align="left">SCTP PPID</th> <th align="left">Reference</th> <th align="left">Date</th> </tr> </thead> <tbody> <tr> <td align="left">WebRTC DCEP</td> <td align="left">50</td> <td align="left">RFC 8832</td> <td align="left">2013-09-20</td> </tr> </tbody> </table> </section> <sectiontitle='Newanchor="iana_dcep_registry" numbered="true" toc="default"> <name>New Standalone Registry forthe DCEP' anchor='iana_dcep_registry'>DCEP</name> <t>IANAis requested to create a new standalone registry (a.k.a. webpage) with its own URL forhas created theData Channel Establishment Protocol (DCEP). The title should be"Data Channel Establishment Protocol (DCEP)Parameters".Parameters" registry. Itwill containcontains the two tables provided in Sections <xref format="counter"target='iana_msg_type'/>target="iana_msg_type"/> and <xref format="counter"target='iana_channel_type'/>.</t>target="iana_channel_type"/>.</t> <sectiontitle='Newanchor="iana_msg_type" numbered="true" toc="default"> <name>New Message TypeRegistry' anchor ='iana_msg_type'>Registry</name> <t>IANAis requested to create a new registration table,has created the "MessageType Registry",Types" registry forthe Data Channel Establishment Protocol (DCEP)DCEP to manage the one-byte "Message Type" field in DCEP messages (see <xreftarget='msg_format'/>).target="msg_format" format="default"/>). This registration tableshould be partis a subregistry of the registry described in <xreftarget='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: The assignment of new message types is done through an RFC Required action, as defined in [RFC5226]. New: The assignment of new message types is done through an RFC Required action, as defined in [RFC8126]. -->target="iana_dcep_registry" format="default"/>.</t> <t>The assignment of new message types is done through an RFC Required action, as defined in <xreftarget='RFC8126'/>.target="RFC8126" format="default"/>. Documentation ofthenew messagetype MUSTtypes <bcp14>MUST</bcp14> contain the following information:<list style="numbers"> <t>A</t> <ol spacing="normal" type="1"> <li>A name for the new messagetype;</t> <t>Atype.</li> <li>A detailed procedural description ofthe use of messages with the newhow each message type is used with withinthe 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 theDCEP.</li> </ol> <t>The followingsentence, does "the document" refer to this document? Original: Please note that the values 0x00 and 0x01arereserved to avoid interoperability problems, since they have been used in earlier versions ofthedocument. Perhaps: Please noteinital 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> <t>Note thatthevalues 0x00 and 0x01 are reserved to avoid interoperability problems, since they have been used in draft versions ofthis document. --> <t>Please note that the values 0x00 and 0x01 are reserved to avoid interoperability problems, since they have been used in earlier versions ofthe document. The value 0xff has been reserved for future extensibility. The range of possible values is from 0x00 to 0xff.</t> </section> <sectiontitle='Newanchor="iana_channel_type" numbered="true" toc="default"> <name>New Channel TypeRegistry' anchor='iana_channel_type'>Registry</name> <t>IANAis requested to create a new registration table,has created the "ChannelType Registry",Types" registry forthe Data Channel Establishment ProtocolDCEP to manage the one-byte "Channel Type" field in DATA_CHANNEL_OPEN messages (see <xreftarget='open_msg_format'/>).target="open_msg_format" format="default"/>). This registration tableshould be part ofis a subregistry within the registry described in <xreftarget='iana_dcep_registry'/>.</t>target="iana_dcep_registry" format="default"/>.</t> <t>The assignment of new message types is done through an RFC Required action, as defined in <xreftarget='RFC8126'/>.target="RFC8126" format="default"/>. Documentation ofthenew ChannelType MUSTTypes <bcp14>MUST</bcp14> contain the following information:<list style="numbers"> <t>A</t> <ol spacing="normal" type="1"> <li>A name for the new ChannelType;</t> <t>AType.</li> <li>A detailed procedural description of the user message handling for data channels using this new ChannelType.</t> </list> Please note that ifType.</li> </ol> <t> If new Channel Types support ordered and unordered message delivery, the high-order bitMUST<bcp14>MUST</bcp14> be used to indicate whether or not the message delivery isunordered or not.</t> <t>Initially, theunordered.</t> <t>The followingvalues need to be registered:</t> <texttable> <ttcol align='left'>Name</ttcol> <ttcol align='left'>Type</ttcol> <ttcol align='left'>Reference</ttcol> <c>DATA_CHANNEL_RELIABLE</c> <c>0x00</c> <c>[RFCXXXX]</c> <c>DATA_CHANNEL_RELIABLE_UNORDERED</c> <c>0x80</c> <c>[RFCXXXX]</c> <c>DATA_CHANNEL_PARTIAL_RELIABLE_REXMIT</c> <c>0x01</c> <c>[RFCXXXX]</c> <c>DATA_CHANNEL_PARTIAL_RELIABLE_REXMIT_UNORDERED</c> <c>0x81</c> <c>[RFCXXXX]</c> <c>DATA_CHANNEL_PARTIAL_RELIABLE_TIMED</c> <c>0x02</c> <c>[RFCXXXX]</c> <c>DATA_CHANNEL_PARTIAL_RELIABLE_TIMED_UNORDERED</c> <c>0x82</c> <c>[RFCXXXX]</c> <c>Reserved</c> <c>0x7f</c> <c>[RFCXXXX]</c> <c>Reserved</c> <c>0xff</c> <c>[RFCXXXX]</c> <c>Unassigned</c> <c>rest</c> <c> </c> </texttable> <t>Please note thatare thevaluesinitial 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">DATA_CHANNEL_RELIABLE</td> <td align="left">0x00</td> <td align="left">RFC 8832</td> </tr> <tr> <td align="left">DATA_CHANNEL_RELIABLE_UNORDERED</td> <td align="left">0x80</td> <td align="left">RFC 8832</td> </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. The range of possible values is from 0x00 to 0xff.</t> </section> </section> </section> </middle> <back><references title='Normative References'> <?rfc include='reference.RFC.2119'?> <?rfc include='reference.RFC.8174'?> <?rfc include='reference.RFC.3629'?> <?rfc include='reference.RFC.4347'?> <?rfc include='reference.RFC.4960'?> <?rfc include='reference.RFC.8126'?> <?rfc include='reference.RFC.6347'?> <?rfc include='reference.RFC.8261'?><references> <name>References</name> <references> <name>Normative References</name> <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.2119.xml"/> <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.8174.xml"/> <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.3629.xml"/> <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.4347.xml"/> <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.4960.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"/> <!-- draft-ietf-rtcweb-data-channel (RFC 8831) --> <referenceanchor="RFCYYYY" target="https://www.rfc-editor.org/info/rfcYYYY">anchor="RFC8831" target="https://www.rfc-editor.org/info/rfc8831"> <front> <title>WebRTC Data Channels</title> <authorinitials='R' surname='Jesup' fullname='Randell Jesup'>initials="R." surname="Jesup" fullname="Randell Jesup"> <organization/> </author> <authorinitials='S' surname='Loreto' fullname='Salvatore Loreto'>initials="S." surname="Loreto" fullname="Salvatore Loreto"> <organization/> </author> <authorinitials='M' surname='Tuexen' fullname='Michael Tuexen'>initials="M." surname="Tüxen" fullname="Michael Tüxen"> <organization/> </author> <date month='October'year='2018'/>year='2020'/> </front> <seriesInfo name="RFC"value="YYYY"/>value="8831"/> <seriesInfo name="DOI"value="10.17487/RFCYYYY"/>value="10.17487/RFC8831"/> </reference> </references><references title='Informative References'> <?rfc include='reference.RFC.6455'?> <!-- draft-ietf-rtcweb-security-10 exists<references> <name>Informative References</name> <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.6455.xml"/> <!--draft-ietf-rtcweb-security: RFC 8826 --> <referenceanchor='SECURITY'>anchor="RFC8826" target="https://www.rfc-editor.org/info/rfc8826"> <front> <title>Security Considerations for WebRTC</title> <authorinitials='E'initials='E.' surname='Rescorla' fullname='Eric Rescorla'><organization /><organization/> </author> <datemonth='January' day='22' year='2018' />month='October' year='2020'/> </front> <seriesInfoname='Work in Progress,' value='draft-ietf-rtcweb-security-10' />name="RFC" value="8826"/> <seriesInfo name="DOI" value="10.17487/RFC8826"/> </reference><!-- draft-ietf-rtcweb-security-arch-15 exists<!--draft-ietf-rtcweb-security-arch: 8827 --> <referenceanchor='SECURITY-ARCH'>anchor="RFC8827" target="https://www.rfc-editor.org/info/rfc8827"> <front> <title>WebRTC Security Architecture</title> <authorinitials='E'initials='E.' surname='Rescorla' fullname='Eric Rescorla'><organization /><organization/> </author> <datemonth='July' day='17' year='2018' />month='October' year='2020'/> </front> <seriesInfoname='Work in Progress,' value='draft-ietf-rtcweb-security-arch-15' />name="RFC" value="8827"/> <seriesInfo name="DOI" value="10.17487/RFC8827"/> </reference> </references> </references> <sectiontitle='Acknowledgments' numbered="no">numbered="false" toc="default"> <name>Acknowledgements</name> <t>The authors wish to thankHarald Alvestrand, Richard Barnes, Adam Bergkvist, Spencer Dawkins, Barry Dingle, Stefan Haekansson, Cullen Jennings, Paul Kyzivat, Doug Leonard, Alexey Melnikov, Pete Resnick, Irene Ruengeler, Randall Stewart, Peter Thatcher, Martin Thompson, Justin Uberti,<contact fullname="Harald Alvestrand"/>, <contact fullname="Richard Barnes"/>, <contact fullname="Adam Bergkvist"/>, <contact fullname="Spencer Dawkins"/>, <contact fullname="Barry Dingle"/>, <contact fullname="Stefan Haekansson"/>, <contact fullname="Cullen Jennings"/>, <contact fullname="Paul Kyzivat"/>, <contact fullname="Doug Leonard"/>, <contact fullname="Alexey Melnikov"/>, <contact fullname="Pete Resnick"/>, <contact fullname="Irene Rüngeler"/>, <contact fullname="Randall Stewart"/>, <contact fullname="Peter Thatcher"/>, <contact fullname="Martin Thompson"/>, <contact fullname="Justin Uberti"/>, and many others for their invaluable comments.</t> </section> </back> </rfc>