<?xml version="1.0" encoding="us-ascii"?>
  <?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
  <!-- generated by https://github.com/cabo/kramdown-rfc2629 version 1.5.11 -->

<!DOCTYPE rfc SYSTEM "rfc2629.dtd" [
]>

<?rfc toc="yes"?>
<?rfc sortrefs="yes"?>
<?rfc symrefs="yes"?>
<?rfc comments="yes"?>

<rfc ipr="trust200902" docName="draft-huitema-quic-ts-08" category="exp">

  <front>
    <title abbrev="QUIC-TS">Quic Timestamps For Measuring One-Way Delays</title>

    <author initials="C." surname="Huitema" fullname="Christian Huitema">
      <organization>Private Octopus Inc.</organization>
      <address>
        <email>huitema@huitema.net</email>
      </address>
    </author>

    <date year="2022"/>

    <area>Transport</area>
    
    <keyword>Internet-Draft</keyword>

    <abstract>


<t>The TIMESTAMP frame can be added to Quic packets when one way delay measurements
are useful. The timestamp is set to the number of microseconds from the
beginning of the node&#39;s epoch to the time at which the packet is sent. The draft
defines the &quot;enable_timestamp&quot; transport parameter for negotiating the
use of this extension frame, and the TIMESTAMP frame.</t>



    </abstract>


  </front>

  <middle>


<section anchor="introduction"><name>Introduction</name>

<t>The QUIC Transport Protocol <xref target="QUIC-TRANSPORT"/> provides a
secure, multiplexed connection for transmitting reliable streams of
application data. The algorithms for QUIC Loss Detection and Congestion Control
<xref target="QUIC-RECOVERY"/> use measurement of Round Trip Time (RTT) to
determine when packets should be retransmitted. RTT measurements are useful,
but there are however many cases in which more precise One-Way Delay (1WD)
measurements enable more efficient Loss Detection and Congestion Control.</t>

<t>An example would be the Low Extra Delay Background
Transport (LEDBAT) <xref target="RFC6817"/> which uses variations in transmission
delay to detect competition for transmission resource. Experience shows
that while LEDBAT may be implemented using RTT measurements, it is 
somewhat inefficient because it will cause unnecessary slowdowns in
case of queues or delayed ACKs on the return path. Using 1WD solves
these issues. Similar argument can be made for most delay-based algorithms.</t>

<t>We propose to enable one way delay measurements in QUIC by defining
a TIMESTAMP frame carrying the time at which a packet is sent. The use of this
extension frame is negotiated with a transport parameter,
&quot;enable_timestamp&quot;. When the extension is negotiated by
both parties, this frame can be used in conjunction with other
such as ACK to measure one way delays.</t>

<section anchor="terms-and-definitions"><name>Terms and Definitions</name>

<t>The keywords &quot;MUST&quot;, &quot;MUST NOT&quot;, &quot;REQUIRED&quot;, &quot;SHALL&quot;, &quot;SHALL NOT&quot;, &quot;SHOULD&quot;,
&quot;SHOULD NOT&quot;, &quot;RECOMMENDED&quot;, &quot;NOT RECOMMENDED&quot;, &quot;MAY&quot;, and &quot;OPTIONAL&quot; 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="specification"><name>Specification</name>

<t>The enable_timestamp transport parameter used for negotiating the use
of the extension frame
is defined in <xref target="negotiation"/>. The timestamp frame format is defined
in <xref target="TIMESTAMP-format"/>.</t>

<section anchor="negotiation"><name>Negotiation</name>

<t>The use of the timestamp frame extension is negotiated using a transport
parameter:</t>

<t><list style="symbols">
  <t>enable_timestamp (TBD)</t>
</list></t>

<t>The enable timestamp transport parameter is included if the endpoint
wants to receive or accepts to send timestamp frames for this connection. 
This parameter is encoded as a variable integer as specified in
section 16 of <xref target="QUIC-TRANSPORT"/>. It
can take one of the following three values:</t>

