<?xml version="1.0" encoding="UTF-8"?>
  <?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
  <!-- generated by https://github.com/cabo/kramdown-rfc2629 version 1.2.13 -->

<!DOCTYPE rfc SYSTEM "rfc2629.dtd" [
]>

<?rfc toc="yes"?>
<?rfc sortrefs="yes"?>
<?rfc symrefs="yes"?>

<rfc ipr="trust200902" docName="draft-ietf-ippm-responsiveness-00" category="exp">

  <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="O." surname="Shapira" fullname="Omer Shapira">
      <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>oesh@apple.com</email>
      </address>
    </author>
    <author initials="M." surname="Mathis" fullname="Matt Mathis">
      <organization>Google, Inc</organization>
      <address>
        <postal>
          <street>1600 Amphitheatre Parkway</street>
          <city>Mountain View, CA  94043</city>
          <country>United States of America</country>
        </postal>
        <email>mattmathis@google.com</email>
      </address>
    </author>

    <date year="2022" month="March" day="04"/>

    <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 (fq_codel, cake, PIE)
have solved the problem.</t>

<t>Our networks remain unresponsive, not from a lack of technical solutions,
but rather a lack of awareness of the problem.
We believe that creating a tool whose measurement matches people’s
every day experience will create the necessary awareness,
and result in a demand for products that solve the problem.</t>

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



    </abstract>


  </front>

  <middle>


<section anchor="introduction" title="Introduction">

<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"/> or PIE <xref target="RFC8033"/> have been standardized
and are to some extent widely implemented.
Nevertheless, people still suffer from bufferbloat.</t>

<t>Although significant, the impact on user experience can be transitory -
that is, its effect is not always present.
Whenever a network is actively being used at its full capacity,
buffers can fill up and create latency for traffic.
The duration of those full buffers may be brief:
a medium-sized file transfer, like an email attachment
or uploading photos,
can create bursts of latency spikes.
An example of this is lag occurring during a videoconference,
where a connection is briefly shown as unstable.</t>

<t>These short-lived disruptions make it hard to narrow down the cause.
We believe that it is necessary to create a standardized way to
measure and express responsiveness.</t>

<t>Existing network measurement tools could incorporate a
responsiveness measurement into their set of metrics.
Doing so would also raise the awareness of the problem and
make the standard “network quality measures” of
throughput, idle latency, and responsiveness.</t>

<section anchor="terminology" title="Terminology">

<t>A word about the term “bufferbloat” - the undesirable latency
that comes from a router or other network equipment
buffering too much data.
This document uses the term as a general description of bad latency,
using more precise wording where warranted.</t>

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

<t>Instead, we create 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 metric.
The advantage of round-trips per minute are two-fold: First, it allows for a metric
that is “the higher the better”. This kind of metric 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 measurement to “RPM”, a wink to the
“revolutions per minute” that we use for cars.</t>

<t>This document defines an algorithm for the “RPM Test”
that explicitly measures responsiveness under working conditions.</t>

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

<t>There are many challenges around measurements on the Internet.
They include the dynamic nature of the Internet,
the diverse nature of the traffic,
the large number of devices that affect traffic,
and the difficulty of attaining appropriate measurement conditions.</t>

<t>Internet paths are changing all the time.
Daily fluctuations in the demand make the bottlenecks ebb and flow.
To minimize the variability of routing changes,
it’s best to keep the test duration relatively short.</t>

<t>TCP and UDP traffic, or traffic on ports 80 and 443, may take
significantly different paths on the Internet and
be subject to entirely different Quality of Service (QoS) treatment.
A good test will use standard transport layer traffic - typical
for people’s use of the network -
that is subject to the transport’s congestion control that might
reduce the traffic’s rate and thus its buffering in the network.</t>

<t>Traditionally, one thinks of bufferbloat happening on the
routers and switches of the Internet.
However, the networking stacks of the clients and servers can
have huge buffers.
Data sitting in TCP sockets or waiting for the application
to send or read causes artificial latency, and affects user experience
the same way as “traditional” bufferbloat.</t>

<t>Finally, it is important to note that queueing only happens behind
a slow “bottleneck” link in the network,
and only occurs when sufficient traffic is present.
The RPM Test must ensure that buffers are actually full
for a sustained period, and only then make repeated latency
measurements in this particular state.</t>

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

<t>The algorithm described here defines an RPM Test that serves as a good
proxy for user experience. This means:</t>

