<?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-uberti-tsvwg-warp-00" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.31.0 -->
  <front>
    <title abbrev="WARP">WebRTC Abridged Roundtrip Protocol (WARP)</title>
    <seriesInfo name="Internet-Draft" value="draft-uberti-tsvwg-warp-00"/>
    <author fullname="Justin Uberti">
      <organization>OpenAI</organization>
      <address>
        <email>justin@uberti.name</email>
      </address>
    </author>
    <author fullname="Philipp Hancke">
      <organization>Meta Platforms Inc.</organization>
      <address>
        <email>philipp.hancke@googlemail.com</email>
      </address>
    </author>
    <date year="2026" month="July" day="22"/>
    <area>Web and Internet Transport</area>
    <workgroup>Transport and Services Working Group</workgroup>
    <keyword>webrtc</keyword>
    <keyword>ice</keyword>
    <keyword>dtls</keyword>
    <keyword>sctp</keyword>
    <keyword>latency</keyword>
    <abstract>
      <?line 42?>

<t>This document outlines a set of improvements to the WebRTC session setup
protocols aimed at significantly reducing connection setup latency. This
improved setup mechanism is known as the WebRTC Abridged Roundtrip Protocol
(WARP). By addressing inefficiencies within the current multi-protocol handshake
process, WARP can reduce setup latency from 6 RTTs to 2 RTTs when its
optimizations are used together, with a direct impact on perceived performance
and reliability.</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-uberti-tsvwg-warp-latest.html"/>.
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-uberti-tsvwg-warp/"/>.
      </t>
      <t>
        Discussion of this document takes place on the
        tsvwg Working Group mailing list (<eref target="mailto:tsvwg@ietf.org"/>),
        which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/tsvwg/"/>.
        Subscribe at <eref target="https://www.ietf.org/mailman/listinfo/tsvwg/"/>.
      </t>
      <t>Source for this draft and an issue tracker can be found at
        <eref target="https://github.com/fippo/warp-snap-sped"/>.</t>
    </note>
  </front>
  <middle>
    <?line 52?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>The current WebRTC connection setup, as outlined in <xref target="RFC8829"/>, incurs 4 RTTs
before media can be sent and 6 RTTs before the data channel opens. In 2011, this
wasn’t much worse than the 4 RTTs needed to set up a WebSocket over TCP/TLS, but
nowadays, compared to QUIC’s (<xref target="RFC9000"/>) optimized 0-RTT setup (1 RTT for a
WebSocket), it seems incredibly slow.</t>
      <t>In addition, the typical topology for a WebRTC session has changed from being a
peer-to-peer to client-server interaction, on account of the rise of the use of
WebRTC in conferencing, game streaming, and other services that have a centrally
hosted component. While setup latency for peer-to-peer calls was largely masked
by the time needed for the human callee to actually answer the call, this
latency is immediately observable in most client-server contexts. As WebRTC
gains traction in additional low-latency domains (e.g., AI services and
robotics), this trend will continue to increase.</t>
      <t>Furthermore, reducing the number of RTTs and packets on the wire has a direct
impact on the robustness of the protocol. With fewer steps, there are fewer
things that can be affected by network delays or losses, which will translate
into improved reliability for all WebRTC topologies.</t>
      <t>Accordingly, it is clear that a problem exists, and it is one worth solving.</t>
      <section anchor="analysis">
        <name>Analysis</name>
        <t>First, let's look at the current WebRTC setup protocol.</t>
        <t>Similar to the situation noted above regarding WebSockets over TCP/TLS, much of
the current slowness comes from multiple protocols being stacked atop one
another, so that there are multiple handshakes and these handshakes are all
serialized.</t>
        <t>For WebRTC, there are five separate protocols involved:</t>
        <ul spacing="normal">
          <li>
            <t>the signaling protocol (eg HTTP), used for offer-answer exchange</t>
          </li>
          <li>
            <t>ICE (<xref target="RFC8445"/>), used to establish a transport from the signaling exchange</t>
          </li>
          <li>
            <t>DTLS 1.2 (<xref target="RFC6347"/>), used to secure the ICE transport</t>
          </li>
          <li>
            <t>SCTP (<xref target="RFC4960"/>), used to establish a reliability layer on top of DTLS</t>
          </li>
          <li>
            <t>DCEP (<xref target="RFC8832"/>), used to map WebRTC data channels to SCTP streams</t>
          </li>
        </ul>
        <t>To make matters worse, both DTLS 1.2 and SCTP have a 4-way handshake, which
means that they each incur 2 round trips, which, when combined with the
individual RTTs from signaling and ICE, bring the total number of RTTs to 6.</t>
        <t>On the bright side, DCEP was intentionally designed to not incur an additional
