<?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 1.7.31 (Ruby 2.6.10) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-hancke-webrtc-sped-01" category="info" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.31.0 -->
  <front>
    <title abbrev="SPED">STUN Protocol for Embedding DTLS (SPED)</title>
    <seriesInfo name="Internet-Draft" value="draft-hancke-webrtc-sped-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="Jonas Oreland">
      <organization>Google</organization>
      <address>
        <email>jonaso@google.com</email>
      </address>
    </author>
    <date year="2026" month="November" day="02"/>
    <area>ART</area>
    <workgroup>Audio/Video Transport Core Maintenance</workgroup>
    <keyword>webrtc</keyword>
    <keyword>stun</keyword>
    <keyword>dtls</keyword>
    <abstract>
      <?line 44?>

<t>WebRTC setup normally serializes ICE and DTLS, adding at least one extra round trip before secure
media can flow. This document defines the STUN Protocol for Embedding DTLS (SPED), which carries
DTLS handshake data and acknowledgements inside STUN Binding Requests and Responses. SPED allows
ICE and DTLS to proceed in parallel, improves setup behavior under loss, and remains backward
compatible with existing ICE processing.</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-webrtc-sped.html"/>.
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-hancke-webrtc-sped/"/>.
      </t>
      <t>
        Discussion of this document takes place on the
        AVTCORE Working Group mailing list (<eref target="mailto:avt@ietf.org"/>),
        which is archived at <eref target="https://datatracker.ietf.org/wg/avtcore/"/>.
        Subscribe at <eref target="https://www.ietf.org/mailman/listinfo/avt/"/>.
      </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>
    <?line 52?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>The current WebRTC connection setup, as outlined in <xref target="RFC8829"/>, incurs a minimum of 4 RTTs with
DTLS 1.2, or 3 RTTs with DTLS 1.3, before media can be sent. The serialization of ICE and DTLS is
a large contributor to that as illustrated below for DTLS 1.2:</t>
      <artwork><![CDATA[
Client                                      Server
  |                                            |
  |------------- SDP Offer (actpass)---------->|
  |<-1---------- SDP Answer (passive)----------|
  |                                            |
  |<-2---------- ICE/Connectivity Checks ----->|
  |                                            |
  |------------- DTLS ClientHello ------------>|
  |<-3---------- DTLS ServerHello -------------|
  |------------- DTLS Finished --------------->|
  |<-4---------- DTLS Finished ----------------|
  |                                            |
  |------------- Application data ------------>|
]]></artwork>
      <t>In addition, deployment experience has shown connection setup reliability issues in scenarios with
packet loss, caused by the exponential backoff timer typically used in DTLS implementations.</t>
      <t>The protocol defined in this specification, SPED, aims to resolve these concerns by embedding the
DTLS handshake into STUN, eliminating the delay caused by the serialization of the protocols and
improving reliability by sending fewer packets as well as simplifying retransmissions. In fact,
when DTLS 1.3 is used, the protocol can reduce the setup latency to as little as a single
round-trip, comparable to the latency of the largely deprecated SDES key exchange mechanism
<xref target="RFC4568"/>.</t>
      <t>The protocol is backward compatible, supports both DTLS 1.2 <xref target="RFC6347"/> and DTLS 1.3
<xref target="RFC9147"/>, and can accommodate all DTLS cipher suites, including post-quantum cryptography
(PQC) suites that can increase the number of packets sent during DTLS handshaking.</t>
    </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>
      <?line -18?>

</section>
    <section anchor="design">
      <name>Design</name>
      <section anchor="background">
        <name>Background</name>
        <section anchor="ice-overview">
          <name>ICE Overview</name>
          <t>The ICE protocol <xref target="RFC8445"/> is complex, but the core steps taken by each ICE agent (client) can be summarized
as follows:</t>
          <ol spacing="normal" type="1"><li>
              <t>Enumerate local ICE candidates and send them, out-of-band, to the peer.</t>
            </li>
            <li>
              <t>Combine local ICE candidates with the received remote ICE candidates to form ICE candidate
pairs.</t>
            </li>
            <li>
              <t>Evaluate the usability of these ICE candidate pairs by sending STUN Binding Requests. This
typically happens in parallel, i.e. an ICE agent may have several binding requests in flight
when there are multiple candidate pairs.</t>
            </li>
            <li>
              <t>When a STUN Binding Request is received, reply with a STUN Binding Response.</t>
            </li>
            <li>
              <t>When a STUN Binding Response is received, in response to a request, mark the associated ICE
candidate pair as valid.</t>
            </li>
            <li>
              <t>If the ICE agent is in the controlling role, select the "best" ICE candidate pair for
subsequent sending of data or media, and indicate the selected candidate pair to the remote ICE
agent by sending a new STUN Binding Request with the USE-CANDIDATE flag set.</t>
            </li>
          </ol>
          <t>Some endpoints, typically servers, implement a simpler form of ICE known as ICE Lite <xref target="RFC8445"/>. When this
form of ICE is used, the ICE Lite endpoint omits steps 3 and 5, and Binding Requests only flow in
one direction, from the full to the lite endpoint.</t>
        </section>
        <section anchor="dtls-overview">
          <name>DTLS Overview</name>
          <t>In WebRTC, DTLS handshaking normally starts once ICE has identified a valid candidate pair, using
"client" and "server" roles determined through the <tt>a=setup</tt> attribute in WebRTC SDP signaling
<xref target="RFC5763"/>. SPED changes when these DTLS packets can be sent, but not the DTLS handshake
contents themselves.</t>
          <t>We define the term "DTLS packet" to mean the unit of DTLS data typically carried in a
single UDP packet.</t>
          <t>DTLS handshake messages are also organized into "DTLS flights", as detailed in <xref section="5.7" sectionFormat="of" target="RFC9147"/>. A
DTLS flight consists of a set of handshake messages that are sent together by a DTLS endpoint, and
those messages are carried in one or more DTLS packets.</t>
          <t>Ideally, a flight, even if it contains multiple messages, can fit into a single DTLS packet.
However, if a message is large, for example a large certificate, it can be fragmented across
multiple DTLS packets.</t>
          <t>The DTLS flights used during WebRTC session setup are described below. Note that because
ICE has already demonstrated remote consent, DTLS' HelloVerifyRequest is not needed to prevent DoS
attacks.</t>
          <t>Once the DTLS handshake has completed, SRTP key extraction occurs and is used to key the sending
of media <xref target="RFC5764"/>.
Media cannot be properly decrypted until all handshake messages have been received.</t>
          <section anchor="dtls-12-handshake">
            <name>DTLS 1.2 Handshake</name>
            <t>The DTLS 1.2 handshake, as specified in <xref section="4.2" sectionFormat="of" target="RFC6347"/>, is organized into the
following DTLS flights:</t>
            <ol spacing="normal" type="1"><li>
                <t>The DTLS client sends the ClientHello message.</t>
              </li>
              <li>
                <t>The DTLS server responds with the ServerHello, Certificate, ServerKeyExchange,
CertificateRequest, and ServerHelloDone messages, packed as noted above.</t>
              </li>
              <li>
                <t>The DTLS client sends the Certificate, ClientKeyExchange, CertificateVerify,
ChangeCipherSpec, and Finished messages.</t>
              </li>
              <li>
                <t>The DTLS server sends the ChangeCipherSpec and Finished messages.</t>
              </li>
            </ol>
            <t>Note that DTLS 1.2 does not provide a separate acknowledgement for the server's final
flight, so determination of handshake completion must be done implicitly, e.g., via
receipt of application data or expiration of retransmission timers.</t>
          </section>
          <section anchor="dtls-13-handshake">
            <name>DTLS 1.3 Handshake</name>
            <t>The DTLS 1.3 handshake, as specified in <xref section="5" sectionFormat="of" target="RFC9147"/>, is organized into the