<t><list style="numbers">
  <t>Today’s Internet traffic primarily uses HTTP/2 over TLS.
Thus, the algorithm should use that protocol.  <vspace blankLines='1'/>
As a side note: other types of traffic are gaining in popularity (HTTP/3)
and/or are already being used widely (RTP).
Traffic prioritization and QoS rules on the Internet may
subject traffic to completely different paths:
these could also be measured separately.</t>
  <t>The Internet is marked by the deployment of countless middleboxes like
transparent TCP proxies or traffic prioritization for certain types of traffic.
The RPM Test must take into account their effect on
DNS-request <xref target="RFC1035"/>, TCP-handshake <xref target="RFC0793"/>, TLS-handshake, and request/response.</t>
  <t>The test result should be expressed in an intuitive, nontechnical form.</t>
  <t>Finally, to be useful to a wide audience, the measurement
should finish within a short time frame.
Our target is 20 seconds.</t>
</list></t>

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

<t>To make an accurate measurement,
the algorithm must reliably put the network in a state
that represents those “working conditions”.
Once the network has reached that state,
the algorithm can measure its responsiveness.
The following explains how
the former and the latter are achieved.</t>

<section anchor="working-conditions" title="Working Conditions">

<t>There are many different ways to define the state of “working conditions” to
measure responsiveness. 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>In this document we aim to generate a realistic traffic pattern by
using standard HTTP transactions but exploring the worst-case scenario by creating
multiple of these transactions and using very large data objects in these HTTP
transactions.</t>

<t>This allows to create a stable state of working conditions during which the
network is used at its nearly full capacity, without generating DoS-like traffic
patterns (e.g., UDP flooding).
When reaching these stable conditions (called “saturation”) the latency on the
network is stable enough to allow to measure the responsiveness during that time.
Thus, the algorithm must detect when the network is reaching this point of saturation
to trigger the latency probes.</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="from-single-flow-to-multi-flow" title="From single-flow to multi-flow">

<t>A single TCP connection may not be sufficient to reach the capacity of a path.
For example, the 4MB constraints on TCP window size constraints
may not fill the pipe.
Additionally, 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 hard to reach the path’s capacity.</t>

<t>The goal of the RPM Test is to keep the network in working conditions
in a sustained and persistent way.
It uses multiple TCP connections and gradually adds more TCP flows
until saturation is reached.</t>

</section>
<section anchor="parallel-vs-sequential-uplink-and-downlink" title="Parallel vs Sequential Uplink and Downlink">

<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 the 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 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>Debuggability of 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="reaching-saturation" title="Reaching saturation">

<t>The RPM Test gradually increases the number of TCP connections
and measures “goodput” - the sum of actual data transferred
across all connections in a unit of time.
When the goodput stops increasing, it means that the network is used at its full capacity, meaning the path is saturated.
At this point we are creating the worst-case scenario within the limits of the
realistic traffic pattern.</t>

<t>The algorithm notes that throughput gradually increases until TCP
connections complete their TCP slow-start phase.
At that point, throughput eventually stalls
usually due to receive window limitations.
The only means to further increase throughput is by
adding more TCP connections to the pool of load-generating connections.
If new connections leave the throughput the same,
saturation has been reached and - more importantly -
the working condition is stable.</t>

</section>
<section anchor="final-working-conditions-algorithm" title="Final “Working Conditions” Algorithm">

<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 (1) second.</t>

<t>Where</t>

<t><list style="symbols">
  <t>i: The index of the current interval. i is initialized to 0 when the algorithm begins and
increases by one for each interval.</t>
  <t>instantaneous aggregate goodput at interval p: The number of total bytes of data transferred within
interval p. If p is less than 0, the number of total bytes of data transferred within the
interval is considered to be 0.</t>
  <t>moving average aggregate goodput at interval p: The average of the number of total bytes of data
transferred in the instantaneous average aggregate goodput at intervals p - x, for all 0≤x&lt;4.</t>
  <t>moving average stability during the period between intervals b and e: Whether or not the differences between the moving average aggregate goodput at interval x and
the moving average aggregate goodput at interval x+1 (for all b≤x&lt;e) is less than 5%.</t>
</list></t>

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

