<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc version  (Ruby 3.2.3) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-hancke-tsvwg-snap-01" category="info" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.30.0 -->
  <front>
    <title abbrev="SNAP">SCTP Negotiation Acceleration Protocol</title>
    <seriesInfo name="Internet-Draft" value="draft-hancke-tsvwg-snap-01"/>
    <author fullname="Philipp Hancke">
      <organization>Meta Platforms Inc.</organization>
      <address>
        <email>philipp.hancke@googlemail.com</email>
      </address>
    </author>
    <author fullname="Justin Uberti">
      <organization>OpenAI</organization>
      <address>
        <email>justin@uberti.name</email>
      </address>
    </author>
    <author fullname="Victor Boivie">
      <organization>Google</organization>
      <address>
        <email>boivie@google.com</email>
      </address>
    </author>
    <date year="2026" month="November" day="02"/>
    <area>AREA</area>
    <workgroup>Transport and Services Working Group</workgroup>
    <keyword>sctp</keyword>
    <keyword>webrtc</keyword>
    <keyword>sdp</keyword>
    <abstract>
      <t>WebRTC Data Channels use the Stream Control Transmission Protocol (SCTP) over a Datagram Transport Layer Security (DTLS) association.
The standard SCTP connection establishment requires a handshake that introduces latency. This document specifies a method to
accelerate the datachannel establishment by embedding the SCTP initialization parameters within the Session Description Protocol
(SDP) offer/answer exchange. This reduces the time required to open a data channel by up to two network round-trip times.</t>
    </abstract>
    <note removeInRFC="true">
      <name>About This Document</name>
      <t>
        The latest revision of this draft can be found at <eref target="https://fippo.github.io/warp-snap-sped/draft-hancke-tsvwg-snap-latest.html"/>.
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-hancke-tsvwg-snap/"/>.
      </t>
      <t>
        Discussion of this document takes place on the
        WG Working Group mailing list (<eref target="mailto:tsvwg@ietf.org"/>),
        which is archived at <eref target="https://datatracker.ietf.org/wg/tsvwg/"/>.
        Subscribe at <eref target="https://www.ietf.org/mailman/listinfo/tsvwg/"/>.
      </t>
      <t>Source for this draft and an issue tracker can be found at
        <eref target="https://github.com/fippo/warp-snap-sped"/>.</t>
    </note>
  </front>
  <middle>
    <section anchor="introduction">
      <name>Introduction</name>
      <t><xref target="RFC8831"/> defines WebRTC Data Channels that allow the transport of arbitrary non-media data over a WebRTC PeerConnection.
This uses SCTP <xref target="RFC9260"/> and a DTLS encapsulation of SCTP packets <xref target="RFC8261"/>.</t>
      <t>SCTP establishes its associations using a four-way handshake, which primarily serves to protect against
half-open (SYN-flood) attacks. For WebRTC, SCTP runs encapsulated within DTLS <xref target="RFC8261"/>, which establishes a secure,
encrypted channel between the peers that prevents half-open attacks.</t>
      <t>The full connection setup between two entities using WebRTC, consisting of the exchange of SDP over the signaling channel,
ICE and DTLS establishment and the SCTP handshake, is shown below (with annotations for the number of full round trips):</t>
      <artwork><![CDATA[
Client                                       Server
   |                                            |
   |------------- SDP Offer ------------------->|
   |<-1---------- SDP Answer -------------------|
   |                                            |
   |<-2---------- ICE/Connectivity Checks ----->|
   |                                            |
   |<------------ DTLS ClientHello -------------|
   |--3---------- DTLS ServerHello ------------>|
   |<------------ DTLS Finished ----------------|
   |--4---------- DTLS Finished --------------->|
   |                                            |
   |------------- SCTP INIT ------------------->|
   |<-5---------- SCTP INIT ACK ----------------|
   |------------- SCTP COOKIE ECHO ------------>|
   |<-6---------- SCTP COOKIE ACK --------------|
   |                                            |
   |------------- DCEP (Open Channel) --------->|
   |------------- "hello world"---------------->|
   |<------------ DCEP ACK ---------------------|
   |                                            |
]]></artwork>
      <t>Note that SCTP typically does a "simultaneous open", i.e. both sides take the active role,
although only one direction is shown here for simplicity.</t>
      <t>Note: <xref target="RFC9260"/> allows the packets with the COOKIE ECHO and COOKIE ACK to carry data.