roundtrip, as data can be sent at the same time as the DCEP open message.
However, if the client is the one initiating the data channel, there will be an
extra 0.5 RTT before the server can send data (when DCEP negotiation is used).</t>
        <t>This protocol sandwich is discussed in <xref section="5" sectionFormat="of" target="RFC8831"/>, but a full
accounting of all the round trips is not provided. Accordingly, we illustrate
this Matryoshka of handshakes below.</t>
        <artwork><![CDATA[
Offerer                                    Answerer
   |                                            |
   |------------- SDP Offer (actpass) --------->|
   |<-1---------- SDP Answer (active) ----------|
   |                                            |
   |<-2---------- ICE/Connectivity Checks ----->|
   |                                            |
   |<------------ DTLS ClientHello -------------|
   |--3---------- DTLS ServerHello ------------>|
   |<------------ DTLS Finished ----------------|
   |     ANSWERER MEDIA READY (3.5RTT)          |
   |--4---------- DTLS Finished --------------->|
   |      OFFERER MEDIA READY (4 RTT)           |
   |                                            |
   |------------- SCTP INIT ------------------->|
   |<-5---------- SCTP INIT ACK ----------------|
   |------------- SCTP COOKIE ECHO ------------>|
   |<-6---------- SCTP COOKIE ACK --------------|
   |      OFFERER DATA READY (6 RTT)            |
   |                                            |
   |------------- DCEP (Open Channel) --------->|
   |------------- "hello" --------------------->|
   |     ANSWERER DATA READY (6.5 RTT)          |
   |                                            |
   |<------------ DCEP ACK ---------------------|
   |<------------ "world" ----------------------|
]]></artwork>
        <t>As noted above, DCEP does not require an additional RTT, as the first data
channel payload can be sent concurrently with the DCEP OPEN, per
<xref section="4" sectionFormat="of" target="RFC8832"/>.</t>
      </section>
    </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="discussion">
      <name>Discussion</name>
      <section anchor="role-of-dtls-srtp">
        <name>Role of DTLS-SRTP</name>
        <t>It might be tempting to blame this chatty setup sequence on the requirement to
use DTLS-SRTP (<xref target="RFC5764"/>) rather than SDES (<xref target="RFC4568"/>). During the long
discussions that went into mandating use of DTLS-SRTP for securing the WebRTC
media transport, the two extra round trips needed to establish DTLS were
explicitly discussed but ultimately considered to be an acceptable trade off, as
noted in the IETF 87 RTCWEB minutes.</t>
        <t>However, DTLS is used not just for media keying, but also as a secure transport
for WebRTC data channels. Therefore, even if SDES had been retained for media
keying, we would still have the same slow setup for data channels.</t>
      </section>
      <section anchor="areas-for-improvement">
        <name>Areas for improvement</name>
        <t>When considering what we can be done to improve this set of stacked handshakes,
we considered the following:</t>
        <ul spacing="normal">
          <li>
            <t>Are some aspects of protocol negotiation unnecessary when used in an
encapsulated context?</t>
          </li>
          <li>
            <t>For the aspects that are necessary, can some of them be shifted forward into
an earlier negotiation?</t>
          </li>
          <li>
            <t>Have there been any improvements to underlying protocols that we can benefit
from?</t>
          </li>
        </ul>
      </section>
    </section>
    <section anchor="proposed-solution">
      <name>Proposed Solution</name>
      <t>Looking at the various handshakes through this lens, we can find multiple
potential areas for optimization, which are enumerated below.</t>
      <section anchor="snap">
        <name>SNAP</name>
        <t>SCTP was designed to be a Layer 4 protocol, similar to TCP, and therefore
includes mechanisms to prevent connection hijacking and DDoS attacks. However,
when run atop DTLS (<xref target="RFC8261"/>), as is always the case in WebRTC, these
concerns do not exist, and therefore these mechanisms can be bypassed entirely.
As a direct result, we can dispense with the SCTP auth cookie exchange that
typically adds its own roundtrip.</t>
        <t>Moreover, once the auth cookie exchange is removed, all that is left to
negotiate are the various initialization parameters (e.g., the starting sequence
number). However, these parameters are declarative and simply need to be
transferred to the remote party. As a result they can easily be pulled forward
and exchanged via SDP during session negotiation, eliminating the SCTP INIT
message exchange and its associated roundtrip.</t>
        <t>This improvement to the SCTP setup process, which saves two roundtrips, is known
as SNAP and is documented in <xref target="I-D.hancke-tsvwg-snap"/>.</t>
      </section>
      <section anchor="sped">
        <name>SPED</name>
        <t>Turning our attention to DTLS, we can see that in the current ladder diagram