<t><list style="numbers">
  <t>I would like to receive TIMESTAMP frames</t>
  <t>I am able to generate TIMESTAMP frames</t>
  <t>I am able to generate TIMESTAMP frames and I would like to receive them</t>
</list></t>

<t>Peers receiving another value SHOULD terminate the connection with a TRANSPORT
PARAMETER error.</t>

<t>A peer that advertises its capability of sending TIMESTAMP frames using
option values 2 or 3 MUST NOT send these frames if the other
peer does not announce advertise its desire to receive them by
sending the enable_timestamp TP with option 1 or 3. This condition is
described as &quot;successful sending negotiation&quot; in <xref target="sending"/>.</t>

<t>Peers that receive TIMESTAMP frames when they have not advertised
their desire to receive them MAY terminate the connection with a PROTOCOL
VIOLATION error.</t>

<section anchor="zero-rtt-and-timestamp-option"><name>Zero RTT and Timestamp Option</name>

<t>Implementations MUST NOT remember the value of the enable_timestamp
parameter and try to use it when attempting 0-RTT on subsequent connections.
This rules is in line with the suggestions in section 7.4.2 of <xref target="QUIC-TRANSPORT"/>
to adopt conservative defaults and avoid compatibility issues. It is also
consistent with the specification to only use TIMESTAMP frames in 1RTT packets,
see <xref target="sending"/>.</t>

</section>
</section>
<section anchor="sending"><name>Sending TIMESTAMP frames</name>

<t>Following successful sending negotiation, a peer SHOULD add a timestamp frame to
1RTT packets carrying an ACK frame. This specification does not
impose a placement of TIMESTAMP frames in the packet. They MAY be sent
either before or after the ACK frame.</t>

<t>Implementations SHOULD NOT send more than one TIMESTAMP frame per
packet, but they MAY send more than one in rare circumstances. When
multiple TIMESTAMP frames are present in a packet, the receiver
retains the frame indicating the largest timestamp.</t>

<t>Implementations MUST NOT send
the TIMESTAMP frame in Initial, 0-RTT or Handshake packets, because
there is a risk that the peer will receive such packets before the
negotiation completes. This restriction may appear excessive because
some Handshake packets are typically sent after the negotiation
completes, but restricting TIMESTAMP frames to 1RTT packets is
simpler and less error prone than allowing the
TIMESTAMP frame in just a fraction of Handshake packets.</t>

</section>
<section anchor="TIMESTAMP-format"><name>TIMESTAMP frame format</name>

<t>TIMESTAMP frames are identified by the frame
type:</t>

<t><list style="symbols">
  <t>TIMESTAMP (TBD)</t>
</list></t>

<t>TIMESTAMP frames carry a single parameter, the timestamp.</t>

<figure title="TIMESTAMP Frame Format with Timestamp" anchor="ack-format"><artwork><![CDATA[
 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                          Timestamp (i)                      ...
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
]]></artwork></figure>

<t>The timestamp encodes the number of microseconds since the beginning
of the epoch, as measured by the peer at the time at which the packet
is sent. It is encoded using the exponent selected by the peer
in the ack_delay_exponent. The exponent reduced timestamp is encoded 
as a variable length integer.</t>

<t>TIMESTAMP frames are not ack-eliciting. Their loss does not
require retransmission.</t>

<t>For congestion control, TIMESTAMP frames are treated like ACK frames. 
Section 7 of <xref target="QUIC-RECOVERY"/> specifies that 
&quot;packets containing only ACK frames do not count towards bytes in flight and are not congestion controlled&quot;.
The same applies to packets containing only TIMESTAMP frames, or a combination of ACK frames and
TIMESTAMP frames.</t>

</section>
<section anchor="rtt-measurements"><name>RTT Measurements</name>

<t>RTT measurements are performed as specified in Section 4 of
<xref target="QUIC-RECOVERY"/>, without reference to the Timestamp
parameter of the Timestamped ACK frames.</t>