This means the second RTT is not strictly necessary but was observed in practice.</t>
      <t>When the SCTP INIT chunk is signaled in the SDP, using the "sctp-init" attribute described
in this document, this flow can be reduced to the following exchange:</t>
      <artwork><![CDATA[
Client                                       Server
   |                                            |
   |------------- SDP Offer (sctp-init)-------->|
   |<-1---------- SDP Answer (sctp-init)--------|
   |                                            |
   |<-2---------- ICE/Connectivity Checks ----->|
   |                                            |
   |<------------ DTLS ClientHello -------------|
   |--3---------- DTLS ServerHello ------------>|
   |<------------ DTLS Finished ----------------|
   |--4---------- DTLS Finished --------------->|
   |                                            |
   |------------- DCEP (Open Channel) --------->|
   |------------- "hello world"---------------->|
   |<------------ DCEP ACK ---------------------|
   |                                            |
]]></artwork>
    </section>
    <section anchor="conventions-and-definitions">
      <name>Conventions and Definitions</name>
      <t>The key words "<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 "<bcp14>OPTIONAL</bcp14>" in this document are to be interpreted as
described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they
appear in all capitals, as shown here.</t>
    </section>
    <section anchor="terminology">
      <name>Terminology</name>
      <t>SCTP INIT: the SCTP INIT chunk as described in <xref section="3.3.2" sectionFormat="of" target="RFC9260"/>.</t>
      <t>SCTP INIT ACK: the SCTP INIT ACK chunk as described in <xref section="3.3.3" sectionFormat="of" target="RFC9260"/>.</t>
      <t>SCTP COOKIE ECHO: the SCTP COOKIE ECHO chunk as described in <xref section="3.3.11" sectionFormat="of" target="RFC9260"/>.</t>
      <t>SCTP COOKIE ACK: the SCTP COOKIE ACK chunk as described in <xref section="3.3.12" sectionFormat="of" target="RFC9260"/>.</t>
      <t>RTT: Round-Trip Time</t>
    </section>
    <section anchor="sdp-sctp-init-attribute">
      <name>SDP sctp-init attribute</name>
      <section anchor="general">
        <name>General</name>
        <t>This section defines a new SDP media-level attribute, "sctp-init". The attribute can be associated with
an SDP media description ("m=" line) with a "UDP/DTLS/SCTP" protocol identifier (defined in <xref target="RFC8841"/>)
and the &lt;fmt&gt; parameter value of 'webrtc-datachannel' (defined in <xref target="RFC8832"/>).</t>
        <t>NOTE: This specification only defines the usage of the SDP "sctp-init" attribute when associated with
an "m=" line containing one of the following proto values: "UDP/DTLS/SCTP" or "TCP/DTLS/SCTP".
Usage of the attribute with other proto values needs to be defined in a separate specification.</t>
        <t>An example follows, see <xref target="example"/> for the full SDP exchange:</t>
        <artwork><![CDATA[
a=sctp-init:AQAAHols3R0AUAAA/////+B5ZR3AAAAEgAgABoLA
]]></artwork>
        <t>This is equivalent to the following SCTP INIT chunk:</t>
        <artwork><![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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|   Type = 1    |Chunk Flags = 0|      Chunk Length = 30        |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                      Initiate Tag = 0x896cdd1d                |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|      Advertised Receiver Window Credit (a_rwnd) = 0x00500000  |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| # of Outbound Streams = 65535 | # of Inbound Streams = 65535  |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                      Initial TSN = 0xe079651d                 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
/              Optional/Variable-Length Parameters              /
\     Forward TSN       |  Supported extensions=RECONFIG(0x82), \
/                       |          FORWARD_TSN(0xc0)            /
\ 0xc0, 0x00, 0x00, 0x04| 0x80, 0x08, 0x00, 0x06, 0x82, 0xc0    \
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
]]></artwork>
      </section>
      <section anchor="syntax">
        <name>Syntax</name>
        <t>Attribute name: sctp-init</t>
        <t>Type of attribute: media</t>
        <t>Mux category: CAUTION</t>
        <t>Subject to charset: No</t>
        <t>Purpose: allows the SDP to carry the information contained in a SCTP INIT chunk</t>
        <t>Appropriate values: A base64-encoded value. The encoded octets are the INIT chunk exactly