DTLS cannot start until ICE completes, as ICE needs to first find a viable
candidate pair on which to transmit. However, we can extend the STUN messages
used in ICE with a new DATA attribute to allow DTLS data to be piggybacked over
STUN, which enables the first DTLS roundtrip to occur concurrently with the
initial STUN exchange. This mechanism, known as SPED, saves a DTLS roundtrip and
is documented in <xref target="I-D.hancke-webrtc-sped"/>.</t>
      </section>
      <section anchor="dtls-13">
        <name>DTLS 1.3</name>
        <t>As noted above, DTLS 1.2 requires a 2-RTT setup before data can be sent.
However, DTLS 1.3 (<xref target="RFC9147"/>) supports a 1-RTT setup, as well as a 0-RTT
resumption mechanism. We focus here on the 1-RTT mechanism as it is simpler and
more general, and, thanks to SPED, we can eliminate its cost by piggybacking it
on the underlying ICE exchange.</t>
        <t>The net result is that we can save yet another roundtrip by moving to DTLS 1.3's
1-RTT setup.</t>
      </section>
      <section anchor="total-savings">
        <name>Total Savings</name>
        <t>With these optimizations, we can completely eliminate almost all of WebRTC's
media roundtrips:</t>
        <ul spacing="normal">
          <li>
            <t>SNAP: 2 RTT</t>
          </li>
          <li>
            <t>SPED: 1 RTT</t>
          </li>
          <li>
            <t>DTLS 1.3: 1 RTT</t>
          </li>
        </ul>
        <t>In total, we can reduce the cost to establish WebRTC connections with both media
and data to 1 signaling roundtrip and 1 media roundtrip (2 total roundtrips), as
shown in the sequence diagram below. (Note the use of a=setup:passive in the
answer, discussed further in the section on DTLS roles later in this document.)</t>
        <artwork><![CDATA[
Offerer                                 Answerer
  |                                          |
  |--- SDP Offer (actpass, sped, snap) ----->|
  |<-1 SDP Answer (passive, sped, snap) -----|
  |                                          |
  |--- ICE Check + DTLS ClientHello -------->|
  |<-2 ICE Response + DTLS ServerHello/Fin --|
  |<-- ICE Triggered Check ------------------|
  |    OFFERER MEDIA/DATA READY (2RTT)       |
  |                                          |
  |--- DTLS Finished + DCEP Open + "hello" ->|
  |--- ICE Response ------------------------>|
  |    ANSWERER MEDIA/DATA READY (2.5RTT)    |
  |                                          |
  |<----------- DCEP ACK --------------------|
  |<------------ "world" --------------------|
]]></artwork>
        <t>However, these improvements are all orthogonal, meaning they can be mixed and
matched if needed if conditions require partial adoption. These mechanisms are
all also backwards compatible, allowing clients to offer a fully optimized
approach and negotiate down individual optimizations if necessary.</t>
      </section>
      <section anchor="deployment-experience">
        <name>Deployment Experience</name>
        <t>In one production deployment, WARP was observed to reduce setup latency by
approximately 4 RTTs at p50 and approximately 12 RTTs at p95. The median
improvement matches the 4-RTT savings expected from the combined protocol
optimizations. The additional improvement at p95 was attributed to the
reduction in handshake packets and, consequently, the reduced chance of packet
loss.</t>
      </section>
    </section>
    <section anchor="best-practices">
      <name>Best Practices</name>
      <t>As these optimizations touch on various parts of the WebRTC stack, several
interactions have complexities that warrant closer analysis.</t>
      <section anchor="ice">
        <name>ICE</name>
        <t>To minimize setup delay, clients <bcp14>MUST</bcp14> follow the <xref section="12.1" sectionFormat="of" target="RFC8445"/>
guidance to begin sending as soon as they have a valid candidate pair, rather
than waiting for pair selection to complete.</t>
        <t><xref target="RFC8445"/> also suggests that both sides use Full ICE implementations for
improved security. Naturally, Full ICE provides significant benefits when used
in a peer-to-peer context, especially in terms of improving hole punching
success as well as consent checking, but this is of nominal value in a
client-server context where the server is directly reachable and consent can be
mostly inferred by the receipt of a valid STUN check. (One edge case, which
requires an on-path attacker, is the replay of a valid STUN check from a forged
source address, i.e., that of a victim.)</t>
        <t>In fact, use of Full ICE can make life more complicated for a server, in that
