<?xml version="1.0" encoding="utf-8"?>
  <?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
  <!-- generated by https://github.com/cabo/kramdown-rfc version 1.7.39 (Ruby 4.0.2) -->


<!DOCTYPE rfc  [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">

]>


<rfc ipr="trust200902" docName="draft-ietf-ippm-responsiveness-09" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true">
  <front>
    <title abbrev="Responsiveness under Working Conditions">Responsiveness under Working Conditions</title>

    <author initials="C." surname="Paasch" fullname="Christoph Paasch">
      <organization></organization>
      <address>
        <email>christoph.paasch+ietf@gmail.com</email>
      </address>
    </author>
    <author initials="R." surname="Meyer" fullname="Randall Meyer">
      <organization>Apple Inc.</organization>
      <address>
        <postal>
          <street>One Apple Park Way</street>
          <city>Cupertino, California 95014</city>
          <country>United States of America</country>
        </postal>
        <email>rrm@apple.com</email>
      </address>
    </author>
    <author initials="S." surname="Cheshire" fullname="Stuart Cheshire">
      <organization>Apple Inc.</organization>
      <address>
        <postal>
          <street>One Apple Park Way</street>
          <city>Cupertino, California 95014</city>
          <country>United States of America</country>
        </postal>
        <email>cheshire@apple.com</email>
      </address>
    </author>
    <author initials="W." surname="Hawkins" fullname="Will Hawkins">
      <organization>University of Cincinnati</organization>
      <address>
        <email>hawkinwh@ucmail.uc.edu</email>
      </address>
    </author>

    <date year="2026" month="July" day="06"/>

    <area>Transport</area>
    <workgroup>IP Performance Measurement</workgroup>
    <keyword>Internet-Draft</keyword>

    <abstract>


<?line 99?>

<t>For many years, a lack of responsiveness, variously called
lag, latency, or bufferbloat, has been recognized
as an unfortunate, but common, symptom in today's networks.
Even after a decade of work on standardizing technical solutions,
it remains a common problem for the end users.</t>

<t>Everyone "knows" that it is "normal" for a video conference to
have problems when somebody else at home is
watching a 4K movie or uploading photos from their phone.
However, there is no technical reason for this to be the case.
In fact, various queue management solutions
have solved the problem.</t>

<t>Our network connections continue to suffer from an unacceptable amount
of delay, not for a lack of technical solutions, but rather a lack of awareness
of the problem and deployment of its solutions.
We believe that creating a tool that measures the problem and matches people's
everyday experience will create the necessary awareness,
and result in a demand for solutions.</t>

<t>This document specifies the "Responsiveness Test" for measuring responsiveness.
It uses common protocols and mechanisms to measure user
experience specifically when the network is under working conditions.
The measurement is expressed as "Round-trips Per Minute" (RPM)
and should be included with goodput (up and down) and
idle latency as critical indicators of network quality.</t>



    </abstract>



  </front>

  <middle>


<?line 128?>

<section anchor="introduction"><name>Introduction</name>

<t>For many years, a lack of responsiveness, variously called
lag, latency, or bufferbloat, has been recognized
as an unfortunate, but common, symptom in today's networks <xref target="Bufferbloat"/>.
Solutions like fq_codel <xref target="RFC8290"/>, PIE <xref target="RFC8033"/>, Cake <xref target="Cake"/>
and L4S <xref target="RFC9330"/> have been standardized
and implemented, and are, to some extent, deployed.
Nevertheless, poor network responsiveness,
resulting from bufferbloat and other causes,
continues to affect many services and the people who use them.</t>

<t>Whenever a network path is actively being used at its full capacity,
if the bottleneck link has poor buffer management
then it may allow an overly large queue to build up,
resulting in high delay for the traffic in that queue.
Although bufferbloat significantly degrades user experience,
the impact can be transitory.
On a network that is generally underutilized
except for occasional medium-sized data transfers,
like sending an email with an attachment, or uploading a photo,
the user-experience disruptions can be intermittent and brief,
making them hard to diagnose.
The user may notice that the network seems sluggish for a few seconds,
or a videoconferencing application may briefly
show a message saying that the connection is “unstable”,
but before the user has a chance to run any
diagnostic tools to investigate, the problem has disappeared.
People have come to accept that the Internet will have “glitches”
from time to time, and it has almost become considered normal.
Upgrading to an Internet connection with higher
capacity does not eliminate these disruptions,
but it can shorten their duration.
Ironically, this has the effect of making the problem even
harder to diagnose, so instead of fixing the true problem,
this “upgrade” creates a situation where the actual
underlying problem is even more likely to remain unsolved.
Instead of eliminating Internet glitches,
it just makes them a little more elusive and harder to investigate.</t>

<t>To help engineers work on eliminating these glitches
it is useful to have a tool that
(a) reliably recreates the conditions that cause systems with
poor buffer management to exhibit latency spikes, and
(b) quantifies the magnitude of the resulting latency spikes.
This helps engineers identify where these problems exist.
After design changes are made, it helps engineers quantify
how much their changes have improved the situation.</t>

<t>Note that this document does not advocate
for entirely eliminating queues from networking,
or even for mandating shallow queues of some arbitrary fixed size.
Packet-switched network traffic tends to be bursty,
to varying degrees depending on the technology,
and queuing performs the essential function of
smoothing out those bursts to avoid packet loss.
What this document recommends is that (a) network queues should
be large enough to perform their essential smoothing function,
without being so large that they add additional unnecessary delay,
and (b) that when a persistent standing queue begins to form
(therefore exceeding the amount of queueing needed for smoothing)
network queues should communicate feedback
back to the sender, telling to to reduce its
sending rate to allow the standing queue to drain.</t>

<t>Including the responsiveness-under-working-conditions
test among other measurements of network quality
(e.g., goodput and idle latency) helps customers make
informed choices about the Internet service they buy.</t>

<section anchor="terminology"><name>Terminology</name>

<t>The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
"SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and
"OPTIONAL" 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>

<t>This document uses terminology and concepts from HTTP <xref target="RFC9110"/>,
such as request and response header fields and content.</t>

<t>The term "bufferbloat" describes the situation where a network device
is prone to buffering an excessive number of packets in transit through
that device, causing a backlog of packets waiting to go out,
resulting in those waiting packets experiencing
excessive unnecessary delay <xref target="Bufferbloat"/>.</t>

</section>
<section anchor="round-trips-per-minute-rpm"><name>Round-Trips per Minute (RPM)</name>

<t>Although engineers are comfortable thinking about
and discussing latency in terms of milliseconds,
this is a poor way to report responsiveness to end users,
because it is not intuitive to the general public.
The units are unfamiliar to many ("what is a millisecond?")
and even when the units are understood in principle,
they can still be misleading to many
("100 ms -- that sounds good -- it's only a tenth of a second!").</t>

<t>In addition, most current “latency” tests report the round-trip
time when the network is otherwise idle, which not a good predictor of how
a network will behave when it is actively being used for normal data transfer.</t>

<t>Instead, this document defines an algorithm for the "Responsiveness Test"
that explicitly measures responsiveness under working conditions,
not only in idle conditions.</t>

<t>The results are presented as "round-trips per minute" (RPM),
which is calculated by dividing 60 by the round-trip time in seconds
(or 60,000 divided by the round-trip time in milliseconds).</t>

<t>The advantages of expressing working latency
in round-trips per minute (RPM) are two-fold:
First, it allows for a unit that where "higher is better".
This kind of unit is often more familiar to end-users.
Second, the range of the values tends to be around
the four-digit integer range, which is a value easy to
compare and read, again allowing for a more intuitive use.
Finally, we abbreviate the unit to "RPM", a wink to the
"revolutions per minute" that we use for car engines.</t>

<t>Some readers have complained that they don’t understand what "RPM" means,
and that it is just an arbitrary number with no way to judge
what should be considered a bad RPM rating or a good RPM rating.
We counter that argument by saying that round-trip times expressed
in milliseconds are equally arbitrary, and people similarly judge
whether a certain number of milliseconds is “good” or “bad”
from their personal experience and in relation to the range of
round trip times that are observed across a range of technologies.
In the same way, the RPM of a car engine is also interpreted
relative to the range of values that people have learned to expect.
We have learned that 8000 is a high operating RPM for a car engine,
and anything below 1000 RPM is low.
Interestingly, the range of values observed for network
responsiveness happen to fall into this familiar range.</t>

<t>This document classifies responsiveness scores into four broad categories:</t>

<figure><artwork><![CDATA[
                        Poor responsiveness
           300 RPM ------------------------------ 200 ms RTT
                        Fair responsiveness
          1000 RPM ------------------------------ 60 ms RTT
                        Good responsiveness
          6000 RPM ------------------------------ 10 ms RTT
                      Excellent responsiveness
]]></artwork></figure>

<t>The reasoning for these classifications is two-fold.
Partly they are rooted in the unchangeable laws of physics,
and partly they are determined by human factors.</t>

<t>We know that we can never beat the speed-of-light propagation delay.
To pick one representative example, the coast-to-coast
distance across the USA (Stanford to MIT) is about 4,500 km.
That makes the round-trip distance 9,000 km.
The speed of light is 300,000 km/s,
so the Stanford-MIT round-trip time has to be at least 30 ms.
But light in fiber-optic cables travels at just 200,000 km/s
(the propagation rate for electrical signals in copper wire is
about the same) making the round-trip time at least 45 ms <xref target="L96"/>
for these kinds of fiber-optic or electrical Internet circuits.
Of course, software overhead, queuing effects, and other delays
will add to that round-trip time.
If our actual measured working round-trip time
is at most 2x the 45 ms theoretical minimum,
then we feel the network is operating well.
If our actual measured round-trip time is 10x the 45 ms minimum or worse,
then we feel we have considerable opportunity for improvement.
That 45 ms time is for communications coast-to-coast across a continent,
and not everyone is communicating over such long distances.
In fact, modern content delivery networks (CDNs) have
data centers in many locations around the world, partly
to keep data closer to the user and reduce round-trip times.
For communication over a shorter distance,
within a single state or within a city, we should be striving
to achieve consistent reliable round-trip times below 10 ms.
This is why, in the context of the public Internet,
we consider that only working-latency values
below 10 ms (6000 RPM or better)
deserve to be classified as “excellent”.</t>

<t>Human factors influence latency requirements, and by lucky
coincidence the speed of light and the size of our planet are such
that physics allows us to meet those requirements on planet Earth.</t>

<t>For example, decades of research in the telephone community has
concluded that when mouth-to-ear round-trip times exceed 250 ms,
the quality of conversation begins to degrade.
For example, when the person talking pauses briefly, the listener can
mistakenly think that the speaker has finished and is waiting for
a reply, and then inadvertently talk over their next sentence.
A long round-trip delay means that the person interrupting speaks
longer before realizing their mistake, and these repeated interruptions
makes the conversation become stilted and awkward.
Given that various other components of Internet audio
(digitizing audio from a microphone, compressing that audio,
quantizing it into discreet packets, decompressing the received audio,
and playing the audio through a speaker) also require time,
we believe it is reasonable to allow 200 ms for packet transmission
over the network, and 50 ms for other elements of the process.
Accordingly, we consider that working-latency values
above 200 ms (300 RPM or worse) deserve to be classified as “poor”.</t>

<t>For another example, consider that Virtual Reality (VR) systems
typically refresh their screens at 90Hz (11 ms per frame) or higher.
Similarly, Apple recently increased the refresh rate
of iPhone screens from 60Hz (16 ms) to 120Hz (8 ms),
because human users can tell the difference,
and appreciate the improved responsiveness
provided by a lower screen-refresh delay.</t>

<t>Consequently, while we consider the minimum for an
acceptable telephone call to be around 300 RPM (200 ms),
we acknowledge that better responsiveness (1000 RPM or 60 ms RTT)
can deliver a telephone call that is considered “good”
rather than just “fair”.</t>

<t>Looking to the future, we feel that the networking community should
be able to achieve consistent working round-trip delays on par with
current screen refresh times, which is why we set 6000 RPM (10 ms)
as our threshold for a network to be considered “excellent.”</t>

<t>At this end of the performance spectrum,
we note that the speed of sound (in air) is roughly 350 m/s
(a million times slower than the speed of light).
This is 35 cm per millisecond, or roughly a foot per millisecond.
This gives us a parameter to evaluate what constitutes
a “reasonable” goal for network latency.
While lower latency may always be better for certain computer
interactions, pursuing ever-lower network latencies, down to
one millisecond or lower, may not be necessary for human audio.
A one millisecond difference in network delay is
equivalent to a change of listener position, relative
to the loudspeaker playing the audio, of just one foot.</t>

<t>The BITAG “Latency Explained” report <xref target="BITAG"/>
has excellent detailed information on the causes of network latency,
and the human factors that influence latency requirements.</t>

</section>
</section>
<section anchor="overview"><name>Overview</name>

<t>In the last few decades, the networking industry has made enormous
advances in terms of the quantity of data our wired and wireless
links can transfer. Rates have gone from kilobits per second, to
megabits, to gigabits, and continue to increase.
We also have broad industry agreement on the units for measuring
network capacity -- bits per second.
We have a wide array of tools available for measuring capacity
in these units, and these tools generally produce results that
are consistent and comparable between different tools.</t>

<t>In contrast to our remarkable improvements in throughput, we have
not done a good job developing networks that deliver consistently
low delay in all normal operating conditions. In fact, many people
may have unconsciously assumed that it would not be possible to
achieve such a capability. Correspondingly, we have not had
industry agreement on what constitutes reasonable fair working
conditions under which to measure a network’s round-trip delay,
and, consequently, for a long time we have measured and reported
the round-trip time on an idle network as the only metric.
The actual round-trip
times observed when traffic is flowing have generally been so much
worse than the idle round-trip time (often by a factor of 100 or
more) that it seemed almost impolite to draw attention to them.</t>