</section>
<section anchor="choice-of-epoch"><name>Choice of Epoch</name>

<t>Each peer can chose its epoch as it sees fit, but it MUST remain constant for
the duration of the connection, and the resulting timestamps MUST be
positive integers. Plausible values for the epoch could be:</t>

<t><list style="symbols">
  <t>the beginning of the connection, i.e., the time at which the first
packet for that connection was sent or received.</t>
  <t>the time at which the first timestamp is sent.</t>
</list></t>

<t>Chosing values close to the beginning of the connection ensures that the
timestamps value will be at most equal to the duration of the connection,
which limits the amount of bytes required to encode the timestamps.</t>

</section>
<section anchor="one-way-delay-measurements"><name>One-Way Delay Measurements</name>

<t>An endpoint generates a One Way Delay Sample on receiving a
packet containing both a TIMESTAMP frame and an ACK frame that
meets the following two conditions:</t>

<t><list style="symbols">
  <t>the largest acknowledged packet number is newly acknowledged, and</t>
  <t>at least one of the newly acknowledged packets was ack-eliciting.</t>
</list></t>

<t>The One Way Delay sample, latest_1wd, is generated as the time elapsed since
the largest acknowledged packet was sent, corrected for the difference
between local time at the sending peer and connection time at the
receiving peer, phase_shift.</t>

<t>latest_1wd = timestamp - send_time_of_largest_acked - phase_shift</t>

<t>By convention, the phase_shift is estimated upon reception of the first
RTT sample, first_rtt. It is set to:</t>

<t>phase_shift = timestamp - send_time_of_largest_acked - latest_rtt/2</t>

<t>In that formula, we assume that the local time are measured in
microseconds since the beginning of the connection.
The formula does not depend on the choice of epoch by each peer, but
simply of the hypothesis that delays on the data path and the return
path are about equal.</t>

<t>We understand that clocks may drift over time, and that simply
estimating a phase shift at the beginning of a connection may be
too simplistic for long duration connections. Implementations
MAY adopt different strategies to reestimate the phase shift
at appropriate intervals. Specifying these strategies is beyond
the scope of this document.</t>

</section>
</section>
<section anchor="discussion"><name>Discussion</name>

<t>This document replaces an earlier proposal to modify the format
of the ACK frame by including a timestamp inside the modified
frame. The revised proposal encodes the timestamp independently
of the ACK frame, which requires slightly more overhead to
encode the type of the TIMESTAMP frame.</t>

<t>Defining an independent frame allows for more flexibility. This
draft defines the combination of TIMESTAMP with ACK frames, but
they could be combined with other frames as well. For example,
adding a TIMESTAMP to packets carrying a Path Response could
allow measuring one way delays before deciding
to migrate to a new path.</t>

<section anchor="management-of-time"><name>Management of Time</name>

<t>There are two known issues with deducing one way delays from RTT
measurements: clock drift and undefined phase difference.</t>

<t>The phase difference problem is easy to understand. We start from a list
of measurements associating the send time of packet number x (s[x]), the
receive time of the acknowledgement of packet (a[x]), and the timestamp
indicating when packet x was received by the peer (p[x]). The peer&#39;s
timestamp are expressed in the peer&#39;s clock.</t>

<t>Suppose that we model the peer&#39;s clock as local time plus phase
difference f, and that we model the rtt as the sum of two one way
delays, up (u[x]) and down (d[x]). We get:</t>

<figure><artwork><![CDATA[
    u[x] = p[x] + f - s[x]

    d[x] = a[x] - p[x] - f
]]></artwork></figure>

<t>Just looking at the equation shows that the value of f cannot be
determined from the a series of measurement (s[x], a[x], p[x]). You can
just add constraints that all u[x] and d[x] are positive numbers, which
gives a range of plausible values for f:   max(s[x] - p[x]) &lt; f &lt;
min(a[x]-p[x]). In case you wonder, you get similar formulations in a
multipath scenario. The plausible range may narrow to the min rtt of the
shortest path, but no further.</t>