when it receives a DTLS ClientHello tunneled in a STUN Binding Request via SPED,
it cannot respond with an untunnelled ServerHello until it completes its own ICE
check, whereas a Lite ICE server would be able to send immediately, as outlined
in <xref section="12.1.1" sectionFormat="of" target="RFC8445"/>. In particular, when using post-quantum crypto
suites or other suites with large keys that are split across multiple DTLS
records, it is typically more convenient to send these records as raw DTLS
rather than encapsulating them in STUN using SPED. This is because only a single
DTLS record can be piggybacked on a STUN Response (which would mean the other
records need to be sent via different STUN transactions).</t>
        <t>In addition, in the figure above, the answerer has completed DTLS after only 1.5
RTTs, but it cannot send data because it has not yet performed its own ICE
checks and identified a Valid candidate pair. If it were using ICE Lite, this
step would be unnecessary and it would be ready to send at this earlier
juncture, which would save an additional roundtrip.</t>
        <t>Therefore, when using WARP on a server, ICE Lite is <bcp14>RECOMMENDED</bcp14>. If true STUN
consent checks are required, a modified version of Full ICE can be employed,
where upon receipt of a STUN request, the associated candidate pair is
immediately added to the Valid List (as is the case in ICE Lite), but the ICE
Agent will still send a check to the remote endpoint to verify consent, with the
candidate pair being removed from the Valid List if the check fails.</t>
        <t>Note that Full ICE is still recommended for all client-to-client scenarios. In
addition to its value in establishing peer-to-peer connections and identifying
the optimal candidate pair, the STUN checks sent by a client as part of Full ICE
provide protection against DTLS amplification attacks, and are often quite
useful in demultiplexing traffic at the server.</t>
      </section>
      <section anchor="dtls-role-and-asetup">
        <name>DTLS Role and a=setup</name>
        <t>The role of DTLS client/server in a WebRTC session is controlled by the a=setup
SDP attribute, which is defined in <xref target="RFC5763"/>, and the default guidance in
WebRTC (from <xref target="RFC9429"/>) is to use a=setup:active in the answer. Depending on
the scenario, additional considerations may apply, as shown in a few scenarios
below.</t>
        <section anchor="client-server-server-is-dtls-client-asetupactive">
          <name>Client-server, server is DTLS client (a=setup:active)</name>
          <t>In this scenario the answerer is acting as a DTLS client following the default
a=setup:active guidance.</t>
          <artwork><![CDATA[
Offerer                                 Answerer
  |                                          |
  |---- SDP Offer (actpass, sped, snap) ---->|
  |<-1- SDP Answer (active, sped, snap) -----|
  |                                          |
  |--- ICE Check --------------------------->|
  |<-2 ICE Response + DTLS ClientHello ------|
  |<-- ICE Check (Triggered)-----------------|
  |    OFFERER MEDIA/DATA READY (2RTT)       |
  |                                          |
  |--- DTLS SHello/Fin + DCEP + "hello" ---->|
  |--- ICE Response ------------------------>|
  |    ANSWERER MEDIA/DATA READY (2.5RTT)    |
  |                                          |
  |<-- DTLS Finished + DCEP ACK -------------|
  |<------------ "world" --------------------|
]]></artwork>
          <t>Note that the initial client-server STUN request carries no DTLS payload as the
client (as offerer) is acting as the DTLS server, which reduces the benefit of
SPED slightly. While the overall time to establish media and data is the same as
shown in the a=setup:passive example above (namely, 2RTT before the offerer can
send, and 2.5 RTTs before the answerer can send), we can do slightly better when
we use a=setup:passive with ICE Lite. ICE Lite is still desirable in this
a=setup:active scenario, as noted above, but does not change the overall number
of RTTs.</t>
        </section>
        <section anchor="client-server-server-is-dtls-server-asetuppassive">
          <name>Client-server, server is DTLS server (a=setup:passive)</name>
          <t>In this scenario the answerer is acting as a DTLS server by specifying
a=setup:passive in the answer, and has also elected to use ICE Lite. The server
has also been made to send the DCEP open message in this scenario for maximum
latency benefit.</t>
          <artwork><![CDATA[
Offerer                                 Answerer
  |                                          |
  |--- SDP Offer (actpass, sped, snap) ----->|
  |<-1 SDP Answer (passive, sped, snap, lite)|
  |                                          |
  |--- ICE Check + DTLS ClientHello -------->|
  |    ANSWERER MEDIA/DATA READY (1.5RTT)    |
  |                                          |
  |<-2 ICE Response + DTLS SHello/Fin + DCEP |
  |    OFFERER MEDIA/DATA READY (2RTT)       |
  |                                          |
  |--- DTLS Finished + DCEP ACK + "hello" -->|
  |<------------ "world" --------------------|
]]></artwork>
          <t>Because the DTLS ClientHello is piggybacked on the initial client-server STUN