<t>And so, by measuring and reporting throughput and idle round-trip
time, we have motivated vendors and operators to focus on those
aspects of performance, and to neglect other factors that also
impact the quality of user experience.</t>

<t>Measurements of idle round-trip time can be informative, but users
care about how well their network performs when they are
using it, not only how well it performs when no one is using it.
In this document we specify how to measure network round-trip time
under reasonable representative operating conditions.
This document focusses on this specific aspect of network quality,
because we feel it is a particularly pressing issue at this time.
Future companion documents could address how to measure and report
other aspects of network quality that affect user experience.</t>

<section anchor="relevance"><name>Relevance</name>

<t>The most important property of this test tool is that its
results should be a good predictor of user experience.
High scores on the Responsiveness Test should
correlate with good user experience, and low
scores should correlate with poor user experience.
A test with this predictive power gives network engineers
a way to experiment with code changes
and then use the test to evaluate whether the changes
are beneficial, instead of having to judge the effects subjectively,
for example, by conducting a video conference and trying to assess
whether it seems to be working better or worse.</t>

</section>
<section anchor="repeatability"><name>Repeatability</name>

<t>For the test to be useful, it has to produce consistent results.
If results vary wildly from run to run, then an engineer doesn’t
know whether a different result from the test is a result of a
software change or just an artifact of randomness in the test.</t>

</section>
<section anchor="convenience"><name>Convenience</name>

<t>The test should complete as quickly as possible,
ideally with ten seconds, but only if this can be achieved
without sacrificing relevance and repeatability.</t>

</section>
<section anchor="interaction-with-end-systems"><name>Interaction with End Systems</name>

<t>Network delays that occur when traffic is flowing are not purely
a property of the network. How traffic flows is a result of the
interaction between the behavior of the network and the behavior
of the end systems generating and receiving the traffic.
Consequently, if we are to obtain useful measurements pertaining
to the network itself, uncontaminated by noise or bias introduced
by the test endpoints, we need to ensure that the test endpoints
are of the highest quality and are not responsible for introducing
significant delays (or delay variation) themselves.
This means that the test endpoints should be using source buffer management
techniques like TCP_NOTSENT_LOWAT <xref target="RFC9293"/><xref target="SBM"/>
to keep the backlog of unsent data
limited to a reasonable amount, in conjunction with the current
best-in-class rate adaptation algorithms
(such as the Prague congestion controller
<xref target="Prague"/>)
and the current best-in-class network signalling (such as L4S <xref target="RFC9330"/>).
These techniques allow the network to signal when the source
is sending too fast and a queue is starting to build up, so
that the source can adjust its sending rate accordingly.
We believe that having the network signal when the source is sending
more data than the network can carry (rather than just letting the
situation worsen until a queue overflows and packets are lost) is
vital for creating networks that deliver consistent low delay.
If our belief is correct, we expect the test results to reflect that
networks with this signalling yield lower delays than networks without it.
In any case, if the sending and receiving test endpoints are not
able to make use of L4S signalling, then the test will be unable
to measure and report the effect of L4S support (or its absence)
in the network’s bottleneck links.</t>

</section>
<section anchor="purpose-of-test-tool"><name>Purpose of Test Tool</name>

<t>The primary purpose of this test tool is to evaluate network
behavior, and that is the main focus of this document.</t>

<t>However, a secondary use can be to evaluate client and server software.</t>

<t>If a particular test client, over a particular network path,
produces good responsiveness scores when communicating with a
known-good test server, but poor results when using another test
server, that suggests problems with the other test server.
We have already had cases where we used an existing HTTP server
as a test endpoint, got worse-than-expected responsiveness scores,
and as a result realized that the HTTP server had some poor
configuration settings, which were also causing unnecessary
slowness for the other user-facing traffic it was serving. Tuning
these configuration settings for higher responsiveness lowered
delays across the board for all traffic delivered from that server.</t>

<t>Similarly, if a new test client, connecting to a known-good test
server over a particular network path, produces worse results than
an existing known-good test client, then this suggests problems
with the new test client, possibly in the new test client’s code,
or in it’s operating system’s networking implementation.
These insights can lead to enhancements in the networking code that
improve responsiveness for all software running on that operating system.</t>

</section>
<section anchor="use-of-http"><name>Use of HTTP</name>

<t>The test specified in this document is based on HTTP/2 and HTTP/3.
HTTP was selected because it is representative of a broad class of
commonly used request/response protocols, and protocols that do
bulk data transfer, adapting their sending rate to match the
available network capacity.</t>

<t>Many protocols share the property that over a single communication channel a client:</t>

<t>(a) may read small or large data objects from the server,<br />
(b) may write small or large data objects to the server,<br />
(c) may have multiple operations executing concurrently, and<br />
(d) may choose to cancel outstanding operations if
circumstances change and the operation is no longer needed.</t>

<t>If a client reads a very large data object from a server and then
a small data object, it is preferable if the small data object
doesn’t have to wait until after the very large data object has
been received in its entirety.</t>

<t>HTTP supports reads, writes, concurrent operations, cancellation
of outstanding operations, and interleaving of data from
concurrent operations. This makes HTTP a representative proxy for
virtually any request/response protocol. The specific details of
the message syntax, or the byte values used, are not important.</t>

<t>HTTP has the additional convenience that it is very widely
deployed in today’s world, and it is fairly easy to configure many
modern web servers to operate as Responsiveness Test servers.</t>

<t>If a network is able to deliver consistent low latency
even for the challenging case of a bulk data transfer over HTTP,
then it is reasonable to assume that this
network will deliver consistent low latency for all IP traffic,
including interactive audio and video telephony traffic,
which can be regarded as a kind of sender-limited bulk transfer.</t>

</section>
<section anchor="resisting-cheating"><name>Resisting Cheating</name>

<t>A desired property of the test was that it should resist cheating,
both intentional and accidental.</t>

<t>Suppose we were to measure network round-trip delay using ICMP
Echo Request packets. A network engineer given the task of
improving a vendor score on this metric might choose to simply
prioritize ICMP Echo Request packets so that they always go
directly to the front of the transmission queue.
Or, while exploring various options, the engineer might innocently
make a code change that inadvertently has this effect.
A quick run of the test tool would show that the engineer had
achieved the assigned goal -- on busy networks the tool reports
that the round trip time is now lower. Unfortunately, this change
would in no way improve actual user experience, because normal
data transfer is not performed using ICMP Echo Request packets.</t>

<t>To avoid that pitfall, the Responsiveness Test was designed to
obtain its measurements using normal client operations over HTTP.
These are representative of the kinds of operations a normal
client might do if rapidly fetching map tiles while a user scrolls
and zooms a map to view an area of interest on their smartphone,
or fetching new video data when a viewer skips ahead to a
different place in a streaming video.
Ultimately, application-layer responsiveness is what affects
user experience, not lower-layer performance metrics.</t>

<t>If a creative engineer does find a way to “cheat”
the Responsiveness Test to get a better score,
then it is almost certain that such a “cheat” would have
the effect of making real-world operations faster too.
This is a kind of “cheating” we are happy to tolerate.</t>

</section>
</section>
<section anchor="design-constraints"><name>Design Constraints</name>

<t>There are many challenges to defining measurements of the Internet:
the dynamic nature of the Internet,
the diverse nature of the traffic,
the large number of devices that affect traffic,
the difficulty of attaining appropriate measurement conditions,
diurnal traffic patterns,
and changing routes.</t>

<t>TCP and UDP traffic, or traffic on ports 80 and 443, may take
significantly different paths over the network between source and destination
and be subject to entirely different Quality of Service (QoS) treatment.
The traditional delay measurement tools use ICMP, which may experience even
more drastically different behavior than TCP or UDP.
Thus, a good test will use standard transport-layer traffic -- typical
for people's use of the network --
that is subject to the transport layer's congestion control algorithms
that might reduce the traffic's rate and thus its buffering in the network.</t>

<t>Significant queueing in the network only happens on entry to the lowest-capacity
(or "bottleneck") hop on a network path.
For any flow of data between two endpoints,
there is always one hop along the path where the capacity
available to that flow at that hop is the lowest among
all the hops of that flow's path at that moment in time.
It is important to understand that the existence of a
lowest-capacity hop on a network path, and a buffer to smooth bursts
of data, is not itself a problem.
In a heterogeneous network like the Internet, it is
inevitable that there is some hop
along a network path between two hosts with the lowest capacity for that path.
If that hop were to be improved by increasing its capacity, then some other hop would
become the new lowest-capacity hop for that path.
In this context, a "bottleneck" should not be seen as a problem to
be fixed, because any attempt to "fix" the bottleneck is futile --
such a "fix" can never remove the existence of a bottleneck
on a path; it just moves the bottleneck somewhere else.</t>

<t>Note that in a shared datagram network, conditions do not remain static.
The properties of the hop that is the current bottleneck
for a particular flow may change from moment to moment.
The amount of other traffic sharing that bottleneck may change,
or the underlying capacity of that hop itself may vary.
If the available capacity on that hop increases,
then a different hop may become the bottleneck for that flow.
For example, changes in the simultaneous transmission of data flows by hosts communicating
over the same hop may result in changes
to the share of bandwidth allocated to each flow. A user who physically moves around
may cause the Wi-Fi transmission rate to vary widely, fluctuating between
a few Mb/s when they are far from the Access Point,
and Gb/s or more when close to the Access Point.</t>

<t>Consequently, if we wish to enjoy the benefits of the Internet's great
flexibility, we need software that embraces and celebrates this
diversity and adapts intelligently to the varying conditions it encounters.</t>

<t>Because significant queueing in the network only happens on entry to the bottleneck
hop, the queue management at this critical hop of the path almost
entirely determines the responsiveness of the entire path.
If the bottleneck hop's queue management algorithm allows an
excessively large queue to form, this results in excessively large
delays for packets sitting in that queue awaiting transmission,
significantly degrading overall user experience.</t>

<t>In order to discover the depth of the buffer at the bottleneck hop,
the Responsiveness Test mimics normal network operations and data transfers,
with the goal of filling the bottleneck link to capacity, and then
measures the resulting end-to-end delay under these so-called working conditions.
A well managed bottleneck queue keeps its buffer occupancy
under control, resulting in consistently low round-trip times
and consistently good responsiveness.
A poorly managed bottleneck queue will not.</t>

<t>This section discusses bufferbloat in terms of a problem
that occurs in a network, i.e., in routers and switches.
However, there are some other system components that can also add delay.</t>

<t>In some cases the lowest capacity hop on a path is the first hop.
In this case network bufferbloat is not usually a significant
concern because the source device is simply unable to transmit data fast
enough to build up a significant queue anywhere else in the network.
However, in this case source-device bufferbloat
(excessive queuing in the device’s own outgoing network interface)
can result in excessive self-induced delays
for the traffic it is sending <xref target="SBM"/>.</t>

<t>The job of the rate adaptation (congestion control) algorithm of
the sender’s transport protocol is to determine this flow’s share of the
bottleneck hop on the path, and to restrain its own transmission rate
so as not to exceed that bottleneck rate. If the transport protocol
does not generate appropriate backpressure to the application
(e.g., using TCP_NOTSENT_LOWAT <xref target="RFC9293"/><xref target="SBM"/>) then the transport
protocol itself can cause significant delay by buffering an
excessive amount of application data that has not even been sent yet.</t>

<t>Finally, an application can make delay even worse by maintaining its own queue
of data that it hasn’t even given to the transport protocol for sending yet.
Any time data spends sitting in this application queue adds to
the delay it experiences while waiting to be set out of the network interface and
the delay it experiences while in transit traversing the network.</t>

</section>
<section anchor="goals"><name>Goals</name>

<t>The algorithm described here defines the Responsiveness Test that serves as a means of
quantifying user experience of latency in a network connection. Therefore:</t>

<t><list style="numbers" type="1">
  <t>Because today's Internet traffic primarily uses HTTP/2 over TLS, the test's
algorithm should use that protocol.  <vspace blankLines='1'/>
As a side note: other types of traffic are gaining in popularity (HTTP/3) <xref target="RFC9114"/>
and/or are already being used widely (RTP) <xref target="RFC1889"/>.
Traffic prioritization and QoS rules on the Internet may
subject traffic to completely different paths:
these could also be measured separately.</t>
  <t>Because the Internet is marked by the deployment of countless middleboxes like
“transparent” TCP proxies or traffic prioritization for certain types of traffic,
the Responsiveness Test algorithm must take into account their effect on
TCP-handshake <xref target="RFC9293"/>, TLS-handshake, and request/response.</t>
  <t>Because the goal of the test is to educate end users, the results should be expressed in an intuitive, nontechnical form
and not commit the user to spend a significant amount of their time (it is left to the implementation to chose a suitable time-limit and we recommend for
any implementation to allow the user to configure the duration of the test).</t>
</list></t>

</section>
<section anchor="measuring-responsiveness-under-working-conditions"><name>Measuring Responsiveness Under Working Conditions</name>

<t>Overall, the test to measure responsiveness under working conditions proceeds in two steps:</t>

<t><list style="numbers" type="1">
  <t>Put the network connection into "working conditions"</t>
  <t>Measure responsiveness of the network.</t>
</list></t>

<t>The following explains how the former and the latter are achieved.</t>

<section anchor="working-conditions"><name>Working Conditions</name>

