<?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-08" 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="October" day="20"/>

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

<texttable>
      <ttcol align='left'>Name</ttcol>
      <ttcol align='left'>Explanation</ttcol>
      <ttcol align='left'>Default Value</ttcol>
      <c>MAD</c>
      <c>Moving Average Distance (number of intervals to take into account for the moving average)</c>
      <c>4</c>
      <c>ID</c>
      <c>Interval duration at which the algorithm reevaluates stability</c>
      <c>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:
H4sIAA7J9mgAA+2963Ic2ZEm+D+eIhbatgK6M5N3qshtdTeKZFWxxQtEoLps
drWmiswMJELMjEhFRBKEStWm1xiznveY//MmepL173P3c05EJlhU99jsztqo
rSUQiDhxLn78+rn7dDrN+qpfl0/zd2W3bequ+lDWZdflu3pZtvn3Tfu+qlf5
s6ZeVn0lf8+K+bwtP3z+88tmURcb+cCyLS77aVX2l9Nqu91M28EA07tfZsui
L59mC/nvVdPePM27fpll3W6+qbpOxrq42cowL19cfJ0tmqV85mm+k8G+zKpt
+zTv213X379798nd+1nRlsXT/KItavlE22fXMq1V2+y28vpZfla2l027KepF
mb8ui27Xlpuy7rP35Y08uJRn6r5s67KfPseUZQp9US9/V6ybWr5/U3bZtnqa
/199s5jknQzflped/HSzwQ//d5YVu/6qaZ9meT6V/8/zqu6e5s9m+VlRdIsr
/kp35NlVW3V9s71K/1Ruimr9NF/432Zb/u3vsHH/tMIfZ4tmkw1HfzeTldyU
bTL4O5lzsV4nv29a2bHT7XZdygoXM/6uk9mX/dP8bV3an86K9n3+fXHDPy+q
Xs7h2W5btn1VN5P8WbGuZPPqqsifPLp776E+1ezqHgf2XV315TI/7+UIu7y5
zE83ZVstinRhbbv5pwJfOrCM85nsSdldVW2ZrOS83xVtP/zL/zfWsrAp3bqg
72f5t8W1XIkuWc/3lRxL+msuRr73oWw7mSQ+9qyqF1VdF32Vfu+KL11f/dNu
QULYLWblcpdlNci5l/dBdO++fnb/3r0n9uOX93750H58cu/e3adZVtWX6eNf
vbw4/eYpv2Kc4OiVLLle3OQvPm7XRVWXyyP+OdK1/Geqs/6qbYrlXEgtXJr8
olxc1bJR6/x0+aGSC3KTf4O7x/d4xfP7d+/f1y8W7QpHdtX32+7pnTvX19ez
edUXq5mMfmet85iWPo/Z9grDfLW7vCzb+bop+qeHZsat/+dZ/k3Z9zfd4Le/
nuVvqsVVs+4GK05HzJ+DavQ3nbyV91dlWJ3uRCeUUHbYSCGoZrPZYb1kdzg7
PH/67PUk/5dmvduU+aNHk/zNbjMX/ngvP75/9979ExnlWfG+vH32F0I4/+2/
VmvZ2ek//7f/KrtUd2U9eOT5LL8orvrxol8LR2rqwerOqlJYHajq9Ncv5Npg
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
YJqcqIqqQ/z6Z+6XXHZAhIwn/M7e+mFmA1vTi33pFTUoscX1evgX/TvmNPRK
WfRsAahrb+59E9X+FmvW4XeNIHhjtIYjKlaqPeEQg2HO9mi7kteDRmGfOLhz
I5H7qX0aPvpXbhdY0CEL6zP2avTduGVj3Wi4c5pheuswnH3RJeoQXelqI2oK
xY8/svweiuSrcrXRUhneLmVY+b2zFnzWZy380YpnaBn5zJjWoRLwzK0aKHih
GkBg8fowhruEn3piWtGgAr22wWFwPxV9Ds+3LCfk3S7CHG5D7uba6tsaa1R1
NjQdu5jQ7YX+UFKxZ4dIVTebUICtGzpnPPmm9CnVuQizpt2vScgijMwWjuXR
fLZwEiMp8p2uLstO0wmTZTO5nA3bd3XtBmGimGjyyfomVONOD4xhPfLoj+Vi
59uVxvk68FnTXyL8xY61YTFD7STIgcGLM5mIIp/gRr7rMkR9AmyLgk/xeRos
IdNaN17FcxHKHDB13OpP+rfye2FYwnrS+YZrMtWp58fhA0FIxIcm8fO33reJ
z+Xg+/a3W9+Gv+nUYHcBNmlTw5qQQGXJVuaw9jsSrGw9OWT8JoRMtNZR6PQU
x7YW5/nxpypMmCMgZuagBJDXAjXLSa0k+/jRq+b66PaLVI01puu0q5ANnNnR
q0nTh250fnSmm+jusMcCCHpySAZWGmvtNfAcvAFegTYJOXsZa8bMAb8P1Btv
gWUq8VaOEzYdMTA0wzQUZesZbtRrUTt3m+FeHdod323fFKTklSZMsrg7qm0s
q+UhEsm1zmhTHxJQvRuCw/l9W62uPn92WmZp9NksfDZ4irQo5aem8FIjbeB3
iutUoHG5NQCXK7wQMZ9eD6CO2vMnyexy2zahabcQzAqdJnlauXGUueG0iix1
F9SmjdbyP9bmPhTh3Gpb0Quru6XwAsvP3ybZQvvN7pOCWz4z0OhmK+IE4d9B
wZJaUSaLyuKuC/bUu766cZlIGJ+KCNY10dhJIovZ/jlftDt4gRF7WWltCRdH
AcYiR2BFezwSEYnjaLypWUocjkBSe3PMnBIBF+phJLVdiFTSDcvUCVd5g7uO
7WLoLhM7rt/PEMqDQLxQp6NJxPT02W5KcZjTtRzoWnu4FRrwP5w3ygoRJguN
rxj+R/bMKooYalkdFMPqSwE7yvJLhCCjZFzipB/2YzB1DBJfKwD2DktJ6gmn
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

-->

</rfc>