following DTLS flights:</t>
            <ol spacing="normal" type="1"><li>
                <t>The DTLS client sends the ClientHello message.</t>
              </li>
              <li>
                <t>The DTLS server sends the ServerHello, EncryptedExtensions, CertificateRequest, Certificate,
CertificateVerify, and Finished messages.</t>
              </li>
              <li>
                <t>The DTLS client sends the Certificate, CertificateVerify, and Finished messages.</t>
              </li>
            </ol>
            <t>Note that in DTLS 1.3, the DTLS server sends a DTLS acknowledgement packet upon receiving the
Finished message, but the client does not need to wait for this message to begin sending encrypted
data.</t>
          </section>
        </section>
      </section>
      <section anchor="goals">
        <name>Goals</name>
        <t>The desired properties of this solution are:</t>
        <ul spacing="normal">
          <li>
            <t>It makes WebRTC setup faster by 1 RTT, by allowing ICE and DTLS to proceed in parallel.</t>
          </li>
          <li>
            <t>It makes WebRTC session setup less susceptible to packet loss.</t>
          </li>
          <li>
            <t>It is strictly an optimization.</t>
          </li>
          <li>
            <t>It reduces the number of packets exchanged during session setup, but the size of the STUN
Binding Request or Response increases.</t>
          </li>
          <li>
            <t>In the event of an incompatibility, each client proceeds with ICE and DTLS as usual.</t>
          </li>
          <li>
            <t>It works with all versions of DTLS &gt;= 1.2, and all DTLS cipher suites.</t>
          </li>
          <li>
            <t>It is fully backward compatible with existing ICE processing, including interactions with ICE
Lite endpoints, as well as endpoints that demultiplex multiple ICE sessions on the same port.</t>
          </li>
        </ul>
      </section>
      <section anchor="sped-protocol">
        <name>SPED Protocol</name>
        <section anchor="summary">
          <name>Summary</name>
          <t>The overall mechanism can be summarized as follows:</t>
          <ol spacing="normal" type="1"><li>
              <t>Endpoints negotiate SPED support using the <tt>sped</tt> ICE option.</t>
            </li>
            <li>
              <t>DTLS is started at the same time as ICE.</t>
            </li>
            <li>
              <t>If there is no valid ICE candidate pair, DTLS handshake packets are sent by encapsulating them
in a new STUN attribute in the next STUN Binding Request or STUN Binding Response.</t>
            </li>
            <li>
              <t>Once an ICE candidate pair is selected, DTLS handshake packets are sent directly over that
pair and can also be embedded in STUN messages sent on other candidate pairs.</t>
            </li>
          </ol>
          <t>In addition, to improve the reliability of the DTLS handshake, an explicit acknowledgement
mechanism is built into SPED. DTLS handshake packets, whether received directly or embedded, are
acknowledged by sending their CRC-32 in a new STUN attribute in the next STUN Binding Request or
STUN Binding Response.</t>
        </section>
        <section anchor="capability-negotiation">
          <name>Capability Negotiation</name>
          <t>SPED support is negotiated with the <tt>sped</tt> ICE option in the SDP <tt>a=ice-options</tt> attribute, as
described in <xref section="5.6" sectionFormat="of" target="RFC8839"/>. The option applies to the ICE session and indicates
support for the STUN attributes and procedures defined in this specification.</t>
          <section anchor="sdp-offeranswer-procedures">
            <name>SDP Offer/Answer Procedures</name>
            <t>An offerer that wishes to use SPED <bcp14>MUST</bcp14> include the <tt>sped</tt> ICE option in its offer. If the offer
contains <tt>sped</tt>, an answerer that supports SPED and wishes to use it <bcp14>MUST</bcp14> include <tt>sped</tt> in its
answer. Otherwise, the answerer <bcp14>MUST NOT</bcp14> include the option.</t>
            <t>SPED is negotiated when <tt>sped</tt> appears in both the offer and answer. If the answer does not
contain <tt>sped</tt>, the offerer <bcp14>MUST NOT</bcp14> send the STUN attributes defined in this specification and
both endpoints continue with ordinary ICE and DTLS procedures.</t>
          </section>
          <section anchor="stun-checks-received-before-the-sdp-answer">
            <name>STUN Checks Received Before the SDP Answer</name>
            <t>Connectivity checks from the answerer can reach the offerer before the SDP answer. An offerer
that advertises <tt>sped</tt> <bcp14>MUST</bcp14> therefore be prepared to receive and process authenticated STUN
messages containing SPED attributes before learning whether the answer includes the option.</t>
            <t>Offerers that receive SPED attributes in these early STUN messages <bcp14>SHOULD</bcp14> conclude that
the answerer supports SPED, but absence of these attributes <bcp14>MUST NOT</bcp14> be used as an indication
that the answerer does not support SPED.</t>
          </section>
          <section anchor="backward-compatibility-and-fallback">
            <name>Backward Compatibility and Fallback</name>
            <t>An endpoint that does not support SPED omits the <tt>sped</tt> ICE option from its answer, causing the
offerer to use standard unencapsulated DTLS.</t>
          </section>
        </section>
        <section anchor="new-stun-attributes">
          <name>New STUN Attributes</name>
          <t>This STUN extension defines the following new IETF-assigned attributes in the comprehension-optional range:</t>
          <ul spacing="normal">
            <li>
              <t><tt>TBD1</tt>: <tt>DTLS-IN-STUN-DATA</tt></t>
            </li>
            <li>
              <t><tt>TBD2</tt>: <tt>DTLS-IN-STUN-ACK</tt></t>
            </li>
          </ul>
          <t>These attributes have lengths that are not always multiples of 4. By the rules of STUN, any
attribute whose length is not a multiple of 4 bytes <bcp14>MUST</bcp14> be immediately followed by 1 to 3 padding
bytes to ensure the next attribute, if any, starts on a 4-byte boundary; see <xref target="RFC5389"/>.</t>
          <section anchor="dtls-in-stun-data">
            <name>DTLS-IN-STUN-DATA</name>
            <ul spacing="normal">
              <li>
                <t>This attribute contains one DTLS handshake packet and can be present in either a STUN Binding
Request or Response.</t>
              </li>
              <li>
                <t>The value portion of this attribute is variable length and consists of one DTLS handshake packet
from a DTLS flight, as described in <xref section="5.1" sectionFormat="of" target="RFC9147"/> or <xref section="4.2" sectionFormat="of" target="RFC6347"/>.</t>
              </li>
              <li>
                <t>As noted, if the attribute length is not a multiple of 4, padding must be added.</t>
              </li>
              <li>
                <t>The attribute <bcp14>MUST NOT</bcp14> be included when no DTLS handshake packet is being embedded. If an empty
attribute is received, its value <bcp14>MUST NOT</bcp14> be injected into the DTLS layer.</t>
              </li>
              <li>
                <t>If the value portion of this attribute is non-empty but the first byte is not DTLS, i.e. between
20 and 63 inclusive as described in <xref section="3" sectionFormat="of" target="RFC9443"/>, the attribute <bcp14>SHOULD</bcp14> be silently
discarded.</t>
              </li>
            </ul>
          </section>
          <section anchor="dtls-in-stun-ack">
            <name>DTLS-IN-STUN-ACK</name>
            <ul spacing="normal">
              <li>
                <t>This attribute contains acknowledgements of received DTLS handshake packets, whether those
packets arrived directly or in a <tt>DTLS-IN-STUN-DATA</tt> attribute, in the order they were received.</t>
              </li>
              <li>
                <t>The attribute can be present in either a STUN Binding Request or Response.</t>
              </li>
              <li>
                <t>The attribute is variable length and contains a list of uint32 entries, where each entry is the
