<?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-00" 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-00"/>
    <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="2025" month="December" day="29"/>
    <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.</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
* a new SCTP association as described in <xref section="9.3" sectionFormat="of" target="RFC8841"/>
* or a new DTLS association as described in <xref section="5.5" sectionFormat="of" target="RFC8842"/>.</t>
        <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, both endpoints <bcp14>SHOULD</bcp14> consider the SCTP association to be in the ESTABLISHED state,
as described in <xref section="4" sectionFormat="of" target="RFC9260"/>, once the DTLS handshake finishes. 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 and Jonas Oreland for their invaluable comments.</t>
    </section>
  </back>
  <!-- ##markdown-source:
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

-->

</rfc>