<t><list style="symbols">
  <t>Create four (4) load-generating connections.</t>
  <t>At each interval:
  <list style="symbols">
      <t>Compute the instantaneous aggregate goodput at interval i.</t>
      <t>Compute the moving average aggregate goodput at interval i.</t>
      <t>If the moving average aggregate goodput at interval i is more than a 5% increase over
the moving average aggregate goodput at interval i - 1, the network has not yet reached saturation.
      <list style="symbols">
          <t>If no load-generating connections have been added within the last four (4) intervals, add four (4) more load-generating connections.</t>
        </list></t>
      <t>Else, the network has reached saturation with the existing load-generating connections. The current state is a candidate for stable working conditions.
      <list style="symbols">
          <t>If a) there have been load-generating connections added in the past four (4) intervals and b) there has been moving average stability during the period between intervals i-4 and i,
then the network has reached stable saturation and the algorithm terminates.</t>
          <t>Otherwise, add four (4) more load-generating connections.</t>
        </list></t>
    </list></t>
</list></t>

<t>In <xref target="goals"/>, it is mentioned that one of the goals is that the test finishes within
20 seconds. It is left to the implementation what to do when saturation is not reached
within that time-frame. For example, an implementation might gather a provisional
responsiveness measurement or let the test run for longer.</t>

<t>Note: It is tempting to envision an initial base round-trip time (RTT)
measurement and adjust the intervals as a function of that RTT.
However,
experiments have shown that this makes the saturation detection extremely
unstable in low RTT environments.
In the situation where the “unloaded” RTT is in the
single-digit millisecond range, yet the network’s RTT increases under load
to more than a hundred milliseconds, the intervals become much too low to
accurately drive the algorithm.</t>

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

<t>Once the network is in a consistent working conditions,
the RPM Test must “probe” the network multiple times
to measure its responsiveness.</t>

<t>Each RPM Test probe measures:</t>

<t><list style="numbers">
  <t>The responsiveness of the different steps to create a new connection,
all during working conditions.  <vspace blankLines='1'/>
To do this, the test measures the time needed to make a DNS request,
establish a TCP connection on port 443,
establish a TLS context using TLS1.3 <xref target="RFC8446"/>, and
send and receive a one-byte object with a HTTP/2 GET request.
It repeats these steps multiple times for accuracy.</t>
  <t>The responsiveness of the network and the client/server networking stacks
for the load-generating connections themselves.  <vspace blankLines='1'/>
To do this, the load-generating connections multiplex an HTTP/2 GET
request for a one-byte object to get the end-to-end latency on the
connections that are using the network at full speed.</t>
</list></t>

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

<t>The algorithm produces sets of 5 times for each probe, namely:
DNS handshake, TCP handshake, TLS handshake, HTTP/2 request/response on
separate (idle) connections, HTTP/2 request/response on load-generating connections.
This fine-grained data is useful, but not necessary for creating a useful metric.</t>

<t>To create a single “Responsiveness” (e.g., RPM) number,
this first iteration of the algorithm gives
an equal weight to each of these values.
That is, it sums the five time values for each probe,
and divides by the total number of probes to compute
an average probe duration.
The reciprocal of this, normalized to 60 seconds,
gives the Round-trips Per Minute (RPM).</t>

</section>
<section anchor="statistical-confidence" title="Statistical Confidence">

<t>The number of probes necessary for statistical confidence
is an open question.
One could imagine a computation of the variance and confidence interval
that would drive the number of measurements and balance the accuracy
with the speed of the measurement itself.</t>

</section>
</section>
</section>
<section anchor="interpreting-responsiveness-results" title="Interpreting responsiveness results">

<t>The described methodology uses a high-level approach to measure responsiveness.
By executing the test with regular 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 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" title="Elements influencing responsiveness">

<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" title="Client side influence">

<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 will
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 will happen at the
layers below the transport stack (e.g., NIC firmware).</t>

<t>Each of these queue build-ups may cause latency and thus low responsiveness.
A well-designed networking stack would ensure that queue-buildup in the TCP layer
layer is kept at a bare minimum with solutions like TCP_NOTSENT_LOWAT <xref target="draft-ietf-tcpm-rfc793bis"/>.
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 or that they implement techniques
like FQ-Codel. 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.</t>

</section>
<section anchor="network-influence" title="Network influence">

<t>The network obviously is a large driver for the responsiveness result.
Propagation delay from the client to the server as well as queuing in the
bottleneck node will cause latency. 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”,…
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 Smart Queue Management 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" title="Server side influence">

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