<t>What are <em>the</em> conditions that best emulate how a network
connection is used? There is no one true answer to this question. It is a
tradeoff between using realistic traffic patterns and pushing the network to
its limits.</t>

<t>Current capacity-seeking transport protocols, like TCP and QUIC,
seek to achieve the highest throughput that the network can carry,
by increasing their sending rate until the network signals that
the transport protocol has reached the optimal throughput and
should not increase further.
That signal from the network can take the form of
packet loss (when a bottleneck queue overflows)
or ECN signals (prior to queue overflow).</t>

<t>The Responsiveness Test defines working conditions as the condition
where the path between the measuring endpoints is fully utilized at
its end-to-end capacity, and senders are sending a little faster
to discover if more capacity is available, causing a queue to build
up at the ingress to the bottleneck hop.
How the device at the ingress to the bottleneck hop
manages and limits the growth of that queue will influence the network
connection's responsiveness.</t>

<t>The Responsiveness Test algorithm for reaching working conditions combines
multiple standard HTTP transactions with very large data objects according to realistic traffic patterns
to create these conditions.</t>

<t>This creates a stable state of working conditions during which the
bottleneck of the path between client and server is fully utilized at its capacity,
revealing the behavior of its buffer management or Active Queue Management (AQM),
without generating DoS-like traffic
patterns (e.g., intentional UDP flooding). This creates a realistic traffic mix
representative of what a typical user's network experiences in normal operation.</t>

<t>Finally, as end-user usage of the network evolves to newer protocols and congestion
control algorithms, it is important that the working conditions also can evolve
to continuously represent a realistic traffic pattern.</t>

<section anchor="single-flow-vs-multi-flow"><name>Single-Flow vs Multi-Flow</name>

<t>The purpose of the Responsiveness Test is not to productively move data
across the network, the way a normal application does.
The purpose of the Responsiveness Test is to, as quickly as possible, simulate
a representative traffic load as if real applications were doing
sustained data transfers and measure the resulting round-trip time
occurring under those realistic conditions.
A single TCP connection may not be sufficient
to reach the capacity and full buffer occupancy of a path quickly.
Using a 4MB receive window, over a network with a 32 ms round-trip time,
a single TCP connection can achieve up to 1Gb/s throughput.
For higher capacity connections or higher round-trip times,
a 4MB receive window is insufficient.
In addition, deep buffers along the path between the two endpoints may be
significantly larger than 4MB, and using a 4MB TCP receive window
would be insufficient to fully expose the depth of these buffers.</t>

<t>TCP allows larger receive window sizes, up to 1GB.
However, to avoid consuming too much memory, most transport stacks
today do not use such large receive windows.</t>

<t>Even if a single TCP connection would be able to fill the bottleneck's buffer,
it may take some time for a single TCP connection to ramp
up to full speed. One of the goals of the Responsiveness Test is to help the user
measure their network quickly. As a result, the test should load the
network, take its measurements, and then finish as fast as possible.</t>

<t>Finally, traditional loss-based TCP congestion control algorithms
react aggressively to packet loss by reducing the congestion window.
This reaction (intended by the protocol design) decreases the
queueing within the network, making it harder to determine the
depth of the bottleneck queue reliably.</t>

<t>For all these reasons, using multiple simultaneous parallel connections
allows the Responsiveness Test to complete its task more quickly, in a way that
overall is less disruptive and less wasteful of network capacity
than a test using a single TCP connection that would take longer
to bring the bottleneck hop to a stable saturated state.</t>

<t>One of the configuration parameters for the test is an upper bound on the number of parallel load-generating
connections. We recommend a default value for this parameter of 16.</t>

</section>
<section anchor="concurrent-vs-sequential-uplink-and-downlink"><name>Concurrent vs Sequential Uplink and Downlink</name>

<t>Poor responsiveness can be caused by bloated queues in either (or both)
the upstream and the downstream direction.
Furthermore, both paths may differ significantly due to access link
conditions (e.g., 5G downstream and LTE upstream) or routing changes
within the ISPs.
To measure responsiveness under working conditions,
the algorithm must explore both directions.</t>

<t>Most of today’s widely used network benchmark tools
measure the throughput in one direction at a time.
In a real sense this is very much a “softball” test,
contrived to let the network perform at its absolute best
so it can produce the most impressive-looking benchmark results.</t>

<t>In the 1950s we had analog telephone lines,
with the property that only one person at a time could
make a telephone call.
In the 1990s we had dial-up services like AOL,
with the property that only one person at a time could
use the telephone line to connect to AOL.
Two people in a home could not share a single
telephone line and both connect to AOL at the same time.</t>

<t>But, in contrast, by the 1990s we had packet switching,
as embodied in the Internet, Ethernet, Wi-Fi,
and similar connectionless datagram technologies.
The huge benefit of these connectionless datagram technologies
is that an arbitrary number of people and devices can
share a network and use it for different purposes
at the same time, in stark contrast to a telephone line
that can only support one telephone call at a time.
Indeed, it is common today for a home network to have
dozens of devices sharing a user’s network --
home security cameras streaming video,
adults working from home via videoconferencing,
children watching streaming video or playing video games, etc.</t>

<t>Given that today’s home networks are frequently used
by multiple people and devices at the same time,
(and given that this is arguably the whole reason
connectionless datagram networking was invented in the first place)
it makes sense for a network benchmark tool to evaluate how
well the network performs when it is being used this way,
rather than using only a carefully contrived artificial scenario,
intentionally doing only one thing at a time so as
to show the network in the best possible light.</t>

<t>During the COVID pandemic when many people were working from home,
it became a common trope to have comedy routines about
parents yelling at their children, “Stop watching videos,
mummy’s trying to have a work videoconference meeting.”
When comedians are making fun of the shared datagram network we built
because it breaks down spectacularly when two devices try to share it,
that should be an embarrassment for our entire industry.</t>

<t>For this reason, the Apple “networkQuality” tool currently
performs the upload and download tests concurrently,
to properly reflect how well a network performs when it is used this way.</t>

<t>However, a number of caveats come with measuring concurrently:</t>

<t><list style="symbols">
  <t>Half-duplex links may not permit simultaneous uplink and downlink traffic.
This restriction means the test might not reach the path's capacity in both directions at once and thus not expose
all the potential sources of low responsiveness.
However, this circumstance might also yield some useful benefit.
If a user’s Internet connection
performs reasonably well (in terms of both capacity and responsiveness)
when carrying predominantly uplink traffic, and
performs reasonably well when carrying predominantly downlink traffic,
but degrades badly when the user tries to do both upload and download at
the same time, that is information that might be very useful to the user.</t>
  <t>Debugging the results becomes harder:
During concurrent measurement it is impossible to differentiate whether
the observed delay happens in the uplink or the downlink direction.</t>
</list></t>

<t>For this reason, a test tool should also offer the option
of performing the upload and download tests sequentially,
to help engineers diagnose whether the source of excessive delay
is in the upstream direction, downstream direction, or both.</t>

<t>When performing a concurrent test,
a single overall responsiveness score is reported,
to reflect the overall experience a user can expect
during normal unrestricted network usage.</t>

<t>When performing uplink and downlink tests sequentially
the two responsiveness scores are reported individually,
to give the user visibility into whether their network
is performing better in one direction than the other.</t>

</section>
<section anchor="achieving-steady-state-buffer-utilization"><name>Achieving Steady-State Buffer Utilization</name>

<t>The Responsiveness Test gradually increases the number of TCP connections (known as load-generating connections)
and measures "goodput" (the sum of actual data transferred across all connections in a unit of time)
continuously.
By definition -- once goodput is maximized -- if the transport protocol emits more
traffic into the network than is needed, the additional traffic will either
get dropped, or be buffered and thus create a "standing queue" that is characteristic
of bufferbloat.
At this moment the test starts
measuring the responsiveness until that metric reaches saturation.
At this point we are creating the worst-case scenario
(best-case for throughput, worst-case for latency)
within the limits of the
realistic traffic pattern. Well designed network equipment
handles this scenario without creating excessive delay.</t>

<t>The algorithm presumes that goodput increases rapidly until TCP
connections complete their TCP slow-start phase.
At that point, goodput eventually stalls,
often due to receive window limitations, particularly in cases of
high network bandwidth, high network round-trip time,
low receive window size, or a combination of all three.
The only means to further increase goodput is by
adding more TCP connections to the pool of load-generating connections.
If new connections don't result in an increase in goodput,
full link utilization has been reached.
At this point, adding more connections will reveal the extent to which
the network is willing to buffer excess packets, with a resulting increase
in round-trip delay (decrease in responsiveness).
When the bottleneck queue signals the sender(s) to slow down
(either via packet drop or via ECN marking)
then the round-trip delay will stabilize.</t>

</section>
<section anchor="avoiding-test-hardware-bottlenecks"><name>Avoiding Test Hardware Bottlenecks</name>

<t>The Responsiveness Test could be run from various devices that are either consumer devices
or Internet infrastructure such as routers. Many home routers are cost-sensitive embedded devices
optimised for switching packets rather than terminating TLS connections at line rate. As a
result, they may not have sufficient processing power or memory bandwidth to saturate a
bottleneck link in order to be a useful test client for the responsiveness test.</t>

<t>In order to measure responsiveness from these devices, the test can be conducted without TLS
over plain HTTP. Whenever possible, it is preferred to test using TLS to resemble typical
Internet traffic to the maximum extent.</t>

</section>
</section>
<section anchor="test-parameters"><name>Test Parameters</name>

<t>A number of parameters can be used to configure the test methodology. The following list
contains the names of those parameters and their default values. The detailed description of the
methodology that follows will explain how these parameters are being used. Experience has shown
that the default values for these parameters allow for a low runtime for the test and produce
accurate results in a wide range of environments.</t>

<texttable>
      <ttcol align='left'>Name</ttcol>
      <ttcol align='left'>Explanation</ttcol>
      <ttcol align='left'>Default Value</ttcol>
      <c>MAD</c>
      <c>Moving Average Distance (number of intervals to take into account for the moving average)</c>
      <c>4</c>
      <c>ID</c>
      <c>Interval duration at which the algorithm reevaluates stability</c>
      <c>5 seconds</c>
      <c>TMP</c>
      <c>Trimmed Mean Percentage to be trimmed</c>
      <c>95%</c>
      <c>SDT</c>
      <c>Standard Deviation Tolerance for stability detection</c>
      <c>5%</c>
      <c>INP</c>
      <c>Initial number of concurrent transport connections at the start of the test</c>
      <c>1</c>
      <c>INC</c>
      <c>Number of transport connections to add to the pool of load-generating connections at each interval</c>
      <c>1</c>
      <c>MNP</c>
      <c>Maximum number of parallel transport-layer connections</c>
      <c>16</c>
      <c>MPS</c>
      <c>Maximum responsiveness probes per second</c>
      <c>100</c>
      <c>PTC</c>
      <c>Percentage of Total Capacity the probes are allowed to consume</c>
      <c>5%</c>
</texttable>

</section>
<section anchor="measuring-responsiveness"><name>Measuring Responsiveness</name>

<t>Measuring responsiveness under working conditions is an iterative process.
Moreover, it requires a sufficiently large sample of measurements to have confidence in the results.</t>

<t>The measurement of the responsiveness happens by sending probe-requests.
There are two types of probe requests:</t>

<t><list style="numbers" type="1">
  <t>An HTTP GET request on a connection separate from the load-generating connections ("foreign probes").
This probe type mimics the time it takes for a web browser to connect to a new
web server and request the first element of a web page (e.g., "index.html"),
or the startup time for a video streaming client to launch and begin fetching media.</t>
  <t>An HTTP GET request multiplexed on the load-generating connections ("self probes").
This probe type mimics the time it takes for a video streaming client
to skip ahead to a different chapter in the same video stream,
or for a navigation mapping application to react and fetch new map tiles
when the user scrolls the map to view a different area.
In a well functioning system, fetching new data
over an existing connection should take less time than
creating a brand new TLS connection from scratch to do the same thing.</t>
</list></t>

<t>Foreign probes will provide three (3) sets of data-points: First, the duration of the TCP-handshake
(noted hereafter as <spanx style="verb">tcp_f</spanx>).
Second, the TLS round-trip-time (noted <spanx style="verb">tls_f</spanx>). For this, it is important to note that different TLS versions
have a different number of round-trips. Thus, the TLS establishment time needs to be
normalized to the number of round-trips the TLS handshake takes until the connection
is ready to transmit data. In the case that TLS is not being used, it is undefined.
And third, the HTTP elapsed time between issuing the GET
request for a 1-byte object and receiving the entire response (noted <spanx style="verb">http_f</spanx>).</t>

<t>Self probes will provide a single data-point that measures the duration of time between
when the HTTP GET request for the 1-byte object is issued on the load-generating connection and when the
full HTTP response has been received (noted <spanx style="verb">http_l</spanx>). For cases where multiplexing GET requests into
the load generation connections is not possible (e.g. due to only HTTP/1.1 being available), the TCP
stack estimated round-trip-time can be used as a proxy or substitute value.</t>

<t>Note that self-probe requests MUST NOT use HTTP priorities or
similar techniques in pursuit of an artificially inflated RPM score.
The purpose of self-probe requests is to imitate the activity
of a real application requesting new data elements
(like new video segments, or new map tiles)
while an existing data transfer is already proceeding,
and to evaluate how rapidly these new data elements are delivered.
For example, in a real map application, using a higher HTTP priority
every time a user scrolls the map would lead to an escalating
ladder of ever-higher priorities where every new operation
is more important than everything that went before it.
Priorities are a solution to the problem of having too much data
already in flight, buffered in the network at a bottleneck queue,
or prematurely committed to the sending machine’s transport
protocol (e.g., TCP or QUIC) <xref target="SBM"/>,
by creating a mechanism for
new data to bypass the backlog of stale data.
We believe that the best way to avoid delays caused
by having an excessive backlog of stale data is the simplest:
avoid having a backlog of stale data in the first place,
rather than assuming that a large backlog of stale data
is inevitable, and then using complicated mechanisms
like priorities to work around that problem.
When the backlog of stale data is minimized, all traffic
achieves low delay, not just a privileged minority of “priority” traffic.</t>