request, the server can complete DTLS processing and start sending encrypted
media and data as soon as that message is received, at only 1.5 RTTs.</t>
        </section>
        <section anchor="peer-to-peer-remote-peer-is-dtls-client-asetupactive">
          <name>Peer to Peer, remote peer is DTLS client (a=setup:active)</name>
          <t>The sequence diagrams above presume that the answerer will not be able to send
STUN checks directly to the offerer, due to the offerer (as a client) being
behind NAT. However, in the event the offerer is in fact reachable on the first
inbound STUN check, this can also lead to the answerer being able to send in
only 1.5 RTTs. (If the offerer is not reachable, this turns into the
client-server, server is DTLS client scenario above.)</t>
          <artwork><![CDATA[
Offerer                                 Answerer
  |                                          |
  |---- SDP Offer (actpass, sped, snap) ---->|
  |<-1- SDP Answer (active, sped, snap) -----|
  |                                          |
  |<-- ICE Check + DTLS ClientHello ---------|
  |--- ICE Res + DTLS SHello/Fin ----------->|
  |    ANSWERER MEDIA/DATA READY (1.5RTT)    |
  |                                          |
  |--- ICE Check (Triggered) --------------->|
  |<-2 ICE Response -------------------------|
  |    OFFERER MEDIA/DATA READY (2RTT)       |
  |                                          |
  |------------ DCEP OPEN + "hello" ---------|
  |<----------- DCEP ACK --------------------|
  |<------------ "world" --------------------|
]]></artwork>
          <t>In fact, thanks to SPED, the offerer completes DTLS in a single RTT, and has to
wait for its own triggered check to complete before it can actually start to
send. This suggests that SPED might be useful to tunnel application data as well
as handshake messages, which would result in the offerer being ready to send
after just a single RTT. However, sending an actual media stream is likely
beyond the scope of SPED, so we leave this possibility for future exploration.</t>
        </section>
        <section anchor="peer-to-peer-remote-peer-is-dtls-server-asetuppassive">
          <name>Peer to Peer, remote peer is DTLS server (a=setup:passive)</name>
          <t>If the remote peer is a DTLS server, the initial STUN check that it sends to the
offerer will not have a piggybacked DTLS message. Regardless, if this STUN check
succeeds, the answerer will also be ready to send in only 1.5 RTT. (If not, this
scenario turns into the client-server, server is DTLS server scenario above.)</t>
          <artwork><![CDATA[
Offerer                                 Answerer
  |                                          |
  |---- SDP Offer (actpass, sped, snap) ---->|
  |<-1- SDP Answer (passive, sped, snap) ----|
  |                                          |
  |<-- ICE Check ----------------------------|
  |--- ICE Response + DTLS ClientHello ----->|
  |--- ICE Check (Triggered) --------------->|
  |    ANSWERER MEDIA/DATA READY (1.5RTT)    |
  |                                          |
  |<-2 ICE Response + DTLS SHello/Fin + DCEP |
  |    OFFERER MEDIA/DATA READY (2RTT)       |
  |                                          |
  |--- DTLS Finished + DCEP ACK + "hello" -->|
  |<------------ "world" --------------------|
]]></artwork>
        </section>
        <section anchor="conclusions">
          <name>Conclusions</name>
          <t>For the most part, the full benefits of WARP can be realized even when using the
existing default behavior for a=setup, with the offerer needing 2 RTT and the
answerer 2.5 RTT to complete the handshaking. However, in a client-server
scenario where ICE Lite is in use and the server wants to send data first, the
server handshaking latency can be reduced to 1.5 RTT by using a=setup:passive.</t>
        </section>
      </section>
      <section anchor="rto-sync">
        <name>RTO sync</name>
        <t>During the analysis of the current WebRTC handshake, it was noted that each
handshake layer has its own retransmission timeout (RTO). ICE specifies a
minimum of 500ms for its timeout in <xref section="14.3" sectionFormat="of" target="RFC8445"/>; DTLS specifies
a suggested value of 400ms in <xref section="5.8.2" sectionFormat="of" target="RFC9147"/> (although it notes
that a value from ICE <bcp14>MAY</bcp14> be used), and SCTP specifies a recommended initial
value of 1 second and a minimum of 1 second in <xref section="16" sectionFormat="of" target="RFC9260"/>.</t>
        <t>These separate RTO values are problematic not just because they lead to
considerably different behavior from the various stack layers in the event of a
packet loss, but also because a loss may occur in a layer that has not yet
completed a roundtrip, leading to a fallback to a (conservative) default value
even if there is actual knowledge of the RTT in another layer.</t>
        <t>To address this, when using WARP, implementations <bcp14>SHOULD</bcp14> propagate the observed