</section>
</section>
<section anchor="root-causing-responsiveness" title="Root-causing Responsiveness">

<t>Once an RPM result has been generated one might be tempted to try to localize
the source of a potential 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 to gain some insight into what the
source of the latency is. The previous section described the elements that influence
the responsiveness. From there it became 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>

</section>
</section>
<section anchor="rpm-test-server-api" title="RPM Test Server API">

<t>The RPM measurement uses standard protocols:
no new protocol is defined.</t>

<t>Both the client and the server MUST support HTTP/2 over TLS 1.3.
The client MUST be able to send a GET request and a POST.
The server MUST be able to respond to both of these
HTTP commands.
Further, the server endpoint MUST be accessible through a hostname
that can be resolved through DNS.
The server MUST have the ability to provide content upon a GET request.
Both client and server SHOULD use loss-based congestion controls
like Cubic.
The server MUST use a packet scheduling algorithm that minimizes internal queueing
to avoid affecting the client’s measurement.</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 and 1 byte in the body.
The actual body content is irrelevant.</t>
  <t>A “large” URL/response:
The server must respond with a status code of 200 and a body size of at least 8GB.
The body can be bigger, and may need to grow as network speeds increases over time.
The actual body content is irrelevant.
The client will probably never completely download the object,
but will instead close the connection after reaching working condition
and making its measurements.</t>
  <t>An “upload” URL/response:
The server must handle a POST request with an arbitrary body size.
The server should discard the payload.</t>
  <t>A configuration URL that returns a JSON <xref target="RFC8259"/> object with the information
the client uses to run the test (sample below).
Sample JSON:  <vspace blankLines='1'/>
    <figure><artwork><![CDATA[
{
  "version": 1,
  "urls": {
    "small_https_download_url": "https://networkquality.example.com/api/v1/small",
    "large_https_download_url": "https://networkquality.example.com/api/v1/large",
    "https_upload_url": "https://networkquality.example.com/api/v1/upload"
  }
}
]]></artwork></figure>
  </t>
</list></t>

<t>The client begins the responsiveness measurement by querying for the JSON 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="security-considerations" title="Security Considerations">

<t>TBD</t>

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

<t>TBD</t>

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

<t>We would like to thank Rich Brown for his editorial pass over this I-D.
We also thank Erik Auerswald and Will Hawkins for their constructive feedback on the I-D.</t>

</section>


  </middle>

  <back>


    <references title='Informative References'>

<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="draft-ietf-tcpm-rfc793bis" >
  <front>
    <title>Transmission Control Protocol (TCP) Specification</title>
    <author initials="W." surname="Eddy">
      <organization></organization>
    </author>
    <date year="n.d."/>
  </front>
  <seriesInfo name="Internet Engineering Task Force" value=""/>
</reference>




<reference  anchor="RFC0793" target='https://www.rfc-editor.org/info/rfc793'>
<front>
<title>Transmission Control Protocol</title>
<author initials='J.' surname='Postel' fullname='J. Postel'><organization /></author>
<date year='1981' month='September' />
</front>
<seriesInfo name='STD' value='7'/>
<seriesInfo name='RFC' value='793'/>
<seriesInfo name='DOI' value='10.17487/RFC0793'/>
</reference>