<t>The phase difference uncertainty is not a big issue in practice, because
control algorithms are much more interested in the variations of the
delays than by their absolute values. Suppose we want to compare one way
delays at measurement (x) and (y). We get:</t>

<figure><artwork><![CDATA[
    u[x] = p[x] + f - s[x]

    u[y] = p[y] + f - s[y]

    u[x] - u[y] = p[x] - p[y] - s[x] + s[y]
]]></artwork></figure>

<t>The phase difference does not affect the measurement of variations in the
one way delay.</t>

<t>The clock drift is another matter. All the equations above assume that
the local clock and the remote clock have the same frequency. This is an
approximation. Clocks drift over time. Instead of just considering a
stable phase difference, one should consider the sum of a phase
difference and a time-varying drift component. Estimating drift is a
complex problem. This was studied in detail in the development of the
Network Time Protocol (NTP) <xref target="RFC5905"/>. In theory, implementations of
Quic could copy the algorithms of NTP to build a model of the clocks
used by the local node and the peer. That would be very complex.</t>

<t>Fortunately, implementations of Quic no not need to implement something as
complex as NTP. Most time based algorithms are only interested in
variations of delays over a short horizon. Clock drift happens at a slow
pace, maybe 1 millisecond per minute. Time base congestion control
algorithms already have to cope with the potential drift of the minimum RTT
due to changing network conditions. They do that by periodically restarting
the measurement of the minimum RTT after some delay, typically less than a
minute. A simple implementation of one way delay measurements could
follow the same approach, for example resetting the phase difference
every 30 seconds or so.</t>

</section>
</section>
<section anchor="use-cases"><name>Use cases</name>

<t>Time stamps have been found useful in multiple environments, including
avoid spurious exit from slow start with the Hybrid Slow Start algorithm
<xref target="HyStart"/>, and monitoring delays for individual paths for QUIC
multipath as mentioned in <xref section="5" sectionFormat="of" target="MULTIPATH-QUIC"/>.</t>

<section anchor="application-to-hystart"><name>Application to Hystart</name>

<t>Implementations of the Cubic congestion control <xref target="RFC8312"/> benefit
from the Hybrid Slow Start algorithm <xref target="HyStart"/>. Hystart works by
monitoring the transmission delay during the initial Slow Start phase,
exiting slow start and moving to congestion avoidance when a delay
increase is noticed, before usage of a too large congestion window
causes many losses. Hystart generally improves performance of Cubic,
but can cause performance degradation if spurious delay measurement
cause an early exit.</t>

<t>An example of early exit was noticed when implementing Cubic
congestion control in QUIC <xref target="CH09"/>. Tests over a wireless connection
showed significant jitter in the RTT measurements. This was fixed by
exiting only after 5 measurements showed a delay increase. Further
investigation showed that this jitter was mostly happening on the
&quot;upload&quot; path. Timestamps enable measurement of the delay variations
independently on each path, and thus improved exit decisions.</t>

</section>
<section anchor="application-to-quic-multipath"><name>Application to QUIC Multipath</name>

<t>Time Stamps are very useful in multipath environments, as mentioned
in <xref target="MULTIPATH-QUIC"/>. In the absence of time stamps, it is very hard to estimate
the contribution of each path to the end to end delay,
and the specification mandates that acknowledgements be sent on
the same path over which packets were received. If time stamps
are available, experiments show that performance are improved
if the acknowlegments are sent on the shortest available path, because
the implementation can detect packet losses or congestion events faster.</t>

</section>
</section>
<section anchor="security-considerations"><name>Security Considerations</name>

<t>The Timestamp value in the TIMESTAMP frame is asserted by the sender
of the packet. Adversarial peers could chose values of the timestamp
designed to exercise side effects in congestion control algorithms
or other algorithms relying on the one-way delays. This can be
mitigated by running plausibility checks on the received values.
For example, each peer can maintain statistics not just on the
One Way Delays, but also on the differences between One Way Delays
and RTT, and detect outlier values. Peers can also compare the 
differences between timestamps in packets carrying acknowledgements and
the differences between the sending times of corresponding packets,
and detect anomalies if the delays between acknowledging packets appears
shorter than the delays when sending them.</t>

