<?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.6.14 (Ruby 2.6.10) -->


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

]>


<rfc ipr="trust200902" docName="draft-ietf-ippm-responsiveness-07" 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="2025" month="July" day="07"/>

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

    <abstract>


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


<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 minumum 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 threshhold 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 constitues
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">
  <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">
  <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>For this reason, the Apple “networkQuality” tool currently
performs the upload and download tests simultaneously,
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>1 second</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">
  <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 1 second) 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 one second.</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>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">
  <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">
  <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='Normative References'>



<reference anchor='RFC2119' target='https://www.rfc-editor.org/info/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' target='https://www.rfc-editor.org/info/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' target='https://www.rfc-editor.org/info/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'>

<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' target='https://datatracker.ietf.org/doc/html/draft-briscoe-iccrg-prague-congestion-control-04'>
   <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' target='https://datatracker.ietf.org/doc/html/draft-cheshire-sbm-02'>
   <front>
      <title>Source Buffer Management</title>
      <author fullname='Stuart Cheshire' initials='S.' surname='Cheshire'>
         <organization>Apple Inc.</organization>
      </author>
      <date day='16' month='March' 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-02'/>
   
</reference>

<reference anchor='RFC1034' target='https://www.rfc-editor.org/info/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' target='https://www.rfc-editor.org/info/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' target='https://www.rfc-editor.org/info/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' target='https://www.rfc-editor.org/info/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' target='https://www.rfc-editor.org/info/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' target='https://www.rfc-editor.org/info/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' target='https://www.rfc-editor.org/info/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' target='https://www.rfc-editor.org/info/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' target='https://www.rfc-editor.org/info/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' target='https://www.rfc-editor.org/info/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' target='https://www.rfc-editor.org/info/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' target='https://www.rfc-editor.org/info/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' target='https://www.rfc-editor.org/info/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' target='https://www.rfc-editor.org/info/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' target='https://www.rfc-editor.org/info/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' target='https://www.rfc-editor.org/info/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' target='https://www.rfc-editor.org/info/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>