as defined in <xref target="RFC9260"/>, including its network byte order.
An implementation generating the value <bcp14>MAY</bcp14>
include the trailing chunk padding described in <xref section="3.2" sectionFormat="of" target="RFC9260"/>. An
implementation parsing the value <bcp14>MUST</bcp14> accept it both with and without the trailing padding.</t>
        <t>Syntax: sctp-init-value = base64 ; base64 defined in RFC 4566</t>
      </section>
    </section>
    <section anchor="sdp-offeranswer-procedures">
      <name>SDP Offer/Answer Procedures</name>
      <section anchor="general-1">
        <name>General</name>
        <t>This section defines how the "sctp-init" attribute can be negotiated using the SDP offer/answer mechanism.</t>
      </section>
      <section anchor="generating-the-initial-sdp-offer">
        <name>Generating the Initial SDP Offer</name>
        <t>If the offering endpoint has created a WebRTC data channel, it <bcp14>MUST</bcp14> let the SCTP implementation generate
a serialized INIT chunk that it would normally send over the network as a series of bytes.
This message is then base64-encoded and added to the data "m=" section as an "a=sctp-init" line.</t>
      </section>
      <section anchor="answerer-processing-of-the-sdp-offer">
        <name>Answerer Processing of the SDP Offer</name>
        <t>If the answering endpoint negotiates a data "m=" section, it will parse the "a=sctp-init" line from the data "m=" section, if present.</t>
        <t>If the data is not properly base64-encoded this results in an error.</t>
        <t>The answering endpoint then informs its SCTP implementation of the series of bytes. The SCTP implementation is responsible for
validating the format of the SCTP INIT chunk.</t>
        <t>If the series of bytes is not a valid SCTP INIT chunk this results in an error.</t>
      </section>
      <section anchor="generating-the-sdp-answer">
        <name>Generating the SDP Answer</name>
        <t>An endpoint not supporting the extension described in this document <bcp14>MUST NOT</bcp14> include a "a=sctp-init" attribute in its answer.</t>
        <t>If the answering endpoint negotiated a data "m=" section and detected a valid "a=sctp-init" line in the offer, as described above,
it <bcp14>MUST</bcp14> let its SCTP implementation generate a serialized INIT chunk that it would normally send over the network as a series of bytes.</t>
        <t>This message is base64-encoded and added to the data "m=" section as a "a=sctp-init" line.</t>
      </section>
      <section anchor="offerer-processing-of-the-sdp-answer">
        <name>Offerer Processing of the SDP Answer</name>
        <t>If the answer negotiated a data "m=" section, the offering endpoint parses the "a=sctp-init" line, if present, from the data "m=" section.</t>
        <t>If the data is not properly base64-encoded this results in an error.</t>
        <t>The offering endpoint then informs its SCTP implementation of the series of bytes.
The SCTP implementation is responsible for validating the format of the SCTP INIT chunk.
If the series of bytes is not a valid SCTP INIT chunk this results in an error.</t>
      </section>
      <section anchor="modifying-the-session">
        <name>Modifying the Session</name>
        <t>Subsequent offers and answers <bcp14>MUST</bcp14> include the "a=sctp-init" line in the negotiated SDP with the same value as in the
initial negotiation.</t>
        <t>Remote offers <bcp14>MAY</bcp14> negotiate a new "a=sctp-init" line in conjunction with either</t>
        <ul spacing="normal">
          <li>
            <t>a new SCTP association as described in <xref section="9.3" sectionFormat="of" target="RFC8841"/></t>
          </li>
          <li>
            <t>or a new DTLS association as described in <xref section="5.5" sectionFormat="of" target="RFC8842"/>.</t>
          </li>
        </ul>
        <t>Attempting to add an sctp-init attribute to an existing SCTP association results in an error.</t>
      </section>
    </section>
    <section anchor="sctp-considerations">
      <name>SCTP considerations</name>
      <t>The creation of the "sctp-init" attribute <bcp14>SHOULD NOT</bcp14> change the state of the SCTP association into the COOKIE-WAIT state as described