computed CRC-32 of a received DTLS handshake packet. For an embedded packet, the CRC-32 covers
the <tt>DTLS-IN-STUN-DATA</tt> attribute value and ignores padding.</t>
              </li>
              <li>
                <t>Implementations <bcp14>SHOULD</bcp14> cap the number of uint32 entries included in this attribute. A cap of 4
entries is <bcp14>RECOMMENDED</bcp14>, which bounds the attribute size while still covering all known handshake cases.</t>
              </li>
              <li>
                <t>The attribute <bcp14>SHOULD</bcp14> be omitted when there are no ACKs to send, but <bcp14>MAY</bcp14> be empty.</t>
              </li>
            </ul>
          </section>
        </section>
        <section anchor="mtu-considerations">
          <name>MTU Considerations</name>
          <t>When embedding DTLS in STUN, the DTLS MTU <bcp14>MUST</bcp14> take into account the STUN packet overhead, which
is noted in the table below:</t>
          <table>
            <thead>
              <tr>
                <th align="left">Attribute</th>
                <th align="left">Size</th>
                <th align="left">Defined in</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td align="left">STUN header</td>
                <td align="left">20</td>
                <td align="left">
                  <xref target="RFC5389"/></td>
              </tr>
              <tr>
                <td align="left">ICE-CONTROLLED / ICE-CONTROLLING</td>
                <td align="left">12</td>
                <td align="left">
                  <xref section="19.1" sectionFormat="of" target="RFC5245"/></td>
              </tr>
              <tr>
                <td align="left">PRIORITY</td>
                <td align="left">8</td>
                <td align="left">
                  <xref section="19.1" sectionFormat="of" target="RFC5245"/></td>
              </tr>
              <tr>
                <td align="left">USE-CANDIDATE</td>
                <td align="left">4</td>
                <td align="left">
                  <xref section="19.1" sectionFormat="of" target="RFC5245"/>; not on first packet but on subsequent packets</td>
              </tr>
              <tr>
                <td align="left">MESSAGE-INTEGRITY</td>
                <td align="left">24</td>
                <td align="left">
                  <xref section="15.4" sectionFormat="of" target="RFC5389"/></td>
              </tr>
              <tr>
                <td align="left">MESSAGE-INTEGRITY-SHA256</td>
                <td align="left">36</td>
                <td align="left">
                  <xref section="14.6" sectionFormat="of" target="RFC8489"/>; only applicable when <tt>ice2</tt> is used <xref section="10" sectionFormat="of" target="RFC8445"/></td>
              </tr>
              <tr>
                <td align="left">FINGERPRINT</td>
                <td align="left">8</td>
                <td align="left">
                  <xref section="15.5" sectionFormat="of" target="RFC5389"/></td>
              </tr>
              <tr>
                <td align="left">DTLS-IN-STUN-DATA</td>
                <td align="left">4</td>
                <td align="left">This specification. Overhead for the attribute header</td>
              </tr>
              <tr>
                <td align="left">DTLS-IN-STUN-ACK</td>
                <td align="left">4-20</td>
                <td align="left">This specification. 4 byte attribute header plus 0 to 16 bytes for 0 to 4 CRC-32 values under the <bcp14>RECOMMENDED</bcp14> cap</td>
              </tr>
              <tr>
                <td align="left">USERNAME</td>
                <td align="left">16+</td>
                <td align="left">
                  <xref section="7.1.2.3" sectionFormat="of" target="RFC5245"/>. Variable, typically 4 byte header plus 9 bytes for two four-byte username fragments and the colon plus 3 bytes padding. The actual size is known before the DTLS exchange starts, either from the SDP exchange or a peer-reflexive candidate</td>
              </tr>
              <tr>
                <td align="left">TURN XOR-PEER-ADDRESS</td>
                <td align="left">24</td>
                <td align="left">
                  <xref target="RFC8656"/>. Assuming 16 byte IPv6; only applicable when TURN is used</td>
              </tr>
            </tbody>
          </table>
          <t>Accordingly, the typical 1200 byte DTLS MTU, based on the recommendation in <xref target="RFC8831"/>, <bcp14>MUST</bcp14> be
reduced by the size of the expected overhead. Applications that use custom STUN attributes, i.e. not in the table above, <bcp14>MUST</bcp14> reduce the
DTLS MTU further.</t>
        </section>
      </section>
    </section>
    <section anchor="mechanism">
      <name>Mechanism</name>
      <t>The specifics of the SPED algorithm are detailed below.</t>
      <section anchor="setup">
        <name>Setup</name>
        <t>When using SPED, an ICE agent keeps two lists:</t>
        <ol spacing="normal" type="1"><li>
            <t>A list, L1, of pending DTLS handshake packets.  </t>
            <t>
These packets are created by the DTLS layer. Elements in the list are removed when ACKed by the peer.
The list is cleared when the DTLS layer creates a new flight or the DTLS handshake completes.</t>
          </li>
          <li>
            <t>A list, L2, of pending acknowledgements, as defined above.  </t>
            <t>
Entries in L2 are created when DTLS handshake packets are received, either directly or embedded
in STUN. Entries <bcp14>MAY</bcp14> be sent more than once to improve robustness against STUN loss.</t>
          </li>
        </ol>
      </section>
      <section anchor="sending-a-stun-binding-request-or-response">
        <name>Sending a STUN Binding Request or Response</name>
        <t>When sending a STUN Binding Request or Response, the ICE agent <bcp14>MUST</bcp14> follow the steps below:</t>
        <ol spacing="normal" type="1"><li>
            <t>If L2 contains pending acknowledgements, include them in a <tt>DTLS-IN-STUN-ACK</tt> attribute.</t>
          </li>
          <li>
            <t>If L1 contains a pending DTLS handshake packet, sufficient space remains in the STUN message,
and the candidate pair is eligible for embedding under the implementation's pacing policy,
embed one packet from L1 in a <tt>DTLS-IN-STUN-DATA</tt> attribute. When multiple packets are pending
in L1, round-robin selection is <bcp14>RECOMMENDED</bcp14>.</t>
          </li>
        </ol>
      </section>
      <section anchor="receiving-a-stun-binding-request-or-response">
        <name>Receiving a STUN Binding Request or Response</name>
        <t>When receiving a STUN Binding Request or Response, the ICE agent <bcp14>MUST</bcp14> follow the steps below:</t>
        <ol spacing="normal" type="1"><li>
            <t>If the STUN message contains a <tt>DTLS-IN-STUN-ACK</tt> attribute, process the CRC-32 values in the
attribute and remove each ACKed DTLS handshake packet from L1.</t>
          </li>
          <li>
            <t>If the STUN message contains a non-empty <tt>DTLS-IN-STUN-DATA</tt> attribute, inject the attribute
data into the DTLS layer and add the CRC-32 of the attribute value to L2.</t>
          </li>
        </ol>
      </section>
      <section anchor="direct-transmission-on-selected-candidate-pairs">
        <name>Direct Transmission on Selected Candidate Pairs</name>
        <t>Once an ICE candidate pair is selected, an implementation <bcp14>MUST</bcp14> send DTLS handshake packets
directly over that pair without waiting for a scheduled STUN message. The same packets <bcp14>MAY</bcp14> also be
embedded in STUN messages on other candidate pairs, subject to normal ICE pacing and the
implementation's bandwidth policy.</t>
        <t>While SPED is active, a directly received DTLS handshake packet is acknowledged by adding its