<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:
H4sIAMVabGgAA+2963LcWJIm+B9PgWVtW5LdEaG7MqXt6m6mpMxUly4skdlp
s1trmYgIkEQpAogCEKJYWWqr1xiznveY//Mm9STr3+fu5xwggkxV99jsztpU
W1dRJHBwLn78+rn7dDrN+qpflU/zd2W3aequ+lDWZdfl23pZtvkPTfu+qi/y
Z029rPpK/p4V83lbfvj855fNoi7W8oFlW5z306rsz6fVZrOetoMBpne/zJZF
Xz7NFvLfF017/TTv+mWWddv5uuo6GevseiPDvHxx9k22aJbymaf5Vgb7Kqs2
7dO8b7ddf//u3Sd372dFWxZP87O2qOUTbZ9dybQu2ma7kddP8pOyPW/adVEv
yvx1WXTbtlyXdZ+9L6/lwaU8U/dlW5f99DmmLFPoi3r5Y7Fqavn+ddllm+pp
/n/1zWKSdzJ8W5538tP1Gj/831lWbPvLpn2a5flU/j/Pq7p7mj+b5SdF0S0u
+SvdkWeXbdX1zeYy/VO5LqrV03zhf5tt+Le/w8b90wX+OFs062w4+ruZrOS6
bJPB38mci9Uq+X3Tyo4dbzarUla4mPF3ncy+7J/mb+vS/nRStO/zH4pr/nlR
9XIOz7absu2rupnkz4pVJZtXV0X+5NHdew/1qWZb9ziw7+uqL5f5aS9H2OXN
eX68LttqUaQLa9v1PxX40p5lnM5kT8rusmrLZCWn/bZo++Ff/r+xloVN6cYF
/TDLvyuu5Ep0yXp+qORY0l9zMfK9D2XbySTxsWdVvajquuir9HuXfOnq8p+2
CxLCdjErl9ssq0HOvbwPonv3zbP79+49sR+/uvflQ/vxyb17d59mWVWfp49/
/fLs+Nun/IpxgoNXsuR6cZ2/+LhZFVVdLg/450jX8p+pzvrrtimWcyG1cGny
s3JxWctGrfLj5YdKLsh1/i3uHt/jFc/v371/X79YtBc4ssu+33RP79y5urqa
zau+uJjJ6HdWOo9p6fOYbS4xzNfb8/Oyna+aon+6b2bc+n+e5d+WfX/dDX77
m1n+plpcNqtusOJ0xPw5qEZ/08lbeX9ZhtXpTnRCCWWHjRSCatbrLdZLdoez
w/PHz15P8n9pVtt1mT96NMnfbNdz4Y/38sP7d+/dP5JRnhXvy5tnfyaE89/+
a7WSnZ3+83/7r7JLdVfWg0eez/Kz4rIfL/q1cKSmHqzupCqF1YGqjn/zQq4N
5rxpy8uS3Df/7bbcCics6uKCjDA/lXljNbkQSv5dI0v4Vk7iqrjudpcvy/lK
ePKLF7ZF3AY5+9Pr9abpqu06l3FeNSAHUMnrsm+bTbOSM67zY2HT+ZuyB3vu
8sNXx29eH7/B3rx68nhIkS/7v/z5P3fcWSPOCdjCptpPmnuZiZLevSdPHu+Q
nlBeRybjF5rkJ+Kj7+7Y92aX/XolL560xcUWYmj6fKYSbS6MetGU02qxaC+m
G/59umjqi7LDXuBHWTPePf36dfqif2zazdd6Q+/dfeCX9d5XX/kVfvj40WP7
8dGDR1/6j19+9ch+fPzgQfjxy8f3448PnAk8vucPfPXlYx/sq/tP7vqPdx+E
Z+8/8g8/uf8k/PbB3UeRjQSO8uABOMp0Os2LubDfYiHS8hshGhGu1yIpi1YE
Y5GvisV7kN9Q4k/yD0VbNdtudZ0LeazKZbYqLib5yg9YxpnHezkR7tfl87Ks
ZZxFc1FXf5Q35FdCSFuwtH4rxFdO5J1euPh63dQUypu+WfMWN8vi+osur43e
ZtkLmUcuByH3ssiX5aJY8pLgryBaSv2iXVZ/hEbTB67W2e3oJlnVy1yEE8u9
L+yb+aZt5qtyzbsDei2F6rdyY+SD+GJ7LVpEfvC+bq66A3mg6HMZperyAzLx
1QFfLPIP1bJsZMxa1l9CU+mb7LKQ22rjd/mV3F+ZzLqcN8vrvFx1ZS6DXeK6
Vl12VQgxY+JF/vA3+br5UJXY0O1G9hK6U765bPqmy89b2R6ZZ9XiN3U5y75r
rkqZ5wS/bTFWXjfJ8uXOdsYa+kv5Y9/IoXCli6KT11/K34QOwunmfyB7WUf2
EjZQFyT//CCCFiPY2mSn3m5bPylsQl0ulL3iMlX1FtuRdyQOXQGJoFgsyk1f
yBB5sYYcz+Q4l+WqEGKqm9521qlx34mSeNoCK0+eLK5EoQTJZsbd/YzB0Zal
bOk1FyZ/rfouDjfLfihlc1aV7Kce9UJ2r9dT6Ztmpb9cqw7a7Qy9LsiQ8k3Z
iHrxRZfhXK6FjHORiODBoIsraBMcV09BtkpmWojUDdOeZBhNvrBd9bgKoPY1
foUNSWabneFARWHf6jltykV1XtnEDkYK/5mwNyVWnT9WNbzgQgs9SL9LroYo
zSJ7dXWy/0VddWvSkG0Cr0qWLM8mAQZxrSSvi1TSqNzwuDLDYxEMj5mspvRh
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
EVZOFhi+i/j2wvbaBnn55kQXVNE/lLjJEts0aPcj/kgJRnUrTSnA6nToZxj6
TRhy/zi95mN+vgqCL9ND5mcZvvhaF/PauMWeyO+4lE46rIzyWIc5OU2HGfFN
5K6WaYc9vHj3Lt88OeOSk8OD7degCv4zd2ZZ7GpudjCvW2BNrPtohwMmd1Ni
gffGUkz65yULaIS86rmlH5LGxq9FsWo067P3Jo2EkwahFtLPO1Z9YNWutCiW
hTyUuS69KWbijDLdP3U4eWbmcPbuSZpfBywzN2tquS0aoLKUX3gYQvINH/MU
GEuCOFYJlX/74sz/oqm8CXTBE4wi2vw22js8QIYYConpGR6Iqics4Ux7KmEG
mJDnqfNOsKSgJvtYrWhWKp23wuFDmokHC1ndGyPGYqZpak8SwLA+1Yq+w9Mb
0JtF5A/Ekig/zi779ergaILxjLHxum43KcxJYz4xKGQKBmLQxbaGTsZqWxeo
0R/q8pXLqpBDvb9/jz3y87EMMIzbN5VZoP+RHd2/CAwEVeu96MSxdl8STlwI
vZmrKDhk06F86ywuVHyoLgpDTm7YRTKFmhpuUqUjt4qWUqhhyGMdOIutjqHp
OEn9wmSKKGTIHSGugC7rc2vMwmAec90nwzKGhMpi5ko+sXR7SveXCVyHqmOl
NWdrvBmMeNQIZyKXDDtUkfXCyBK0gjc93tGrjbmonze5LarQWA9utWTzwwdH
SEHtvEDMVIGRT/NvQOaqk44zrwZpcdkhkiU1fVSLQYvi81O/2Px4/pPQ0qk3
aMV7soBoJk01w0zf/qlfdXwhd9f0Hhx1k/R0jieEUZnyChCXtVqNf41SKH6Z
OuG2i5MqCYSqukv1N1VrLcNincgy9dRqx4Rm5FpMRg3DxZRBvSMxnSeJxKjz
fXm9U0+ArUz5cOFpqhjUsNlR2/QNgsRBPgwsd+rAVWv7TcYgtuiGyjdW5UBY
9Ax0T5dwjsw5h160e1MWnrYC3rudqqzCSqhx7Wd42fd26nLsgaMMqS742COx
ubcuqfExoLhk4lm4wDtMz3XH4eQZxO62n8MINVfRxldnCT8Slpl4SqyS+WDh
K6fetLtHYMX4VjJdlujRTHEGTHxGiuaM/mKrSutRIcoXd5PR/8SM43uze0YY
IZPoaOJXNSPQFzTOWqjLnSuYmmhexezjNfhut51bn1q1WQblwVgfYij289ff
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
SWVAGQp42Q15C5I2G1NZRxPaL8QGhe/MKZPsS5DmvLvFQEbagM6nsqE4ZNcu
VfDHGndsARNtSirWFXq9KBRa3cliDWF/DYmwo1Kn++rdEfXSYrgkAcKXsShv
OpfAWZUBl8ssNmFeRhU8OKxHmc2U/34NbU2xgVtUFMMqdPEXZXPRFptL9vda
DHAs0dYuFn2X3M14NVPSJPRK3XfZrR32dh0KfgJM4mAFCk8dRAGXZdlqJ4FS
+6ZXluBqDOHw2fM33ZHtBPwKWqAeCiUMYqhdSMgDE/EVdjHxkOCz1VJLH6K4
qyk7+v6q6byTqnutKIzYhmLcWIt9PkKOsW5XsZpy/D1Q9yKptpjLGqyz8snr
QXjIE9xIiTfvk/lJOvNSaaH6Ydsf9SLaENYJTw5WzTwVJCaEudEmhIRUZW6a
XlX4Jk89QTzMNpZ4ti5GcPf7VthbKbDf25zkcks4XbvVAGi0ToDpPlBr1V9w
BUlbT348Y7521ZkdvtxzwpSJscMhl4WgJLhucg3CIJV22k1LBIRQ1LxMylWP
C2yNBoOfdoI2JkGfwkOH25q5uywnoF22ps35lFnSJnR5BCouD5NnfRs1jVj9
RS/rD8ips2wQNt8Ze4vear3kvVpIDHu4TxcVaOsyVuheN331oXAfrvoqcZ2A
J1LoTKgsXeyzYMkqdoRhcHHAJrWs0ryo1qqbJrmKCnWEVrgxby5ryeyF1mU3
VolyJ5P3p0xVPya8v9IVOa+Na9qDoa5qy0MJ8yagBipTcBayz471PXSlgY1I
sjd4Rb6xCpmm+5Rm65qlc4XHvahELVcXXcejsbrRevt8hm5W7RSpPdMhcpPf
naK1x97U/buqtfFQYKAWckcYbhlqYyG9cmM6n6xrDt6wbpYm67Riv25/JRI6
nE3nNz2BWkXXD9plsYhvl5avQtVJNVdmI1wiNe+6qaflx8ti22kCYKWNkRK0
z04VeoPy6CyXmWnH6TKe5i+Xq6jOHIZM75Dif1Fp9D1M1NB2g5LXE89QXya4
rl8wgwIkXX9kHsYkAadrxm2EnrPTSKk5rCjX2BZXhkU5Um13GmsieHWTSdBY
+b8Pjib7il4fioI90Tbd+Ww2k4diU7upNcnL4kEePtvO0Z/g66/f6fNqcnqY
LzozJyz5KtT66uFpcuaT/OWJVx7iAHqNIMbXLFRiearDxLIkGITPBGf90I+d
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
715aW6ghwbSifHW9t15DUHsnSqxG+8FwsO7AXnVb8dGXXzGanjGUvj2X1TzN
6z9wHm5eImdJOBdmS3TKcmk5iFFb1y5VJp8O0hc1yyy0rT7xnMsTCKQ3StHv
bEoH1sMrfd/jtjKnMEruozxln/rjjvpPGUPDeX7ab+FpfyZEdSmUBvQNSgKk
j+w885ygy40matl/vDjOb+1iJ3n6IS3I2hmJ3upNDqxR4SnODBXKL4v6PVgc
duif0QSrzk+F9y/eyxByV//ITfqmXFUf828L5N0kJpUMdSnGXtGt08R/ucK/
9wpCZkGXq4a8yzOPv23Gfr8UwKklru3tVTXHoyDwYcY0GwcxhYNryL8V6slF
5vbCn19txazMT4Tot/Kv03IuRmYlTOR1IyQH4M07iPivWyG9Sf6ird7nx2Ku
dFcFKha8Lvoe/wXSxizergFVvyw2VVs4klURhEIYW215GrReL89ruqNQzXQ6
pb+Mx7BBeWPQHHsqmbFqZq/WIA9+TVFE9z4duigX0ZH2ZHZvdtdTWbqRRo97
MW6OlaKQkgiEaYRNG9NlsNlCD8jv2wqLm/mdN/GI5kBdgiwJrQ2DqbLjrFVc
1C0zUpfZqSoZturB3ri16REFNKeBNNZvzRLQzAwIFEjn4CaJjMHgB/8xVMmB
I3Wurq7SD9/RpIpboCU3vql5L7fAS25801D8RJkkABE7ELldxWZEG9w5Bscq
91PgoZs+MLK8f8c54mF5lkeBs71jv/8npZhfBxKayV31P1EE/Xo6xQSmMJ1/
fcPh7byxRrVluPl+PUYaZbfOXWM4N0x5gZt256tHXz158uDhoyf3x2sIF0PW
cPtnFPBz62fu/ftHt3SCz9v4wbDe1+54BR0Xmuf+m0WUQ0zDTYFKSTUh2PVt
6MZoTI/FpEcztncOgQLYF3AgATqUUPsvsd2Y1gK1knn/P72ie4Bgoi5N8bup
blv6asB8vf2c3WZ24g333bc7u2G7NVMbI90UJlK20Tj8+X9+zuEbe/P2/4c3
1JKnQvzASU2VDKWLz9nJ/8XHsv8H5HNCZaQ/AQA=

-->

</rfc>