in <xref section="5.1" sectionFormat="of" target="RFC9260"/> and <bcp14>SHOULD NOT</bcp14> start the T1-init timer.</t>
      <t>Processing of the "sctp-init" attribute from the remote side <bcp14>SHOULD NOT</bcp14> change the state of the SCTP association and <bcp14>SHOULD NOT</bcp14> start any timer.</t>
      <t>When the "sctp-init" attribute has been negotiated and the DTLS handshake finishes, both endpoints initialize
the SCTP association from the local and remote INIT chunks in the same way as from the INIT and INIT ACK chunks
of a regular handshake, e.g. for the number of streams (see <xref section="5.1.1" sectionFormat="of" target="RFC9260"/>).
The association then <bcp14>SHOULD</bcp14> be considered to be in the ESTABLISHED state, as described in <xref section="4" sectionFormat="of" target="RFC9260"/>.
The steps A-E described in <xref section="5.1" sectionFormat="of" target="RFC9260"/> can be skipped.</t>
    </section>
    <section anchor="example">
      <name>Example negotiation</name>
      <t>The offering client generates a SCTP INIT chunk with its supported parameters:</t>
      <artwork><![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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|   Type = 1    |Chunk Flags = 0|      Chunk Length = 30        |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                      Initiate Tag = 0x896cdd1d                |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|      Advertised Receiver Window Credit (a_rwnd) = 0x00500000  |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| # of Outbound Streams = 65535 | # of Inbound Streams = 65535  |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                      Initial TSN = 0xe079651d                 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
/              Optional/Variable-Length Parameters              /
\     Forward TSN       |  Supported extensions=RECONFIG(0x82), \
/                       |          FORWARD_TSN(0xc0)            /
\ 0xc0, 0x00, 0x00, 0x04| 0x80, 0x08, 0x00, 0x06, 0x82, 0xc0    \
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
]]></artwork>
      <t>This is encoded in the offer SDP as follows:</t>
      <artwork><![CDATA[
v=0
o=- 8389853828849686268 2 IN IP4 127.0.0.1
s=-
t=0 0
a=group:BUNDLE 0
m=application 9 UDP/DTLS/SCTP webrtc-datachannel
c=IN IP4 0.0.0.0
a=ice-ufrag:UgEn
a=ice-pwd:f/+ugRILrIUlAkSmkStnZb/h
a=ice-options:trickle
a=fingerprint:sha-256
              6A:15:F0:08:9C:55:51:CD:55:27:BD:0D:FB:14:DD:41:
              F6:8C:82:9F:CA:AD:DA:E7:04:61:6F:A9:FF:99:2D:7A
a=setup:actpass
a=mid:0
a=sctp-port:5000
a=max-message-size:262144
a=sctp-init:AQAAHols3R0AUAAA/////+B5ZR3AAAAEgAgABoLA
]]></artwork>
      <t>In response, the answering client generates its SCTP INIT chunk with its supported parameters:</t>
      <artwork><![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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|   Type = 1    |Chunk Flags = 0|      Chunk Length = 30        |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                      Initiate Tag = 0x5fb37474                |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|      Advertised Receiver Window Credit (a_rwnd) = 0x00500000  |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| # of Outbound Streams = 65535 | # of Inbound Streams = 65535  |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                      Initial TSN = 0xa1aadc74                 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
/              Optional/Variable-Length Parameters              /
\     Forward TSN       |  Supported extensions=RECONFIG(0x82), \
/                       |          FORWARD_TSN(0xc0)            /
\ 0xc0, 0x00, 0x00, 0x04| 0x80, 0x08, 0x00, 0x06, 0x82, 0xc0    \
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
]]></artwork>
      <t>This yields an answer SDP shown below:</t>
      <artwork><![CDATA[
v=0
o=- 6156433258406980035 2 IN IP4 127.0.0.1
s=-
t=0 0
a=group:BUNDLE 0
m=application 9 UDP/DTLS/SCTP webrtc-datachannel
c=IN IP4 0.0.0.0
a=ice-ufrag:thzM
a=ice-pwd:YT278C3KYFmsedR5+OzE9OQY
a=ice-options:trickle
a=fingerprint:sha-256
              AC:48:A1:C4:78:6D:6D:46:63:BB:7D:70:E4:B8:5D:C4:
              E8:6E:66:40:8C:81:31:D3:9C:34:32:9A:C3:6B:BB:AE
a=setup:active
a=mid:0
a=sctp-port:5000
a=max-message-size:262144
a=sctp-init:AQAAHl+zdHQAUAAA/////6Gq3HTAAAAEgAgABoLA
]]></artwork>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>SNAP removes SCTP's anti-amplification mechanism in order to accelerate connection startup.
However, when SCTP runs atop DTLS as specified in <xref target="RFC8261"/>, any attempt to send junk traffic over SCTP will fail
as it will not be properly encrypted. Therefore SNAP does not add any new amplification risk.</t>
      <t>Exposing the content of the SCTP INIT chunk, in particular the "Initiate Tag", in the SDP does not introduce new security