CRC-32 to L2, just as for an embedded packet. The DTLS MTU for a flight that can still be embedded
<bcp14>MUST</bcp14> continue to account for STUN overhead.</t>
      </section>
      <section anchor="termination">
        <name>Termination</name>
        <t>Once a selected ICE candidate pair exists, DTLS handshake packets are sent directly as described
above. Implementations <bcp14>MAY</bcp14> terminate use of SPED at that point, or continue embedding on other
candidate pairs and sending explicit acknowledgements until DTLS handshaking is complete.</t>
        <t>Note that termination is unilateral; even if an implementation stops sending embedded packets,
the remote implementation may continue to do so, and the local implementation <bcp14>MUST</bcp14> continue
to process these embedded packets as described above.</t>
      </section>
    </section>
    <section anchor="examples">
      <name>Examples</name>
      <section anchor="vanilla-dtls-12">
        <name>Vanilla DTLS 1.2</name>
        <artwork><![CDATA[
Client                                      Server
  |                                            |
  |--------- SDP Offer ----------------------->|
  |<-1------ SDP Answer (a=setup:passive) -----|
  |                                            |
  |--------- STUN BindingRequest ------------->|
  |<-2------ STUN BindingResponse -------------|
  |                                            |
  |--------- DTLS F1: ClientHello ------------>|
  |<-3------ DTLS F2: ServerHello, etc---------|
  |--------- DTLS F3: Finished, etc ---------->|
  |<-4------ DTLS F4: Finished, etc -----------|
  |--------- Application data ---------------->|
]]></artwork>
      </section>
      <section anchor="dtls-12-with-sped">
        <name>DTLS 1.2 with SPED</name>
        <t>With <tt>a=setup:passive</tt> in the SDP answer, the offerer is the DTLS client:</t>
        <artwork><![CDATA[
Client                                      Server
  |                                            |
  |--------- SDP Offer ----------------------->|
  |<-1------ SDP Answer (a=setup:passive)------|
  |                                            |
  |--------- BindingRequest/DTLS F1 ---------->|
  |<-2------ BindingResponse/DTLS F2 ----------|
  |                                            |
  |--------- DTLS F3: Finished --------------->|
  |<-3------ DTLS F4: Finished ----------------|
  |--------- Application data ---------------->|
]]></artwork>
        <t>With <tt>a=setup:active</tt> in the SDP answer, the answerer is the DTLS client:</t>
        <artwork><![CDATA[
Client                                      Server
  |                                            |
  |--------- SDP Offer ----------------------->|
  |<-1------ SDP Answer (a=setup:active)-------|
  |                                            |
  |--------- BindingRequest/{} --------------->|
  |<-2------ BindingResponse/DTLS F1 ----------|
  |                                            |
  |--------- DTLS F2: ServerHello ------------>|
  |<-3------ DTLS F3: Finished ----------------|
  |--------- DTLS F4: Finished --------------->|
  |--------- Application data ---------------->|
]]></artwork>
        <t>The flows are similar when the server uses ICE Lite.</t>
      </section>
      <section anchor="vanilla-dtls-13">
        <name>Vanilla DTLS 1.3</name>
        <artwork><![CDATA[
Client                                      Server
  |                                            |
  |--------- SDP Offer ----------------------->|
  |<-1------ SDP Answer (a=setup:passive) -----|
  |                                            |
  |--------- STUN BindingRequest ------------->|
  |<-2------ STUN BindingResponse -------------|
  |                                            |
  |--------- DTLS F1: ClientHello ------------>|
  |<-3------ DTLS F2: ServerHello, etc --------|
  |--------- DTLS F3: Finished --------------->|
  |--------- Application data ---------------->|
  |<-------- DTLS ACK -------------------------|
]]></artwork>
      </section>
      <section anchor="dtls-13-with-sped">
        <name>DTLS 1.3 with SPED</name>
        <t>With <tt>a=setup:passive</tt> in the SDP answer, the offerer is the DTLS client:</t>
        <artwork><![CDATA[
Client                                      Server
  |                                            |
  |--------- SDP Offer ----------------------->|
  |<-1------ SDP Answer (a=setup:passive)------|
  |                                            |
  |--------- BindingRequest/DTLS F1 ---------->|
  |<-2------ BindingResponse/DTLS F2 ----------|
  |                                            |
  |--------- DTLS F3: Finished --------------->|
  |--------- Application data ---------------->|
  |<-------- DTLS ACK -------------------------|
]]></artwork>
        <t>With <tt>a=setup:active</tt> in the SDP answer, the answerer is the DTLS client, and an additional RTT is incurred:</t>
        <artwork><![CDATA[
Client                                      Server
  |                                            |
  |--------- SDP Offer (a=setup:actpass)------>|
  |<-1------ SDP Answer (a=setup:active)-------|
  |                                            |
  |--------- BindingRequest/{} --------------->|
  |<-2------ BindingResponse/DTLS F1 ----------|
  |                                            |
  |--------- DTLS F2: ServerHello, etc ------->|
  |<-3------ DTLS F3: Finished ----------------|
  |--------- Application data ---------------->|
  |--------- DTLS ACK ------------------------>|
]]></artwork>
        <t>Again, the flows are similar when the server uses ICE Lite.</t>
      </section>
      <section anchor="dtls-13-with-flight-2-loss">
        <name>DTLS 1.3 with Flight 2 Loss</name>
        <artwork><![CDATA[
Client                                       Server
  |                                             |
  |--------- BindingRequest/DTLS F1 ----------->|
    <- LOST  BindingResponse/DTLS F2 -----------|
  |<-------- BindingRequest/DTLS F2 ------------|
  |--------- BindingResponse/DTLS F3 ---------->|
  |--------- Application data ----------------->|
  |<-------- DTLS ACK --------------------------|
]]></artwork>
      </section>
      <section anchor="dtls-13-with-flight-3-loss">
        <name>DTLS 1.3 with Flight 3 Loss</name>
        <artwork><![CDATA[
Client                                       Server
  |                                             |
  |<-------- BindingRequest/ACK={} -------------|
  |--------- BindingResponse/F1=ClientHello --->|
  |<-------- DTLS ServerHello ------------------|
  |--------- DTLS Finished ------------ LOST -> |
  |--------- BindingRequest/F3=DTLS Finished--->|
]]></artwork>
        <t>Note: The embedding continues until both client and server are known to be writable, but ICE does
not send any packets it would not otherwise send.</t>
        <artwork><![CDATA[
  |<-------- DTLS ACK --------------------------|
  |--------- Application data ----------------->|
  |<-------- BindingResponse/ACK={F3} ----------|
]]></artwork>
      </section>
      <section anchor="dtls-13-pqc-with-certificate-fragment-loss">
        <name>DTLS 1.3 PQC with Certificate Fragment Loss</name>
        <t>The DTLS ClientHello is split into 2 packets.
The DTLS ServerHello is split into 2 packets.</t>
        <artwork><![CDATA[
Client                                       Server
  |                                             |
  |--------- BindingRequest/F1=ClientHello/1 -->|
    <- LOST  BindingResponse/ACK={}          ---|
  |<-------- BindingRequest/ACK={F1/1} ---------|
]]></artwork>
        <t>Note: When the server sends <tt>ACK{F1/1}</tt>, it does not yet have a DTLS packet to send since both of
the packets from the ClientHello have arrived.</t>
        <artwork><![CDATA[
  |--------- BindingRequest/F1=ClientHello/2 -->|
  |<-------- BindingResponse/F2=ServerHello/1 --|
  |<-------- BindingRequest/F2=ServerHello/2 -->|
  |--------- BindingRequest/F3=DTLS Finished -->|
  |--------- DTLS Finished -------------------->|
  |--------- Application data ----------------->|
  |<-------- DTLS ACK --------------------------|
]]></artwork>
      </section>
      <section anchor="dtls-13-pqc-with-multiple-candidate-pairs-and-certificate-fragment-loss">
        <name>DTLS 1.3 PQC with Multiple Candidate Pairs and Certificate Fragment Loss</name>
        <t>The DTLS ClientHello is split into 2 packets.