<reference  anchor="RFC1035" target='https://www.rfc-editor.org/info/rfc1035'>
<front>
<title>Domain names - implementation and specification</title>
<author initials='P.V.' surname='Mockapetris' fullname='P.V. Mockapetris'><organization /></author>
<date year='1987' month='November' />
<abstract><t>This RFC is the revised specification of the protocol and format used in the implementation of the Domain Name System.  It obsoletes RFC-883. This memo documents the details of the domain name client - server communication.</t></abstract>
</front>
<seriesInfo name='STD' value='13'/>
<seriesInfo name='RFC' value='1035'/>
<seriesInfo name='DOI' value='10.17487/RFC1035'/>
</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 initials='T.' surname='Hoeiland-Joergensen' fullname='T. Hoeiland-Joergensen'><organization /></author>
<author initials='P.' surname='McKenney' fullname='P. McKenney'><organization /></author>
<author initials='D.' surname='Taht' fullname='D. Taht'><organization /></author>
<author initials='J.' surname='Gettys' fullname='J. Gettys'><organization /></author>
<author initials='E.' surname='Dumazet' fullname='E. Dumazet'><organization /></author>
<date year='2018' month='January' />
<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 initials='R.' surname='Pan' fullname='R. Pan'><organization /></author>
<author initials='P.' surname='Natarajan' fullname='P. Natarajan'><organization /></author>
<author initials='F.' surname='Baker' fullname='F. Baker'><organization /></author>
<author initials='G.' surname='White' fullname='G. White'><organization /></author>
<date year='2017' month='February' />
<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 &quot;PIE&quot; (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 initials='T.' surname='Bray' fullname='T. Bray' role='editor'><organization /></author>
<date year='2017' month='December' />
<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="RFC8446" target='https://www.rfc-editor.org/info/rfc8446'>
<front>
<title>The Transport Layer Security (TLS) Protocol Version 1.3</title>
<author initials='E.' surname='Rescorla' fullname='E. Rescorla'><organization /></author>
<date year='2018' month='August' />
<abstract><t>This document specifies version 1.3 of the Transport Layer Security (TLS) protocol.  TLS allows client/server applications to communicate over the Internet in a way that is designed to prevent eavesdropping, tampering, and message forgery.</t><t>This document updates RFCs 5705 and 6066, and obsoletes RFCs 5077, 5246, and 6961.  This document also specifies new requirements for TLS 1.2 implementations.</t></abstract>
</front>
<seriesInfo name='RFC' value='8446'/>
<seriesInfo name='DOI' value='10.17487/RFC8446'/>
</reference>




    </references>



  </back>

<!-- ##markdown-source:
H4sIAMioImIAA9VcW3PbRpZ+x6/oZWomUi1Jy7acnWgedmTLSTzji2Ip44et
rVQTaJI9AgEEDZjmpDK/fc93TnejQVJKvLMPs1u7WRkEGqfP9TuXxmw2yzrb
leZCvTeuqStnP5rKOKf6qjCt+lC3d7ZaqRd1VdjO0u+ZXixa8/G331/UeaU3
9IKi1ctuZk23nNmm2cza0QKzs7Os0J25yHL676pudxfKfGqyzDbthera3nVP
zs6+PnuS6dboC3Xb6oqeb7tsS+9ctXXfXKhX1+ratMu63egqN+qN0a5vzcZU
XXZndnRjQfdUnWkr082uQE+WuU5XxY+6rCuicWdc1tgL9V9dnU+Vo+Vbs3T0
126DP/47y3Tfrev2IlNqRv+nlK3chXoxV9dau3zNl2S7L9atdV3drNOf6nZ1
oS6bpjRERz7na47eYboL9a4y/qdr3d6pD3rHP+e2I1a86BvTdraqp+qFLi1t
sbJaff3s7PG53FX3VQee/VDZzhTqpiMuOlUv1eXGtDbXfJfZaFteqLxhiv6k
8bZ5Xm+y8Xbez4l1O9Mmu3lPTNJlmVz/19hK227u3cbNnIRg3Nq2JtnJTdfr
thv/8q+xl9yTdO+G3s3VzVo3ttXJft7RQqPL/xqbqWkv927kDSmY7tbWJfug
C116lbfxbV2vSjPFRkb7ePzV2Rm9tVnbbm00XeT9bEfbeQNyta3UX63Z0pYu
lfr6/Oz86efvZUOkbZiyP62YINmSrdjTdOTB4A+e98ulaRdlrbsLfnpwFfQ/
M9n5n+fqW9N1Oze6+pe5emvzdV3KZe+RJ+mK6goCkyuOnlK08ejLJsIcItw4
UEWyrDebvqJ9sBPGvnD/5Ys3U/XXuuw3Rj17NlVv+82CtOexOnly9vjJKa2S
OOkuh5Ne5v/x9dOFdfdv6cNcvSyK3Yhy9s4b6xy9HcGga+tSXbc1uVX64+T2
xfWpumlMbpeexMMdhL2pl9XKVoZ+obhyq92d+qZuc9jt+29enBFxF/Ln47On
z/yff3jy9Vn48+zp03j12dfhz/Pzry6ybDabKb0gndI5BQJaliRd7SgI6JZ8
vlalzu/AunGkmqqPurV178qdysknmiIr9WpKd3emyndT0ly1GCQ3VWvt1MKY
itbJ61Vl/05P0CVdUdAkDer6ip6c0jMdqeVmQxyjcNN09YbFXBd696VTxAkE
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

-->

</rfc>

