<?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-00" 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-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="Jonas Oreland">
      <organization>Google</organization>
      <address>
        <email>jonaso@google.com</email>
      </address>
    </author>
    <date year="2026" month="March" 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-00.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>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 a valid ICE candidate pair exists, the client can continue to send DTLS packets either in
embedded form, or as usual over the specified pair.</t>
            </li>
          </ol>
          <t>In addition, to improve the reliability of the DTLS handshake, an explicit acknowledgement
mechanism is built into SPED. Encapsulated DTLS handshake packets 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="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, or is empty to indicate SPED support when no
DTLS packet is being embedded.</t>
              </li>
              <li>
                <t>While SPED is active, this attribute <bcp14>MUST</bcp14> be present in every STUN Binding Request or Response
sent by a SPED-capable agent.</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>If the value portion of this attribute is empty, it indicates SPED support and that no DTLS
packet is being embedded in that STUN message. An empty 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 <tt>DTLS-IN-STUN-DATA</tt> packets 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 <tt>DTLS-IN-STUN-DATA</tt> attribute value, i.e. a DTLS handshake packet,
ignoring 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 can be empty, i.e. the length of the list of uint32 values can be 0.</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 anchor="backwards-compatibility">
          <name>Backwards Compatibility</name>
          <t>SPED is fully backwards compatible with existing ICE agents. If the peer ICE agent does not
support SPED, this can be detected via the lack of the mandatory <tt>DTLS-IN-STUN-DATA</tt> attribute in
its first authenticated ICE check or response, and upon recognizing this fact the local ICE agent
can easily fall back to standard unencapsulated DTLS.</t>
          <t>Given this straightforward in-band negotiation, this specification does not currently define an
offer/answer negotiation mechanism or any ICE options. Note that even if an ICE option were used,
the offerer would still need to be prepared to handle ICE checks, with or without SPED, that arrive
before the signaling answer.</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 embedded DTLS packets are received. 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>Embed any pending ACKs from L2 in a DTLS-IN-STUN-ACK attribute.</t>
          </li>
          <li>
            <t>If there is a pending DTLS handshake packet in L1 and sufficient space remains in the STUN
message, embed one DTLS handshake packet from L1 into a <tt>DTLS-IN-STUN-DATA</tt> attribute.
When multiple packets are pending in L1, round-robin selection is <bcp14>RECOMMENDED</bcp14>.</t>
          </li>
          <li>
            <t>Otherwise, include <tt>DTLS-IN-STUN-DATA</tt> with an empty value simply to indicate SPED support.</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 this is the first authenticated STUN message received from the peer, and the
<tt>DTLS-IN-STUN-DATA</tt> attribute is not present, conclude that the peer does not support SPED, and
conclude SPED processing.</t>
          </li>
          <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="termination">
        <name>Termination</name>
        <t>Once a valid ICE candidate pair exists and direct sending is possible, implementations <bcp14>MAY</bcp14>
terminate use of SPED and send DTLS directly. Implementations <bcp14>MAY</bcp14> instead continue to send
embedded DTLS until DTLS handshaking is complete, for example, to continue to use SPED's explicit 
acknowledgement mechanism.</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-non-sped-peer">
        <name>DTLS 1.3 with Non-SPED Peer</name>
        <artwork><![CDATA[
Client                                      Server
  |                                            |
  |--------- BindingRequest/DTLS F1 ---------->|
  |<-------- BindingResponse/               ---|
]]></artwork>
        <t>The absence of a <tt>DTLS-IN-STUN-DATA</tt> attribute allows the client to conclude that the server does
not support SPED.</t>
        <artwork><![CDATA[
  |--------- DTLS F1: ClientHello ------------>|
  |<-------- DTLS F2: ServerHello ------------ |
  |--------- DTLS F3: Finished --------------->|
  |--------- Application data ---------------->|
  |<-------- DTLS ACK -------------------------|
]]></artwork>
      </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 configuration for the SPED stack is <bcp14>RECOMMENDED</bcp14>. Note that this guidance may change
based on implementation and deployment experience:</t>
      <ol spacing="normal" type="1"><li>
          <t>When SPED is active, disable internal DTLS timeouts, and resume them when receiving the first
STUN Binding Response.</t>
        </li>
        <li>
          <t>When using a PQC cipher suite, 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>
        </li>
      </ol>
    </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>The protocol defined in this specification increases the size of the STUN packets that are sent by
the ICE agent to a peer without knowing if that peer can use the embedded data. Although the
initial data sent is just the DTLS ClientHello, this packet can be close to a MTU when a PQC
cipher suite is used. If this is unacceptable, an offer-answer mechanism for SPED can be used to
address this concern.</t>
        <t>The STUN requests used for embedding DTLS are already paced as described in
<xref section="B.1" sectionFormat="of" target="RFC8445"/>, which limits the outgoing bandwidth from this mechanism.
However, that pacing assumes an ICE check of "less than 120 bytes", which will not be
the case when a DTLS ClientHello is embedded, especially a PQC one.</t>
        <t>Solutions to this problem require transmitting the DTLS ClientHello less often, perhaps only
on certain candidate pairs, and is a subject for further study.</t>
      </section>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</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>
  </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="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 628?>

<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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

-->

</rfc>
