<?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-05" 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>Apple Inc.</organization>
      <address>
        <postal>
          <street>One Apple Park Way</street>
          <city>Cupertino, California 95014</city>
          <country>United States of America</country>
        </postal>
        <email>cpaasch@apple.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="2024" month="October" day="21"/>

    <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 latency, 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 latency 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 making the problem harder to diagnose
without actually fixing the underlying cause.</t>

<t>To help engineers work on eliminating these glitches
it is useful to have a tool that reliably recreates
the conditions that cause these latency spikes, and
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>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 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 and resulting in those
packets experiencing excessive delay.</t>

<t>"Latency" is a poor way to report responsiveness,
because it can be hard for the general public to understand.
The units are unfamiliar to many ("what is a millisecond?") and
can be counterintuitive ("100 msec -- that sounds good --
it's only a tenth of a second!").</t>

<t>Instead, we define the term "responsiveness under working conditions"
to make it clear that we are measuring all, not just idle, conditions,
and use "round-trips per minute" as the unit.
The advantage of using round-trips per minute as the unit are two-fold: First, it allows for a unit
that is "the higher the better". This kind of unit is often more intuitive for end-users.
Second, the range of the values tends to be around the 4-digit integer range, which
is also 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>This document defines an algorithm for the "Responsiveness Test"
that explicitly measures responsiveness under working conditions.</t>

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

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

</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 techniques like
TCP_NOTSENT_LOWAT <xref target="RFC9293"/> 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 latency.
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 for 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 latency 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 bufferbloat in the network 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 excessive queuing in the device’s own network
interface can result in excessive delays for it outgoing traffic.</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"/>) 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="parallel-vs-sequential-uplink-and-downlink"><name>Parallel vs Sequential Uplink and Downlink</name>

<t>Poor responsiveness can be caused by 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>One approach could be to measure responsiveness in the uplink and downlink
in parallel. It would allow for a shorter test run-time.</t>

<t>However, a number of caveats come with measuring in parallel:</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.</t>
  <t>Debugging the results becomes harder:
During parallel measurement it is impossible to differentiate whether
the observed latency happens in the uplink or the downlink direction.</t>
</list></t>

<t>Thus, we recommend testing uplink and downlink sequentially. Parallel testing
is considered a future extension.</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><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 latency, 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 of 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 latency 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"/>.
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
during the downlink load generation.</t>

<t>Beyond the server's networking stack influence, the server selection impacts the
result as well. First, the network path chosen between client and server is influenced
by the server selection. Second, the network stack deployed on the selected server
may not be representative for workloads that are relevant to the user running the test.</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 the
source of the latency is. 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 latency measured
on the load-generating connections and the latency measured on separate connections
may be different due to the different elements.</t>

<t>For example, if the latency measured on separate connections is much less than the
latency measured on the load-generating connections, it is possible to narrow
down the source of the additional latency on the load-generating connections.
As long as the other elements of the network don't do flow-queueing, the additional
latency 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 latency 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 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>

<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?"</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.</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>

<t>Service Name:       nq<br />
Transport Protocol: TCP<br />
Assignee:           <contact fullname="Stuart Cheshire"/><br />
Contact:            <contact fullname="Stuart Cheshire"/><br />
Description:        Network Quality test server endpoint</t>

</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='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='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:
H4sIAK3RFmcAA+2963IkV3Im+D+eIha9MgJSZrKubLJWLQmsKpKlrgu6AIo2
u1wjIzMDyOjKjMiOiCwUmk1Zv8aYad5j/s+b9JOMf5+7n3MiMgGWpDHtzNq0
TN0oIOLEufjx6+fu0+k066t+XT7J35bdtqm76n1Zl12X7+pl2ebfNe27qr7K
nzb1suor+XtWzOdt+f7jn182i7rYyAeWbXHZT6uyv5xW2+1m2g4GmN57nC2L
vnySLeS/r5r25kne9css63bzTdV1MtbFzVaGefH84qts0SzlM0/ynQz2eVZt
2yd53+66/sG9e1/ce5AVbVk8yS/aopZPtH12LdO6apvdVl4/y8/K9rJpN0W9
KPNXZdHt2nJT1n32rryRB5fyTN2XbV3202eYskyhL+rlD8W6qeX7N2WXbasn
+f/TN4tJ3snwbXnZyU83G/zw/2ZZsetXTfsky/Op/H+eV3X3JH86y8+Kolus
+Cvdkaertur6ZrtK/9S0sq7T7XZdyjwWM/6uk2+U/ZP8TV3an86K9l3+XXHD
Py+qXnbr6W5btn1VN5P8abGuZIl1VeRfPL53/5E+1ezqHtv6bV315TI/72Wj
u7y5zE83ZVstCj5Vbopq/SRfbDmjfyjwtdmi2WTD5bydydbdlG2ymreyScV6
nfz+f46ltO3m1mWcz+QQym5VtWWykvN+V7T98C//c6xlYVO6dUHfzfJvimu5
g12ynu8qOZb011yMfO992XYySXzsaVUvqrou+ir93oovXa/+YbfAL2a7xaxc
7rKsxv3p5X1Q+duvnj64f/8L+/Hz+79+ZD9+cf/+vSdZVtWX6eNfvrg4/foJ
v2Ks5+ilLLle3OTPP2zXRVWXyyP+OV4k+c9UZ/1l2xTLuZBauKX5RblY1bJR
6/x0+b6SG3mTf43LzvfIU/IH9x480C8W7RWObNX32+7Jp59eX1/P5lVfXM1k
9E/XOo9p6fOYbVcY5svd5WXZztdN0T85NDNu/T/O8q/Lvr/pBr/97Sx/XS1W
zbobrDgdMX8GqtHfdPJW3q/KsDrdiU4ooeywkUJQzWazw3rJX3F2eP706atJ
/k/Nercp88ePJ/nr3WYuDPl+fvzg3v0HJzLK0+JdefvsL4Rw/tt/rdays9N/
/G//VXap7sp68MizWX5RrPrxol8JC2zqwerOqlJ4K6jq9LfP5dpgztu2XJVk
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
wsqEv5GoryAEWnx9KdQDyhkNa7O8yXCxNrvFyg7RX+buCAtsG9ehhfvteL5y
AC+osvgJjRylPLCpqU3TuH2Z7GgPBVpeU4GWqFCHVJfsuJxdzSZBJeIlSJSg
E1vVYteJ2oBVCbWV5s6RWS9WjUrDOWhrcPdMUuKXwmR20JJ+9StRPIUf1s26
ubrJyOjAIPOjRIIcYZNF8Zrb6YZNseOJcmFZ4gOZnKjsYW1SDeM4U/8AZRre
hlo9IbJ+uYfvyl5dLCpv5CMtpFhG0tMxJyRB5fhzeUOmm758XVS9Xf6rJm9s
3wZyVC6bXDp/IUgJ/DVOS5SpAvvizq8j6gcq3K+FNYNplvBe7ykzwpp4R6og
PSlGXGCbpMy3u/mabFavONUtky81FA7Qr+iKxUYkaUF+QSXn+OjaRK7IA2Gh
lcqUvz9SLdm+SK8lNrvfVVBp5LX79+7lG3k4F3WY29lBSe9IXvI7YRCicDa1
MADhCkKSKxpoJrL+j6MT0n3Xl4Vof9fYn8uqVomiZNIeCjjsWw9HGVfyTvdn
XWJpmI0MyRsbTB5hhGpc/l7om4Q/SYZRywvbfNQmxsYW18qMjaIzBlr1uq/F
8r3ceghQWZmS0OF301c5K6Hp6WWzXj7Jv6rkpMhSqMN1JtzxZOa60BHeVemi
SmIpSkZ7NMvJ4WQ/lpxArSy5uYQM2UA8x+PCqKIBTc3Dcc5DUOnbgkM5N31f
rKkIlzhJdRkUXBP/+mi6rK7wFaGFK5kMX5XTW1WLFa5mse4a6CEYJJeNJ1WL
XN1izXptcNrFVQHbFuulis4VjyZMyfSVyB4RX6QPjUNVbjxztTL6kViAR7Cz
rqEuQ8Cvykxo532wZ9IjdMrAOeOzi6I1Jr5vVCtB0sQq1leNWIer6C06aGPr
gcGZXIkCAGnt/oKPpOW9OYjEEI7Q8UYYJ+U+yivQgswt9M3FxZkZXffvw1DL
OkigAt8V9b0LLAtzEEqSQ4A/pirXy86Hww2dKZd+JzwcgTEhvFffnl/I7vJ/
89dv+PPb57/79sXb58/w8/k3py9fhh/0iUz+8ebbl/Z3/BTffPrm1avnr5/p
y/LbfPSrV6f/6UjF/tGbs4sXb16fvjxSDpvuCm9QE3TubVv26idwYbLEO18+
PcvuP9J9QbxCjFG1Xe//+pH8DA+FKoLkUfpPyi/VP3MlUahzVS+EPcEHoDeL
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
yVC6+Jid/N98LPvvPYMBm/sLAQA=

-->

</rfc>