The DTLS ServerHello is split into 2 packets.
There are two candidate pairs, CP1 and CP2.
The ICE agent retransmits BindingRequest once.</t>
        <artwork><![CDATA[
Client                                        Server
  |                                              |
CP1  |--------- BindingRequest/F1=ClientHello/1 --->|
CP1    <- LOST  BindingResponse/ACK={F1/1} ---------|
CP2  |--------- BindingRequest/F1=ClientHello/2  -->|
CP2    <- LOST  BindingResponse/F2=ServerHello/1 ---|
CP1  |--------- BindingRequest/F1=ClientHello/1 --->|
CP1  |<-------- BindingResponse/F2=ServerHello/1 ---|
CP2  |--------- BindingRequest/ACK={F2/1} --------->|
CP2  |<-------- BindingResponse/F2=ServerHello/2 ---|
  |--------- DTLS Finished ------------------------->|
  |--------- Application data ---------------------->|
  |<-------- DTLS ACK -------------------------------|
]]></artwork>
      </section>
    </section>
    <section anchor="implementation-notes">
      <name>Implementation Notes</name>
      <t>The following guidance may change based on implementation and deployment experience.</t>
      <section anchor="dtls-timers-and-mtu">
        <name>DTLS Timers and MTU</name>
        <t>When SPED is active, retransmission will be handled within SPED. Accordingly, implementations
<bcp14>SHOULD</bcp14> disable internal DTLS timeouts and resume them once they have terminated SPED.</t>
        <t>When negotiating a PQC cipher suite, implementations <bcp14>SHOULD</bcp14> reduce the DTLS MTU as needed so embedded
DTLS packets still fit within the expected path MTU. Experiments with an MTU near 900 bytes have
been promising, but the best fragmentation strategy requires more study.</t>
      </section>
      <section anchor="candidate-pair-selection-and-bandwidth">
        <name>Candidate-Pair Selection and Bandwidth</name>
        <t>Embedding DTLS does not create additional connectivity checks or change ICE's normal pacing, but
it can substantially increase the size of each check. This is particularly relevant when a PQC
handshake spans multiple packets or ICE checks several candidate pairs concurrently.</t>
        <t><xref section="B.1" sectionFormat="of" target="RFC8445"/> describes an initial budget of approximately 14,600
bytes of outstanding connectivity-check traffic, and implementations <bcp14>SHOULD</bcp14> ensure that
checks stay within that budget even when embedding DTLS packets.</t>
        <t>One approach is to only perform SPED embedding on a limited number of the candidate pairs
being checked, typically those most likely to succeed (e.g., pairs using a relay candidate), in
order to maximize the chance of a successful SPED exchange. Note that this suggested selection
algorithm is somewhat different than ICE's built-in PRIORITY ordering.</t>
        <t>Another approach is to skip SPED embedding for pairs that have outstanding checks.</t>
        <t>When the available budget is exhausted, implementations <bcp14>SHOULD</bcp14> send their ICE
connectivity checks without embedded DTLS until enough time passes to return to an
under-budget state.</t>
      </section>
      <section anchor="dtls-role-selection">
        <name>DTLS Role Selection</name>
        <t>For a client/server deployment using SPED, an answer with <tt>a=setup:passive</tt> lets the offerer act
as the DTLS client and include its ClientHello in its first connectivity check. This can allow the
server to become ready approximately half an RTT earlier than an <tt>a=setup:active</tt> answer.
Without SPED, choosing <tt>a=setup:passive</tt> can instead delay server readiness by approximately half an RTT,
as otherwise the server could have started the DTLS handshake upon receipt of the first ICE connectivity check.
The presence of the <tt>sped</tt> ICE option can be used to select the optimal value for the setup attribute.</t>
      </section>
    </section>
    <section anchor="prior-work">
      <name>Prior Work</name>
      <section anchor="ice-dtls">
        <name>ICE-DTLS</name>
        <t>The <xref target="I-D.thomson-rtcweb-ice-dtls"/> draft from 2012 proposed a similar mechanism to SPED, in
which a single RTT could be removed from session setup by replacing STUN Request and Response
messages with DTLS ClientHello and ServerHello messages, rather than piggybacking the DTLS messages
as SPED does.</t>
        <t>The ICE-DTLS mechanism ends up being considerably more complex than SPED, on account of the fact
that the entirety of ICE functionality needs to be ported over to DTLS, for example consent checks,
or retained as a complementary approach, for example peer address discovery. Furthermore, since it
changes the details of connectivity negotiation, it is not backward compatible and therefore must
be negotiated via SDP <tt>ice-options</tt>.</t>
      </section>
    </section>
    <section anchor="future-work">
      <name>Future Work</name>
      <t>Embedding data into STUN requests is a technique that could also be used for early transmission or
improved reliability of other important data. For example, one could imagine transferring
key-frames, if small enough, or RTCP or SCTP control messages. However, this has not been
thoroughly sketched out in this proposal.</t>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <section anchor="dtls-replay-and-spoofing">
        <name>DTLS Replay and Spoofing</name>
        <t>This specification uses application-layer caching of DTLS packets which means packets can be sent
multiple times using the same sequence number. For the receiver these are considered replays if
received multiple times and rejected as described in <xref section="4.5.1" sectionFormat="of" target="RFC9147"/>.</t>
        <t>The embedded DTLS handshake is authenticated by existing ICE logic, i.e. the ICE USERNAME and
MESSAGE-INTEGRITY mechanisms. Any spoofed ICE packets are rejected accordingly.</t>
      </section>
      <section anchor="pacing-and-congestion">
        <name>Pacing and Congestion</name>
        <t>Negotiating SPED with an ICE option prevents knowingly embedding DTLS for peers that do not
support it, but embedding still increases the size of connectivity checks. A DTLS ClientHello,
particularly one using PQC, can bring a STUN message close to the path MTU.</t>
        <t>The pacing in <xref section="B.1" sectionFormat="of" target="RFC8445"/> assumes connectivity checks of less than 120 bytes and
does not, by itself, bound the bandwidth consumed by larger SPED messages. Implementations <bcp14>SHOULD</bcp14>
account for actual STUN message sizes across candidate pairs, limit embedding to a subset of
prioritized pairs, and continue unmodified ICE checks when the outstanding-data budget is
exhausted, as described in Candidate-Pair Selection and Bandwidth above.</t>
      </section>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <section anchor="stun-attributes">
        <name>STUN Attributes</name>
        <t>This document defines two new STUN attributes, <tt>DTLS-IN-STUN-DATA</tt> and <tt>DTLS-IN-STUN-ACK</tt>. These
attributes need to be registered with IANA in the "STUN Attributes" registry, following the
procedures defined in <xref target="RFC8489"/>. Provisional names have been used in this draft and the
registry.</t>
      </section>
      <section anchor="ice-option-sped">
        <name>ICE Option: sped</name>
        <t>IANA is requested to register the following value in the "ICE Options" subregistry of the
"Interactive Connectivity Establishment (ICE)" registry:</t>
        <ul spacing="normal">
          <li>
            <t>ICE Option: <tt>sped</tt></t>
          </li>
          <li>
            <t>Contact: Authors of this document</t>
          </li>
          <li>
            <t>Change Controller: IETF</t>
          </li>
          <li>
            <t>Description: Support for embedding DTLS handshake packets and acknowledgements in STUN messages,