concerns since running SCTP atop DTLS protects against the off-path attacks described in <xref section="5.3.1" sectionFormat="of" target="RFC9260"/>.</t>
      <t>Exposing the content of the SCTP init tag to the application layer, e.g., JavaScript applications or the signaling
channel in the case of WebRTC does allow these to add or remove variable-length parameters. Since these parameters
are optional and used for feature negotiation, removing one is equivalent to the remote side not supporting the
parameter and does not introduce a new security risk. Adding a parameter that is not supported may cause the remote
side to send those but this is equivalent to receiving a packet for a feature that was not negotiated and hence does
not introduce a new security concern.</t>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <section anchor="new-sdp-attributes">
        <name>New SDP attributes</name>
        <t>This document defines a new SDP media-level attribute, "sctp-init". The details of the attribute are defined in <xref target="syntax"/>.</t>
      </section>
    </section>
  </middle>
  <back>
    <references>
      <name>References</name>
      <references>
        <name>Normative References</name>
        <reference anchor="RFC9260">
          <front>
            <title>Stream Control Transmission Protocol</title>
            <author fullname="R. Stewart" initials="R." surname="Stewart"/>
            <author fullname="M. Tüxen" initials="M." surname="Tüxen"/>
            <author fullname="K. Nielsen" initials="K." surname="Nielsen"/>
            <date month="June" year="2022"/>
            <abstract>
              <t>This document describes the Stream Control Transmission Protocol (SCTP) and obsoletes RFC 4960. It incorporates the specification of the chunk flags registry from RFC 6096 and the specification of the I bit of DATA chunks from RFC 7053. Therefore, RFCs 6096 and 7053 are also obsoleted by this document. In addition, RFCs 4460 and 8540, which describe errata for SCTP, are obsoleted by this document.</t>
              <t>SCTP was originally designed to transport Public Switched Telephone Network (PSTN) signaling messages over IP networks. It is also suited to be used for other applications, for example, WebRTC.</t>
              <t>SCTP is a reliable transport protocol operating on top of a connectionless packet network, such as IP. It offers the following services to its users:</t>
              <t>The design of SCTP includes appropriate congestion avoidance behavior and resistance to flooding and masquerade attacks.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9260"/>
          <seriesInfo name="DOI" value="10.17487/RFC9260"/>
        </reference>
        <reference anchor="RFC2119">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <author fullname="S. Bradner" initials="S." surname="Bradner"/>
            <date month="March" year="1997"/>
            <abstract>
              <t>In many standards track documents several words are used to signify the requirements in the specification. These words are often capitalized. This document defines these words as they should be interpreted in IETF documents. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="2119"/>
          <seriesInfo name="DOI" value="10.17487/RFC2119"/>
        </reference>
        <reference anchor="RFC8174">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <author fullname="B. Leiba" initials="B." surname="Leiba"/>
            <date month="May" year="2017"/>
            <abstract>
              <t>RFC 2119 specifies common key words that may be used in protocol specifications. This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the defined special meanings.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="8174"/>
          <seriesInfo name="DOI" value="10.17487/RFC8174"/>
        </reference>
      </references>
      <references>
        <name>Informative References</name>
        <reference anchor="RFC8831">
          <front>
            <title>WebRTC Data Channels</title>
            <author fullname="R. Jesup" initials="R." surname="Jesup"/>
            <author fullname="S. Loreto" initials="S." surname="Loreto"/>
            <author fullname="M. Tüxen" initials="M." surname="Tüxen"/>
            <date month="January" year="2021"/>
            <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 the non-media data transport aspects of the WebRTC framework. It provides an architectural overview of how the Stream Control Transmission Protocol (SCTP) is used in the WebRTC context as a generic transport service that allows web browsers to exchange generic data from peer to peer.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8831"/>
          <seriesInfo name="DOI" value="10.17487/RFC8831"/>
        </reference>
        <reference anchor="RFC8261">
          <front>
            <title>Datagram Transport Layer Security (DTLS) Encapsulation of SCTP Packets</title>
            <author fullname="M. Tuexen" initials="M." surname="Tuexen"/>
            <author fullname="R. Stewart" initials="R." surname="Stewart"/>
            <author fullname="R. Jesup" initials="R." surname="Jesup"/>
            <author fullname="S. Loreto" initials="S." surname="Loreto"/>
            <date month="November" year="2017"/>
            <abstract>
              <t>The Stream Control Transmission Protocol (SCTP) is a transport protocol originally defined to run on top of the network protocols IPv4 or IPv6. This document specifies how SCTP can be used on top of the Datagram Transport Layer Security (DTLS) protocol. Using the encapsulation method described in this document, SCTP is unaware of the protocols being used below DTLS; hence, explicit IP addresses cannot be used in the SCTP control chunks. As a consequence, the SCTP associations carried over DTLS can only be single-homed.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8261"/>
          <seriesInfo name="DOI" value="10.17487/RFC8261"/>
        </reference>
        <reference anchor="RFC8832">
          <front>
            <title>WebRTC Data Channel Establishment Protocol</title>
            <author fullname="R. Jesup" initials="R." surname="Jesup"/>
            <author fullname="S. Loreto" initials="S." surname="Loreto"/>
            <author fullname="M. Tüxen" initials="M." surname="Tüxen"/>
            <date month="January" year="2021"/>
            <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>
          <seriesInfo name="RFC" value="8832"/>
          <seriesInfo name="DOI" value="10.17487/RFC8832"/>
        </reference>
        <reference anchor="RFC8841">
          <front>
            <title>Session Description Protocol (SDP) Offer/Answer Procedures for Stream Control Transmission Protocol (SCTP) over Datagram Transport Layer Security (DTLS) Transport</title>
            <author fullname="C. Holmberg" initials="C." surname="Holmberg"/>
            <author fullname="R. Shpount" initials="R." surname="Shpount"/>
            <author fullname="S. Loreto" initials="S." surname="Loreto"/>
            <author fullname="G. Camarillo" initials="G." surname="Camarillo"/>
            <date month="January" year="2021"/>
            <abstract>
              <t>The Stream Control Transmission Protocol (SCTP) is a transport protocol used to establish associations between two endpoints. RFC 8261 specifies how SCTP can be used on top of the Datagram Transport Layer Security (DTLS) protocol, which is referred to as SCTP-over-DTLS.</t>
              <t>This specification defines the following new Session Description Protocol (SDP) protocol identifiers (proto values): "UDP/DTLS/SCTP" and "TCP/DTLS/SCTP". This specification also specifies how to use the new proto values with the SDP offer/answer mechanism for negotiating SCTP-over-DTLS associations.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8841"/>
          <seriesInfo name="DOI" value="10.17487/RFC8841"/>
        </reference>
        <reference anchor="RFC8842">
          <front>
            <title>Session Description Protocol (SDP) Offer/Answer Considerations for Datagram Transport Layer Security (DTLS) and Transport Layer Security (TLS)</title>
            <author fullname="C. Holmberg" initials="C." surname="Holmberg"/>
            <author fullname="R. Shpount" initials="R." surname="Shpount"/>
            <date month="January" year="2021"/>
            <abstract>
              <t>This document defines the Session Description Protocol (SDP) offer/answer procedures for negotiating and establishing a Datagram Transport Layer Security (DTLS) association. The document also defines the criteria for when a new DTLS association must be established. The document updates RFCs 5763 and 7345 by replacing common SDP offer/answer procedures with a reference to this specification.</t>
              <t>This document defines a new SDP media-level attribute, "tls-id".</t>
              <t>This document also defines how the "tls-id" attribute can be used for negotiating and establishing a Transport Layer Security (TLS) connection, in conjunction with the procedures in RFCs 4145 and 8122.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8842"/>
          <seriesInfo name="DOI" value="10.17487/RFC8842"/>
        </reference>
      </references>
    </references>
    <section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>The authors wish to thank Harald Alvestrand, Lennart Grahl, Jonas Oreland and Michael Tuexen for their invaluable comments.</t>
    </section>
  </back>
  <!-- ##markdown-source:
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

-->

</rfc>