RTT values from the ICE layer to the DTLS and SCTP layers, with no fixed minimum
value, as it can be difficult to predict future needs (TODO: should DTLS' 1.5x
offset be recommended?). If the ICE selected candidate pair changes, the RTT
<bcp14>SHOULD</bcp14> be updated accordingly throughout the layers.</t>
        <t>One complexity with this approach is that the ICE RTT is not known until the
first request-response cycle is complete, which means that if one of the initial
messages (e.g., a STUN request with a piggybacked DTLS ClientHello) is lost, a
default RTO value will be used and therefore the DTLS implementation will be
slow to request a retransmit. To address this, implementations <bcp14>SHOULD</bcp14> allow
caching of ICE RTT values, which can be reused when connecting to the same
server in future sessions.</t>
      </section>
      <section anchor="early-application-data">
        <name>Early Application Data</name>
        <t>DTLS 1.3 permits a server to send application data after sending its own
<tt>Finished</tt>, before receiving the client's <tt>Finished</tt> (<xref section="2" sectionFormat="of" target="RFC8446"/>). The client <bcp14>MUST NOT</bcp14> deliver that data until it has received and
validated the server's certificate, certificate verification, and <tt>Finished</tt>,
including the signaled certificate fingerprint. If application data arrives
first due to packet loss or reordering, the client <bcp14>SHOULD</bcp14> buffer it until
validation completes.</t>
      </section>
      <section anchor="dtls-helloverifyrequest">
        <name>DTLS HelloVerifyRequest</name>
        <t>When DTLS is run in a WebRTC context, authenticated ICE connectivity checks
already provide the protection for which a DTLS cookie exchange is normally
used. Consequently, the DTLS 1.2 <tt>HelloVerifyRequest</tt>, or the cookie-bearing
DTLS 1.3 <tt>HelloRetryRequest</tt>, is not needed (<xref section="5.1" sectionFormat="of" target="RFC9147"/>). This
is existing WebRTC behavior, not an optimization introduced by WARP.</t>
      </section>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>See the respective SPED (<xref target="I-D.hancke-webrtc-sped"/>) and SNAP
(<xref target="I-D.hancke-tsvwg-snap"/>) docs for the security considerations associated with
those protocols.</t>
      <section anchor="dtls-13-1">
        <name>DTLS 1.3</name>
        <t><xref target="RFC9147"/> details how DTLS can be used for amplification attacks and provides