</section>
<section anchor="iana-considerations"><name>IANA Considerations</name>

<t>This document registers a new value in the QUIC Transport Parameter
Registry:</t>

<t>Value:  TBD (using value 0x7158 in early deployments)</t>

<t>Parameter Name:  enable_timestamp</t>

<t>Specification:  Indicates that the connection should use TimeStamped ACK frames</t>

<t>This document also registers a new value in the QUIC Frame Type registry:</t>

<t>Value:  TBD (using value 757 in early deployments)</t>

<t>Frame Name:  TIMESTAMP</t>

<t>Specification:  Timestamp set at the time packet was sent</t>

</section>
<section anchor="acknowledgements"><name>Acknowledgements</name>

<t>Thanks to Dmitri Tikhonov, Tal Misrahi, Watson Ladd, Martin Thomson and Ian Swett
for their reviews and suggestions.</t>

</section>


  </middle>

  <back>

    <references title='Normative References'>

<reference anchor="QUIC-TRANSPORT" >
  <front>
    <title>QUIC: A UDP-Based Multiplexed and Secure Transport</title>
    <author initials="J." surname="Iyengar" fullname="Jana Iyengar" role="editor">
      <organization>Fastly</organization>
    </author>
    <author initials="M." surname="Thomson" fullname="Martin Thomson" role="editor">
      <organization>Mozilla</organization>
    </author>
    <date />
  </front>
  <seriesInfo name="RFC" value="9000"/>
</reference>
<reference anchor="QUIC-RECOVERY" >
  <front>
    <title>QUIC Loss Detection and Congestion Control</title>
    <author initials="J." surname="Iyengar" fullname="Jana Iyengar" role="editor">
      <organization>Fastly</organization>
    </author>
    <author initials="I." surname="Swett" fullname="Ian Swett" role="editor">
      <organization>Google</organization>
    </author>
    <date />
  </front>
  <seriesInfo name="RFC" value="9002"/>
</reference>




<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'><organization/></author>
<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'><organization/></author>
<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='RFC8312' target='https://www.rfc-editor.org/info/rfc8312'>
<front>
<title>CUBIC for Fast Long-Distance Networks</title>
<author fullname='I. Rhee' initials='I.' surname='Rhee'><organization/></author>
<author fullname='L. Xu' initials='L.' surname='Xu'><organization/></author>
<author fullname='S. Ha' initials='S.' surname='Ha'><organization/></author>
<author fullname='A. Zimmermann' initials='A.' surname='Zimmermann'><organization/></author>
<author fullname='L. Eggert' initials='L.' surname='Eggert'><organization/></author>
<author fullname='R. Scheffenegger' initials='R.' surname='Scheffenegger'><organization/></author>
<date month='February' year='2018'/>
<abstract><t>CUBIC is an extension to the current TCP standards.  It differs from the current TCP standards only in the congestion control algorithm on the sender side.  In particular, it uses a cubic function instead of a linear window increase function of the current TCP standards to improve scalability and stability under fast and long-distance networks.  CUBIC and its predecessor algorithm have been adopted as defaults by Linux and have been used for many years.  This document provides a specification of CUBIC to enable third-party implementations and to solicit community feedback through experimentation on the performance of CUBIC.</t></abstract>
</front>
<seriesInfo name='RFC' value='8312'/>
<seriesInfo name='DOI' value='10.17487/RFC8312'/>
</reference>




    </references>

    <references title='Informative References'>