as defined in this document.</t>
          </li>
        </ul>
      </section>
    </section>
  </middle>
  <back>
    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <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 anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="RFC8829">
          <front>
            <title>JavaScript Session Establishment Protocol (JSEP)</title>
            <author fullname="J. Uberti" initials="J." surname="Uberti"/>
            <author fullname="C. Jennings" initials="C." surname="Jennings"/>
            <author fullname="E. Rescorla" initials="E." role="editor" surname="Rescorla"/>
            <date month="January" year="2021"/>
            <abstract>
              <t>This document describes the mechanisms for allowing a JavaScript application to control the signaling plane of a multimedia session via the interface specified in the W3C RTCPeerConnection API and discusses how this relates to existing signaling protocols.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8829"/>
          <seriesInfo name="DOI" value="10.17487/RFC8829"/>
        </reference>
        <reference anchor="RFC4568">
          <front>
            <title>Session Description Protocol (SDP) Security Descriptions for Media Streams</title>
            <author fullname="F. Andreasen" initials="F." surname="Andreasen"/>
            <author fullname="M. Baugher" initials="M." surname="Baugher"/>
            <author fullname="D. Wing" initials="D." surname="Wing"/>
            <date month="July" year="2006"/>
            <abstract>
              <t>This document defines a Session Description Protocol (SDP) cryptographic attribute for unicast media streams. The attribute describes a cryptographic key and other parameters that serve to configure security for a unicast media stream in either a single message or a roundtrip exchange. The attribute can be used with a variety of SDP media transports, and this document defines how to use it for the Secure Real-time Transport Protocol (SRTP) unicast media streams. The SDP crypto attribute requires the services of a data security protocol to secure the SDP message. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="4568"/>
          <seriesInfo name="DOI" value="10.17487/RFC4568"/>
        </reference>
        <reference anchor="RFC6347">
          <front>
            <title>Datagram Transport Layer Security Version 1.2</title>
            <author fullname="E. Rescorla" initials="E." surname="Rescorla"/>
            <author fullname="N. Modadugu" initials="N." surname="Modadugu"/>
            <date month="January" year="2012"/>
            <abstract>
              <t>This document specifies version 1.2 of the Datagram Transport Layer Security (DTLS) protocol. The DTLS protocol provides communications privacy for datagram protocols. The protocol allows client/server applications to communicate in a way that is designed to prevent eavesdropping, tampering, or message forgery. The DTLS protocol is based on the Transport Layer Security (TLS) protocol and provides equivalent security guarantees. Datagram semantics of the underlying transport are preserved by the DTLS protocol. This document updates DTLS 1.0 to work with TLS version 1.2. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6347"/>
          <seriesInfo name="DOI" value="10.17487/RFC6347"/>
        </reference>
        <reference anchor="RFC9147">
          <front>
            <title>The Datagram Transport Layer Security (DTLS) Protocol Version 1.3</title>
            <author fullname="E. Rescorla" initials="E." surname="Rescorla"/>
            <author fullname="H. Tschofenig" initials="H." surname="Tschofenig"/>
            <author fullname="N. Modadugu" initials="N." surname="Modadugu"/>
            <date month="April" year="2022"/>
            <abstract>
              <t>This document specifies version 1.3 of the Datagram Transport Layer Security (DTLS) protocol. DTLS 1.3 allows client/server applications to communicate over the Internet in a way that is designed to prevent eavesdropping, tampering, and message forgery.</t>
              <t>The DTLS 1.3 protocol is based on the Transport Layer Security (TLS) 1.3 protocol and provides equivalent security guarantees with the exception of order protection / non-replayability. Datagram semantics of the underlying transport are preserved by the DTLS protocol.</t>
              <t>This document obsoletes RFC 6347.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9147"/>
          <seriesInfo name="DOI" value="10.17487/RFC9147"/>
        </reference>
        <reference anchor="RFC8445">
          <front>
            <title>Interactive Connectivity Establishment (ICE): A Protocol for Network Address Translator (NAT) Traversal</title>
            <author fullname="A. Keranen" initials="A." surname="Keranen"/>
            <author fullname="C. Holmberg" initials="C." surname="Holmberg"/>
            <author fullname="J. Rosenberg" initials="J." surname="Rosenberg"/>
            <date month="July" year="2018"/>
            <abstract>
              <t>This document describes a protocol for Network Address Translator (NAT) traversal for UDP-based communication. This protocol is called Interactive Connectivity Establishment (ICE). ICE makes use of the Session Traversal Utilities for NAT (STUN) protocol and its extension, Traversal Using Relay NAT (TURN).</t>
              <t>This document obsoletes RFC 5245.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8445"/>
          <seriesInfo name="DOI" value="10.17487/RFC8445"/>
        </reference>
        <reference anchor="RFC5763">
          <front>
            <title>Framework for Establishing a Secure Real-time Transport Protocol (SRTP) Security Context Using Datagram Transport Layer Security (DTLS)</title>
            <author fullname="J. Fischl" initials="J." surname="Fischl"/>
            <author fullname="H. Tschofenig" initials="H." surname="Tschofenig"/>
            <author fullname="E. Rescorla" initials="E." surname="Rescorla"/>
            <date month="May" year="2010"/>
            <abstract>
              <t>This document specifies how to use the Session Initiation Protocol (SIP) to establish a Secure Real-time Transport Protocol (SRTP) security context using the Datagram Transport Layer Security (DTLS) protocol. It describes a mechanism of transporting a fingerprint attribute in the Session Description Protocol (SDP) that identifies the key that will be presented during the DTLS handshake. The key exchange travels along the media path as opposed to the signaling path. The SIP Identity mechanism can be used to protect the integrity of the fingerprint attribute from modification by intermediate proxies. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="5763"/>
          <seriesInfo name="DOI" value="10.17487/RFC5763"/>
        </reference>
        <reference anchor="RFC5764">
          <front>
            <title>Datagram Transport Layer Security (DTLS) Extension to Establish Keys for the Secure Real-time Transport Protocol (SRTP)</title>
            <author fullname="D. McGrew" initials="D." surname="McGrew"/>
            <author fullname="E. Rescorla" initials="E." surname="Rescorla"/>
            <date month="May" year="2010"/>
            <abstract>
              <t>This document describes a Datagram Transport Layer Security (DTLS) extension to establish keys for Secure RTP (SRTP) and Secure RTP Control Protocol (SRTCP) flows. DTLS keying happens on the media path, independent of any out-of-band signalling channel present. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="5764"/>
          <seriesInfo name="DOI" value="10.17487/RFC5764"/>
        </reference>
        <reference anchor="RFC8839">
          <front>
            <title>Session Description Protocol (SDP) Offer/Answer Procedures for Interactive Connectivity Establishment (ICE)</title>
            <author fullname="M. Petit-Huguenin" initials="M." surname="Petit-Huguenin"/>
            <author fullname="S. Nandakumar" initials="S." surname="Nandakumar"/>
            <author fullname="C. Holmberg" initials="C." surname="Holmberg"/>
            <author fullname="A. Keränen" initials="A." surname="Keränen"/>
            <author fullname="R. Shpount" initials="R." surname="Shpount"/>
            <date month="January" year="2021"/>
            <abstract>
              <t>This document describes Session Description Protocol (SDP) Offer/Answer procedures for carrying out Interactive Connectivity Establishment (ICE) between the agents.</t>
              <t>This document obsoletes RFCs 5245 and 6336.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8839"/>
          <seriesInfo name="DOI" value="10.17487/RFC8839"/>
        </reference>
        <reference anchor="RFC5389">
          <front>
            <title>Session Traversal Utilities for NAT (STUN)</title>
            <author fullname="J. Rosenberg" initials="J." surname="Rosenberg"/>
            <author fullname="R. Mahy" initials="R." surname="Mahy"/>
            <author fullname="P. Matthews" initials="P." surname="Matthews"/>
            <author fullname="D. Wing" initials="D." surname="Wing"/>
            <date month="October" year="2008"/>
            <abstract>
              <t>Session Traversal Utilities for NAT (STUN) is a protocol that serves as a tool for other protocols in dealing with Network Address Translator (NAT) traversal. It can be used by an endpoint to determine the IP address and port allocated to it by a NAT. It can also be used to check connectivity between two endpoints, and as a keep-alive protocol to maintain NAT bindings. STUN works with many existing NATs, and does not require any special behavior from them.</t>
              <t>STUN is not a NAT traversal solution by itself. Rather, it is a tool to be used in the context of a NAT traversal solution. This is an important change from the previous version of this specification (RFC 3489), which presented STUN as a complete solution.</t>
              <t>This document obsoletes RFC 3489. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="5389"/>
          <seriesInfo name="DOI" value="10.17487/RFC5389"/>
        </reference>
        <reference anchor="RFC9443">
          <front>
            <title>Multiplexing Scheme Updates for QUIC</title>
            <author fullname="B. Aboba" initials="B." surname="Aboba"/>
            <author fullname="G. Salgueiro" initials="G." surname="Salgueiro"/>
            <author fullname="C. Perkins" initials="C." surname="Perkins"/>
            <date month="July" year="2023"/>
            <abstract>
              <t>RFC 7983 defines a scheme for a Real-time Transport Protocol (RTP) receiver to demultiplex Datagram Transport Layer Security (DTLS), Session Traversal Utilities for NAT (STUN), Secure Real-time Transport Protocol (SRTP) / Secure Real-time Transport Control Protocol (SRTCP), ZRTP, and Traversal Using Relays around NAT (TURN) channel packets arriving on a single port. This document updates RFC 7983 and RFC 5764 to also allow QUIC packets to be multiplexed on a single receiving socket.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9443"/>
          <seriesInfo name="DOI" value="10.17487/RFC9443"/>
        </reference>
        <reference anchor="RFC5245">
          <front>
            <title>Interactive Connectivity Establishment (ICE): A Protocol for Network Address Translator (NAT) Traversal for Offer/Answer Protocols</title>
            <author fullname="J. Rosenberg" initials="J." surname="Rosenberg"/>
            <date month="April" year="2010"/>
            <abstract>
              <t>This document describes a protocol for Network Address Translator (NAT) traversal for UDP-based multimedia sessions established with the offer/answer model. This protocol is called Interactive Connectivity Establishment (ICE). ICE makes use of the Session Traversal Utilities for NAT (STUN) protocol and its extension, Traversal Using Relay NAT (TURN). ICE can be used by any protocol utilizing the offer/answer model, such as the Session Initiation Protocol (SIP). [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="5245"/>
          <seriesInfo name="DOI" value="10.17487/RFC5245"/>
        </reference>
        <reference anchor="RFC8489">
          <front>
            <title>Session Traversal Utilities for NAT (STUN)</title>
            <author fullname="M. Petit-Huguenin" initials="M." surname="Petit-Huguenin"/>
            <author fullname="G. Salgueiro" initials="G." surname="Salgueiro"/>
            <author fullname="J. Rosenberg" initials="J." surname="Rosenberg"/>
            <author fullname="D. Wing" initials="D." surname="Wing"/>
            <author fullname="R. Mahy" initials="R." surname="Mahy"/>
            <author fullname="P. Matthews" initials="P." surname="Matthews"/>
            <date month="February" year="2020"/>
            <abstract>
              <t>Session Traversal Utilities for NAT (STUN) is a protocol that serves as a tool for other protocols in dealing with NAT traversal. It can be used by an endpoint to determine the IP address and port allocated to it by a NAT. It can also be used to check connectivity between two endpoints and as a keep-alive protocol to maintain NAT bindings. STUN works with many existing NATs and does not require any special behavior from them.</t>
              <t>STUN is not a NAT traversal solution by itself. Rather, it is a tool to be used in the context of a NAT traversal solution.</t>
              <t>This document obsoletes RFC 5389.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8489"/>
          <seriesInfo name="DOI" value="10.17487/RFC8489"/>
        </reference>
        <reference anchor="RFC8656">
          <front>
            <title>Traversal Using Relays around NAT (TURN): Relay Extensions to Session Traversal Utilities for NAT (STUN)</title>
            <author fullname="T. Reddy" initials="T." role="editor" surname="Reddy"/>
            <author fullname="A. Johnston" initials="A." role="editor" surname="Johnston"/>
            <author fullname="P. Matthews" initials="P." surname="Matthews"/>
            <author fullname="J. Rosenberg" initials="J." surname="Rosenberg"/>
            <date month="February" year="2020"/>
            <abstract>
              <t>If a host is located behind a NAT, it can be impossible for that host to communicate directly with other hosts (peers) in certain situations. In these situations, it is necessary for the host to use the services of an intermediate node that acts as a communication relay. This specification defines a protocol, called "Traversal Using Relays around NAT" (TURN), that allows the host to control the operation of the relay and to exchange packets with its peers using the relay. TURN differs from other relay control protocols in that it allows a client to communicate with multiple peers using a single relay address.</t>
              <t>The TURN protocol was designed to be used as part of the Interactive Connectivity Establishment (ICE) approach to NAT traversal, though it can also be used without ICE.</t>
              <t>This document obsoletes RFCs 5766 and 6156.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8656"/>
          <seriesInfo name="DOI" value="10.17487/RFC8656"/>
        </reference>
        <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="I-D.thomson-rtcweb-ice-dtls">
          <front>
            <title>Using Datagram Transport Layer Security (DTLS) For Interactivity Connectivity Establishment (ICE) Connectivity Checking: ICE-DTLS</title>
            <author fullname="Martin Thomson" initials="M." surname="Thomson">
              <organization>Skype</organization>
            </author>
            <date day="27" month="March" year="2012"/>
            <abstract>
              <t>   Interactivity Connectivity Establishment (ICE) connectivity checking
   using the Datagram Transport Layer Security (DTLS) handshake is
   described.  The DTLS handshake provides sufficient information to
   identify valid candidates and establish consent.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-thomson-rtcweb-ice-dtls-00"/>
        </reference>
      </references>
    </references>
    <?line 677?>

<section anchor="benchmark-numbers">
      <name>Benchmark Numbers</name>
      <t>For the scenario without packet loss, benchmarking is straightforward, and the savings from SPED
amount to 1 RTT, as expected. However, in packet loss scenarios, the savings can be much larger,
especially in the worst (p95) cases. This is likely due in part to using ICE pacing rather than
exponential backoff for DTLS retransmissions.</t>
      <t>In this benchmark, a 200 ms RTT is used. Packet loss is simulated using the virtual network
mechanism in Google's libwebrtc. Duration is measured as time from start until both peers have
completed the DTLS handshake.</t>
      <section anchor="dtls-13-with-pqc">
        <name>DTLS 1.3 with PQC</name>
        <table>
          <thead>
            <tr>
              <th align="left">DTLS 1.3 with PQC</th>
              <th align="left">Loss %</th>
              <th align="left">p10 (ms)</th>
              <th align="left">p50</th>
              <th align="left">average</th>
              <th align="left">p95</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">Vanilla</td>
              <td align="left">0</td>
              <td align="left">850</td>
              <td align="left">850</td>
              <td align="left">850</td>
              <td align="left">850</td>
            </tr>
            <tr>
              <td align="left">SPED</td>
              <td align="left">0</td>
              <td align="left">650</td>
              <td align="left">650</td>
              <td align="left">650</td>
              <td align="left">650</td>
            </tr>
            <tr>
              <td align="left"> </td>
              <td align="left"> </td>
              <td align="left"> </td>
              <td align="left"> </td>
              <td align="left"> </td>
              <td align="left"> </td>
            </tr>
            <tr>
              <td align="left">Vanilla</td>
              <td align="left">5%</td>
              <td align="left">850</td>
              <td align="left">850</td>
              <td align="left">947</td>
              <td align="left">1253</td>
            </tr>
            <tr>
              <td align="left">SPED</td>
              <td align="left">5%</td>
              <td align="left">650</td>
              <td align="left">650</td>
              <td align="left">656</td>
              <td align="left">700</td>
            </tr>
            <tr>
              <td align="left"> </td>
              <td align="left"> </td>
              <td align="left"> </td>
              <td align="left"> </td>
              <td align="left"> </td>
              <td align="left"> </td>
            </tr>
            <tr>
              <td align="left">Vanilla</td>
              <td align="left">10%</td>
              <td align="left">850</td>
              <td align="left">900</td>
              <td align="left">1193</td>
              <td align="left">2170</td>
            </tr>
            <tr>
              <td align="left">SPED</td>
              <td align="left">10%</td>
              <td align="left">650</td>
              <td align="left">650</td>
              <td align="left">685</td>
              <td align="left">800</td>
            </tr>
            <tr>
              <td align="left"> </td>
              <td align="left"> </td>
              <td align="left"> </td>
              <td align="left"> </td>
              <td align="left"> </td>
              <td align="left"> </td>
            </tr>
            <tr>
              <td align="left">Vanilla</td>
              <td align="left">25%</td>
              <td align="left">850</td>
              <td align="left">1350</td>
              <td align="left">2020</td>
              <td align="left">3080</td>
            </tr>
            <tr>
              <td align="left">SPED</td>
              <td align="left">25%</td>
              <td align="left">650</td>
              <td align="left">750</td>
              <td align="left">850</td>
              <td align="left">1105</td>
            </tr>
          </tbody>
        </table>
      </section>
      <section anchor="dtls-13">
        <name>DTLS 1.3</name>
        <table>
          <thead>
            <tr>
              <th align="left">DTLS 1.3</th>
              <th align="left">Loss %</th>
              <th align="left">p10 (ms)</th>
              <th align="left">p50</th>
              <th align="left">average</th>
              <th align="left">p95</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">Vanilla</td>
              <td align="left">0</td>
              <td align="left">750</td>
              <td align="left">750</td>
              <td align="left">750</td>
              <td align="left">750</td>
            </tr>
            <tr>
              <td align="left">SPED</td>
              <td align="left">0</td>
              <td align="left">550</td>
              <td align="left">550</td>
              <td align="left">550</td>
              <td align="left">550</td>
            </tr>
            <tr>
              <td align="left"> </td>
              <td align="left"> </td>
              <td align="left"> </td>
              <td align="left"> </td>
              <td align="left"> </td>
              <td align="left"> </td>
            </tr>
            <tr>
              <td align="left">Vanilla</td>
              <td align="left">5%</td>
              <td align="left">750</td>
              <td align="left">750</td>
              <td align="left">800</td>
              <td align="left">1150</td>
            </tr>
            <tr>
              <td align="left">SPED</td>
              <td align="left">5%</td>
              <td align="left">550</td>
              <td align="left">550</td>
              <td align="left">555</td>
              <td align="left">600</td>
            </tr>
            <tr>
              <td align="left"> </td>
              <td align="left"> </td>
              <td align="left"> </td>
              <td align="left"> </td>
              <td align="left"> </td>
              <td align="left"> </td>
            </tr>
            <tr>
              <td align="left">Vanilla</td>
              <td align="left">10%</td>
              <td align="left">750</td>
              <td align="left">750</td>
              <td align="left">935</td>
              <td align="left">1200</td>
            </tr>
            <tr>
              <td align="left">SPED</td>
              <td align="left">10%</td>
              <td align="left">550</td>
              <td align="left">550</td>
              <td align="left">560</td>
              <td align="left">600</td>
            </tr>
            <tr>
              <td align="left"> </td>
              <td align="left"> </td>
              <td align="left"> </td>
              <td align="left"> </td>
              <td align="left"> </td>
              <td align="left"> </td>
            </tr>
            <tr>
              <td align="left">Vanilla</td>
              <td align="left">25%</td>
              <td align="left">750</td>
              <td align="left">1150</td>
              <td align="left">1400</td>
              <td align="left">2560</td>
            </tr>
            <tr>
              <td align="left">SPED</td>
              <td align="left">25%</td>
              <td align="left">550</td>
              <td align="left">600</td>
              <td align="left">620</td>
              <td align="left">750</td>
            </tr>
          </tbody>
        </table>
      </section>
      <section anchor="dtls-12">
        <name>DTLS 1.2</name>
        <table>
          <thead>
            <tr>
              <th align="left">DTLS 1.2</th>
              <th align="left">Loss %</th>
              <th align="left">p10 (ms)</th>
              <th align="left">p50</th>
              <th align="left">average</th>
              <th align="left">p95</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">Vanilla</td>
              <td align="left">0</td>
              <td align="left">850</td>
              <td align="left">850</td>
              <td align="left">850</td>
              <td align="left">850</td>
            </tr>
            <tr>
              <td align="left">SPED</td>
              <td align="left">0</td>
              <td align="left">650</td>
              <td align="left">650</td>
              <td align="left">650</td>
              <td align="left">650</td>
            </tr>
            <tr>
              <td align="left"> </td>
              <td align="left"> </td>
              <td align="left"> </td>
              <td align="left"> </td>
              <td align="left"> </td>
              <td align="left"> </td>
            </tr>
            <tr>
              <td align="left">Vanilla</td>
              <td align="left">5%</td>
              <td align="left">850</td>
              <td align="left">850</td>
              <td align="left">916</td>
              <td align="left">1300</td>
            </tr>
            <tr>
              <td align="left">SPED</td>
              <td align="left">5%</td>
              <td align="left">650</td>
              <td align="left">650</td>
              <td align="left">695</td>
              <td align="left">1150</td>
            </tr>
            <tr>
              <td align="left"> </td>
              <td align="left"> </td>
              <td align="left"> </td>
              <td align="left"> </td>
              <td align="left"> </td>
              <td align="left"> </td>
            </tr>
            <tr>
              <td align="left">Vanilla</td>
              <td align="left">10%</td>
              <td align="left">850</td>
              <td align="left">900</td>
              <td align="left">1133</td>
              <td align="left">2150</td>
            </tr>
            <tr>
              <td align="left">SPED</td>
              <td align="left">10%</td>
              <td align="left">650</td>
              <td align="left">650</td>
              <td align="left">690</td>
              <td align="left">760</td>
            </tr>
            <tr>
              <td align="left"> </td>
              <td align="left"> </td>
              <td align="left"> </td>
              <td align="left"> </td>
              <td align="left"> </td>
              <td align="left"> </td>
            </tr>
            <tr>
              <td align="left">Vanilla</td>
              <td align="left">25%</td>
              <td align="left">850</td>
              <td align="left">1350</td>
              <td align="left">3920</td>
              <td align="left">8860</td>
            </tr>
            <tr>
              <td align="left">SPED</td>
              <td align="left">25%</td>
              <td align="left">750</td>
              <td align="left">750</td>
              <td align="left">862</td>
              <td align="left">1400</td>
            </tr>
          </tbody>
        </table>
      </section>
    </section>
    <section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
    </section>
  </back>
  <!-- ##markdown-source:
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
dGsWp0ZvfYj+B9GT1PGifQAA

-->

</rfc>