some guidance to defend against this threat, including the use of a cookie to
ensure the client's IP address is legitimate. This mechanism is usually disabled
when DTLS is used in WebRTC, as STUN credentials usually provide protection
against spoofed traffic, and the self-signed ECC certs used in modern WebRTC are
also typically quite small.</t>
      </section>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>This document requires no IANA action.</t>
    </section>
  </middle>
  <back>
    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <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="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="RFC4960">
          <front>
            <title>Stream Control Transmission Protocol</title>
            <author fullname="R. Stewart" initials="R." role="editor" surname="Stewart"/>
            <date month="September" year="2007"/>
            <abstract>
              <t>This document obsoletes RFC 2960 and RFC 3309. It describes the Stream Control Transmission Protocol (SCTP). SCTP is designed to transport Public Switched Telephone Network (PSTN) signaling messages over IP networks, but is capable of broader applications.</t>
              <t>SCTP is a reliable transport protocol operating on top of a connectionless packet network such as IP. It offers the following services to its users:</t>
              <t>-- acknowledged error-free non-duplicated transfer of user data,</t>
              <t>-- data fragmentation to conform to discovered path MTU size,</t>
              <t>-- sequenced delivery of user messages within multiple streams, with an option for order-of-arrival delivery of individual user messages,</t>
              <t>-- optional bundling of multiple user messages into a single SCTP packet, and</t>
              <t>-- network-level fault tolerance through supporting of multi-homing at either or both ends of an association.</t>
              <t>The design of SCTP includes appropriate congestion avoidance behavior and resistance to flooding and masquerade attacks. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="4960"/>
          <seriesInfo name="DOI" value="10.17487/RFC4960"/>
        </reference>
        <reference anchor="RFC8832">
          <front>
            <title>WebRTC Data Channel Establishment Protocol</title>
            <author fullname="R. Jesup" initials="R." surname="Jesup"/>
            <author fullname="S. Loreto" initials="S." surname="Loreto"/>
            <author fullname="M. Tüxen" initials="M." surname="Tüxen"/>
            <date month="January" year="2021"/>
            <abstract>
              <t>The WebRTC framework specifies protocol support for direct interactive rich communication using audio, video, and data between two peers' web browsers. This document specifies a simple protocol for establishing symmetric data channels between the peers. It uses a two-way handshake and allows sending of user data without waiting for the handshake to complete.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8832"/>
          <seriesInfo name="DOI" value="10.17487/RFC8832"/>
        </reference>
        <reference anchor="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>
        <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="I-D.hancke-tsvwg-snap">
          <front>
            <title>SCTP Negotiation Acceleration Protocol</title>
            <author fullname="Philipp Hancke" initials="P." surname="Hancke">
              <organization>Meta Platforms Inc.</organization>
            </author>
            <author fullname="Justin Uberti" initials="J." surname="Uberti">
              <organization>OpenAI</organization>
            </author>
            <author fullname="Victor Boivie" initials="V." surname="Boivie">
              <organization>Google</organization>
            </author>
            <date day="30" month="December" year="2025"/>
            <abstract>
              <t>   WebRTC Data Channels use the Stream Control Transmission Protocol
   (SCTP) over a Datagram Transport Layer Security (DTLS) association.
   The standard SCTP connection establishment requires a handshake that
   introduces latency.  This document specifies a method to accelerate
   the datachannel establishment by embedding the SCTP initialization
   parameters within the Session Description Protocol (SDP) offer/answer
   exchange.  This reduces the time required to open a data channel by
   up to two network round-trip times.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-hancke-tsvwg-snap-00"/>
        </reference>
        <reference anchor="I-D.hancke-webrtc-sped">
          <front>
            <title>STUN Protocol for Embedding DTLS (SPED)</title>
            <author fullname="Philipp Hancke" initials="P." surname="Hancke">
              <organization>Meta Platforms Inc.</organization>
            </author>
            <author fullname="Justin Uberti" initials="J." surname="Uberti">
              <organization>OpenAI</organization>
            </author>
            <author fullname="Jonas Oreland" initials="J." surname="Oreland">
              <organization>Google</organization>
            </author>
            <date day="2" month="March" year="2026"/>
            <abstract>
              <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>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-hancke-webrtc-sped-00"/>
        </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="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="RFC9429">
          <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="April" year="2024"/>
            <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>
              <t>This specification obsoletes RFC 8829.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9429"/>
          <seriesInfo name="DOI" value="10.17487/RFC9429"/>
        </reference>
        <reference anchor="RFC9260">
          <front>
            <title>Stream Control Transmission Protocol</title>
            <author fullname="R. Stewart" initials="R." surname="Stewart"/>
            <author fullname="M. Tüxen" initials="M." surname="Tüxen"/>
            <author fullname="K. Nielsen" initials="K." surname="Nielsen"/>
            <date month="June" year="2022"/>
            <abstract>
              <t>This document describes the Stream Control Transmission Protocol (SCTP) and obsoletes RFC 4960. It incorporates the specification of the chunk flags registry from RFC 6096 and the specification of the I bit of DATA chunks from RFC 7053. Therefore, RFCs 6096 and 7053 are also obsoleted by this document. In addition, RFCs 4460 and 8540, which describe errata for SCTP, are obsoleted by this document.</t>
              <t>SCTP was originally designed to transport Public Switched Telephone Network (PSTN) signaling messages over IP networks. It is also suited to be used for other applications, for example, WebRTC.</t>
              <t>SCTP is a reliable transport protocol operating on top of a connectionless packet network, such as IP. It offers the following services to its users:</t>
              <t>The design of SCTP includes appropriate congestion avoidance behavior and resistance to flooding and masquerade attacks.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9260"/>
          <seriesInfo name="DOI" value="10.17487/RFC9260"/>
        </reference>
        <reference anchor="RFC8446">
          <front>
            <title>The Transport Layer Security (TLS) Protocol Version 1.3</title>
            <author fullname="E. Rescorla" initials="E." surname="Rescorla"/>
            <date month="August" year="2018"/>
            <abstract>
              <t>This document specifies version 1.3 of the Transport Layer Security (TLS) protocol. TLS allows client/server applications to communicate over the Internet in a way that is designed to prevent eavesdropping, tampering, and message forgery.</t>
              <t>This document updates RFCs 5705 and 6066, and obsoletes RFCs 5077, 5246, and 6961. This document also specifies new requirements for TLS 1.2 implementations.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8446"/>
          <seriesInfo name="DOI" value="10.17487/RFC8446"/>
        </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="RFC9000">
          <front>
            <title>QUIC: A UDP-Based Multiplexed and Secure Transport</title>
            <author fullname="J. Iyengar" initials="J." role="editor" surname="Iyengar"/>
            <author fullname="M. Thomson" initials="M." role="editor" surname="Thomson"/>
            <date month="May" year="2021"/>
            <abstract>
              <t>This document defines the core of the QUIC transport protocol. QUIC provides applications with flow-controlled streams for structured communication, low-latency connection establishment, and network path migration. QUIC includes security measures that ensure confidentiality, integrity, and availability in a range of deployment circumstances. Accompanying documents describe the integration of TLS for key negotiation, loss detection, and an exemplary congestion control algorithm.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9000"/>
          <seriesInfo name="DOI" value="10.17487/RFC9000"/>
        </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="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="RFC8261">
          <front>
            <title>Datagram Transport Layer Security (DTLS) Encapsulation of SCTP Packets</title>
            <author fullname="M. Tuexen" initials="M." surname="Tuexen"/>
            <author fullname="R. Stewart" initials="R." surname="Stewart"/>
            <author fullname="R. Jesup" initials="R." surname="Jesup"/>
            <author fullname="S. Loreto" initials="S." surname="Loreto"/>
            <date month="November" year="2017"/>
            <abstract>
              <t>The Stream Control Transmission Protocol (SCTP) is a transport protocol originally defined to run on top of the network protocols IPv4 or IPv6. This document specifies how SCTP can be used on top of the Datagram Transport Layer Security (DTLS) protocol. Using the encapsulation method described in this document, SCTP is unaware of the protocols being used below DTLS; hence, explicit IP addresses cannot be used in the SCTP control chunks. As a consequence, the SCTP associations carried over DTLS can only be single-homed.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8261"/>
          <seriesInfo name="DOI" value="10.17487/RFC8261"/>
        </reference>
      </references>
    </references>
  </back>
  <!-- ##markdown-source:
H4sIAEqyYWoAA+1c73IbR3L/Pk8xkT+YjAFIpChZZnz20SQVMSeJDEmf6iqV
qltgB8CeFru4nQUpxPZVXiPf8ix5lDxJ+tfdMzsLQD5ZvnMuVXElJwLY+df/
+9c9OxwOTVu0pTu2D9648fXtqT0ZN0U+c7m9rldV3jbF0l41dVtP6tLuvTm5
vtp/YLLxuHF3GEOfH5hJ1rpZ3ayPrW9zY/J6UmULmjJvsmk7XI1d0xbD1t/d
z4b3WbMcPnpk/Gq8KLwv6qpdL+nRi/Pb56ZaLejZY5PTfMdmUlfeVX7lj23b
rJyh9R6brHHZsaWt2qzK7UXVuqZyrb1tssov66Y193XzdtbUq+Vx9yU/e+Oa
u2LivH1DTxTVzP4jnjJv3ZqG5MfG2qG9d+OmnfCf9Cj/m7el5z/8pF3yHyXt
rpqszZ2rVg7jdDk+IH2UA/VXsXaRFaU+8+vCtdNR3eDhrJnMj+28bZf++OFD
PIRvijs3Cg89xBcPx019791DHv8QaxbtfDU+ttNiuawfMlV9ldH/LF1OP2OP
vu0m5sdGMmhUbA54+D5GyTSjebsojclW7bxumFD0/9ZOV2UpfP6nlW+Lyn7L
4/k32ndWFf+WtcTgY3u5dNXJBf/ghA5/4BG/lhVHmGXHtFfzoqR92xdZNXnr
dsz7yrWZvaJNTutm4UkaJqN0kaWMH815/K9ndT0r+afRpF4YU9EgmuiOeGiK
app8Gg6HNhv7tskmrTG388JbkunVwlWtrVdtWVQkRpn1JHj11BaLZVPfOfzq
bVvbdu6s6pJ3LOJ4koRgqWpEY4sFKVjWWl/MqmJaTLKqLde2cflqAqEh0a/c
pI1Dg8yNLDZjdMVcf1y4CR2x8AtLG31b1feVzXy6jR9RaSMqPbLfrG2W5w02
TBugE05pWwUtWtBZ70lwiMGYcrJqGtBhsSpJVsKRLG0g9/OM2ERfkZb5gcXE
lk4mx3L9k9hpUy/sU3t9e8tEO5S/7ueuskXrTb1si4UymujVOLvydIC2njna
RTPgLREP8qIhQoEHxCtL9Fq6ZuIKEIf+YqZWpMkwAI0ri2xMItGuR8LjRZHn
pTPmExiSpqZdYjlwvDunknCTIwOQWGUhJ3LZ7777+vr56bNnh1/88MOAvqDx
3h7xqczY0UYc8SkvMqbIGNSoxC4pDfQZkJjMHz1GFK1caWvSHT+iDdrDRwcH
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

-->

</rfc>