<reference anchor="MULTIPATH-QUIC" >
  <front>
    <title>Multipath Extension for QUIC</title>
    <author initials="Y." surname="Liu" fullname="Yanmei Liu" role="editor">
      <organization>Alibaba Inc.</organization>
    </author>
    <author initials="Y." surname="Ma" fullname="Yunfei Ma">
      <organization>Alibaba Inc.</organization>
    </author>
    <author initials="Q." surname="De Coninck" fullname="Quentin De Coninck" role="editor">
      <organization>UCLouvain</organization>
    </author>
    <author initials="O." surname="Bonaventure" fullname="Olivier Bonaventure">
      <organization>UCLouvain</organization>
    </author>
    <author initials="C." surname="Huitema" fullname="Christian Huitema">
      <organization>Private Octopus Inc.</organization>
    </author>
    <author initials="M." surname="Kuehlewind" fullname="Mirja Kuehlewind" role="editor">
      <organization>Ericsson</organization>
    </author>
    <date />
  </front>
  <seriesInfo name="Internet-Draft" value="draft-ietf-quic-multipath"/>
</reference>
<reference anchor="HyStart" target="https://pdfs.semanticscholar.org/25e9/ ef3f03315782c7f1cbcd31b587857adae7d1.pdf">
  <front>
    <title>Hybrid Slow Start for High-Bandwidth and Long-Distance Networks</title>
    <author initials="S." surname="Ha" fullname="Sangtae Ha">
      <organization>University of Colorado at Boulder</organization>
    </author>
    <author initials="I." surname="Rhee," fullname="Injong Rhee">
      <organization>North Carolina State University</organization>
    </author>
    <date year="2008"/>
  </front>
  <seriesInfo name="Conference" value="International Workshop on Protocols for Fast Long-Distance Networks"/>
</reference>
<reference anchor="CH09" target="https://huitema.wordpress.com/2019/11/11/implementing-cubic-congestion-control-in-quic/">
  <front>
    <title>Implementing Cubic congestion control in Quic</title>
    <author initials="C." surname="Huitema" fullname="Christian Huitema">
      <organization>Private Octopus Inc.</organization>
    </author>
    <date year="2019"/>
  </front>
  <seriesInfo name="Blog" value="entry"/>
</reference>




<reference anchor='RFC6817' target='https://www.rfc-editor.org/info/rfc6817'>
<front>
<title>Low Extra Delay Background Transport (LEDBAT)</title>
<author fullname='S. Shalunov' initials='S.' surname='Shalunov'><organization/></author>
<author fullname='G. Hazel' initials='G.' surname='Hazel'><organization/></author>
<author fullname='J. Iyengar' initials='J.' surname='Iyengar'><organization/></author>
<author fullname='M. Kuehlewind' initials='M.' surname='Kuehlewind'><organization/></author>
<date month='December' year='2012'/>
<abstract><t>Low Extra Delay Background Transport (LEDBAT) is an experimental delay-based congestion control algorithm that seeks to utilize the available bandwidth on an end-to-end path while limiting the consequent increase in queueing delay on that path.  LEDBAT uses changes in one-way delay measurements to limit congestion that the flow itself induces in the network.  LEDBAT is designed for use by background bulk-transfer applications to be no more aggressive than standard TCP congestion control (as specified in RFC 5681) and to yield in the presence of competing flows, thus limiting interference with the network performance of competing flows.  This document defines  an Experimental Protocol for the Internet community.</t></abstract>
</front>
<seriesInfo name='RFC' value='6817'/>
<seriesInfo name='DOI' value='10.17487/RFC6817'/>
</reference>