<t><spanx style="verb">tcp_f</spanx>, <spanx style="verb">tls_f</spanx>, <spanx style="verb">http_f</spanx> and <spanx style="verb">http_l</spanx> are all measured in milliseconds.</t>

<t>The more probes that are sent, the more data available for calculation. In order to generate
as much data as possible, the Responsiveness Test specifies that a client issue these probes regularly.
There is, however, a risk that on low-capacity networks the responsiveness probes
themselves will consume a significant amount of the capacity. Because the test mandates
first saturating capacity before starting to probe for responsiveness, the test will have an
accurate estimate of how much of the capacity the responsiveness probes will consume and never
send more probes than the network can handle.</t>

<t>Limiting the data used by probes can be done by providing an estimate of the number of bytes exchanged for
each of the probe types. Taking TCP and TLS overheads into account, we can estimate
the amount of data exchanged for a foreign probe to be around 5000 bytes.
For self probes we can expect an overhead of no more than 1000 bytes.</t>

<t>Given this information, we recommend that a test client does
not send more than <spanx style="verb">MPS</spanx> (Maximum responsiveness Probes per Second - default to 100) probes per <spanx style="verb">ID</spanx>.
The same amount of probes should be sent on load-generating as well as on separate connections.
The probes should be spread out equally over the duration of the interval, with the two types
of probes interleaving with each other.
The test client
should uniformly and randomly select from the active load-generating connections on which to send self probes.</t>

<t>According to the default parameter values, the probes will consume 300 KB (or 2400Kb) of data per second, meaning
a total capacity utilization of 2400 Kbps for the probing.</t>

<t>On high-speed networks, these default parameter values will provide a significant amount of samples, while at
the same time minimizing the probing overhead.
However, on severely capacity-constrained networks the probing traffic could consume
a significant portion of the available capacity. The Responsiveness Test must
adjust its probing frequency in such a way that the probing traffic does not consume
more than <spanx style="verb">PTC</spanx> (Percentage of Total Capacity - default to 5%) of the available capacity.</t>

<section anchor="aggregating-the-measurements"><name>Aggregating the Measurements</name>

<section anchor="for-the-tls-enabled-case"><name>For the TLS-Enabled Case</name>

<t>The algorithm produces sets of 4 times for each probe, namely:
<spanx style="verb">tcp_f</spanx>, <spanx style="verb">tls_f</spanx>, <spanx style="verb">http_f</spanx>, <spanx style="verb">http_l</spanx> (from the previous section).
The responsiveness of the network connection being tested evolves over time as buffers gradually reach saturation. Once
the buffers are saturated, responsiveness will stabilize. Thus, the final calculation of network responsiveness
considers the last MAD (Moving Average Distance - default to 4) intervals worth of completed responsiveness probes.</t>

<t>Over that period of time, a large number of samples will have been collected.
These may be affected by noise in the measurements, and outliers. Thus, to aggregate these
we suggest using a single-sided trimmed mean at the <spanx style="verb">TMP</spanx> (Trimmed Mean Percentage - default to 95%) percentile, thus providing the following numbers:
<spanx style="verb">TM(tcp_f)</spanx>, <spanx style="verb">TM(tls_f)</spanx>, <spanx style="verb">TM(http_f)</spanx>, <spanx style="verb">TM(http_l)</spanx>.</t>

<t>The responsiveness is then calculated as the average of the "foreign responsiveness"
on separate connections and the responsiveness on load-generating connections.</t>

<figure><artwork><![CDATA[
Foreign_Responsiveness = 60000 / ((TM(tcp_f)+TM(tls_f)+TM(http_f))/3)
Loaded_Responsiveness = 60000 / TM(http_l)
Responsiveness = (Foreign_Responsiveness + Loaded_Responsiveness) / 2
]]></artwork></figure>

<t>This responsiveness value presents round-trips per minute (RPM).</t>

</section>
<section anchor="for-the-tcp-only-case"><name>For the TCP-Only Case</name>

<t>If there are no TLS connections being used, then the notion of a normalised round-trip time for the TLS handshake does not apply.
Zeroes cannot be substituted for <spanx style="verb">tls_f</spanx>, as that will result in an artificially low responsiveness value.
Instead, the same principle of giving each contribution to the foreign RTT equal weight, and then giving the foreign and self RTTs
equal weights is applied.</t>

<t>The TCP-only responsiveness is therefore calculated in the following way:</t>

<figure><artwork><![CDATA[
Foreign_Responsiveness = 60000 / ((TM(tcp_f) + TM(http_f)) / 2)
Loaded_Responsiveness = 60000 / TM(http_l)
Responsiveness = (Foreign_Responsiveness + Loaded_Responsiveness) / 2
]]></artwork></figure>

</section>
</section>
</section>
<section anchor="final-algorithm"><name>Final Algorithm</name>

<t>Considering the previous two sections, where we explained the meaning of
working conditions and the definition of responsiveness, we can now describe
the design of the final algorithm. In order to measure the worst-case delay, we need to transmit
traffic at the full capacity of the path as well as ensure the buffers are filled
to the maximum.
We can achieve this by continuously adding HTTP sessions to the pool of connections
in an ID (Interval duration - default to 5 seconds) interval. This technique
ensures that we quickly reach full capacity.
In parallel with this process we send responsiveness probes.
First, the algorithm reaches stability for the goodput. Once
goodput stability has been achieved, the responsiveness stability is tracked
until it is shown to be stable at which point the final measurement can be computed.</t>

<t>We consider both goodput and responsiveness to be stable when the standard deviation
of the moving averages of the responsiveness calculated in the immediately preceding MAD intervals is within SDT
(Standard Deviation Tolerance - default to 5%) of the moving average calculated in the most-recent ID.</t>

<t>The following algorithm reaches working conditions of a network
by using HTTP/2 upload (POST) or download (GET) requests of infinitely large
files.
The algorithm is the same for upload and download and uses
the same term "load-generating connection" for each.
The actions of the algorithm take place at regular intervals. For the current draft
the interval is defined as 5 seconds.</t>

<t>Where</t>

<t><list style="symbols">
  <t><spanx style="verb">i</spanx>: The index of the current interval. The variable <spanx style="verb">i</spanx> is initialized to <spanx style="verb">0</spanx> when the algorithm begins and
increases by one for each interval.</t>
  <t>moving average aggregate goodput at interval <spanx style="verb">p</spanx>: The number of total bytes of data transferred within
interval <spanx style="verb">p</spanx> and the <spanx style="verb">MAD - 1</spanx> immediately preceding intervals, divided by <spanx style="verb">MAD</spanx> times <spanx style="verb">ID</spanx>.</t>
</list></t>

<t>the steps of the algorithm are:</t>

<t><list style="symbols">
  <t>Create INP load-generating connections (INP defaults to 1, but can be increased if one has prior knowledge on the capacity of the link).</t>
  <t>Launch a new foreign and self probe (according to the specification set forth
above) every 1/<spanx style="verb">MPS</spanx> seconds until <spanx style="verb">MPS</spanx>*<spanx style="verb">ID</spanx> pairs of probes have been launched
or the end of the interval is reached, whichever comes first.
probes to not exceed the percentage of total capacity (PTC).</t>
  <t>At each interval:
  <list style="symbols">
      <t>Create INC additional load-generating connections (INC defaults to 1, but can be increased for a more aggressive ramp-up phase).</t>
      <t>If goodput has not saturated:
      <list style="symbols">
          <t>Compute the moving average aggregate goodput at interval <spanx style="verb">i</spanx> as <spanx style="verb">current_average</spanx>.</t>
          <t>If the standard deviation of the past <spanx style="verb">MAD</spanx> average goodput values is less than SDT of the <spanx style="verb">current_average</spanx>, declare goodput saturation and move on to probe responsiveness.</t>
        </list></t>
      <t>If goodput saturation has been declared:
      <list style="symbols">
          <t>Compute the responsiveness at interval <spanx style="verb">i</spanx> as <spanx style="verb">current_responsiveness</spanx>.</t>
          <t>If the standard deviation of the past MAD responsiveness values is less than SDT of the <spanx style="verb">current_responsiveness</spanx>, declare responsiveness saturation and report <spanx style="verb">current_responsiveness</spanx>
as the final test result.</t>
        </list></t>
    </list></t>
</list></t>

<t>In <xref target="goals"/>, it is mentioned that implementations may chose to implement a time-limit
on the duration of the test.
If stability is not reached within the time-frame, the implementation can report
the current results with a indication of confidence in the result as described in
the following section.</t>

<t>Finally, if at any point one of these connections terminates with an error, the test should be aborted.</t>

<section anchor="confidence-of-test-results"><name>Confidence of Test-Results</name>

<t>As described above, a tool running the algorithm typically defines a time-limit for
the execution of each of the stages. For example, if the tool allocates a total
run-time of 40 seconds, and it executes a full downlink followed by a uplink test,
it may allocate 10 seconds to each of the saturation-stages (downlink capacity saturation, downlink responsiveness saturation, uplink capacity saturation, uplink responsiveness saturation).</t>

<t>As the different stages may or may not reach stability, we can define a "confidence score"
for the different metrics (capacity and responsiveness) the methodology was able to measure.</t>

<t>We define "Low" confidence in the result if the algorithm was not even able to
execute MAD iterations of the specific stage. Meaning, the moving average is
not taking the full window into account. This can happen if the time-limit of the
test has been reached before MAD intervals could execute.</t>

<t>We define "Medium" confidence if the algorithm was able to execute at least MAD
iterations, but did not reach stability based on standard deviation tolerance.</t>

<t>We define "High" confidence if the algorithm was able to fully reach stability
based on the defined standard deviation tolerance.</t>

<t>It must be noted that depending on the chosen standard deviation tolerance or
other parameters of the methodology and the network-environment it may be that a
measurement never converges to a stable point.
This is expected and part of the dynamic nature of networking and the accompanying
measurement inaccuracies, which is why the importance of imposing a time-limit
is so crucial, together with an accurate depiction of the "confidence" the methodology
was able to generate. The confidence score should be reported to the user as part of
the main results.</t>

</section>
</section>
</section>
<section anchor="interpreting-responsiveness-results"><name>Interpreting Responsiveness Results</name>

<t>The described methodology uses a high-level approach to measure responsiveness.
By executing the test with normal HTTP requests, a number of elements come into
play that will influence the result. Contrary to more traditional measurement methods,
the responsiveness metric is not only influenced by the properties of the
network, but can significantly be influenced by the properties of the client
and the server implementations. This is fully intentional as the properties of the
client and the server implementations have a direct impact on the perceived responsiveness by the user. This section describes how the different
elements influence responsiveness and how a user may differentiate them
when debugging a network.</t>

<section anchor="elements-influencing-responsiveness"><name>Elements Influencing Responsiveness</name>

<t>Due to the HTTP-centric approach of the measurement methodology a number of
factors come into play that influence the results. Namely, the client-side
networking stack (from the top of the HTTP-layer all the way down to the physical layer),
the network (including potential “transparent” HTTP "accelerators"), and the server-side
networking stack. The following outlines how each of these contributes to the responsiveness.</t>

<section anchor="client-side-influence"><name>Client-Side Influence</name>

<t>As the driver of the measurement, the client-side networking stack can have a
large influence on the result. The biggest influence of the client comes
when measuring the responsiveness in the uplink direction. Load-generation can
cause queue-buildup in the transport layer as well as the HTTP layer. Additionally,
if the network's bottleneck is on the first hop, queue-buildup can happen at the
layers below the transport stack (e.g., in the outgoing network interface).</t>

<t>Each of these queue build-ups may cause delay and thus low responsiveness.
A well designed networking stack ensures that queue-buildup in the TCP layer
is kept at a bare minimum with solutions like TCP_NOTSENT_LOWAT <xref target="RFC9293"/><xref target="SBM"/>.
At the HTTP/2 layer it is important that the load-generating data is not interfering
with the latency-measuring probes. For example, the different streams should not
be stacked one after the other but rather be allowed to be multiplexed for
optimal latency. The queue-buildup at these layers would only influence latency
on the probes that are sent on the load-generating connections.</t>

<t>At lower data rates, even a relatively small send buffer may contribute
a significant amount of delay before packets even leave the sending device.
When TCP_REPLENISH_TIME <xref target="SBM"/> is available, the test client SHOULD set
TCP_REPLENISH_TIME to 5 ms, to avoid excessive source-induced delay.
Similarly, test endpoints should also set TCP_REPLENISH_TIME to 5 ms,
to avoid self-induced delay when generating replies to send back to
the test client.
Cumulatively, this results in up to 10 ms of delay at the endpoints,
which is included in the overall application-layer round-trip time
reported by the test.</t>

<t>For systems without TCP_REPLENISH_TIME,
the equivalent effect can be achieved by using TCP_NOTSENT_LOWAT,
setting the desired buffer size explicitly before each write.
The test client and test endpoint respectively calculate
their current estimate of the connection throughput in bytes per second,
and then multiply this by 5 ms to get the desired buffer size.
For example, at a data rate of 1 Mb/s, 5 ms of buffering
equates to just 625 bytes of unsent data waiting to go out.
On networks capable of carrying data faster than this,
the TCP_NOTSENT_LOWAT buffer size increases as the measured
connection throughput increases.
At 100 Mb/s, 5 ms of buffering
equates to 62,500 bytes of unsent data waiting to go out,
or roughly 40 Ethernet packets.</t>