<reference anchor='RFC5905' target='https://www.rfc-editor.org/info/rfc5905'>
<front>
<title>Network Time Protocol Version 4: Protocol and Algorithms Specification</title>
<author fullname='D. Mills' initials='D.' surname='Mills'><organization/></author>
<author fullname='J. Martin' initials='J.' role='editor' surname='Martin'><organization/></author>
<author fullname='J. Burbank' initials='J.' surname='Burbank'><organization/></author>
<author fullname='W. Kasch' initials='W.' surname='Kasch'><organization/></author>
<date month='June' year='2010'/>
<abstract><t>The Network Time Protocol (NTP) is widely used to synchronize computer clocks in the Internet.  This document describes NTP version 4 (NTPv4), which is backwards compatible with NTP version 3 (NTPv3), described in RFC 1305, as well as previous versions of the protocol. NTPv4 includes a modified protocol header to accommodate the Internet Protocol version 6 address family.  NTPv4 includes fundamental improvements in the mitigation and discipline algorithms that extend the potential accuracy to the tens of microseconds with modern workstations and fast LANs.  It includes a dynamic server discovery scheme, so that in many cases, specific server configuration is not required.  It corrects certain errors in the NTPv3 design and implementation and includes an optional extension mechanism.   [STANDARDS-TRACK]</t></abstract>
</front>
<seriesInfo name='RFC' value='5905'/>
<seriesInfo name='DOI' value='10.17487/RFC5905'/>
</reference>




    </references>




  </back>

<!-- ##markdown-source:
H4sIAHHSC2MAC81cW3MbuZV+x6/Ayg/xbEhaksexrUpqV5bktRLJUiQ6U7OT
KRfYDZIYNxs9QLcoRuv89j0XAH0hZXtq87DOVCT3BZeDc77znUt7PB6L2tSF
PpJ/bUwmp2alfa1WlZdvrZOXWvnGmXIhr0o9/kFt5Kku1MYLNZs5fQcvfTg/
GU9vRW6zUq1glNypeT1eNqbWKzX+FcYc1368/0pkqtYL6zZHUt9XIoe/HcnD
/cNDIWC+Mv+oClvCpY32QpjKHcnaNb4+3N9/vX8olNPqSE6dKn1lXS0+rY/k
eVlrV+p6fIpTCpHZHBZ6JBs/Vj4zRlTmSP5U22wkPbzj9NzDb5sV/5LZ1UqX
tf9ZCNXUS+uOhKQ/4/BTSlP6I3kyke94M+k6b/Rk6YyvjSq37lsHq7h25g72
KK+y2laNh9Vmk/QEPG2KIxmk9J/h5wQ2I0Rp3UrV5k7jgli8N8fvb6+vbqa8
xHBce3jvSB7LD6fX4zfK61xeNkVtqkLfw+8gUnmrs8bpVmx79D6L/uH0eHr2
mS547Yz2ppzbKIObtzDy6/39ffr7F+Xz54k83+hyodxAPn9Wpdq6RaJ5q3xd
bNI1Z3E7Oje1dbvnuJzI6dKuvC0Hc1wqV5ty6ybNcmn/YYpC7Z4mivbm7OTq
b2c3P25LVl5Y70Hba53VxpYkzxNbLsA68K/waw0j/maJHv7/kOj5RN6udV0P
ZjgHbe5fp+H/y9pFoR+RJO6yo7GXHy6m59fH03dj0s+eXFk/Vb2UZ/e1Lj0K
El6mo/hmSfbNPgKO0fWc0WYVJ/m6pH+cyAvTDGTwoypX2vRu7JBnkMxxYWZq
prrW3c6RJrlstTBO0pRzmKR741vH++sEtBL1z5TZp+G4f20A08Aidj2xcxc8
7YeTC9vcKVM+MufVRL6xpbqDwQFQhpNeFebOaLf7kW8afwfIfhVlvwqzw0kA
Rf7S6GWh16bMh/NcGveL2nn/C2I7cybzDDzw37vNbQ141Ff5d5uZM4DEhV1L
uk0K/84sloDZZb42OVgDYssFYMv41KAvzLR8r+u1dZ981yrAFb56xCb24LDn
2ml4dU/CrGwjCpFKFfIHHGlpKwnmdu0seERbeFoH4sYXZ4YVLzQY2bKuK3/0
7FmVz/3EwzGAlmU+W9pCuQnI4tnhC/36mdTz5/P9588PXrx8dZi9nB9ksyx/
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

-->

</rfc>