<t>Below the transport layer many places have a potential queue build-up.
It is important to keep these queues at reasonable sizes.</t>

<t>Flow-queueing techniques like FQ-Codel are valuable for insulating
well behaved flows from badly behaved flows,
but flow-queueing alone without intelligent queue management
cannot insulate a flow from its own capacity-seeking behavior.</t>

<t>Depending on the techniques used at these layers, the queue build-up
can influence latency on probes sent on load-generating connections as well as
separate connections. If flow-queuing is used at these layers, the impact on
separate connections will be negligible.
This is why the Responsiveness Test performs probes
on load-generating connections, to detect and report
the responsiveness experienced by capacity-seeking flows,
not only the responsiveness experienced by low-rate flows.</t>

</section>
<section anchor="network-influence"><name>Network Influence</name>

<t>The network obviously is a large driver for the responsiveness result.
Propagation delay from the client to the server,
waiting to access a shared resource like radio spectrum,
queuing in the bottleneck node,
and other sources of delay
all add to latency <xref target="BITAG"/>.
Beyond these traditional sources of latency,
other factors may influence the results as well. Many networks deploy “transparent”
TCP Proxies, firewalls doing deep packet-inspection, HTTP "accelerators" and similar
middleboxes.
As the methodology relies on the use of HTTP/2, the responsiveness metric will
be influenced by such devices as well.</t>

<t>The network will influence both kinds of latency probes that the responsiveness
tests sends out. Depending on the network's use of AQM and whether
this includes flow-queuing or not, the latency probes on the load-generating
connections may be influenced differently than the probes on the separate
connections.</t>

</section>
<section anchor="server-side-influence"><name>Server-Side Influence</name>

<t>Finally, the server side introduces the same kind of influence on the responsiveness
as the client side, with the difference that the responsiveness will be impacted
primarily during the downlink load generation.</t>

<t>Beyond the server's networking stack influence, the geographic location
of the server impacts the result as well. The network path chosen
between client and server is influenced by the server selection mechanism.
Modern content delivery networks (CDNs) generally have
data centers in many locations around the world, partly
to keep data closer to the user and reduce round-trip times.
To evaluate the real-world responsiveness of a particular CDN,
the RPM test should use the same server selection mechanism
clients normally use to determine which server to contact
when accessing content from that CDN.
For a general-purpose RPM test that is intended to
evaluate general network conditions, ideally the provider
of the test should have test servers available that
are distributed around the world, like a typical CDN.
If such geographic distribution is not possible,
it may be useful to account for the geographic distance,
so separate the (unavoidable) speed-of-light delay
from other (avoidable) network delays.</t>

</section>
</section>
<section anchor="investigating-poor-responsiveness"><name>Investigating Poor Responsiveness</name>

<t>Once a responsiveness result has been generated, one might be motivated to try to localize
the source of a low responsiveness. The responsiveness measurement
is however aimed at providing a quick, top-level view of the responsiveness
under working conditions the way end-users experience it.
Localizing the source of low responsiveness involves however a set of different
tools and methodologies.</t>

<t>Nevertheless, the Responsiveness Test allows users to gain
some insight into what is responsible for excessive delay.
To gain this insight, implementations of the responsiveness
test are encouraged to have an optional verbose mode that exposes the inner workings
of the algorithm as well as statistics from the lower layers.
The following is a non-exhaustive list of additional information that can be exposed
in the verbose mode: Idle latency (measured at the beginning from the initial connections),
achieved capacity on load-generating connections, TM(tcp_f), TM(tls_f), TM(http_f) and TM(http_l)
(and even their raw values), HTTP-protocol (HTTP/1.1, HTTP/2, HTTP/3), transport protocol (TCP, QUIC, ...), congestion-control
algorithm (Cubic, BBR, ...) used on the client-side, ECN or L4S statistics, IP version, ... and many more.</t>

<t>The previous section described the elements that influence
responsiveness. It is apparent that the delay measured
on the load-generating connections and the delay measured on separate connections
may be different due to the different elements.</t>

<t>For example, if the delay measured on separate connections is much less than the
delay measured on the load-generating connections, it is possible to narrow
down the source of the additional delay on the load-generating connections.
As long as the other elements of the network don't do flow-queueing, the additional
delay must come from the queue build-up at the HTTP and TCP layer.
This is because all other bottlenecks in the network that may cause a queue build-up
will be affecting the load-generating connections as well as the separate
latency-probing connections in the same way.</t>

<t>Beyond the difference in the delay of the load-generating connections and the
separate connections, another element can provide additional information: Namely,
testing against different servers located in different places along the path will
allow, to some extent, the opportunity to separate the network’s path
into different segments. For
example, if the cable modem and a more distant ISP server are hosting
responsiveness measurement endpoints, some localization of the issue can be done.
If the RPM to the cable modem is very high, it means that the network segment
from the client endpoint to the cable modem does not have responsiveness issues,
thus allowing the user to conclude that possible responsiveness issues are
beyond the cable modem.
It must be noted, though, that due to the high level approach to the testing
(including HTTP), a low responsiveness to the cable modem does not necessarily
mean that the network between client and cable modem is the problem (as
outlined in the above previous paragraphs).</t>

</section>
</section>
<section anchor="responsiveness-test-server"><name>Responsiveness Test Server</name>

<t>The responsiveness measurement is built upon a foundation of standard protocols:
IP, TCP, TLS, HTTP/2.
On top of this foundation, a minimal amount of new "protocol" is defined,
merely specifying the URLs that used for GET and POST in the process of
executing the test.</t>

<t>Both the client and the server MUST support HTTP/2 over TLS.
The client and the server MAY also support HTTP/3 over QUIC.
The client MUST be able to send a request with a GET or POST method.
The client MUST send the GET with the "Accept-Encoding" header set to "identity" to ensure the
server will not compress the data.
The server MUST be able to respond to both of these
HTTP commands.
The server MUST have the ability to respond to a GET request with content.</t>

<t>The server MUST respond to 4 URLs:</t>

<t><list style="numbers" type="1">
  <t>A "small" URL/response:
The server must respond with a status code of 200 (OK) and 1 byte of content.
The actual message content is irrelevant.
The server SHOULD specify the Content-Type header field with the media type "application/octet-stream".
The server SHOULD minimize the size, in bytes, of the response fields that are encoded and sent on the wire.</t>
  <t>A "large" URL/response:
The server must respond with a status code of 200 (OK) and content size of at least 8GB.
The server SHOULD specify the Content-Type header field with the media type "application/octet-stream".
The content can be larger, and may need to grow as network speeds increases over time.
The actual message content is irrelevant.
The client will probably never completely download the object,
but will instead close the connection after reaching working conditions
and making its measurements.</t>
  <t>An "upload" URL/response:
The server must handle a POST request with an arbitrary content size.
The server should discard the content.
The client SHOULD specify the Content-Type header field for
the POST request with the media type "application/octet-stream".
The actual POST message content is irrelevant.
The client will probably never completely upload the object,
but will instead close the connection after reaching working conditions
and making its measurements.</t>
  <t>A .well-known URL <xref target="RFC8615"/> that serves a JSON object providing
the three test URLs described above and other configuration information for
the client to run the test (See <xref target="discovery"/>, below.)</t>
</list></t>

<t>The client begins the responsiveness measurement by querying for the JSON <xref target="RFC8259"/> configuration.
This supplies the URLs for creating the load-generating connections in
the upstream and downstream direction as well as the small object
for the latency measurements.</t>

</section>
<section anchor="discovery"><name>Responsiveness Test Server Discovery</name>

<t>It makes sense for a service provider (either an application service provider like a video conferencing service
or a network access provider like an ISP) to host Responsiveness Test Servers on their
network so customers can determine what to expect about the quality of their connection to
the service offered by that provider.
However, when a user performs a Responsiveness Test and determines
that they are suffering from poor responsiveness during the connection to that service,
the logical next questions might be,</t>

<?rfc subcompact="yes" ?>
<t><list style="numbers" type="1">
  <t>"What's causing my poor performance?"</t>
  <t>"Something to do with my home Wi-Fi Access point?"</t>
  <t>"Something to do with my home gateway?"</t>
  <t>"Something to do with my service provider?"</t>
  <t>"Something else entirely?"
<?rfc subcompact="no" ?></t>
</list></t>

<t>To help an end user answer these questions, it will be useful for test clients
to be able to easily discover Responsiveness Test Servers running in various
places in the network (e.g., their home router, their Wi-Fi access point, their ISP's
head-end equipment, etc).</t>

<t>Consider this example scenario: A user has a cable modem
service offering 100 Mb/s download speed, connected via
gigabit Ethernet to one or more Wi-Fi access points in their home,
which then offer service to Wi-Fi client devices at different rates
depending on distance, interference from other traffic, etc.
By having the cable modem itself host a Responsiveness Test Server,
the user can then run a test between the cable modem and their computer
or smartphone, to help isolate whether bufferbloat they are experiencing
is occurring in equipment inside the home (like their Wi-Fi access points)
or somewhere outside the home.</t>

<section anchor="well-known-uniform-resource-identifier-uri-for-test-server-discovery"><name>Well-Known Uniform Resource Identifier (URI) For Test Server Discovery</name>

<t>An organization or device that hosts a Responsiveness Test Server
advertises that service using the network quality well-known URI <xref target="RFC8615"/>.
The URI scheme is "https" and the application name is "nq"
(e.g., https://example.com/.well-known/nq).
No additional path components, query strings or fragments are valid
for this well-known URI.
The media type of the resource at the well-known URI is "application/json" and
the format of the resource is a valid JSON object as specified below:</t>

<figure><artwork><![CDATA[
{
  "version": 1,
  "urls": {
    "large_download_url": "<URL for bulk download>",
    "small_download_url": "<URL for small download>",
    "upload_url":         "<URL for small upload>"
  }
  "test_endpoint":        "<hostname for server to use for testing>"
}
]]></artwork></figure>

<t>The fields can appear in any order.</t>

<t>The content of the "version" field SHALL be "1".
Integer values greater than "1" are reserved
for possible use in future updates to this protocol.</t>

<t>The content of the "large_download_url", "small_download_url", and "upload_url"
SHALL all be validly formatted "http" or "https" URLs.
All three URLs MUST contain the same &lt;host&gt; part so that they are
eligible to be multiplexed onto the same TCP or QUIC connection.
If the three URLs do not contain the same &lt;host&gt; part
then the JSON configuration information object is invalid
and the client MUST ignore the entire JSON object.</t>

<t>The "version" field and the three URLs are mandatory
and each MUST appear exactly once in the JSON object.
If any of these fields are missing or appear more than once,
the configuration information is invalid and the entire JSON object MUST be ignored.
If a client implementing the current version of this specification encounters
a JSON configuration information object where the "version" field is not "1",
then the client should assume that it is unable
to safely parse the configuration information object
(that’s what incrementing the version field indicates)
and the client MUST ignore the entire JSON object.</t>

<t>The "test_endpoint" field is OPTIONAL,
and if present MUST appear exactly once in the JSON object.
If the "test_endpoint" field appears more than once,
the configuration information is invalid and the entire JSON object MUST be ignored.
If present, then for the purpose of determining the IP address to which it should
connect the test client MUST ignore the &lt;host&gt; part in the URLs and instead
connect to one of the IP addresses indicated by the "test_endpoint" field,
as determined by the test client’s address resolution policy
(e.g., Happy Eyeballs <xref target="RFC8305"/>).
The test client then sends HTTP GET and POST requests
(as determined by the test procedure)
to the host indicated by the "test_endpoint" field,
forming its HTTP requests using the &lt;host&gt; and &lt;path&gt; from the specified URLs.
In other words, when the "test_endpoint" field is present
the test client operates as if it were simply
using the specified URLs directly, except that it behaves
as if it had a local (e.g., “/etc/hosts”) entry overriding the
IP address(es) of the &lt;host&gt; given in the URLs to be the
IP address(es) of the "test_endpoint" hostname instead.
In the case of a large web site served by multiple load-balanced
servers, this feature gives the administrator more precise control over
which of those servers are used for responsiveness testing.
In a situation where some of a site’s servers have been configured
to deliver low-delay HTTP responses and some have not,
it can be useful to be able to measure the responsiveness of different
servers with different configurations to see how they compare
when handling identical HTTP GET and POST requests.</t>

<t>Servers implementing the current version of this specification
SHOULD NOT include any names in the JSON configuration information
other than those documented here.
Future updates to this specification may define additional names
in the JSON configuration information.
To allow for these future backwards-compatible updates,
clients implementing the current version of this specification
MUST silently ignore any unrecognized names in the
JSON configuration information they receive,
and MUST process the required names as documented here,
behaving as if the unrecognized names were not present.</t>

</section>
<section anchor="dns-based-service-discovery-for-test-server-discovery"><name>DNS-Based Service Discovery for Test Server Discovery</name>

<t>To further aid the test client in discovering Responsiveness Test Servers,
organizations or devices offering Responsiveness Test Servers
MAY advertise their availability using DNS-Based Service Discovery <xref target="RFC6763"/>
over Multicast DNS <xref target="RFC6762"/> or conventional unicast DNS <xref target="RFC1034"/>,
using the service type <xref target="RFC6335"/> "_nq._tcp".</t>

<t>When advertising over Multicast DNS, typically the device offering
the test service generally advertises its own Multicast DNS records.</t>

<t>When advertising over unicast DNS, population of the appropriate
DNS zone with the relevant unicast discovery records can be performed
by having a human administrator manually enter the required records,
or automatically using a Discovery Proxy <xref target="RFC8766"/>.</t>

<section anchor="unicast-dns-sd-example"><name>Unicast DNS-SD Example</name>

<t>An obscure service provider hosting a Responsiveness Test Server instance for their
organization (obs.cr) on the "rpm.obs.cr" host would return the following answers
to conventional PTR and SRV DNS queries:</t>

<figure><artwork><![CDATA[
$ nslookup -q=ptr _nq._tcp.obs.cr.
Non-authoritative answer:
_nq._tcp.obs.crname = rpm._nq._tcp.obs.cr.
$ nslookup -q=srv rpm._nq._tcp.obs.cr.
Non-authoritative answer:
rpm._nq._tcp.obs.crservice = 0 0 443 rpm.obs.cr.
]]></artwork></figure>

<t>Given those DNS query responses, the client would proceed to access the rpm.obs.cr
host on port 443 at the .well-known/nq well-known URI to begin the test.</t>

</section>
</section>
</section>
<section anchor="security-considerations"><name>Security Considerations</name>

<t>The security considerations that apply to any Active
Measurement of live paths are relevant here <xref target="RFC4656"/><xref target="RFC5357"/>.</t>

<t>If server-side resource consumption is a concern, a server can choose to not reply or delay
its response to the initial request for the configuration information through the
.well-known URL.</t>

</section>
<section anchor="discussion"><name>DISCUSSION</name>

<t>We seek feedback from designers of delay-sensitive applications,
such as on-line games and videoconferencing applications, about
whether this test accurately predicts their real-world user experience.</t>

<t>As this document as evolved through multiple revisions, it has
arrived at an algorithm that discards the worst 5% of round-trip measurements,
and reports the arithmetic mean of the the best 95%, because this enabled
the algorithm to generate results that are both quick to produce and consistent
from one run to the next.</t>

<t>However, the BITAG “Latency Explained” report <xref target="BITAG"/> states that the 95th,
98th, or 99th percentile round-trip time is indicative of the behaviour
of videoconferencing applications,
which is more or less the opposite of the current Responsiveness Test.</t>

<t>While repeatability and convenience are both valuable properties of the test,
we need to ensure that we have not sacrificed relevance in the pursuit
of these two other goals.</t>

<t>If we cannot achieve all three goals in a single test,
we may need to have two versions of the test:
a “quick” version that runs in about ten seconds and gives an
approximate “ball park” result, suitable for a user to determine
quickly whether their Internet connection is good or terrible, and
a “precise” version that runs for longer and gives highly accurate and
repeatable results, suitable for an equipment vendor or network operator
to use when advertising the quality of their offerings.</t>

<t>The current specification of the Responsiveness Test
includes a number of configurable parameters.
If we want the Responsiveness Test to produce a score that can be compared
meaningfully between different hardware and different network operators,
we need to specify required values for these configurable parameters.
For engineering diagnostic purposes different parameter values may be useful,
but for comparisons between vendors or operators we need IETF consensus
on fixed standardized test parameters that everyone uses.</t>

</section>
<section anchor="iana-considerations"><name>IANA Considerations</name>

<section anchor="well-known-uri"><name>Well-Known URI</name>

<t>This specification registers the "nq" well-known URI in the
"Well-Known URIs" registry <xref target="RFC5785"/>.</t>

<t>URI suffix: nq</t>

</section>
<section anchor="service-name"><name>Service Name</name>

<t>IANA has added the following value to the "Service Name and Transport
Protocol Port Number Registry".</t>

<figure><artwork><![CDATA[
Service Name:       nq
Transport Protocol: TCP
Assignee:           Stuart Cheshire
Contact:            Stuart Cheshire
Description:        Network Quality test server endpoint
]]></artwork></figure>

</section>
</section>
<section anchor="acknowledgments"><name>Acknowledgments</name>

<t>Special thanks go to Jeroen Schickendantz and Felix Gaudin for their
enthusiasm around the project and the development
of the Go responsiveness measurement tool and the librespeed implementation.
We also thank Greg White, Lucas Pardue, Sebastian Moeller,
Rich Brown, Erik Auerswald, Matt Mathis and Omer Shapira for
their constructive feedback on the document.</t>

</section>


  </middle>

  <back>


<references title='References' anchor="sec-combined-references">

    <references title='Normative References' anchor="sec-normative-references">



<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="RFC9110">
  <front>
    <title>HTTP Semantics</title>
    <author fullname="R. Fielding" initials="R." role="editor" surname="Fielding"/>
    <author fullname="M. Nottingham" initials="M." role="editor" surname="Nottingham"/>
    <author fullname="J. Reschke" initials="J." role="editor" surname="Reschke"/>
    <date month="June" year="2022"/>
    <abstract>
      <t>The Hypertext Transfer Protocol (HTTP) is a stateless application-level protocol for distributed, collaborative, hypertext information systems. This document describes the overall architecture of HTTP, establishes common terminology, and defines aspects of the protocol that are shared by all versions. In this definition are core protocol elements, extensibility mechanisms, and the "http" and "https" Uniform Resource Identifier (URI) schemes.</t>
      <t>This document updates RFC 3864 and obsoletes RFCs 2818, 7231, 7232, 7233, 7235, 7538, 7615, 7694, and portions of 7230.</t>
    </abstract>
  </front>
  <seriesInfo name="STD" value="97"/>
  <seriesInfo name="RFC" value="9110"/>
  <seriesInfo name="DOI" value="10.17487/RFC9110"/>
</reference>



    </references>

    <references title='Informative References' anchor="sec-informative-references">

<reference anchor="BITAG" target="https://www.bitag.org/latency-explained.php">
  <front>
    <title>Latency Explained</title>
    <author >
      <organization>Broadband Internet Technical Advisory Group</organization>
    </author>
    <date year="2022"/>
  </front>
</reference>
<reference anchor="Bufferbloat" >
  <front>
    <title>Bufferbloat: Dark Buffers in the Internet</title>
    <author initials="J." surname="Gettys">
      <organization></organization>
    </author>
    <author initials="K." surname="Nichols">
      <organization></organization>
    </author>
    <date year="n.d."/>
  </front>
  <seriesInfo name="Communications of the ACM, Volume 55, Number 1 (2012)" value=""/>
</reference>
<reference anchor="Cake" >
  <front>
    <title>Piece of CAKE: A Comprehensive Queue Management Solution for Home Gateways</title>
    <author initials="T." surname="Høiland-Jørgensen">
      <organization></organization>
    </author>
    <author initials="D." surname="Taht">
      <organization></organization>
    </author>
    <author initials="J." surname="Morton">
      <organization></organization>
    </author>
    <date year="n.d."/>
  </front>
  <seriesInfo name="2018 IEEE International Symposium on Local and Metropolitan Area Networks (LANMAN)" value=""/>
</reference>
<reference anchor="L96" target="http://stuartcheshire.org/rants/Latency.html">
  <front>
    <title>It’s the Latency, Stupid</title>
    <author initials="S." surname="Cheshire">
      <organization></organization>
    </author>
    <date year="1996"/>
  </front>
</reference>



<reference anchor="Prague">
   <front>
      <title>Prague Congestion Control</title>
      <author fullname="Koen De Schepper" initials="K." surname="De Schepper">
         <organization>Nokia Bell Labs</organization>
      </author>
      <author fullname="Olivier Tilmans" initials="O." surname="Tilmans">
         <organization>Nokia Bell Labs</organization>
      </author>
      <author fullname="Bob Briscoe" initials="B." surname="Briscoe">
         <organization>Independent</organization>
      </author>
      <author fullname="Vidhi Goel" initials="V." surname="Goel">
         <organization>Apple Inc</organization>
      </author>
      <date day="24" month="July" year="2024"/>
      <abstract>
	 <t>   This specification defines the Prague congestion control scheme,
   which is derived from DCTCP and adapted for Internet traffic by
   implementing the Prague L4S requirements.  Over paths with L4S
   support at the bottleneck, it adapts the DCTCP mechanisms to achieve
   consistently low latency and full throughput.  It is defined
   independently of any particular transport protocol or operating
   system, but notes are added that highlight issues specific to certain
   transports and OSs.  It is mainly based on experience with the
   reference Linux implementation of TCP Prague and the Apple
   implementation over QUIC, but it includes experience from other
   implementations where available.

   The implementation does not satisfy all the Prague requirements (yet)
   and the IETF might decide that certain requirements need to be
   relaxed as an outcome of the process of trying to satisfy them all.
   Future plans that have typically only been implemented as proof-of-
   concept code are outlined in a separate section.

	 </t>
      </abstract>
   </front>
   <seriesInfo name="Internet-Draft" value="draft-briscoe-iccrg-prague-congestion-control-04"/>
   
</reference>

<reference anchor="SBM">
   <front>
      <title>Source Buffer Management</title>
      <author fullname="Stuart Cheshire" initials="S." surname="Cheshire">
         <organization>Apple Inc.</organization>
      </author>
      <date day="20" month="October" year="2025"/>
      <abstract>
	 <t>   In the past decade there has been growing awareness about the harmful
   effects of bufferbloat in the network, and there has been good work
   on developments like L4S to address that problem.  However,
   bufferbloat on the sender itself remains a significant additional
   problem, which has not received similar attention.  This document
   offers techniques and guidance for host networking software to avoid
   network traffic suffering unnecessary delays caused by excessive
   buffering at the sender.  These improvements are broadly applicable
   across all datagram and transport protocols (UDP, TCP, QUIC, etc.) on
   all operating systems.

	 </t>
      </abstract>
   </front>
   <seriesInfo name="Internet-Draft" value="draft-cheshire-sbm-03"/>
   
</reference>
<reference anchor="RFC1034">
  <front>
    <title>Domain names - concepts and facilities</title>
    <author fullname="P. Mockapetris" initials="P." surname="Mockapetris"/>
    <date month="November" year="1987"/>
    <abstract>
      <t>This RFC is the revised basic definition of The Domain Name System. It obsoletes RFC-882. This memo describes the domain style names and their used for host address look up and electronic mail forwarding. It discusses the clients and servers in the domain name system and the protocol used between them.</t>
    </abstract>
  </front>
  <seriesInfo name="STD" value="13"/>
  <seriesInfo name="RFC" value="1034"/>
  <seriesInfo name="DOI" value="10.17487/RFC1034"/>
</reference>
<reference anchor="RFC1889">
  <front>
    <title>RTP: A Transport Protocol for Real-Time Applications</title>
    <author>
      <organization>Audio-Video Transport Working Group</organization>
    </author>
    <author fullname="H. Schulzrinne" initials="H." surname="Schulzrinne"/>
    <author fullname="S. Casner" initials="S." surname="Casner"/>
    <author fullname="R. Frederick" initials="R." surname="Frederick"/>
    <author fullname="V. Jacobson" initials="V." surname="Jacobson"/>
    <date month="January" year="1996"/>
    <abstract>
      <t>This memorandum describes RTP, the real-time transport protocol. RTP provides end-to-end network transport functions suitable for applications transmitting real-time data, such as audio, video or simulation data, over multicast or unicast network services. [STANDARDS-TRACK]</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="1889"/>
  <seriesInfo name="DOI" value="10.17487/RFC1889"/>
</reference>
<reference anchor="RFC4656">
  <front>
    <title>A One-way Active Measurement Protocol (OWAMP)</title>
    <author fullname="S. Shalunov" initials="S." surname="Shalunov"/>
    <author fullname="B. Teitelbaum" initials="B." surname="Teitelbaum"/>
    <author fullname="A. Karp" initials="A." surname="Karp"/>
    <author fullname="J. Boote" initials="J." surname="Boote"/>
    <author fullname="M. Zekauskas" initials="M." surname="Zekauskas"/>
    <date month="September" year="2006"/>
    <abstract>
      <t>The One-Way Active Measurement Protocol (OWAMP) measures unidirectional characteristics such as one-way delay and one-way loss. High-precision measurement of these one-way IP performance metrics became possible with wider availability of good time sources (such as GPS and CDMA). OWAMP enables the interoperability of these measurements. [STANDARDS-TRACK]</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="4656"/>
  <seriesInfo name="DOI" value="10.17487/RFC4656"/>
</reference>
<reference anchor="RFC5357">
  <front>
    <title>A Two-Way Active Measurement Protocol (TWAMP)</title>
    <author fullname="K. Hedayat" initials="K." surname="Hedayat"/>
    <author fullname="R. Krzanowski" initials="R." surname="Krzanowski"/>
    <author fullname="A. Morton" initials="A." surname="Morton"/>
    <author fullname="K. Yum" initials="K." surname="Yum"/>
    <author fullname="J. Babiarz" initials="J." surname="Babiarz"/>
    <date month="October" year="2008"/>
    <abstract>
      <t>The One-way Active Measurement Protocol (OWAMP), specified in RFC 4656, provides a common protocol for measuring one-way metrics between network devices. OWAMP can be used bi-directionally to measure one-way metrics in both directions between two network elements. However, it does not accommodate round-trip or two-way measurements. This memo specifies a Two-Way Active Measurement Protocol (TWAMP), based on the OWAMP, that adds two-way or round-trip measurement capabilities. The TWAMP measurement architecture is usually comprised of two hosts with specific roles, and this allows for some protocol simplifications, making it an attractive alternative in some circumstances. [STANDARDS-TRACK]</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="5357"/>
  <seriesInfo name="DOI" value="10.17487/RFC5357"/>
</reference>
<reference anchor="RFC5785">
  <front>
    <title>Defining Well-Known Uniform Resource Identifiers (URIs)</title>
    <author fullname="M. Nottingham" initials="M." surname="Nottingham"/>
    <author fullname="E. Hammer-Lahav" initials="E." surname="Hammer-Lahav"/>
    <date month="April" year="2010"/>
    <abstract>
      <t>This memo defines a path prefix for "well-known locations", "/.well-known/", in selected Uniform Resource Identifier (URI) schemes. [STANDARDS-TRACK]</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="5785"/>
  <seriesInfo name="DOI" value="10.17487/RFC5785"/>
</reference>
<reference anchor="RFC6335">
  <front>
    <title>Internet Assigned Numbers Authority (IANA) Procedures for the Management of the Service Name and Transport Protocol Port Number Registry</title>
    <author fullname="M. Cotton" initials="M." surname="Cotton"/>
    <author fullname="L. Eggert" initials="L." surname="Eggert"/>
    <author fullname="J. Touch" initials="J." surname="Touch"/>
    <author fullname="M. Westerlund" initials="M." surname="Westerlund"/>
    <author fullname="S. Cheshire" initials="S." surname="Cheshire"/>
    <date month="August" year="2011"/>
    <abstract>
      <t>This document defines the procedures that the Internet Assigned Numbers Authority (IANA) uses when handling assignment and other requests related to the Service Name and Transport Protocol Port Number registry. It also discusses the rationale and principles behind these procedures and how they facilitate the long-term sustainability of the registry.</t>
      <t>This document updates IANA's procedures by obsoleting the previous UDP and TCP port assignment procedures defined in Sections 8 and 9.1 of the IANA Allocation Guidelines, and it updates the IANA service name and port assignment procedures for UDP-Lite, the Datagram Congestion Control Protocol (DCCP), and the Stream Control Transmission Protocol (SCTP). It also updates the DNS SRV specification to clarify what a service name is and how it is registered. This memo documents an Internet Best Current Practice.</t>
    </abstract>
  </front>
  <seriesInfo name="BCP" value="165"/>
  <seriesInfo name="RFC" value="6335"/>
  <seriesInfo name="DOI" value="10.17487/RFC6335"/>
</reference>
<reference anchor="RFC6762">
  <front>
    <title>Multicast DNS</title>
    <author fullname="S. Cheshire" initials="S." surname="Cheshire"/>
    <author fullname="M. Krochmal" initials="M." surname="Krochmal"/>
    <date month="February" year="2013"/>
    <abstract>
      <t>As networked devices become smaller, more portable, and more ubiquitous, the ability to operate with less configured infrastructure is increasingly important. In particular, the ability to look up DNS resource record data types (including, but not limited to, host names) in the absence of a conventional managed DNS server is useful.</t>
      <t>Multicast DNS (mDNS) provides the ability to perform DNS-like operations on the local link in the absence of any conventional Unicast DNS server. In addition, Multicast DNS designates a portion of the DNS namespace to be free for local use, without the need to pay any annual fee, and without the need to set up delegations or otherwise configure a conventional DNS server to answer for those names.</t>
      <t>The primary benefits of Multicast DNS names are that (i) they require little or no administration or configuration to set them up, (ii) they work when no infrastructure is present, and (iii) they work during infrastructure failures.</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="6762"/>
  <seriesInfo name="DOI" value="10.17487/RFC6762"/>
</reference>
<reference anchor="RFC6763">
  <front>
    <title>DNS-Based Service Discovery</title>
    <author fullname="S. Cheshire" initials="S." surname="Cheshire"/>
    <author fullname="M. Krochmal" initials="M." surname="Krochmal"/>
    <date month="February" year="2013"/>
    <abstract>
      <t>This document specifies how DNS resource records are named and structured to facilitate service discovery. Given a type of service that a client is looking for, and a domain in which the client is looking for that service, this mechanism allows clients to discover a list of named instances of that desired service, using standard DNS queries. This mechanism is referred to as DNS-based Service Discovery, or DNS-SD.</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="6763"/>
  <seriesInfo name="DOI" value="10.17487/RFC6763"/>
</reference>
<reference anchor="RFC8615">
  <front>
    <title>Well-Known Uniform Resource Identifiers (URIs)</title>
    <author fullname="M. Nottingham" initials="M." surname="Nottingham"/>
    <date month="May" year="2019"/>
    <abstract>
      <t>This memo defines a path prefix for "well-known locations", "/.well-known/", in selected Uniform Resource Identifier (URI) schemes.</t>
      <t>In doing so, it obsoletes RFC 5785 and updates the URI schemes defined in RFC 7230 to reserve that space. It also updates RFC 7595 to track URI schemes that support well-known URIs in their registry.</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="8615"/>
  <seriesInfo name="DOI" value="10.17487/RFC8615"/>
</reference>
<reference anchor="RFC8766">
  <front>
    <title>Discovery Proxy for Multicast DNS-Based Service Discovery</title>
    <author fullname="S. Cheshire" initials="S." surname="Cheshire"/>
    <date month="June" year="2020"/>
    <abstract>
      <t>This document specifies a network proxy that uses Multicast DNS to automatically populate the wide-area unicast Domain Name System namespace with records describing devices and services found on the local link.</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="8766"/>
  <seriesInfo name="DOI" value="10.17487/RFC8766"/>
</reference>
<reference anchor="RFC8290">
  <front>
    <title>The Flow Queue CoDel Packet Scheduler and Active Queue Management Algorithm</title>
    <author fullname="T. Hoeiland-Joergensen" initials="T." surname="Hoeiland-Joergensen"/>
    <author fullname="P. McKenney" initials="P." surname="McKenney"/>
    <author fullname="D. Taht" initials="D." surname="Taht"/>
    <author fullname="J. Gettys" initials="J." surname="Gettys"/>
    <author fullname="E. Dumazet" initials="E." surname="Dumazet"/>
    <date month="January" year="2018"/>
    <abstract>
      <t>This memo presents the FQ-CoDel hybrid packet scheduler and Active Queue Management (AQM) algorithm, a powerful tool for fighting bufferbloat and reducing latency.</t>
      <t>FQ-CoDel mixes packets from multiple flows and reduces the impact of head-of-line blocking from bursty traffic. It provides isolation for low-rate traffic such as DNS, web, and videoconferencing traffic. It improves utilisation across the networking fabric, especially for bidirectional traffic, by keeping queue lengths short, and it can be implemented in a memory- and CPU-efficient fashion across a wide range of hardware.</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="8290"/>
  <seriesInfo name="DOI" value="10.17487/RFC8290"/>
</reference>
<reference anchor="RFC8033">
  <front>
    <title>Proportional Integral Controller Enhanced (PIE): A Lightweight Control Scheme to Address the Bufferbloat Problem</title>
    <author fullname="R. Pan" initials="R." surname="Pan"/>
    <author fullname="P. Natarajan" initials="P." surname="Natarajan"/>
    <author fullname="F. Baker" initials="F." surname="Baker"/>
    <author fullname="G. White" initials="G." surname="White"/>
    <date month="February" year="2017"/>
    <abstract>
      <t>Bufferbloat is a phenomenon in which excess buffers in the network cause high latency and latency variation. As more and more interactive applications (e.g., voice over IP, real-time video streaming, and financial transactions) run in the Internet, high latency and latency variation degrade application performance. There is a pressing need to design intelligent queue management schemes that can control latency and latency variation, and hence provide desirable quality of service to users.</t>
      <t>This document presents a lightweight active queue management design called "PIE" (Proportional Integral controller Enhanced) that can effectively control the average queuing latency to a target value. Simulation results, theoretical analysis, and Linux testbed results have shown that PIE can ensure low latency and achieve high link utilization under various congestion situations. The design does not require per-packet timestamps, so it incurs very little overhead and is simple enough to implement in both hardware and software.</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="8033"/>
  <seriesInfo name="DOI" value="10.17487/RFC8033"/>
</reference>
<reference anchor="RFC8259">
  <front>
    <title>The JavaScript Object Notation (JSON) Data Interchange Format</title>
    <author fullname="T. Bray" initials="T." role="editor" surname="Bray"/>
    <date month="December" year="2017"/>
    <abstract>
      <t>JavaScript Object Notation (JSON) is a lightweight, text-based, language-independent data interchange format. It was derived from the ECMAScript Programming Language Standard. JSON defines a small set of formatting rules for the portable representation of structured data.</t>
      <t>This document removes inconsistencies with other specifications of JSON, repairs specification errors, and offers experience-based interoperability guidance.</t>
    </abstract>
  </front>
  <seriesInfo name="STD" value="90"/>
  <seriesInfo name="RFC" value="8259"/>
  <seriesInfo name="DOI" value="10.17487/RFC8259"/>
</reference>
<reference anchor="RFC9293">
  <front>
    <title>Transmission Control Protocol (TCP)</title>
    <author fullname="W. Eddy" initials="W." role="editor" surname="Eddy"/>
    <date month="August" year="2022"/>
    <abstract>
      <t>This document specifies the Transmission Control Protocol (TCP). TCP is an important transport-layer protocol in the Internet protocol stack, and it has continuously evolved over decades of use and growth of the Internet. Over this time, a number of changes have been made to TCP as it was specified in RFC 793, though these have only been documented in a piecemeal fashion. This document collects and brings those changes together with the protocol specification from RFC 793. This document obsoletes RFC 793, as well as RFCs 879, 2873, 6093, 6429, 6528, and 6691 that updated parts of RFC 793. It updates RFCs 1011 and 1122, and it should be considered as a replacement for the portions of those documents dealing with TCP requirements. It also updates RFC 5961 by adding a small clarification in reset handling while in the SYN-RECEIVED state. The TCP header control bits from RFC 793 have also been updated based on RFC 3168.</t>
    </abstract>
  </front>
  <seriesInfo name="STD" value="7"/>
  <seriesInfo name="RFC" value="9293"/>
  <seriesInfo name="DOI" value="10.17487/RFC9293"/>
</reference>
<reference anchor="RFC8305">
  <front>
    <title>Happy Eyeballs Version 2: Better Connectivity Using Concurrency</title>
    <author fullname="D. Schinazi" initials="D." surname="Schinazi"/>
    <author fullname="T. Pauly" initials="T." surname="Pauly"/>
    <date month="December" year="2017"/>
    <abstract>
      <t>Many communication protocols operating over the modern Internet use hostnames. These often resolve to multiple IP addresses, each of which may have different performance and connectivity characteristics. Since specific addresses or address families (IPv4 or IPv6) may be blocked, broken, or sub-optimal on a network, clients that attempt multiple connections in parallel have a chance of establishing a connection more quickly. This document specifies requirements for algorithms that reduce this user-visible delay and provides an example algorithm, referred to as "Happy Eyeballs". This document obsoletes the original algorithm description in RFC 6555.</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="8305"/>
  <seriesInfo name="DOI" value="10.17487/RFC8305"/>
</reference>
<reference anchor="RFC9114">
  <front>
    <title>HTTP/3</title>
    <author fullname="M. Bishop" initials="M." role="editor" surname="Bishop"/>
    <date month="June" year="2022"/>
    <abstract>
      <t>The QUIC transport protocol has several features that are desirable in a transport for HTTP, such as stream multiplexing, per-stream flow control, and low-latency connection establishment. This document describes a mapping of HTTP semantics over QUIC. This document also identifies HTTP/2 features that are subsumed by QUIC and describes how HTTP/2 extensions can be ported to HTTP/3.</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="9114"/>
  <seriesInfo name="DOI" value="10.17487/RFC9114"/>
</reference>
<reference anchor="RFC9330">
  <front>
    <title>Low Latency, Low Loss, and Scalable Throughput (L4S) Internet Service: Architecture</title>
    <author fullname="B. Briscoe" initials="B." role="editor" surname="Briscoe"/>
    <author fullname="K. De Schepper" initials="K." surname="De Schepper"/>
    <author fullname="M. Bagnulo" initials="M." surname="Bagnulo"/>
    <author fullname="G. White" initials="G." surname="White"/>
    <date month="January" year="2023"/>
    <abstract>
      <t>This document describes the L4S architecture, which enables Internet applications to achieve low queuing latency, low congestion loss, and scalable throughput control. L4S is based on the insight that the root cause of queuing delay is in the capacity-seeking congestion controllers of senders, not in the queue itself. With the L4S architecture, all Internet applications could (but do not have to) transition away from congestion control algorithms that cause substantial queuing delay and instead adopt a new class of congestion controls that can seek capacity with very little queuing. These are aided by a modified form of Explicit Congestion Notification (ECN) from the network. With this new architecture, applications can have both low latency and high throughput.</t>
      <t>The architecture primarily concerns incremental deployment. It defines mechanisms that allow the new class of L4S congestion controls to coexist with 'Classic' congestion controls in a shared network. The aim is for L4S latency and throughput to be usually much better (and rarely worse) while typically not impacting Classic performance.</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="9330"/>
  <seriesInfo name="DOI" value="10.17487/RFC9330"/>
</reference>



    </references>

</references>


<?line 1633?>

<section anchor="apache-traffic-server-example-configurations"><name>Apache Traffic Server Example Configurations</name>

<t>Apache Traffic Server starting at version 9.1.0 supports configuration as a
Responsiveness Test Server, using the generator and the statichit plugin.</t>

<t>This section shows fragments of sample server configurations to host a
Responsiveness Test Server.</t>

<section anchor="single-server-configuration"><name>Single Server Configuration</name>

<t>Given a local file “config.example.com.json” with the following content:</t>

<figure><artwork><![CDATA[
{
  "version": 1,
  "urls": {
    "large_download_url":"https://www.example.com/large",
    "small_download_url":"https://www.example.com/small",
    "upload_url":        "https://www.example.com/upload"
  }
}
]]></artwork></figure>

<t>The sample remap configuration file then is:</t>

<figure><artwork><![CDATA[
map https://www.example.com/.well-known/nq \
    http://localhost/ \
    @plugin=statichit.so \
    @pparam=--file-path=config.example.com.json \
    @pparam=--mime-type=application/json

map https://www.example.com/large \
    http://localhost/cache/8589934592/ \
    @plugin=generator.so

map https://www.example.com/small \
    http://localhost/cache/1/ \
    @plugin=generator.so

map https://www.example.com/upload \
    http://localhost/ \
    @plugin=generator.so
]]></artwork></figure>

</section>
<section anchor="alternate-server-configuration"><name>Alternate Server Configuration</name>

<t>If a separate test_endpoint server is desired, then on the main www.example.com server(s)
a JSON configuration file like the one shown below is used:</t>

<figure><artwork><![CDATA[
{
  "version": 1,
  "urls": {
    "large_download_url":"https://www.example.com/large",
    "small_download_url":"https://www.example.com/small",
    "upload_url":        "https://www.example.com/upload"
  }
  "test_endpoint": "nq-test-server.example.com"
}
]]></artwork></figure>

<t>On the main www.example.com server(s) a remap configuration file like the
one shown below is used, to serve the JSON configuration file to clients:</t>

<figure><artwork><![CDATA[
map https://www.example.com/.well-known/nq \
    http://localhost/ \
    @plugin=statichit.so \
    @pparam=--file-path=config.example.com.json \
    @pparam=--mime-type=application/json
]]></artwork></figure>

<t>On nq-test-server.example.com a remap configuration file like the
one shown below is used, to handle the test downloads and uploads:</t>

<figure><artwork><![CDATA[
map https://www.example.com/large \
    http://localhost/cache/8589934592/ \
    @plugin=generator.so

map https://www.example.com/small \
    http://localhost/cache/1/ \
    @plugin=generator.so

map https://www.example.com/upload \
    http://localhost/ \
    @plugin=generator.so
]]></artwork></figure>

</section>
</section>


  </back>

<!-- ##markdown-source:
H4sIAAAAAAAAA+2965LcVpIm+B9Pgc3aNmV2R4R4L5Hb1d0pkpLYxUsWM9Wy
2dWahIhAZqIYAUQBCCazVGqr1xiznveY//Mm9STr3+fu5xwgIihW99jsztpU
W1clM4GDc/Hj18/dp9Np1lf9qnySvy27TVN31fuyLrsu39bLss2/a9p3VX2V
P23qZdVX8vesmM/b8v2nP79sFnWxlg8s2+Kyn1ZlfzmtNpv1tB0MML3zOFsW
ffkkW8h/XzXt7ZO865dZ1m3n66rrZKyL240M8+L5xVfZolnKZ57kWxnsi6za
tE/yvt12/b07dx7fuZcVbVk8yS/aopZPtH12I9O6apvtRl4/y8/K9rJp10W9
KPNXZdFt23Jd1n32rryVB5fyTN2XbV3202eYskyhL+rlD8WqqeX7t2WXbaon
+f/VN4tJ3snwbXnZyU+3a/zwf2dZse2vm/ZJludT+f88r+ruSf50lp8VRbe4
5q90R55et1XXN5vr9E/luqhWT/KF/2224d/+Dhv3T1f442zRrLPh6G9nspLb
sk0GfytzLlar5PdNKzt2utmsSlnhYsbfdTL7sn+Sv6lL+9NZ0b7Lvytu+edF
1cs5PN1uyrav6maSPy1WlWxeXRX544d37j7Qp5pt3ePAvq2rvlzm570cYZc3
l/npumyrRZEurG3X/1TgS3uWcT6TPSm766otk5Wc99ui7Yd/+f/GWhY2pYML
+m6Wf1PcyJXokvV8V8mxpL/mYuR778u2k0niY0+relHVddFX6feu+dLN9T9t
FySE7WJWLrdZVoOce3kfRPf2q6f37t59bD9+cffXD+zHx3fv3nmSZVV9mT7+
5YuL06+f8CvGCY5eypLrxW3+/MNmVVR1uTzinyNdy3+mOusv26ZYzoXUwqXJ
L8rFdS0btcpPl+8ruSC3+de4e3yPVzy/d+fePf1i0V7hyK77ftM9+fzzm5ub
2bzqi6uZjP75SucxLX0es801hvlye3lZtvNVU/RP9s2MW//Ps/zrsu9vu8Fv
fzvLX1eL62bVDVacjpg/A9Xobzp5K++vy7A63YlOKKHssJFCUM16vcV6ye5w
dnj+9OmrSf4vzWq7LvOHDyf56+16Lvzxbn58787deycyytPiXXl49hdCOP/t
v1Yr2dnpP/+3/yq7VHdlPXjk2Sy/KK778aJfCUdq6sHqzqpSWB2o6vS3z+Xa
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
eouEzHhfVyQonwqkORT4NWgG11GuNYiE+rhccFUroY+GafmeYZiw436q1OZ/
v+3A+t6pzrOGoK3AOvUr5WpLgxknHTchIT2oUE0usmQjav9VVZfwILg9kX5d
z8w/nakFIEQv7BtDkuISFTE7Lk5kZatK7sstZLXtmd0r03hMxYT8ESktq4aR
IESU7Wf1+FD54bqay9ddYek2spEdaTk7np9APREpFnTAtRy3HJLaSfhFZPzD
EWaqSmInumQr5BZguNt4wF1i0JQfqq4XqUCLTHi+CALe/itQR4uvL4XScMVG
w9osbzNwoPV2cW3U7i9zO0VWtI0bGoHU5MReN31gj6n6G65asXzfwCmdgUdi
AS1oLT1OyjOzpYy/yq/JQUmjl6q/LfXp7loFq70lW0nVpGjlJFoo7nJ9ZJ4Q
PMKuRNEr+2l3Q1JZRplmIlV2felG2HzbdpD68i/RA3lbID9L+YjoOyasGtWg
af00q+bqVq0DTIbXS53jxgtEVZb1ijC83NbKlZrLrFs3oupwrC02TRiAflpV
nfdNtRRVBdPOVw3MgO92Nxf65nrNuVdGuKDxqBZza1T9zualqR5lTXVBvmLT
tIOO84xz8xlPMtyBhvKFu9/YYM7tRc9ZLvH/lbmutnW0odR65A7hPvAdWiEF
ptAJwdJSghIaCEE+dAWXgEwTc8yOaUhTtkHTKJfOG9VIBQHwPfxaCBpGBg0z
X8pJtndbqJGr51E0a3lvLnue4b8ok65VP6EhX65WJmvIIcWuKKEtZq7AtJQj
jSl8fHW4IvD6VviqXJcXNIR8CaMgDvn01Oh/GllTJtyqx3pBNFSTE8Nsn0GU
HZezq9kkGFoUrolpdWJMYCEMWy6PMAFwbfNtywYurhvVsedKo4lMN/1bj36+
he31q1+JOSt6ll6IjArUO/krwkFiJ7769vziaKL/m79+w5/fPv/dty/ePn+G
n8+/OX35MvygT2TyjzffvrS/46f45tM3r149f/1MX5bf5qNfvTr9T0fKg4/e
nF28ePP69OWR6s7pFQJL1HtPLVEM217tWmGdYnXO5R/yzpdPz7K7D9R4QlhA
jCe1te7++oH8DFpW1aWpzcCe2KWgxkR3wWoFBaTqixVEA+nvRvR8IeodnwHN
/T7uJYcWOoB+ZQzym4uLMzPm7t6FAZh1YNkyblsKtXV62EZYoqiJ8IaXpypX
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
iLbQzzTuoaqyCkkcy31lqfPbQVHjpHBwVLXTlh4OelTUvRUXqi2HC4L2tgTP
CtUswRSS1zEVhjP061pHl3gYpFvBb2g+Nj8nXis3f0PQSr6tEWsOYAGisccl
bAPLpRsNc3qnCMIhFsFBuw3rfw7kNtwRybTtci9ZJlR9g5q42CfC2b3oSfnm
uabKA+I4chmFC8pC3r8wYlpNGsXG2lAEJDp7fpV/LfLXKtPFuxarfZMteaXc
g/7oAI3q1OJVsLXcWO+iUGmZ3lQrYd51LPAcvQWxXQnD41rl/kmW3Z3lrol6
k6hQUCU4TAmErBQt0zkih9rOxcvzSQhnfSYyN6zW7Hbl9EUkgRmrJp5qG5Gl
Fg944ibk7cbMV/syOMuVkyHcrhtYqSz5oWCgk1Cf/IE2oPocFm0bMYBJMWO1
Y/Ljtxdn9hpaN4KJXsSFajTS4N3CsH7XnOftdhVzm8LuiBGVBRej93hoQvLH
rvP3ScDYMS0M8nme5IN2JXKF8eJseCzpR4mVaN/FAsLDpna0L5DjbQ3K5s0H
w9Rnf/nzv+l9RKs5xingnQW4gi6DNj3tdBPSEgXj8zmsvkY6WMMfAs+4ltMB
ABy8TCNUHhup4XSfism7FGnClmKBu05AY/FPE8MDD7EfuzvmGnAItRpWV2Qs
+H+sWZ4oumnGQuw/V2karpcIRnCqjh0J2TfCi7vBxK9Uz99a2TRytJF+Etm5
7oJm0qqAX5WXwWM9RPaRuFhrS0bbuq9QXlVEgqb4l7Ffh9aPqm/3DBMzA3ya
EWdConIAaLKBJ2Rsr0Ia7ujUvz3UVTx7o/ZTZBMpOuETS3xrbaJyqd6XG9nW
XowGZV9n22G7rLR9FSjuaHe4o+zezBuKHzBtIzcHE79svGq0dTi2dE7+qV1H
BBiYL9uUtjFnS7Eh+7bmOy8L/Lfy6t/uNAiaE4q8ZtXxXHt2OcR82KML7O0f
la0bso1NElpqwd2NF/CraIx3KgTUg15kCAqVzeVlcCWrzkPgsnbuGoXNFBG5
7a7HuRoijqEqkBrh4Xhq/ka3L6ZdWb4LdvdAL5Br6Ik/ynW/ffFULHJ5Pq2k
Q6empTgled87DdNC3sckG3qx+11gpkLr0re9AiiBsAfUmGv2wCjY56cnsBDR
71U+zEbPEt+1+yTzyy16GLZWWtLyW4KnLF0CmaaTGOR+0qonP7ao/Y61GrJV
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
YJqcqEqqfez6F+6XXHZAhIwn/GBv/Tizga3rxa7wihqU2OJ6PfyL/h1zGnqp
LHq2ANS1N3e+iXJ/ixUL8btCELwxWsQRJSvVnnCIwTBpe7RdyetBobBP7N25
kcT92D4NH/0rtwssaJ+F9Ql7Nfpu3LKxajTcOU0xPTgMZ190iTZEV7raiJpD
8dNPrL+HKvmqW621Vob3SxmWfu+sB581Wgt/tOoZWkc+M6a1rwY8k6sG+l0o
BxBYvD6M4S7hp56YUjQoQa99cBjcT0Wf4/MtzQmJt4swh0PI3Vx7fVtnjarO
hqZjFzO6vdIfair2bBGp2mYTKrB1Q+eMZ9+UPqU6F2HWtLtFCVmFkenCsT6a
zxZOYmRFvtXVZdlpOmGybGaXs2P7tq7dIEz0Es0+Wd2GctzpgTGsRx79oVxs
fbvSOF8HPmvqS4S/2LE2rGaorQQ5MHhxJhNR5BPcyHdchqhPgH1R8Ck+T3sl
pFrrxqt4LkKdA+aOWwFK/1Z+NwxLWE8633BNpjr1/Dh8IAiJ+NAkfv7gfZv4
XPa+b387+Db8TacGuwuwSZsa1oQMKsu2Moe135FgZevJIeU3IWSitY5Cq6c4
tvU4z48/VmLCHAExNQc1gLwYqBlOaiTZx49eNjdHhy9SNdaYbtK2QjZwZkev
Fk0f2tH50ZluorvDJgsg6Mk+GVhprLXXwHPwBngJ2iTk7HWsGTMH/D5Qb7wF
lqrEWznO2HTEwNAK01CUrWe4Ua9E7dyuh3u1b3d8t31TkJNXmjDJ4u6otrGs
lvtIJNdCo029T0D1bgcO5/dNdXX96bPTOkujz2bhs8FTpFUpPzaFFxppA79T
XKcCjcuNAbhc4YWI+fh6AHXUpj9JapebtglNu4VgRug0SdTKjaPMDadVZKm3
oDZttJb/sT73oQrnRvuKXljhLYUXWIL+JskW2u12n1Tc8pmBRtcbEScI/w4q
ltSKMllUFnddsKnezfWty0TC+FREsLCJxk4SWcz+z/mi3cILjNjLlRaXcHEU
YCxyBFa1xyMRkTiOxpuapcThCCS1N8fMKRFwoSBGUtyFSCXdsEydcJV3uOvY
L4buMrHj+t0MoTwIxAt1OppETE+f/aYUhzldyYGutIlboQH//YmjLBFhstD4
iuF/ZM+spIihltU/MSy/FLCjrL9ECDJqxiVO+mFDBlPHIPG1BGDvsJSkoHBK
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
CvEDJzVVMpQuPmUn/xcfy/4f0RdgnLBGAQA=

-->

</rfc>

