summaryrefslogtreecommitdiff
path: root/doc/rfc/rfc1059.txt
diff options
context:
space:
mode:
authorThomas Voss <mail@thomasvoss.com> 2024-11-27 20:54:24 +0100
committerThomas Voss <mail@thomasvoss.com> 2024-11-27 20:54:24 +0100
commit4bfd864f10b68b71482b35c818559068ef8d5797 (patch)
treee3989f47a7994642eb325063d46e8f08ffa681dc /doc/rfc/rfc1059.txt
parentea76e11061bda059ae9f9ad130a9895cc85607db (diff)
doc: Add RFC documents
Diffstat (limited to 'doc/rfc/rfc1059.txt')
-rw-r--r--doc/rfc/rfc1059.txt3245
1 files changed, 3245 insertions, 0 deletions
diff --git a/doc/rfc/rfc1059.txt b/doc/rfc/rfc1059.txt
new file mode 100644
index 0000000..8c134f6
--- /dev/null
+++ b/doc/rfc/rfc1059.txt
@@ -0,0 +1,3245 @@
+Network Working Group D. Mills
+Request for Comments: 1059 University of Delaware
+ July 1988
+
+ Network Time Protocol (Version 1)
+ Specification and Implementation
+
+Status of this Memo
+
+ This memo describes the Network Time Protocol (NTP), specifies its
+ formal structure and summarizes information useful for its
+ implementation. NTP provides the mechanisms to synchronize time and
+ coordinate time distribution in a large, diverse internet operating
+ at rates from mundane to lightwave. It uses a returnable-time design
+ in which a distributed subnet of time servers operating in a self-
+ organizing, hierarchical master-slave configuration synchronizes
+ logical clocks within the subnet and to national time standards via
+ wire or radio. The servers can also redistribute reference time via
+ local routing algorithms and time daemons.
+
+ The NTP architectures, algorithms and protocols which have evolved
+ over several years of implementation and refinement are described in
+ this document. The prototype system, which has been in regular
+ operation in the Internet for the last two years, is described in an
+ Appendix along with performance data which shows that timekeeping
+ accuracy throughout most portions of the Internet can be ordinarily
+ maintained to within a few tens of milliseconds, even in cases of
+ failure or disruption of clocks, time servers or nets. This is a
+ Draft Standard for an Elective protocol. Distribution of this memo
+ is unlimited.
+
+ Table of Contents
+
+ 1. Introduction 3
+ 1.1. Related Technology 4
+ 2. System Architecture 6
+ 2.1. Implementation Model 7
+ 2.2. Network Configurations 9
+ 2.3. Time Scales 10
+ 3. Network Time Protocol 12
+ 3.1. Data Formats 12
+ 3.2. State Variables and Parameters 13
+ 3.2.1. Common Variables 15
+ 3.2.2. System Variables 17
+ 3.2.3. Peer Variables 18
+ 3.2.4. Packet Variables 19
+ 3.2.5. Clock Filter Variables 19
+ 3.2.6. Parameters 20
+
+
+
+Mills [Page 1]
+
+RFC 1059 Network Time Protocol July 1988
+
+
+ 3.3. Modes of Operation 21
+ 3.4. Event Processing 22
+ 3.4.1. Timeout Procedure 23
+ 3.4.2. Receive Procedure 24
+ 3.4.3. Update Procedure 27
+ 3.4.4. Initialization Procedures 29
+ 4. Filtering and Selection Algorithms 29
+ 4.1. Clock Filter Algorithm 29
+ 4.2 Clock Selection Algorithm 30
+ 4.3. Variable-Rate Polling 32
+ 5. Logical Clocks 33
+ 5.1. Uniform Phase Adjustments 35
+ 5.2. Nonuniform Phase Adjustments 36
+ 5.3. Maintaining Date and Time 37
+ 5.4. Calculating Estimates 37
+ 6. References 40
+
+ Appendices
+ Appendix A. UDP Header Format 43
+ Appendix B. NTP Data Format 44
+ Appendix C. Timeteller Experiments 47
+ Appendix D. Evaluation of Filtering Algorithms 49
+ Appendix E. NTP Synchronization Networks 56
+
+ List of Figures
+ Figure 2.1. Implementation Model 8
+ Figure 3.1. Calculating Delay and Offset 26
+ Figure 5.1. Clock Registers 34
+ Figure D.1. Calculating Delay and Offset 50
+ Figure E.1. Primary Service Network 57
+
+ List of Tables
+ Table 2.1. Dates of Leap-Second Insertion 11
+ Table 3.1. System Variables 14
+ Table 3.2. Peer Variables 14
+ Table 3.3. Packet Variables 15
+ Table 3.4. Parameters 15
+ Table 4.1. Outlyer Selection Procedure 32
+ Table 5.1. Clock Parameters 35
+ Table C.1. Distribution Functions 47
+ Table D.1. Delay and Offset Measurements (UMD) 52
+ Table D.2.a Delay and Offset Measurements (UDEL) 52
+ Table D.2.b Offset Measurements (UDEL) 53
+ Table D.3. Minimum Filter (UMD - NCAR) 54
+ Table D.4. Median Filter (UMD - NCAR) 54
+ Table D.5. Minimum Filter (UDEL - NCAR) 55
+ Table E.1. Primary Servers 56
+
+
+
+
+Mills [Page 2]
+
+RFC 1059 Network Time Protocol July 1988
+
+
+1. Introduction
+
+ This document describes the Network Time Protocol (NTP), including
+ the architectures, algorithms and protocols to synchronize local
+ clocks in a set of distributed clients and servers. The protocol was
+ first described in RFC-958 [24], but has evolved in significant ways
+ since publication of that document. NTP is built on the Internet
+ Protocol (IP) [10] and User Datagram Protocol (UDP) [6], which
+ provide a connectionless transport mechanism; however, it is readily
+ adaptable to other protocol suites. It is evolved from the Time
+ Protocol [13] and the ICMP Timestamp message [11], but is
+ specifically designed to maintain accuracy and robustness, even when
+ used over typical Internet paths involving multiple gateways and
+ unreliable nets.
+
+ The service environment consists of the implementation model, service
+ model and time scale described in Section 2. The implementation
+ model is based on a multiple-process operating system architecture,
+ although other architectures could be used as well. The service
+ model is based on a returnable-time design which depends only on
+ measured offsets, or skews, but does not require reliable message
+ delivery. The subnet is a self-organizing, hierarchical master-slave
+ configuration, with synchronization paths determined by a minimum-
+ weight spanning tree. While multiple masters (primary servers) may
+ exist, there is no requirement for an election protocol.
+
+ NTP itself is described in Section 3. It provides the protocol
+ mechanisms to synchronize time in principle to precisions in the
+ order of nanoseconds while preserving a non-ambiguous date well into
+ the next century. The protocol includes provisions to specify the
+ characteristics and estimate the error of the local clock and the
+ time server to which it may be synchronized. It also includes
+ provisions for operation with a number of mutually suspicious,
+ hierarchically distributed primary reference sources such as radio
+ clocks.
+
+ Section 4 describes algorithms useful for deglitching and smoothing
+ clock-offset samples collected on a continuous basis. These
+ algorithms began with those suggested in [22], were refined as the
+ results of experiments described in [23] and further evolved under
+ typical operating conditions over the last two years. In addition,
+ as the result of experience in operating multiple-server nets
+ including radio-synchronized clocks at several sites in the US and
+ with clients in the US and Europe, reliable algorithms for selecting
+ good clocks from a population possibly including broken ones have
+ been developed and are described in Section 4.
+
+ The accuracies achievable by NTP depend strongly on the precision of
+
+
+
+Mills [Page 3]
+
+RFC 1059 Network Time Protocol July 1988
+
+
+ the local clock hardware and stringent control of device and process
+ latencies. Provisions must be included to adjust the software
+ logical clock time and frequency in response to corrections produced
+ by NTP. Section 5 describes a logical clock design evolved from the
+ Fuzzball implementation described in [15]. This design includes
+ offset-slewing, drift-compensation and deglitching mechanisms capable
+ of accuracies in order of a millisecond, even after extended periods
+ when synchronization to primary reference sources has been lost.
+
+ The UDP and NTP packet formats are shown in Appendices A and B.
+ Appendix C presents the results of a survey of about 5500 Internet
+ hosts showing how their clocks compare with primary reference sources
+ using three different time protocols, including NTP. Appendix D
+ presents experimental results using several different deglitching and
+ smoothing algorithms. Appendix E describes the prototype NTP primary
+ service net, as well as proposed rules of engagement for its use.
+
+1.1. Related Technology
+
+ Other mechanisms have been specified in the Internet protocol suite
+ to record and transmit the time at which an event takes place,
+ including the Daytime protocol [12], Time Protocol [13], ICMP
+ Timestamp message [11] and IP Timestamp option [9]. Experimental
+ results on measured times and roundtrip delays in the Internet are
+ discussed in [14], [23] and [31]. Other synchronization protocols
+ are discussed in [7], [17], [20] and [28]. NTP uses techniques
+ evolved from both linear and nonlinear synchronization methodology.
+ Linear methods used for digital telephone network synchronization are
+ summarized in [3], while nonlinear methods used for process
+ synchronization are summarized in [27].
+
+ The Fuzzball routing protocol [15], sometimes called Hellospeak,
+ incorporates time synchronization directly into the routing protocol
+ design. One or more processes synchronize to an external reference
+ source, such as a radio clock or NTP daemon, and the routing
+ algorithm constructs a minimum-weight spanning tree rooted on these
+ processes. The clock offsets are then distributed along the arcs of
+ the spanning tree to all processes in the system and the various
+ process clocks corrected using the procedure described in Section 5
+ of this document. While it can be seen that the design of Hellospeak
+ strongly influenced the design of NTP, Hellospeak itself is not an
+ Internet protocol and is unsuited for use outside its local-net
+ environment.
+
+ The Unix 4.3bsd model [20] uses a single master time daemon to
+ measure offsets of a number of slave hosts and send periodic
+ corrections to them. In this model the master is determined using an
+ election algorithm [25] designed to avoid situations where either no
+
+
+
+Mills [Page 4]
+
+RFC 1059 Network Time Protocol July 1988
+
+
+ master is elected or more than one master is elected. The election
+ process requires a broadcast capability, which is not a ubiquitous
+ feature of the Internet. While this model has been extended to
+ support hierarchical configurations in which a slave on one network
+ serves as a master on the other [28], the model requires handcrafted
+ configuration tables in order to establish the hierarchy and avoid
+ loops. In addition to the burdensome, but presumably infrequent,
+ overheads of the election process, the offset measurement/correction
+ process requires twice as many messages as NTP per update.
+
+ A good deal of research has gone into the issue of maintaining
+ accurate time in a community where some clocks cannot be trusted. A
+ truechimer is a clock that maintains timekeeping accuracy to a
+ previously published (and trusted) standard, while a falseticker is a
+ clock that does not. Determining whether a particular clock is a
+ truechimer or falseticker is an interesting abstract problem which
+ can be attacked using methods summarized in [19] and [27].
+
+ A convergence function operates upon the offsets between the clocks
+ in a system to increase the accuracy by reducing or eliminating
+ errors caused by falsetickers. There are two classes of convergence
+ functions, those involving interactive convergence algorithms and
+ those involving interactive consistency algorithms. Interactive
+ convergence algorithms use statistical clustering techniques such as
+ the fault-tolerant average algorithm of [17], the CNV algorithm of
+ [19], the majority-subset algorithm of [22], the egocentric algorithm
+ of [27] and the algorithms in Section 4 of this document.
+
+ Interactive consistency algorithms are designed to detect faulty
+ clock processes which might indicate grossly inconsistent offsets in
+ successive readings or to different readers. These algorithms use an
+ agreement protocol involving successive rounds of readings, possibly
+ relayed and possibly augmented by digital signatures. Examples
+ include the fireworks algorithm of [17] and the optimum algorithm of
+ [30]. However, these algorithms require large numbers of messages,
+ especially when large numbers of clocks are involved, and are
+ designed to detect faults that have rarely been found in the Internet
+ experience. For these reasons they are not considered further in
+ this document.
+
+ In practice it is not possible to determine the truechimers from the
+ falsetickers on other than a statistical basis, especially with
+ hierarchical configurations and a statistically noisy Internet.
+ Thus, the approach taken in this document and its predecessors
+ involves mutually coupled oscillators and maximum-likelihood
+ estimation and selection procedures. From the analytical point of
+ view, the system of distributed NTP peers operates as a set of
+ coupled phase-locked oscillators, with the update algorithm
+
+
+
+Mills [Page 5]
+
+RFC 1059 Network Time Protocol July 1988
+
+
+ functioning as a phase detector and the logical clock as a voltage-
+ controlled oscillator. This similarity is not accidental, since
+ systems like this have been studied extensively [3], [4] and [5].
+
+ The particular choice of offset measurement and computation procedure
+ described in Section 3 is a variant of the returnable-time system
+ used in some digital telephone networks [3]. The clock filter and
+ selection algorithms are designed so that the clock synchronization
+ subnet self-organizes into a hierarchical master-slave configuration
+ [5]. What makes the NTP model unique is the adaptive configuration,
+ polling, filtering and selection functions which tailor the dynamics
+ of the system to fit the ubiquitous Internet environment.
+
+2. System Architecture
+
+ The purpose of NTP is to connect a number of primary reference
+ sources, synchronized to national standards by wire or radio, to
+ widely accessible resources such as backbone gateways. These
+ gateways, acting as primary time servers, use NTP between them to
+ cross-check the clocks and mitigate errors due to equipment or
+ propagation failures. Some number of local-net hosts or gateways,
+ acting as secondary time servers, run NTP with one or more of the
+ primary servers. In order to reduce the protocol overhead the
+ secondary servers distribute time via NTP to the remaining local-net
+ hosts. In the interest of reliability, selected hosts can be
+ equipped with less accurate but less expensive radio clocks and used
+ for backup in case of failure of the primary and/or secondary servers
+ or communication paths between them.
+
+ There is no provision for peer discovery, acquisition, or
+ authentication in NTP. Data integrity is provided by the IP and UDP
+ checksums. No circuit-management, duplicate-detection or
+ retransmission facilities are provided or necessary. The service can
+ operate in a symmetric mode, in which servers and clients are
+ indistinguishable, yet maintain a small amount of state information,
+ or in client/server mode, in which servers need maintain no state
+ other than that contained in the client request. A lightweight
+ association-management capability, including dynamic reachability and
+ variable polling rate mechanisms, is included only to manage the
+ state information and reduce resource requirements. Since only a
+ single NTP message format is used, the protocol is easily implemented
+ and can be used in a variety of solicited or unsolicited polling
+ mechanisms.
+
+ It should be recognized that clock synchronization requires by its
+ nature long periods and multiple comparisons in order to maintain
+ accurate timekeeping. While only a few measurements are usually
+ adequate to reliably determine local time to within a second or so,
+
+
+
+Mills [Page 6]
+
+RFC 1059 Network Time Protocol July 1988
+
+
+ periods of many hours and dozens of measurements are required to
+ resolve oscillator drift and maintain local time to the order of a
+ millisecond. Thus, the accuracy achieved is directly dependent on
+ the time taken to achieve it. Fortunately, the frequency of
+ measurements can be quite low and almost always non-intrusive to
+ normal net operations.
+
+2.1. Implementation Model
+
+ In what may be the most common client/server model a client sends an
+ NTP message to one or more servers and processes the replies as
+ received. The server interchanges addresses and ports, overwrites
+ certain fields in the message, recalculates the checksum and returns
+ the message immediately. Information included in the NTP message
+ allows the client to determine the server time with respect to local
+ time and adjust the logical clock accordingly. In addition, the
+ message includes information to calculate the expected timekeeping
+ accuracy and reliability, thus select the best from possibly several
+ servers.
+
+ While the client/server model may suffice for use on local nets
+ involving a public server and perhaps many workstation clients, the
+ full generality of NTP requires distributed participation of a number
+ of client/servers or peers arranged in a dynamically reconfigurable,
+ hierarchically distributed configuration. It also requires
+ sophisticated algorithms for association management, data
+ manipulation and logical clock control. Figure 2.1 shows a possible
+ implementation model including four processes sharing a partitioned
+ data base, with a partition dedicated to each peer and interconnected
+ by a message-passing system.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Mills [Page 7]
+
+RFC 1059 Network Time Protocol July 1988
+
+
+ +---------+
+ | Update |
+ +--------->| +----------+
+ | |Algorithm| |
+ | +----+----+ |
+ | | |
+ | V V
+ +----+----+ +---------+ +---------+
+ | | | Local | | |
+ | Receive | | +---->| Timeout |
+ | | | Clock | | |
+ +---------+ +---------+ +-+-----+-+
+ A A | |
+ | | V V
+ ===========================================
+ Peers Network Peers
+
+ Figure 2.1. Implementation Model
+
+ The timeout process, driven by independent timers for each peer,
+ collects information in the data base and sends NTP messages to other
+ peers in the net. Each message contains the local time the message
+ is sent, together with previously received information and other
+ information necessary to compute the estimated error and manage the
+ association. The message transmission rate is determined by the
+ accuracy expected of the local system, as well as its peers.
+
+ The receive process receives NTP messages and perhaps messages in
+ other protocols as well, including ICMP, other UDP or TCP time
+ protocols, local-net protocols and directly connected radio clocks.
+ When an NTP message is received the offset between the sender clock
+ and the local clock is computed and incorporated into the data base
+ along with other information useful for error estimation and clock
+ selection.
+
+ The update algorithm is initiated upon receipt of a message and at
+ other times. It processes the offset data from each peer and selects
+ the best peer using algorithms such as those described in Section 4.
+ This may involve many observations of a few clocks or a few
+ observations of many clocks, depending on the accuracies required.
+
+ The local clock process operates upon the offset data produced by the
+ update algorithm and adjusts the phase and frequency of the logical
+ clock using mechanisms such as described in Section 5. This may
+ result in either a step change or a gradual slew adjustment of the
+ logical clock to reduce the offset to zero. The logical clock
+ provides a stable source of time information to other users of the
+ system and for subsequent reference by NTP itself.
+
+
+
+Mills [Page 8]
+
+RFC 1059 Network Time Protocol July 1988
+
+
+2.2. Network Configurations
+
+ A primary time server is connected to a primary reference source,
+ usually a radio clock synchronized to national standard time. A
+ secondary time server derives time synchronization, possibly via
+ other secondary servers, from a primary server. Under normal
+ circumstances it is intended that a subnet of primary and secondary
+ servers assumes a hierarchical master-slave configuration with the
+ more accurate servers near the top and the less accurate below.
+
+ Following conventions established by the telephone industry, the
+ accuracy of each server is defined by a number called its stratum,
+ with the stratum of a primary server assigned as one and each level
+ downwards in the hierarchy assigned as one greater than the preceding
+ level. With current technology and available receiving equipment,
+ single-sample accuracies in the order of a millisecond can be
+ achieved at the radio clock interface and in the order of a few
+ milliseconds at the packet interface to the net. Accuracies of this
+ order require special care in the design and implementation of the
+ operating system, such as described in [15], and the logical clock
+ mechanism, such as described in Section 5.
+
+ As the stratum increases from one, the single-sample accuracies
+ achievable will degrade depending on the communication paths and
+ local clock stabilities. In order to avoid the tedious calculations
+ [4] necessary to estimate errors in each specific configuration, it
+ is useful to assume the errors accumulate approximately in proportion
+ to the minimum total roundtrip path delay between each server and the
+ primary reference source to which it is synchronized. This is called
+ the synchronization distance.
+
+ Again drawing from the experience of the telephone industry, who
+ learned such lessons at considerable cost, the synchronization paths
+ should be organized to produce the highest accuracies, but must never
+ be allowed to form a loop. The clock filter and selection algorithms
+ used in NTP accomplish this by using a variant of the Bellman-Ford
+ distributed routing algorithm [29] to compute the minimum-weight
+ spanning trees rooted on the primary servers. This results in each
+ server operating at the lowest stratum and, in case of multiple peers
+ at the same stratum, at the lowest synchronization distance.
+
+ As a result of the above design, the subnet reconfigures
+ automatically in a hierarchical master-slave configuration to produce
+ the most accurate time, even when one or more primary or secondary
+ servers or the communication paths between them fail. This includes
+ the case where all normal primary servers (e.g., backbone WWVB
+ clocks) on a possibly partitioned subnet fail, but one or more backup
+ primary servers (e.g., local WWV clocks) continue operation.
+
+
+
+Mills [Page 9]
+
+RFC 1059 Network Time Protocol July 1988
+
+
+ However, should all primary servers throughout the subnet fail, the
+ remaining secondary servers will synchronize among themselves for
+ some time and then gradually drop off the subnet and coast using
+ their last offset and frequency computations. Since these
+ computations are expected to be very precise, especially in
+ frequency, even extend outage periods of a day or more should result
+ in timekeeping errors of not over a few tens of milliseconds.
+
+ In the case of multiple primary servers, the spanning-tree
+ computation will usually select the server at minimum synchronization
+ distance. However, when these servers are at approximately the same
+ distance, the computation may result in random selections among them
+ as the result of normal dispersive delays. Ordinarily this does not
+ degrade accuracy as long as any discrepancy between the primary
+ servers is small compared to the synchronization distance. If not,
+ the filter and selection algorithms will select the best of the
+ available servers and cast out outlyers as intended.
+
+2.3. Time Scales
+
+ Since 1972 the various national time scales have been based on
+ International Atomic Time (TA), which is currently maintained using
+ multiple cesium-beam clocks to an accuracy of a few parts in 10^12.
+ The Bureau International de l'Heure (BIH) uses astronomical
+ observations provided by the US Naval Observatory and other
+ observatories to determine corrections for small changes in the mean
+ rotation period of the Earth. This results in Universal Coordinated
+ Time (UTC), which is presently decreasing from TA at a fraction of a
+ second per year. When the magnitude of the correction approaches 0.7
+ second, a leap second is inserted or deleted in the UTC time scale on
+ the last day of June or December. Further information on time scales
+ can be found in [26].
+
+ For the most precise coordination and timestamping of events since
+ 1972 it is necessary to know when leap seconds were inserted or
+ deleted in UTC and how the seconds are numbered. A leap second is
+ inserted following second 23:59:59 on the last day of June or
+ December and becomes second 23:59:60 of that day. A leap second
+ would be deleted by omitting second 23:59:59 on one of these days,
+ although this has never happened. Leap seconds were inserted on the
+ following fourteen occasions prior to January 1988 (courtesy US Naval
+ Observatory):
+
+
+
+
+
+
+
+
+
+Mills [Page 10]
+
+RFC 1059 Network Time Protocol July 1988
+
+
+ 1 June 1972 8 December 1978
+ 2 December 1972 9 December 1979
+ 3 December 1973 10 June 1981
+ 4 December 1974 11 June 1982
+ 5 December 1975 12 June 1983
+ 6 December 1976 13 June 1985
+ 7 December 1977 14 December 1987
+
+ Table 2.1. Dates of Leap-Second Insertion
+
+ Like UTC, NTP operates with an abstract oscillator synchronized in
+ frequency to the TA time scale. At 0000 hours on 1 January 1972 the
+ NTP time scale was set to 2,272,060,800, representing the number of
+ TA seconds since 0000 hours on 1 January 1900. The insertion of leap
+ seconds in UTC does not affect the oscillator itself, only the
+ translation between TA and UTC, or conventional civil time. However,
+ since the only institutional memory assumed by NTP is the UTC radio
+ broadcast service, the NTP time scale is in effect reset to UTC as
+ each offset estimate is computed. When a leap second is inserted in
+ UTC and subsequently in NTP, knowledge of all previous leap seconds
+ is lost. Thus, if a clock synchronized to NTP in early 1988 was used
+ to establish the time of an event that occured in early 1972, it
+ would be fourteen seconds early.
+
+ When NTP is used to measure intervals between events that straddle a
+ leap second, special considerations apply. When it is necessary to
+ determine the elapsed time between events, such as the half life of a
+ proton, NTP timestamps of these events can be used directly. When it
+ is necessary to establish the order of events relative to UTC, such
+ as the order of funds transfers, NTP timestamps can also be used
+ directly; however, if it is necessary to establish the elapsed time
+ between events relative to UTC, such as the intervals between
+ payments on a mortgage, NTP timestamps must be converted to UTC using
+ the above table and its successors.
+
+ The current formats used by NBS radio broadcast services [2] do not
+ include provisions for advance notice of leap seconds, so this
+ information must be determined from other sources. NTP includes
+ provisions to distribute advance warnings of leap seconds using the
+ Leap Indicator bits described in Section 3. The protocol is designed
+ so that these bits can be set manually at the primary clocks and then
+ automatically distributed throughout the system for delivery to all
+ logical clocks and then effected as described in Section 5.
+
+
+
+
+
+
+
+
+Mills [Page 11]
+
+RFC 1059 Network Time Protocol July 1988
+
+
+3. Network Time Protocol
+
+ This section consists of a formal definition of the Network Time
+ Protocol, including its data formats, entities, state variables,
+ events and event-processing procedures. The specification model is
+ based on the implementation model illustrated in Figure 2.1, but it
+ is not intended that this model is the only one upon which a
+ specification can be based. In particular, the specification is
+ intended to illustrate and clarify the intrinsic operations of NTP
+ and serve as a foundation for a more rigorous, comprehensive and
+ verifiable specification.
+
+3.1. Data Formats
+
+ All mathematical operations expressed or implied herein are in
+ two's-complement arithmetic. Data are specified as integer or
+ fixed-point quantities. Since various implementations would be
+ expected to scale externally derived quantities for internal use,
+ neither the precision nor decimal-point placement for fixed-point
+ quantities is specified. Unless specified otherwise, all quantities
+ are unsigned and may occupy the full field width, if designated, with
+ an implied zero preceding the most significant (leftmost) bit.
+ Hardware and software packages designed to work with signed
+ quantities will thus yield surprising results when the most
+ significant (sign) bit is set. It is suggested that externally
+ derived, unsigned fixed-point quantities such as timestamps be
+ shifted right one bit for internal use, since the precision
+ represented by the full field width is seldom justified.
+
+ Since NTP timestamps are cherished data and, in fact, represent the
+ main product of the protocol, a special timestamp format has been
+ established. NTP timestamps are represented as a 64-bit unsigned
+ fixed-point number, in seconds relative to 0000 UT on 1 January 1900.
+ The integer part is in the first 32 bits and the fraction part in the
+ last 32 bits, as shown in the following diagram.
+
+ 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
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ | Integer Part |
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ | Fraction Part |
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+
+ This format allows convenient multiple-precision arithmetic and
+ conversion to Time Protocol representation (seconds), but does
+ complicate the conversion to ICMP Timestamp message representation
+ (milliseconds). The precision of this representation is about 0.2
+
+
+
+Mills [Page 12]
+
+RFC 1059 Network Time Protocol July 1988
+
+
+ nanosecond, which should be adequate for even the most exotic
+ requirements.
+
+ Timestamps are determined by copying the current value of the logical
+ clock to a timestamp variable when some significant event, such as
+ the arrival of a message, occurs. In order to maintain the highest
+ accuracy, it is important that this be done as close to the hardware
+ or software driver associated with the event as possible. In
+ particular, departure timestamps should be redetermined for each
+ link-level retransmission. In some cases a particular timestamp may
+ not be available, such as when the host is rebooted or the protocol
+ first starts up. In these cases the 64-bit field is set to zero,
+ indicating the value is invalid or undefined.
+
+ Note that since some time in 1968 the most significant bit (bit 0 of
+ the Integer Part) has been set and that the 64-bit field will
+ overflow some time in 2036. Should NTP be in use in 2036, some
+ external means will be necessary to qualify time relative to 1900 and
+ time relative to 2036 (and other multiples of 136 years).
+ Timestamped data requiring such qualification will be so precious
+ that appropriate means should be readily available. There will exist
+ an 0.2-nanosecond interval, henceforth ignored, every 136 years when
+ the 64-bit field will be zero and thus considered invalid.
+
+3.2. State Variables and Parameters
+
+ Following is a tabular summary of the various state variables and
+ parameters used by the protocol. They are separated into classes of
+ system variables, which relate to the operating system environment
+ and logical clock mechanism; peer variables, which are specific to
+ each peer operating in symmetric mode or client mode; packet
+ variables, which represent the contents of the NTP message; and
+ parameters, which are fixed in all implementations of the current
+ version. For each class the description of the variable is followed
+ by its name and the procedure or value which controls it. Note that
+ variables are in lower case, while parameters are in upper case.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Mills [Page 13]
+
+RFC 1059 Network Time Protocol July 1988
+
+
+ System Variables Name Control
+ -------------------------------------------------------
+ Logical Clock sys.clock update
+ Clock Source sys.peer selection
+ algorithm
+ Leap Indicator sys.leap update
+ Stratum sys.stratum update
+ Precision sys.precision system
+ Synchronizing Distance sys.distance update
+ Estimated Drift Rate sys.drift system
+ Reference Clock Identifier sys.refid update
+ Reference Timestamp sys.reftime update
+
+ Table 3.1. System Variables
+
+ Peer Variables Name Control
+ -------------------------------------------------------
+ Peer Address peer.srcadr system
+ Peer Port peer.srcport system
+ Local Address peer.dstadr system
+ Local Port peer.dstport system
+ Peer State peer.state receive,
+ transmit
+ Reachability Register peer.reach receive,
+ transmit
+ Peer Timer peer.timer system
+ Timer Threshold peer.threshold system
+ Leap Indicator peer.leap receive
+ Stratum peer.stratum receive
+ Peer Poll Interval peer.ppoll receive
+ Host Poll Interval peer.hpoll receive,
+ transmit
+ Precision peer.precision receive
+ Synchronizing Distance peer.distance receive
+ Estimated Drift Rate peer.drift receive
+ Reference Clock Identifier peer.refid receive
+ Reference Timestamp peer.reftime receive
+ Originate Timestamp peer.org receive
+ Receive Timestamp peer.rec receive
+ Filter Register peer.filter filter
+ algorithm
+ Delay Estimate peer.delay filter
+ algorithm
+ Offset Estimate peer.offset filter
+ algorithm
+ Dispersion Estimate peer.dispersion filter
+
+ Table 3.2. Peer Variables
+
+
+
+Mills [Page 14]
+
+RFC 1059 Network Time Protocol July 1988
+
+
+ Packet Variables Name Control
+ -------------------------------------------------------
+ Peer Address pkt.srcadr transmit
+ Peer Port pkt.srcport transmit
+ Local Address pkt.dstadr transmit
+ Local Port pkt.dstport transmit
+ Leap Indicator pkt.leap transmit
+ Version Number pkt.version transmit
+ Stratum pkt.stratum transmit
+ Poll pkt.poll transmit
+ Precision pkt.precision transmit
+ Synchronizing Distance pkt.distance transmit
+ Estimated Drift Rate pkt.drift transmit
+ Reference Clock Identifier pkt.refid transmit
+ Reference Timestamp pkt.reftime transmit
+ Originate Timestamp pkt.org transmit
+ Receive Timestamp pkt.rec transmit
+ Transmit Timestamp pkt.xmt transmit
+
+ Table 3.3. Packet Variables
+
+ Parameters Name Value
+ -------------------------------------------------------
+ NTP Version NTP.VERSION 1
+ NTP Port NTP.PORT 123
+ Minimum Polling Interval NTP.MINPOLL 6 (64 sec)
+ Maximum Polling Interval NTP.MAXPOLL 10 (1024
+ sec)
+ Maximum Dispersion NTP.MAXDISP 65535 ms
+ Reachability Register Size PEER.WINDOW 8
+ Shift Register Size PEER.SHIFT 4/8
+ Dispersion Threshold PEER.THRESHOLD 500 ms
+ Filter Weight PEER.FILTER .5
+ Select Weight PEER.SELECT .75
+
+ Table 3.4. Parameters
+
+ Following is a description of the various variables used in the
+ protocol. Additional details on formats and use are presented in
+ later sections and appendices.
+
+3.2.1. Common Variables
+
+ The following variables are common to the system, peer and packet
+ classes.
+
+ Peer Address (peer.srcadr, pkt.srcadr) Peer Port (peer.srcport,
+ pkt.srcport)
+
+
+
+Mills [Page 15]
+
+RFC 1059 Network Time Protocol July 1988
+
+
+ These are the 32-bit Internet address and 16-bit port number of
+ the remote host.
+
+ Local Address (peer.dstadr, pkt.dstadr) Local Port (peer.dstport,
+ pkt.dstport)
+
+ These are the 32-bit Internet address and 16-bit port number of
+ the local host. They are included among the state variables to
+ support multi-homing.
+
+ Leap Indicator (sys.leap, peer.leap, pkt.leap)
+
+ This is a two-bit code warning of an impending leap second to be
+ inserted in the NTP time scale. The bits are set before 23:59 on
+ the day of insertion and reset after 00:01 on the following day.
+ This causes the number of seconds (rollover interval) in the day
+ of insertion to be increased or decreased by one. In the case of
+ primary servers the bits are set by operator intervention, while
+ in the case of secondary servers the bits are set by the protocol.
+ The two bits are coded as follows:
+
+ 00 no warning (day has 86400 seconds)
+ 01 +1 second (day has 86401 seconds)
+ seconds)
+ 10 -1 second (day has 86399 seconds)
+ seconds)
+ 11 alarm condition (clock not synchronized)
+
+ In all except the alarm condition (11) NTP itself does nothing
+ with these bits, except pass them on to the time-conversion
+ routines that are not part of NTP. The alarm condition occurs
+ when, for whatever reason, the logical clock is not synchronized,
+ such as when first coming up or after an extended period when no
+ outside reference source is available.
+
+ Stratum (sys.stratum, peer.stratum, pkt.stratum)
+
+ This is an integer indicating the stratum of the logical clock. A
+ value of zero is interpreted as unspecified, one as a primary
+ clock (synchronized by outside means) and remaining values as the
+ stratum level (synchronized by NTP). For comparison purposes a
+ value of zero is considered greater than any other value.
+
+ Peer Poll Interval (peer.ppoll, pkt.poll)
+
+ This is a signed integer used only in symmetric mode and
+ indicating the minimum interval between messages sent to the peer,
+ in seconds as a power of two. For instance, a value of six
+
+
+
+Mills [Page 16]
+
+RFC 1059 Network Time Protocol July 1988
+
+
+ indicates a minimum interval of 64 seconds. The value of this
+ variable must not be less than NTP.MINPOLL and must not be greater
+ than NTP.MAXPOLL.
+
+ Precision (sys.precision, peer.precision, pkt.precision)
+
+ This is a signed integer indicating the precision of the logical
+ clock, in seconds to the nearest power of two. For instance, a
+ 60-Hz line-frequency clock would be assigned the value -6, while a
+ 1000-Hz crystal-derived clock would be assigned the value -10.
+
+ Synchronizing Distance (sys.distance, peer.distance, pkt.distance)
+
+ This is a fixed-point number indicating the estimated roundtrip
+ delay to the primary clock, in seconds.
+
+
+ Estimated Drift Rate (sys.drift, peer.drift, pkt.drift)
+
+ This is a fixed-point number indicating the estimated drift rate
+ of the local clock, in dimensionless units.
+
+ Reference Clock Identifier (sys.refid, peer.refid, pkt.refid)
+
+ This is a code identifying the particular reference clock or
+ server. The interpretation of the value depends on the stratum.
+ For stratum values of zero (unspecified) or one (primary clock),
+ the value is an ASCII string identifying the reason or clock,
+ respectively. For stratum values greater than one (synchronized
+ by NTP), the value is the 32-bit Internet address of the reference
+ server.
+
+ Reference Timestamp (sys.reftime, peer.reftime, pkt.reftime)
+
+ This is the local time, in timestamp format, when the logical
+ clock was last updated. If the logical clock has never been
+ synchronized, the value is zero.
+
+3.2.2. System Variables
+
+ The following variables are used by the operating system in order to
+ synchronize the logical clock.
+
+ Logical Clock (sys.clock)
+
+ This is the current local time, in timestamp format. Local time
+ is derived from the hardware clock of the particular machine and
+ increments at intervals depending on the design used. An
+
+
+
+Mills [Page 17]
+
+RFC 1059 Network Time Protocol July 1988
+
+
+ appropriate design, including slewing and drift-compensation
+ mechanisms, is described in Section 5.
+
+ Clock Source (sys.peer)
+
+ This is a selector identifying the current clock source. Usually
+ this will be a pointer to a structure containing the peer
+ variables.
+
+3.2.3. Peer Variables
+
+ Following is a list of state variables used by the peer management
+ and measurement functions. There is one set of these variables for
+ every peer operating in client mode or symmetric mode.
+
+ Peer State (peer.state)
+
+ This is a bit-encoded quantity used for various control functions.
+
+ Host Poll Interval (peer.hpoll)
+
+ This is a signed integer used only in symmetric mode and
+ indicating the minimum interval between messages expected from the
+ peer, in seconds as a power of two. For instance, a value of six
+ indicates a minimum interval of 64 seconds. The value of this
+ variable must not be less than NTP.MINPOLL and must not be greater
+ than NTP.MAXPOLL.
+
+ Reachability Register (peer.reach)
+
+ This is a code used to determine the reachability status of the
+ peer. It is used as a shift register, with bits entering from the
+ least significant (rightmost) end. The size of this register is
+ specified as PEER.SHIFT bits.
+
+ Peer Timer (peer.timer)
+
+ This is an integer counter used to control the interval between
+ transmitted NTP messages.
+
+ Timer Threshold (peer.threshold)
+
+ This is the timer value which, when reached, causes the timeout
+ procedure to be executed.
+
+ Originate Timestamp (peer.org, pkt.org)
+
+ This is the local time, in timestamp format, at the peer when its
+
+
+
+Mills [Page 18]
+
+RFC 1059 Network Time Protocol July 1988
+
+
+ latest NTP message was sent. If the peer becomes unreachable the
+ value is set to zero.
+
+ Receive Timestamp (peer.rec, pkt.rec)
+
+ This is the local time, in timestamp format, when the latest NTP
+ message from the peer arrived. If the peer becomes unreachable
+ the value is set to zero.
+
+3.2.4. Packet Variables
+
+ Following is a list of variables used in NTP messages in addition to
+ the common variables above.
+
+ Version Number (pkt.version)
+
+ This is an integer indicating the version number of the sender.
+ NTP messages will always be sent with the current version number
+ NTP.VERSION and will always be accepted if the version number
+ matches NTP.VERSION. Exceptions may be advised on a case-by-case
+ basis at times when the version number is changed.
+
+ Transmit Timestamp (pkt.xmt)
+
+ This is the local time, in timestamp format, at which the NTP
+ message departed the sender.
+
+3.2.5. Clock Filter Variables
+
+ When the filter and selection algorithms suggested in Section 4 are
+ used, the following state variables are defined. There is one set of
+ these variables for every peer operating in client mode or symmetric
+ mode.
+
+ Filter Register (peer.filter)
+
+ This is a shift register of PEER.WINDOW bits, where each stage is
+ a tuple consisting of the measured delay concatenated with the
+ measured offset associated with a single observation.
+ Delay/offset observations enter from the least significant
+ (rightmost) right and are shifted towards the most significant
+ (leftmost) end and eventually discarded as new observations
+ arrive. The register is cleared to zeros when (a) the peer
+ becomes unreachable or (b) the logical clock has just been reset
+ so as to cause a significant discontinuity in local time.
+
+
+
+
+
+
+Mills [Page 19]
+
+RFC 1059 Network Time Protocol July 1988
+
+
+ Delay Estimate (peer.delay)
+
+ This is a signed, fixed-point number indicating the latest delay
+ estimate output from the filter, in seconds. While the number is
+ signed, only those values greater than zero represent valid delay
+ estimates.
+
+ Offset Estimate (peer.offset)
+
+ This is a signed, fixed-point number indicating the latest offset
+ estimate output from the filter, in seconds.
+
+ Dispersion Estimate (peer.dispersion)
+
+ This is a fixed-point number indicating the latest dispersion
+ estimate output from the filter, in scrambled units.
+
+3.2.6. Parameters
+
+ Following is a list of parameters assumed for all implementations
+ operating in the Internet system. It is necessary to agree on the
+ values for these parameters in order to avoid unnecessary network
+ overheads and stable peer associations.
+
+ Version Number (NTP.VERSION)
+
+ This is the NTP version number, currently one (1).
+
+ NTP Port (NTP.PORT)
+
+ This is the port number (123) assigned by the Internet Number Czar
+ to NTP.
+
+ Minimum Polling Interval (NTP.MINPOLL)
+
+ This is the minimum polling interval allowed by any peer of the
+ Internet system, currently set to 6 (64 seconds).
+
+ Maximum Polling Interval (NTP.MAXPOLL)
+
+ This is the maximum polling interval allowed by any peer of the
+ Internet system, currently set to 10 (1024 seconds).
+
+ Maximum Dispersion (NTP.MAXDISP)
+
+ This is the maximum dispersion assumed by the filter algorithms,
+ currently set to 65535 milliseconds.
+
+
+
+
+Mills [Page 20]
+
+RFC 1059 Network Time Protocol July 1988
+
+
+ Reachability Register Size (PEER.WINDOW)
+
+ This is the size of the Reachability Register (peer.reach),
+ currently set to eight (8) bits.
+
+ Shift Register Size (PEER.SHIFT)
+
+ When the filter and selection algorithms suggested in Section 4
+ are used, this is the size of the Clock Filter (peer.filter) shift
+ register, in bits. For crystal-stabilized oscillators a value of
+ eight (8) is suggested, while for mains-frequency oscillators a
+ value of four (4) is suggested. Additional considerations are
+ given in Section 5.
+
+ Dispersion Threshold (PEER.THRESHOLD)
+
+ When the filter and selection algorithms suggested in Section 4
+ are used, this is the threshold used to discard noisy data. While
+ a value of 500 milliseconds is suggested, the value may be changed
+ to suit local conditions on particular peer paths.
+
+ Filter Weight (PEER.FILTER)
+
+ When the filter algorithm suggested in Section 4 is used, this is
+ the filter weight used to discard noisy data. While a value of
+ 0.5 is suggested, the value may be changed to suit local
+ conditions on particular peer paths.
+
+ Select Weight (PEER.SELECT)
+
+ When the selection algorithm suggested in Section 4 is used, this
+ is the select weight used to discard outlyers. data. While a
+ value of 0.75 is suggested, the value may be changed to suit local
+ conditions on particular peer paths.
+
+3.3. Modes of Operation
+
+ An NTP host can operate in three modes: client, server and
+ symmetric. The mode of operation is determined by whether the source
+ port (peer.srcport) or destination port (peer.dstport) peer variables
+ contain the assigned NTP service port number NTP.PORT (123) as shown
+ in the following table.
+
+
+
+
+
+
+
+
+
+Mills [Page 21]
+
+RFC 1059 Network Time Protocol July 1988
+
+
+ peer.srcport peer.dstport Mode
+ -------------------------------------------
+ not NTP.PORT not NTP.PORT not possible
+ not NTP.PORT NTP.PORT server
+ NTP.PORT not NTP.PORT client
+ NTP.PORT NTP.PORT symmetric
+
+ A host operating in client mode occasionally sends an NTP message to
+ a host operating in server mode. The server responds by simply
+ interchanging addresses and ports, filling in the required
+ information and returning the message to the client. Servers then
+ need retain no state information between client requests. Clients
+ are free to manage the intervals between sending NTP messages to suit
+ local conditions.
+
+ In symmetric mode the client/server distinction disappears. Each
+ host maintains a table with as many entries as active peers. Each
+ entry includes a code uniquely identifying the peer (e.g., Internet
+ address and port), together with status information and a copy of the
+ timestamps last received. A host operating in symmetric mode
+ periodically sends NTP messages to each peer including the latest
+ copy of the timestamps. The intervals between sending NTP messages
+ are managed jointly by the host and each peer using the polling
+ variables peer.ppoll and peer.hpoll.
+
+ When a pair of peers operating in symmetric mode exchange NTP
+ messages and each determines that the other is reachable, an
+ association is formed. One or both peers must be in active state;
+ that is, sending messages to the other regardless of reachability
+ status. A peer not in active state is in passive state. If a peer
+ operating in passive state discovers that the other peer is no longer
+ reachable, it ceases sending messages and reclaims the storage and
+ timer resources used by the association. A peer operating in client
+ mode is always in active state, while a peer operating in server mode
+ is always in passive state.
+
+3.4. Event Processing
+
+ The significant events of interest in NTP occur upon expiration of
+ the peer timer, one of which is dedicated to each peer operating in
+ symmetric or client modes, and upon arrival of an NTP message from
+ the various peers. An event can also occur as the result of an
+ operator command or detected system fault, such as a primary clock
+ failure. This section describes the procedures invoked when these
+ events occur.
+
+
+
+
+
+
+Mills [Page 22]
+
+RFC 1059 Network Time Protocol July 1988
+
+
+3.4.1. Timeout Procedure
+
+ The timeout procedure is called in client and symmetric modes when
+ the peer timer (peer.timer) reaches the value of the timer threshold
+ (peer.threshold) variable. First, the reachability register
+ (peer.reach) is shifted one position to the left and a zero replaces
+ the vacated bit. Then an NTP message is constructed and sent to the
+ peer. If operating in active state or in passive state and
+ peer.reach is nonzero (reachable), the peer.timer is reinitialized
+ (resumes counting from zero) and the value of peer.threshold is set
+ to:
+
+ peer.threshold <- max( min( peer.ppoll, peer.hpoll,
+ NTP.MAXPOLL), NTP.MINPOLL) .
+
+ If operating in active state and peer.reach is zero (unreachable),
+ the peer variables are updated as follows:
+
+ peer.hpoll <- NTP.MINPOLL
+ peer.disp <- NTP.MAXDISP
+ peer.filter <- 0 (cleared)
+ peer.org <- 0
+ peer.rec <- 0
+
+ Then the clock selection algorithm is called, which may result in a
+ new clock source (sys.peer). In other cases the protocol ceases
+ operation and the storage and timer resources are reclaimed for
+ subsequent use.
+
+ An NTP message is constructed as follows (see Appendices A and B for
+ formats). First, the IP and UDP packet variables are copied from the
+ peer variables (note the interchange of source and destination
+ addresses and ports):
+
+ pkt.srcadr <- peer.dstadr pkt.srcport <- peer.dstport
+ pkt.dstadr <- peer.srcadr pkt.dstport <- peer.srcport
+
+ Next, the NTP packet variables are copied (rescaled as necessary)
+ from the system and peer variables:
+
+ pkt.leap <- sys.leap pkt.distance <- sys.distance
+ pkt.version <- NTP.VERSION pkt.drift <- sys.drift
+ pkt.stratum <- sys.stratum pkt.refid <- sys.refid
+ pkt.poll <- peer.hpoll pkt.reftime <- sys.reftime
+ pkt.precision <- sys.precision
+
+ Finally, the NTP packet timestamp variables are copied, depending on
+ whether the peer is operating in symmetric mode and reachable, in
+
+
+
+Mills [Page 23]
+
+RFC 1059 Network Time Protocol July 1988
+
+
+ symmetric mode and not reachable (but active) or in client mode:
+
+ Symmetric Reachable Symmetric Active Client
+ - ------------------- ------------------- -------------------
+ pkt.org <- peer.org pkt.org <- 0 pkt.org <- sys.clock
+ pkt.rec <- peer.rec pkt.rec <- 0 pkt.rec <- sys.clock
+ pkt.xmt <- sys.clock pkt.xmt <- sys.clock pkt.xmt <- sys.clock
+
+ Note that the order of copying should be designed so that the time to
+ perform the copy operations themselves does not degrade the
+ measurement accuracy, which implies that the sys.clock values should
+ be copied last. The reason for the choice of zeros to fill the
+ pkt.org and pkt.rec packet variables in the symmetric unreachable
+ case is to avoid the use of old data after a possibly extensive
+ period of unreachability. The reason for the choice of sys.clock to
+ fill these variables in the client case is that, if for some reason
+ the NTP message is returned by the recipient unaltered, as when
+ testing with an Internet-echo server, this convention still allows at
+ least the roundtrip time to be accurately determined without special
+ handling.
+
+3.4.2. Receive Procedure
+
+ The receive procedure is executed upon arrival of an NTP message. If
+ the version number of the message (pkt.version) does not match the
+ current version number (NTP.VERSION), the message is discarded;
+ however, exceptions may be advised on a case-by-case basis at times
+ when the version number is changed.
+
+ If the clock of the sender is unsynchronized (pkt.leap = 11), or the
+ receiver is in server mode or the receiver is in symmetric mode and
+ the stratum of the sender is greater than the stratum of the receiver
+ (pkt.stratum > sys.stratum), the message is simply returned to the
+ sender along with the timestamps. In this case the addresses and
+ ports are interchanged in the IP and UDP headers:
+
+ pkt.srcadr <-> pkt.dstadr pkt.srcport <-> pkt.dstport
+
+ The following packet variables are updated from the system variables:
+
+ pkt.leap <- sys.leap pkt.distance <- sys.distance
+ pkt.version <- NTP.VERSION pkt.drift <- sys.drift
+ pkt.stratum <- sys.stratum pkt.refid <- sys.refid
+ pkt.precision <- sys.precision pkt.reftime <- sys.reftime
+
+ Note that the pkt.poll packet variable is unchanged. The timestamps
+ are updated in the order shown:
+
+
+
+
+Mills [Page 24]
+
+RFC 1059 Network Time Protocol July 1988
+
+
+ pkt.org <- pkt.xmt
+ pkt.rec <- sys.clock
+ pkt.xmt <- sys.clock
+
+ Finally, the message is forwarded to the sender and the server
+ receive procedure terminated at this point.
+
+ If the above is not the case, the source and destination Internet
+ addresses and ports in the IP and UDP headers are matched to the
+ correct peer. If there is a match, processing continues at the next
+ step below. If there is no match and symmetric mode is not indicated
+ (either pkt.srcport or pkt.dstport not equal to NTP.PORT), the
+ message must be a reply to a previously sent message from a client
+ which is no longer in operation. In this case the message is dropped
+ and the receive procedure terminated at this point.
+
+ If there is no match and symmetric mode is indicated, (both
+ pkt.srcport and pkt.dstport equal to NTP.PORT), an implementation-
+ specific instantiation procedure is called to create and initialize a
+ new set of peer variables and start the peer timer. The following
+ peer variables are set from the IP and UDP headers:
+
+ peer.srcadr <- pkt.srcadr peer.srcport <- pkt.srcport
+ peer.dstadr <- pkt.dstadr peer.dstport <- pkt.dstport
+
+
+ The following peer variables are initialized:
+
+ peer.state <- symmetric (passive)
+ peer.timer <- 0 (enabled)
+ peer.hpoll <- NTP.MINPOLL
+ peer.disp <- NTP.MAXDISP
+
+ The remaining peer variables are undefined and set to zero.
+
+ Assuming that instantiation is complete and that match occurs, the
+ least significant bit of the reachability register (peer.reach) is
+ set, indicating the peer is now reachable. The following peer
+ variables are copied (rescaled as necessary) from the NTP packet
+ variables and system variables:
+
+
+
+
+
+
+
+
+
+
+
+Mills [Page 25]
+
+RFC 1059 Network Time Protocol July 1988
+
+
+ peer.leap <- pkt.leap peer.distance <- pkt.distance
+ peer.stratum <- pkt.stratum peer.drift <- pkt.drift
+ peer.ppoll <- pkt.poll peer.refid <- pkt.refid
+ peer.precision <- pkt.precision peer.reftime <- pkt.reftime
+ peer.org <- pkt.xmt peer.rec <- sys.clock
+ peer.threshold <- max( min( peer.ppoll, peer.hpoll,
+ NTP.MAXPOLL), NTP.MINPOLL)
+
+ If either or both the pkt.org or pkt.rec packet variables are zero,
+ the sender did not have reliable values for them, so the receive
+ procedure is terminated at this point. If both of these variables
+ are nonzero, the roundtrip delay and clock offset relative to the
+ peer are calculated as follows. Number the times of sending and
+ receiving NTP messages as shown in Figure 3.1 and let i be an even
+ integer. Then t(i-3), t(i-2) and t(i-1) and t(i) are the contents of
+ the pkt.org, pkt.rec, pkt.xmt and peer.rec variables respectively.
+
+ | |
+ t(1) |------------------->| t(2)
+ | |
+ t(4) |<-------------------| t(3)
+ | |
+ t(5) |------------------->| t(6)
+ | |
+ t(8) |<-------------------| t(7)
+ | |
+ ...
+ Figure 3.1. Calculating Delay and Offset
+
+ The roundtrip delay d and clock offset c of the receiving peer
+ relative to the sending peer is:
+
+ d = (t(i) - t(i-3)) - (t(i-1) - t(i-2))
+ c = [(t(i-2) - t(i-3)) + (t(i-1) - t(i))]/2 .
+
+ This method amounts to a continuously sampled, returnable-time
+ system, which is used in some digital telephone networks. Among the
+ advantages are that the order and timing of the messages is
+ unimportant and that reliable delivery is not required. Obviously,
+ the accuracies achievable depend upon the statistical properties of
+ the outbound and inbound net paths. Further analysis and
+ experimental results bearing on this issue can be found in
+ Appendix D.
+
+ The c and d values are then input to the clock filter algorithm to
+ produce the delay estimate (peer.delay) and offset estimate
+ (peer.offset) for the peer involved. If d becomes nonpositive due to
+ low delays, long polling intervals and high drift rates, it should be
+
+
+
+Mills [Page 26]
+
+RFC 1059 Network Time Protocol July 1988
+
+
+ considered invalid; however, even under these conditions it may
+ still be useful to update the local clock and reduce the drift rate
+ to the point that d becomes positive again. Specification of the
+ clock filter algorithm is not an integral part of the NTP
+ specification; however, one found to work well in the Internet
+ environment is described in Section 4.
+
+ When a primary clock is connected to the host, it is convenient to
+ incorporate its information into the data base as if the clock were
+ represented by an ordinary peer. The clocks are usually polled once
+ or twice a minute and the returned timecheck used to produce a new
+ update for the logical clock. The update procedure is then called
+ with the following assumed peer variables:
+
+ peer.offset <- timecheck - sys.clock
+ peer.delay <- as determined
+ peer.dispersion <- 0
+ peer.leap <- selected by operator, ordinarily 00
+ peer.stratum <- 0
+ peer.distance <- 0
+ peer.refid <- ASCII identifier
+ peer.reftime <- timecheck
+
+ In this case the peer.delay and peer.refid can be constants
+ reflecting the type and accuracy of the clock. By convention, the
+ value for peer.delay is ten times the expected mean error of the
+ clock, for instance, 10 milliseconds for a WWVB clock and 1000
+ milliseconds for a less accurate WWV clock, but with a floor of 100
+ milliseconds. Other peer variables such as the peer timer and
+ reachability register can be used to control the polling interval and
+ to confirm the clock is operating correctly. In this way the clock
+ filter and selection algorithms operate in the usual way and can be
+ used to mitigate the clock itself, should it appear to be operating
+ correctly, yet deliver bogus time.
+
+3.4.3. Update Procedure
+
+ The update procedure is called when a new delay/offset estimate is
+ available. First, the clock selection algorithm determines the best
+ peer on the basis of estimated accuracy and reliability, which may
+ result in a new clock source (sys.peer). If sys.peer points to the
+ peer data structure with the just-updated estimates, the state
+ variables of that peer are used to update the system state variables
+
+
+
+
+
+
+
+
+Mills [Page 27]
+
+RFC 1059 Network Time Protocol July 1988
+
+
+ as follows:
+
+ sys.leap <- peer.leap
+ sys.stratum <- peer.stratum + 1
+ sys.distance <- peer.distance + peer.delay
+ sys.refid <- peer.srcadr
+ sys.reftime <- peer.rec
+
+ Finally, the logical clock procedure is called with peer.offset as
+ argument to update the logical clock (sys.clock) and recompute the
+ estimated drift rate (sys.drift). It may happen that the logical
+ clock may be reset, rather than slewed to its final value. In this
+ case the peer variables of all reachable peers are are updated as
+ follows:
+
+ peer.hpoll <- NTP.MINPOLL
+ peer.disp <- NTP.MAXDISP
+ peer.filter <- 0 (cleared)
+ peer.org <- 0
+ peer.rec <- 0
+
+ and the clock selection algorithm is called again, which results in a
+ null clock source (sys.peer = 0). A new selection will occur when
+ the filters fill up again and the dispersion settles down.
+
+ Specification of the clock selection algorithm and logical clock
+ procedure is not an integral part of the NTP specification. A clock
+ selection algorithm found to work well in the Internet environment is
+ described in Section 4, while a logical clock procedure is described
+ in Section 5. The clock selection algorithm described in Section 4
+ usually picks the server at the highest stratum and minimum delay
+ among all those available, unless that server appears to be a
+ falseticker. The result is that the algorithms all work to build a
+ minimum-weight spanning tree relative to the primary servers and thus
+ a hierarchical master-slave system similar to those used by some
+ digital telephone networks.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Mills [Page 28]
+
+RFC 1059 Network Time Protocol July 1988
+
+
+3.4.4. Initialization Procedures
+
+ Upon reboot the NTP host initializes all system variables as follows:
+
+ sys.clock <- best available estimate
+ sys.leap <- 11 (unsynchronized)
+ sys.stratum <- 0 (undefined)
+ sys.precision <- as required
+ sys.distance <- 0 (undefined)
+ sys.drift <- as determined
+ sys.refid <- 0 (undefined)
+ sys.reftime <- 0 (undefined)
+
+ The logical clock sys.clock is presumably undefined at reboot;
+ however, in some designs such as the Fuzzball an estimate is
+ available from the reboot environment. The sys.precision variable is
+ determined by the intrinsic architecture of the local hardware clock.
+ The sys.drift variable is determined as a side effect of subsequent
+ logical clock updates, from whatever source.
+
+ Next, an implementation-specific instantiation procedure is called
+ repeatedly to establish the set of client peers or symmetric (active)
+ peers which will actively probe other servers during regular
+ operation. The mode and addresses of these peers is determined using
+ information read during the reboot procedure or as the result of
+ operator commands.
+
+4. Filtering Algorithms
+
+ A very important factor affecting the accuracy and reliability of
+ time distribution is the complex of algorithms used to deglitch and
+ smooth the offset estimates and to cast out outlyers due to failure
+ of the primary reference sources or propagation media. The
+ algorithms suggested in this section were developed and refined over
+ several years of operation in the Internet under widely varying net
+ configurations and utilizations. While these algorithms are believed
+ the best available at the present time, they are not an integral part
+ of the NTP specification.
+
+ There are two algorithms described in the following, the clock filter
+ algorithm, which is used to select the best offset samples from a
+ given clock, and the clock selection algorithm, which is used to
+ select the best clock among a hierarchical set of clocks.
+
+4.1. Clock Filter Algorithm
+
+ The clock filter algorithm is executed upon arrival of each NTP
+ message that results in new delay/offset sample pairs. New sample
+
+
+
+Mills [Page 29]
+
+RFC 1059 Network Time Protocol July 1988
+
+
+ pairs are shifted into the filter register (peer.filter) from the
+ left end, causing first zeros then old sample pairs to shift off the
+ right end. Then those sample pairs in peer.filter with nonzero delay
+ are inserted on a temporary list and sorted in order of increasing
+ delay. The delay estimate (peer.delay) and offset estimate
+ (peer.offset) are chosen as the delay/offset values corresponding to
+ the minimum-delay sample. In case of ties an arbitrary choice is
+ made.
+
+ The dispersion estimate (peer.dispersion) is then computed as the
+ weighted sum of the offsets in the list. Assume the list has
+ PEER.SHIFT entries, the first m of which contain valid samples in
+ order of increasing delay. If X(i) (0 =< i < PEER.SHIFT) is the
+ offset of the ith sample, then,
+
+ d(i) = |X(i) - X(0)| if i < m and |X(i) - X(0)| < 2^15
+ d(i) = 2^15 - 1 otherwise
+
+ peer.dispersion = Sum(d(i)*w^i) ,
+ (0 =< i < PEER.SHIFT)
+
+ where w < 1 is a weighting factor experimentally adjusted to match
+ typical offset distributions. The peer.dispersion variable is
+ intended for use as a quality indicator, with increasing values
+ associated with decreasing quality. The intent is that samples with
+ a peer.dispersion exceeding a configuration threshold will not be
+ used in subsequent processing. The prototype implementation uses a
+ weighting factor w = 0.5, also called PEER.FILTER, and a threshold
+ PEER.THRESHOLD of 500 ms, which insures that all stages of
+ peer.filter are filled and contain offsets within a few seconds of
+ each other.
+
+4.2. Clock Selection Algorithm
+
+ The clock selection algorithm uses the values of peer.delay,
+ peer.offset and peer.dispersion calculated by the clock filter
+ algorithm and is called when these values change or when the
+ reachability status changes. It constructs a list of candidate
+ estimates according to a set of criteria designed to maximize
+ accuracy and reliability, then sorts the list in order of estimated
+ precision. Finally, it repeatedly casts out outlyers on the basis of
+ dispersion until only a single candidate is left.
+
+ The selection process operates on each peer in turn and inspects the
+ various data captured from the last received NTP message header, as
+ well as the latest clock filter estimates. It selects only those
+ peers for which the following criteria are satisfied:
+
+
+
+
+Mills [Page 30]
+
+RFC 1059 Network Time Protocol July 1988
+
+
+ 1. The peer must be reachable and operating in client or symmetric
+ modes.
+
+ 2. The peer logical clock must be synchronized, as indicated by the
+ Leap Indicator bits being other than 11.
+
+ 3. If the peer is operating at stratum two or greater, it must not
+ be synchronized to this host, which means its reference clock
+ identifier (peer.refid) must not match the Internet address of
+ this host. This is analogous to the split-horizon rule used in
+ some variants of the Bellman-Ford routing algorithm.
+
+ 4. The sum of the peer synchronizing distance (peer.distance) plus
+ peer.delay must be less than 2^13 (8192) milliseconds. Also, the
+ peer stratum (peer.stratum) must be less than eight and
+ peer.dispersion must be less than a configured threshold
+ PEER.THRESHOLD (currently 500 ms). These range checks were
+ established through experience with the prototype implementation,
+ but may be changed in future.
+
+ For each peer which satisfies the above criteria, a sixteen-bit
+ keyword is constructed, with the low-order thirteen bits the sum of
+ peer.distance plus peer.delay and the high-order three bits the
+ peer.stratum reduced by one and truncated to three bits (thus mapping
+ zero to seven). The keyword together with a pointer to the peer data
+ structure are inserted according to increasing keyword values and
+ truncated at a maximum of eight entries. The resulting list
+ represents the order in which peers should be chosen according to the
+ estimated precision of measurement. If no keywords are found, the
+ clock source variable (sys.peer) is set to zero and the algorithm
+ terminates.
+
+ The final procedure is designed to detect falsetickers or other
+ conditions which might result in gross errors. Let m be the number
+ of samples remaining in the list. For each i (0 =< i < m) compute
+ the dispersion d(i) of the list relative to i:
+
+ d(i) = Sum(|X(j) - X(i)|*w^j) ,
+ (0 =< j < m)
+
+ where w < 1 is a weighting factor experimentally adjusted for the
+ desired characteristic (see below). Then cast out the entry with
+ maximum d(i) or, in case of ties, the maximum i, and repeat the
+ procedure. When only a single entry remains in the list, sys.peer is
+ set as its peer data structure pointer and the peer.hpoll variable in
+ that structure is set to NTP.MINPOLL as required by the logical clock
+ mechanism described in Section 5.
+
+
+
+
+Mills [Page 31]
+
+RFC 1059 Network Time Protocol July 1988
+
+
+ This procedure is designed to favor those peers near the head of the
+ list, which are at the highest stratum and lowest delay and
+ presumably can provide the most precise time. With proper selection
+ of weighting factor w, also called PEER.SELECT, entries will be
+ trimmed from the tail of the list, unless a few outlyers disagree
+ significantly with respect to the remaining entries, in which case
+ the outlyers are discarded first.
+
+ In order to see how this procedure works to select outlyers, consider
+ the case of three entries and assume that one or more of the offsets
+ are clustered about zero and others are clustered about one. For w =
+ 0.75 as used in the prototype implementations and multiplying by 16
+ for convenience, the first entry has weight w^0 = 16, the second w^1
+ = 12 and the third w^2 = 9. Table X shows for all combinations of
+ peer offsets the calculated dispersion about each of the three
+ entries, along with the results of the procedure.
+
+ Peer 0 1 2 Dispersion Cast Result
+ Weight 16 12 9 0 1 2 Out
+ ------------------------------------------------------
+ 0 0 0 0 0 0 2 0 0
+ 0 0 1 9 9 28 2 0 0
+ 0 1 0 12 25 12 1 0 0
+ 0 1 1 21 16 16 0 1 1
+ 1 0 0 21 16 16 0 0 0
+ 1 0 1 12 25 12 1 1 1
+ 1 1 0 9 9 28 2 1 1
+ 1 1 1 0 0 0 2 1 1
+
+ Table 4.1. Outlyer Selection Procedure
+
+ In the four cases where peer 0 and peer 1 disagree, the outcome is
+ determined by peer 2. Similar outcomes occur in the case of four
+ peers. While these outcomes depend on judicious choice of w, the
+ behavior of the algorithm is substantially the same for values of w
+ between 0.5 and 1.0.
+
+4.3. Variable-Rate Polling
+
+ As NTP service matures in the Internet, the resulting network traffic
+ can become burdensome, especially in the primary service net. In
+ this expectation, it is useful to explore variable-rate polling, in
+ which the intervals between NTP messages can be adjusted to fit
+ prevailing network conditions of delay dispersion and loss rate. The
+ prototype NTP implementation uses this technique to reduce the
+ network overheads to one-sixteenth the maximum rate, depending on
+ observed dispersion and loss.
+
+
+
+
+Mills [Page 32]
+
+RFC 1059 Network Time Protocol July 1988
+
+
+ The prototype implementation adjusts the polling interval peer.hpoll
+ in response to the reachability register (peer.reach) variable along
+ with the dispersion (peer.dispersion) variable. So long as the clock
+ source variable (sys.peer) does not point to the peer data structure,
+ peer.reach is nonzero (reachable) and peer.dispersion is less than
+ the PEER.THRESHOLD parameter, the value of peer.hpoll is increased by
+ one for each call on the update procedure, subject to a maximum of
+ NTP.MAXPOLL. Following the timeout procedure, if peer.reach
+ indicates messages have not been received for the preceding two
+ polling intervals (low-order two bits are zero), the value of
+ peer.hpoll is decreased by one, subject to a minimum of NTP.MINPOLL.
+ If peer.reach becomes zero (unreachable), the value of peer.hpoll is
+ set to NTP.MINPOLL.
+
+ The result of the above mechanism is that the polling intervals for
+ peers not selected for synchronization and in symmetric mode creep
+ upwards once the filter register (peer.filter) has filled and the
+ peer.dispersion has settled down, but decrease again in case
+ peer.dispersion increases or the loss rate increases or the peer
+ becomes unreachable.
+
+5. Logical Clocks
+
+ In order to implement a logical clock, the host must be equipped with
+ a hardware clock consisting of an oscillator and interface and
+ capable of the required precision and stability. The logical clock
+ is adjusted by means of periodic offset corrections computed by NTP
+ or some other time-synchronization protocol such as Hellospeak [15]
+ or the Unix 4.3bsd TSP [20]. Following is a description of the
+ Fuzzball logical clock, which includes provisions for precise time
+ and frequency adjustment and can maintain time to within a
+ millisecond and frequency to within a day per millisecond.
+
+ The logical clock is implemented using a 48-bit Clock Register, which
+ increments at 1000-Hz (at the decimal point), a 32-bit Clock-Adjust
+ Register, which is used to slew the Clock Register in response to
+ offset corrections, and a Drift-Compensation Register, which is used
+ to trim the oscillator frequency. In some interface designs such as
+ the DEC KWV11, an additional hardware register, the Counter Register,
+ is used as an auxiliary counter. The configuration and decimal point
+ of these registers are shown in Figure 5.1.
+
+
+
+
+
+
+
+
+
+
+Mills [Page 33]
+
+RFC 1059 Network Time Protocol July 1988
+
+
+ Clock Register
+
+ 0 16 32
+ +---------------+---------------+---------------+
+ | | | |
+ +---------------+---------------+---------------+
+ A
+ decimal point
+
+ Clock-Adjust Register
+
+ 0 16
+ +---------------+---------------+
+ | | |
+ +---------------+---------------+
+ A
+ decimal point
+
+ Drift-Compensation Register
+
+ 0 16
+ +---------------+
+ | |
+ +---------------+
+ A
+ decimal point
+
+ Counter Register
+
+ 0 16
+ +---------------+
+ | |
+ +---------------+
+ A
+ decimal point
+
+ Figure 5.1. Clock Registers
+
+ The Clock Register, Clock-Adjust Register and Drift-Compensation
+ Register are implemented in memory. In typical clock interface
+ designs such as the DEC KWV11, the Counter Register is implemented as
+ a buffered counter driven by a crystal oscillator. A counter
+ overflow is signalled by an interrupt, which results in an increment
+ of the Clock Register at bit 15 and the propagation of carries as
+ required. The time of day is determined by reading the Counter
+ Register, which does not disturb the counting process, and adding its
+ value to that of the Clock Register with decimal points aligned.
+
+
+
+
+Mills [Page 34]
+
+RFC 1059 Network Time Protocol July 1988
+
+
+ In other interface designs such as the LSI-11 event-line mechanism,
+ each tick of the clock is signalled by an interrupt at intervals of
+ 16-2/3 or 20 ms, depending on interface and mains frequency. When
+ this occurs the appropriate increment in milliseconds, expressed to
+ 32 bits in precision, is added to the Clock Register with decimal
+ points aligned.
+
+5.1. Uniform Phase Adjustments
+
+ Left uncorrected, the logical clock runs at the rate of its intrinsic
+ oscillator. A correction is introduced as a signed 32-bit integer in
+ milliseconds, which is added to the Drift-Compensation Register and
+ also replaces bits 0-15 of the Clock-Adjust Register, with bits 16-31
+ set to zero. At adjustment intervals of CLOCK.ADJ a correction
+ consisting of two components is computed. The first (phase)
+ component consists of the Clock-Adjust Register shifted right
+ CLOCK.PHASE bits, which is then subtracted from the Clock-Adjust
+ Register. The second (frequency) component consists of the Drift-
+ Compensation Register shifted right CLOCK.FREQ bits. The sum of the
+ phase and frequency components is the correction, which is then added
+ to the Clock Register. Operation continues in this way until a new
+ correction is introduced.
+
+ Care is required in the implementation to insure monotonicity of the
+ Clock Register and to preserve the highest precision while minimizing
+ the propagation of roundoff errors. This can be done by buffering
+ the corrections and adding them to the increment at the time the
+ Clock Register is next updated. Monotonicity is insured with the
+ parameters shown in Table 5.1, as long as the increment is at least 2
+ ms. This table shows the above parameters and others discussed below
+ for both a crystal-stabilized oscillator and a mains-frequency
+ oscillator.
+
+ Parameter Name Crystal Mains
+ -------------------------------------------------------------------
+ Update Interval CLOCK.ADJ 4 sec 1 sec
+ Phase Shift CLOCK.PHASE -8 -9
+ Frequency Shift CLOCK.FREQ -16 -16
+ Maximum Aperture CLOCK.MAX +-128 ms +-256 ms
+ Shift Register Size PEER.SHIFT 8 4
+ Host Poll Interval peer.hpoll NTP.MINPOLL NTP.MINPOLL
+ (64 sec) (64 sec)
+
+ Table 5.1. Clock Parameters
+
+ The above design constitutes a second-order phase-lock loop which
+ adjusts the logical clock phase and frequency to compensate for the
+ intrinsic oscillator jitter, wander and drift. Simulation of a loop
+
+
+
+Mills [Page 35]
+
+RFC 1059 Network Time Protocol July 1988
+
+
+ with parameters chosen from Table 5.1 for a crystal-stabilized
+ oscillator and the clock filter described in Section 4 results in the
+ following transient response: For a phase correction of 100 ms the
+ loop reaches zero error in 34 minutes, overshoots 7 ms in 76 minutes
+ and settles to less than 1 ms in about four hours. The maximum
+ frequency error is about 6 ppm at 40 minutes and returns to less than
+ 1 ppm in about eight hours. For a frequency correction of 10 ppm the
+ loop settles to within 1 ppm in about nine hours and to within 0.1
+ ppm in about a day. These characteristics are appropriate for
+ typical computing equipment using board-mounted crystals without oven
+ temperature control.
+
+ In those cases where mains-frequency oscillators must be used, the
+ loop parameters must be adapted for the relatively high jitter and
+ wander characteristics of the national power grid, in which diurnal
+ peak-to-peak phase excursions can exceed four seconds. Simulation of
+ a loop with parameters chosen from Table 5.1 for a mains-frequency
+ oscillator and the clock filter described in Section 4 results in a
+ transient response similar to the crystal-stabilized case, but with
+ time constants only one-fourth those in that case. When presented
+ with actual phase-offset data for typical Summer days when the jitter
+ and wander are the largest, the loop errors are in the order of a few
+ tens of milliseconds, but not greater than 150 ms.
+
+ The above simulations assume the clock filter algorithm operates to
+ select the oldest sample in the shift register at each step; that
+ is, the filter operates as a delay line with delay equal to the
+ polling interval times the number of stages. This is a worst-case
+ scenario, since the larger the overall delay the harder it is to
+ maintain low loop errors together with good transient response. The
+ parameters in Table 5.1 were experimentally determined with this
+ scenario and the constraint that the polling interval could not be
+ reduced below 64 seconds. With these parameters it is not possible
+ to increase the polling interval above 64 seconds without significant
+ increase in loop error or degradation of transient response. Thus,
+ when a clock is selected according to the algorithms of Section 4,
+ the polling interval peer.hpoll is always set at NTP.MINPOLL.
+
+5.2. Nonuniform Phase Adjustments
+
+ When the magnitude of a correction exceeds a maximum aperture
+ CLOCK.MAX, the possibility exists that the clock is so far out of
+ synchronization with the reference source that the best action is an
+ immediate and wholesale replacement of Clock Register contents,
+ rather than a graduated slewing as described above. In practice the
+ necessity to do this is rare and occurs when the local host or
+ reference source is rebooted, for example. This is fortunate, since
+ step changes in the clock can result in the clock apparently running
+
+
+
+Mills [Page 36]
+
+RFC 1059 Network Time Protocol July 1988
+
+
+ backward, as well as incorrect delay and offset measurements of the
+ synchronization mechanism itself.
+
+ Considerable experience with the Internet environment suggests the
+ values of CLOCK.MAX tabulated in Table 5.1 as appropriate. In
+ practice, these values are exceeded with a single time-server source
+ only under conditions of the most extreme congestion or when multiple
+ failures of nodes or links have occured. The most common case when
+ the maximum is exceeded is when the time-server source is changed and
+ the time indicated by the new and old sources exceeds the maximum due
+ to systematic errors in the primary reference source or large
+ differences in the synchronizing path delays.
+
+5.3. Maintaining Date and Time
+
+ Conversion from NTP format to the common date and time formats used
+ by application programs is simplified if the internal local-clock
+ format uses separate date and time registers. The time register is
+ designed to roll over at 24 hours, give or take a leap second as
+ determined by the Leap Indicator bits, with its overflows
+ (underflows) incrementing (decrementing) the date register. The date
+ and time registers then indicate the number of days and seconds since
+ some previous reference time, but uncorrected for leap seconds.
+
+ On the day prior to the insertion of a leap second the Leap Indicator
+ bits are set at the primary servers, presumably by manual means.
+ Subsequently, these bits show up at the local host and are passed to
+ the logical clock procedure. This causes the modulus of the time
+ register, which is the length of the current day, to be increased or
+ decreased by one second as appropriate. On the day following
+ insertion the bits are turned off at the primary servers. While it
+ is possible to turn the bits off automatically, the procedure
+ suggested here insures that all clocks have rolled over and will not
+ be reset incorrectly to the previous day as the result of possible
+ corrections near the instant of rollover.
+
+5.4. Estimating Errors
+
+ After an NTP message is received and until the next one is received,
+ the accuracy of the local clock can be expected to degrade somewhat.
+ The magnitude of this degradation depends on the error at the last
+ update time together with the drift of the local oscillator with
+ respect to time. It is possible to estimate both the error and drift
+ rate from data collected during regular operation. These data can be
+ used to determine the rate at which NTP neighbors should exchange NTP
+ messages and thus control net overheads.
+
+ NTP messages include the local-clock precision of the sender, as well
+
+
+
+Mills [Page 37]
+
+RFC 1059 Network Time Protocol July 1988
+
+
+ as the reference time, estimated drift and a quantity called the
+ synchronizing distance. The precision of the local clock, together
+ with its peer clocks, establishes the short-term jitter
+ characteristics of the offset estimates. The reference time and
+ estimated drift of the sender provide an error estimate at the time
+ the latest update was received. The synchronizing distance provides
+ an estimate of error relative to the primary reference source and is
+ used by the filtering algorithms to improve the quality and
+ reliability of the offset estimates.
+
+ Estimates of error and drift rate are not essential for the correct
+ functioning of the clock algorithms, but do improve the accuracy and
+ adjustment with respect to net overheads. The estimated error allows
+ the recipient to compute the rate at which independent samples are
+ required in order to maintain a specified estimated error. The
+ estimated drift rate allows the recipient to estimate the optimum
+ polling interval.
+
+ It is possible to compute the estimated drift rate of the local clock
+ to a high degree of precision by simply adding the n offsets received
+ during an interval T to an accumulator. If X1 and X2 are the values
+ of the accumulator at the beginning and end of T, then the estimated
+ drift rate r is:
+
+ X2 - X1 n
+ r = ------- --- .
+ n T
+
+ The intrinsic (uncorrected) drift rate of typical crystal oscillators
+ under room-temperature conditions is in the order of from a few parts
+ per million (ppm) to as much as 100 ppm, or up to a few seconds per
+ day. For most purposes the drift of a particular crystal oscillator
+ is constant to within perhaps one ppm. Assuming T can be estimated
+ to within 100 ms, for example, it would take about a day of
+ accumulation to estimate r to an uncertainty in the order of one ppm.
+
+ Some idea of the estimated error of the local clock can be derived
+ from the variance of the offsets about the mean per unit time. This
+ can be computed by adding the n offset squares received during T to
+ an accumulator. If Y1 and Y2 are the values of the accumulator at
+ the beginning and end of T, then the estimated error s is:
+
+ Y2 - Y1 (X2 - X1)^2 n
+ s = ( ------- - ----------- ) --- .
+ n n * n T
+
+ The quantities r and s have direct utility to the peer as noted
+ above. However, they also have indirect utility to the recipient of
+
+
+
+Mills [Page 38]
+
+RFC 1059 Network Time Protocol July 1988
+
+
+ an NTP message sent by that peer, since they can be used as weights
+ in such algorithms as described in [22], as well as to improve the
+ estimates during periods when offsets are not available. It is most
+ useful if the latest estimate of these quantities are available in
+ each NTP message sent; however, considerable latitude remains in the
+ details of computation and storage.
+
+ The above formulae for r and s imply equal weighting for offsets
+ received throughout the accumulation interval T. One way to do this
+ is using a software shift register implemented as a circular buffer.
+ A single pointer points to the active entry in the buffer and
+ advances around one entry as each new offset is stored. There are
+ two accumulators, one for the offset and the other for its squares.
+ When a new offset arrives, a quantity equal to the new offset minus
+ the old (active) entry is added to the first accumulator and the
+ square of this quantity is added to the second. Finally, the offset
+ is stored in the circular buffer.
+
+ The size of the circular buffer depends on the accumulation interval
+ T and the rate offsets are produced. In many reachability and
+ routing algorithms, such as GGP, EGP and local-net control
+ algorithms, peers exchange messages on the order of once or twice a
+ minute. If NTP peers exchanged messages at a rate of one per minute
+ and if T were one day, the circular buffer would have to be 1440
+ words long; however, a less costly design might aggregate the data
+ in something like half-hour segments, which would reduce the length
+ of the buffer to 48 words while not significantly affecting the
+ quality of the data.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Mills [Page 39]
+
+RFC 1059 Network Time Protocol July 1988
+
+
+6. References
+
+ 1. Lamport, L., "Time, Clocks and the Ordering of Events in a
+ Distributed System", Communications of the ACM, Vol. 21, No. 7,
+ pgs. 558-565, July 1978.
+
+ 2. "Time and Frequency Dissemination Services", NBS Special
+ Publication No. 432, US Department of Commerce, 1979.
+
+ 3. Lindsay, W., and A. Kantak, "Network Synchronization of Random
+ Signals", IEEE Trans. Comm., COM-28, No. 8, pgs. 1260-1266,
+ August 1980.
+
+ 4. Braun, W., "Short Term Frequency Effects in Networks of Coupled
+ Oscillators", IEEE Trans. Comm., COM-28, No. 8, pgs. 1269-1275,
+ August 1980.
+
+ 5. Mitra, D., "Network Synchronization: Analysis of a Hybrid of
+ Master-Slave and Mutual Synchronization", IEEE Trans. Comm.
+ COM-28, No. 8, pgs. 1245-1259, August 1980.
+
+ 6. Postel, J., "User Datagram Protocol", RFC-768, USC/Information
+ Sciences Institute, August 1980.
+
+ 7. Mills, D., "Time Synchronization in DCNET Hosts", IEN-173, COMSAT
+ Laboratories, February 1981.
+
+ 8. Mills, D., "DCNET Internet Clock Service", RFC-778, COMSAT
+ Laboratories, April 1981.
+
+ 9. Su, Z., "A Specification of the Internet Protocol (IP) Timestamp
+ Option", RFC-781, SRI International, May 1981.
+
+ 10. Defense Advanced Research Projects Agency, "Internet Protocol",
+ RFC-791, USC/Information Sciences Institute, September 1981.
+
+ 11. Defense Advanced Research Projects Agency, "Internet Control
+ Message Protocol", RFC-792, USC/Information Sciences Institute,
+ September 1981.
+
+ 12. Postel, J., "Daytime Protocol", RFC-867, USC/Information Sciences
+ Institute, May 1983.
+
+ 13. Postel, J., "Time Protocol", RFC-868, USC/Information Sciences
+ Institute, May 1983.
+
+ 14. Mills, D., "Internet Delay Experiments", RFC-889, M/A-COM
+ Linkabit, December 1983.
+
+
+
+Mills [Page 40]
+
+RFC 1059 Network Time Protocol July 1988
+
+
+ 15. Mills, D., "DCN Local-Network Protocols", RFC-891, M/A-COM
+ Linkabit, December 1983.
+
+ 16. Gusella, R., and S. Zatti, "TEMPO - A Network Time Controller for
+ a Distributed Berkeley UNIX System", IEEE Distributed Processing
+ Technical Committee Newsletter 6, No. SI-2, pgs. 7-15, June 1984.
+ Also in: Proc. Summer 1984 USENIX, Salt Lake City, June 1984.
+
+ 17. Halpern, J., Simons, B., Strong, R., and D. Dolly, "Fault-
+ Tolerant Clock Synchronization", Proc. Third Annual ACM Symposium
+ on Principles of Distributed Computing, pgs. 89-102, August 1984.
+
+ 18. Lundelius, J., and N. Lynch, "A New Fault-Tolerant Algorithm for
+ Clock Synchronization:, Proc. Third Annual ACM Symposium on
+ Principles of Distributed Computing, pgs. 75-88, August 1984.
+
+ 19. Lamport, L., and P. Melliar-Smith "Synchronizing Clocks in the
+ Presence of Faults", JACM 32, No. 1, pgs. 52-78, January 1985.
+
+ 20. Gusella, R., and S. Zatti, "The Berkeley UNIX 4.3BSD Time
+ Synchronization Protocol: Protocol Specification", Technical
+ Report UCB/CSD 85/250, University of California, Berkeley, June
+ 1985.
+
+ 21. Marzullo, K., and S. Owicki, "Maintaining the Time in a
+ Distributed System", ACM Operating Systems Review 19, No. 3, pgs.
+ 44-54, July 1985.
+
+ 22. Mills, D., "Algorithms for Synchronizing Network Clocks", RFC-
+ 956, M/A-COM Linkabit, September 1985.
+
+ 23. Mills, D., "Experiments in Network Clock Synchronization", RFC-
+ 957, M/A-COM Linkabit, September 1985.
+
+ 24. Mills, D., "Network Time Protocol (NTP)", RFC-958, M/A-COM
+ Linkabit, September 1985.
+
+ 25. Gusella, R., and S. Zatti, "An Election Algorithm for a
+ Distributed Clock Synchronization Program", Technical Report
+ UCB/CSD 86/275, University of California, Berkeley, December
+ 1985.
+
+ 26. Sams, H., "Reference Data for Engineers: Radio, Electronics,
+ Computer and Communications (Seventh Edition)", Indianapolis,
+ 1985.
+
+ 27. Schneider, F., "A Paradigm for Reliable Clock Synchronization",
+ Technical Report TR 86-735, Cornell University, February 1986.
+
+
+
+Mills [Page 41]
+
+RFC 1059 Network Time Protocol July 1988
+
+
+ 28. Tripathi, S., and S. Chang, "ETempo: A Clock Synchronization
+ Algorithm for Hierarchical LANs - Implementation and
+ Measurements", Systems Research Center Technical Report TR-86-48,
+ University of Maryland, 1986.
+
+ 29. Bertsekas, D., and R. Gallager, "Data Networks", Prentice-Hall,
+ Englewood Cliffs, NJ, 1987.
+
+ 30. Srikanth, T., and S. Toueg. "Optimal Clock Synchronization", JACM
+ 34, No. 3, pgs. 626-645, July 1987.
+
+ 31. Rickert, N., "Non Byzantine Clock Synchronization - A Programming
+ Experiment", ACM Operating Systems Review 22, No. 1, pgs. 73-78,
+ January 1988.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Mills [Page 42]
+
+RFC 1059 Network Time Protocol July 1988
+
+
+Appendix A. UDP Header Format
+
+ An NTP packet consists of the UDP header followed by the NTP data
+ portion. The format of the UDP header and the interpretation of its
+ fields are described in [6] and are not part of the NTP
+ specification. They are shown below for completeness.
+
+ 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
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ | Source Port | Destination Port |
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ | Length | Checksum |
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+
+ Source Port
+
+ UDP source port number. In the case of a client request this
+ field is assigned by the client host, while for a server reply
+ it is copied from the Destination Port field of the client
+ request. In the case of symmetric mode, both the Source Port
+ and Destination Port fields are assigned the NTP service-port
+ number 123.
+
+ Destination Port
+
+ UDP destination port number. In the case of a client request
+ this field is assigned the NTP service-port number 123, while
+ for a server reply it is copied from the Source Port field of
+ the client request. In the case of symmetric mode, both the
+ Source Port and Destination Port fields are assigned the NTP
+ service-port number 123.
+
+ Length
+
+ Length of the request or reply, including UDP header, in
+ octets
+
+ Checksum
+
+ Standard UDP checksum
+
+
+
+
+
+
+
+
+
+
+Mills [Page 43]
+
+RFC 1059 Network Time Protocol July 1988
+
+
+Appendix B. NTP Data Format - Version 1
+
+ The format of the NTP data portion, which immediately follows the UDP
+ header, is shown below along with a description of its fields.
+
+
+ 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
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ |LI | VN |0 0 0| Stratum | Poll | Precision |
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ | Synchronizing Distance |
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ | Estimated Drift Rate |
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ | Reference Clock Identifier |
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ | |
+ | Reference Timestamp (64 bits) |
+ | |
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ | |
+ | Originate Timestamp (64 bits) |
+ | |
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ | |
+ | Receive Timestamp (64 bits) |
+ | |
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ | |
+ | Transmit Timestamp (64 bits) |
+ | |
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+
+ Leap Indicator (LI)
+
+ Two-bit code warning of impending leap-second to be inserted
+ at the end of the last day of the current month. Bits are
+ coded as follows:
+
+ 00 no warning
+ 01 +1 second (following minute has 61 seconds)
+ 10 -1 second (following minute has 59 seconds)
+ 11 alarm condition (clock not synchronized)
+
+
+
+
+
+
+
+Mills [Page 44]
+
+RFC 1059 Network Time Protocol July 1988
+
+
+ Version Number (VN)
+
+ Three-bit code indicating the version number, currently one
+ (1).
+
+ Reserved
+
+ Three-bit field consisting of all zeros and reserved for
+ future use.
+
+ Stratum
+
+ Integer identifying stratum level of local clock. Values are
+ defined as follows:
+
+ 0 unspecified
+ 1 primary reference (e.g., radio clock)
+ 2...n secondary reference (via NTP)
+
+ Poll
+
+ Signed integer indicating the maximum interval between
+ successive messages, in seconds to the nearest power of two.
+
+ Precision
+
+ Signed integer indicating the precision of the local clock, in
+ seconds to the nearest power of two.
+
+ Synchronizing Distance
+
+ Fixed-point number indicating the estimated roundtrip delay to
+ the primary synchronizing source, in seconds with fraction
+ point between bits 15 and 16.
+
+ Estimated Drift Rate
+
+ Fixed-point number indicating the estimated drift rate of the
+ local clock, in dimensionless units with fraction point to the
+ left of the most significant bit.
+
+ Reference Clock Identifier
+
+ Code identifying the particular reference clock. In the case
+ of type 0 (unspecified) or type 1 (primary reference), this is
+ a left-justified, zero-filled ASCII string, for example:
+
+
+
+
+
+Mills [Page 45]
+
+RFC 1059 Network Time Protocol July 1988
+
+
+ Type Code Meaning
+ ---------------------------------------------------
+ 0 DCN Determined by DCN routing algorithm
+ 1 WWVB WWVB radio clock (60 kHz)
+ 1 GOES GOES satellite clock (468 MHz)
+ 1 WWV WWV radio clock (5/10/15 MHz)
+ (and others as necessary)
+
+ In the case of type 2 and greater (secondary reference), this
+ is the 32-bit Internet address of the reference host.
+
+ Reference Timestamp
+
+ Local time at which the local clock was last set or corrected.
+
+ Originate Timestamp
+
+ Local time at which the request departed the client host for
+ the service host.
+
+ Receive Timestamp
+
+ Local time at which the request arrived at the service host.
+
+ Transmit Timestamp
+
+ Local time at which the reply departed the service host for
+ the client host.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Mills [Page 46]
+
+RFC 1059 Network Time Protocol July 1988
+
+
+Appendix C. Timeteller Experiments
+
+ In order to update data collected in June 1985 and reported in RFC-
+ 957, a glorious three-day experiment was carried out in January 1988
+ with all the hosts and gateways listed in the NIC data base. Four
+ packets were sent at five-second intervals to each host and gateway
+ using UDP/NTP, UDP/TIME and ICMP/TIMESTAMP protocols and the clock
+ offsets (in milliseconds) for each protocol averaged with respect to
+ local time, which is synchronized via NTP to a radio-clock host.
+ While the ICMP/TIMESTAMP protocol has much finer granularity
+ (milliseconds) than UDP/TIME (seconds), it has no provisions for the
+ date, so is not suitable as a time-synchronization protocol;
+ however, it was included in the experiments both as a sanity check
+ and in order to assess the precision of measurement.
+
+ In the latest survey of 5498 hosts and 224 gateways, 46 responded to
+ UDP/NTP requests, 1158 to UDP/TIME and 1963 to ICMP/TIMESTAMP. By
+ contrast, in the 1985 survey of 1775 hosts and 110 gateways, 163
+ responded to UDP/TIME requests and 504 to ICMP/TIMESTAMP. At that
+ time there were no UDP/NTP implementations. There are many more
+ hosts and gateways listed in the rapidly growing domain-name system,
+ but not listed in the NIC data base, and therefore not surveyed. The
+ results of the survey are given in Table C.1, which shows for each of
+ the three protocols the error X for which the distribution function
+ P[x =< X] has the value shown.
+
+ P[x=<X] UDP/NTP UDP/TIME ICMP/TIMESTAMP
+ ------------------------------------------------------
+ .1 11 4632 5698
+ .2 37 18238 27965
+ .3 66 38842 68596
+ .4 177 68213 127367
+ .5 364 126232 201908
+ .6 567 195950 285092
+ .7 3466 267119 525509
+ .8 20149 422129 2.91426E+06
+ .9 434634 807135 5.02336E+07
+ 1 1.17971E+09 1.59524E+09 2.11591E+09
+
+ Table C.1. Distribution Functions
+
+ It can be seen that ten percent of the UDP/NTP responses show errors
+ of 11 milliseconds or less and that ten percent of the UDP/TIME
+ responses show errors greater than 807135 milliseconds (about 13
+ minutes). Fifty percent of the UDP/NTP timetellers are within 364
+ milliseconds, while fifty percent of the UDP/TIME tellers are within
+ 126232 milliseconds (just over two minutes). Surprisingly,
+ ICMP/TIMESTAMP responses show errors even larger than UDP/TIME.
+
+
+
+Mills [Page 47]
+
+RFC 1059 Network Time Protocol July 1988
+
+
+ However, the maximum error shown in all three protocols exceeded the
+ range that could be recorded, in this case about 12 days. Clearly,
+ there are good timetellers and bad.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Mills [Page 48]
+
+RFC 1059 Network Time Protocol July 1988
+
+
+Appendix D. Evaluation of Filtering Algorithms
+
+ A number of algorithms for deglitching and filtering time-offset data
+ were described in RFC-956. These fall in two classes: majority-
+ subset algorithms, which attempt to separate good subsets from bad by
+ comparing their means, and clustering algorithms, which attempt to
+ improve the estimate by repeatedly casting out outlyers. The former
+ class was suggested as a technique to select the best (i.e. the most
+ reliable) clocks from a population, while the latter class was
+ suggested as a technique to improve the offset estimate for a single
+ clock given a series of observations.
+
+ Following publication of RFC-956 and after further development and
+ experimentation using typical Internet paths, a better algorithm was
+ found for casting out outlyers from a continuous stream of offset
+ observations spaced at intervals in the order of minutes. The
+ algorithm is described as a variant of a median filter, in which a
+ window consisting of the last n sample offsets is continuously
+ updated and the median sample selected as the estimate. However, in
+ the modified algorithm the outlyer (sample furthest from the median)
+ is then discarded and the entire process repeated until only a single
+ sample offset is left, which is then selected as the estimate.
+
+ The modified algorithm was found to be more resistant to glitches and
+ to provide a more accurate estimate than the unmodified one. It has
+ been implemented in the NTP daemons developed for the Fuzzball and
+ Unix operating systems and been in regular operation for about two
+ years. However, recent experiments have shown there is an even
+ better one which provides comparable accuracy together with a much
+ lower computational burden. The key to the new algorithm became
+ evident through an examination of scatter diagrams plotting sample
+ offset versus roundtrip delay.
+
+ To see how a scatter diagram is constructed, it will be useful to
+ consider how offsets and delays are computed. Number the times of
+ sending and receiving NTP messages as shown in Figure D.1 and let i
+ be an even integer. Then the timestamps t(i-3), t(i-2) and t(i-1)
+ and t(i) are sufficient to calculate the offset and delay of each
+ peer relative to the other.
+
+
+
+
+
+
+
+
+
+
+
+
+Mills [Page 49]
+
+RFC 1059 Network Time Protocol July 1988
+
+
+ Peer 1 Peer 2
+ | |
+ t(1) |------------------->| t(2)
+ | |
+ t(4) |<-------------------| t(3)
+ | |
+ t(5) |------------------->| t(6)
+ | |
+ t(8) |<-------------------| t(7)
+ | |
+ ...
+
+ Figure D.1. Calculating Delay and Offset
+
+ The roundtrip delay d and clock offset c of the receiving peer
+ relative to the sending peer are:
+
+
+ d = (t(i) - t(i-3)) - (t(i-1) - t(i-2))
+ c = [(t(i-2) - t(i-3)) + (t(i-1) - t(i))]/2 .
+
+ Two implicit assumptions in the above are that the delay distribution
+ is independent of direction and that the intrinsic drift rates of the
+ client and server clocks are small and close to the same value. If
+ this is the case the scatter diagram would show the samples
+ concentrated about a horizontal line extending from the point (d,c)
+ to the right. However, this is not generally the case. The typical
+ diagram shows the samples dispersed in a wedge with apex (d,c) and
+ opening to the right. The limits of the wedge are determined by
+ lines extending from (d,c) with slopes +0.5 and -0.5, which
+ correspond to the locus of points as the delay in one direction
+ increases while the delay in the other direction does not. In some
+ cases the points are concentrated along these two extrema lines, with
+ relatively few points remaining within the opening of the wedge,
+ which would correspond to increased delays on both directions.
+
+ Upon reflection, the reason for the particular dispersion shown in
+ the scatter diagram is obvious. Packet-switching nets are most often
+ operated with relatively small mean queue lengths in the order of
+ one, which means the queues are often idle for relatively long
+ periods. In addition, the routing algorithm most often operates to
+ minimize the number of packet-switch hops and thus the number of
+ queues. Thus, not only is the probability that an arriving NTP
+ packet finds a busy queue in one direction reasonably low, but the
+ probability of it finding a busy queue in both directions is even
+ lower.
+
+ From the above discussion one would expect that, at low utilizations
+
+
+
+Mills [Page 50]
+
+RFC 1059 Network Time Protocol July 1988
+
+
+ and hop counts the points should be concentrated about the apex of
+ the wedge and begin to extend rightward along the extrema lines as
+ the utilizations and hop counts increase. As the utilizations and
+ hop counts continue to increase, the points should begin to fill in
+ the wedge as it expands even further rightward. This behavior is in
+ fact what is observed on typical Internet paths involving ARPANET,
+ NSFNET and other nets.
+
+ These observations cast doubt on the median-filter approach as a good
+ way to cast out offset outlyers and suggests another approach which
+ might be called a minimum filter. From the scatter diagrams it is
+ obvious that the best offset samples occur at the lower delays.
+ Therefore, an appropriate technique would be simply to select from
+ the n most recent samples the sample with lowest delay and use its
+ associated offset as the estimate. An experiment was designed to
+ test this technique using measurements between selected hosts
+ equipped with radio clocks, so that delays and offsets could be
+ determined independent of the measurement procedure itself.
+
+ The raw delays and offsets were measured by NTP from hosts at U
+ Maryland (UMD) and U Delaware (UDEL) via net paths to each other and
+ other hosts at Ford Research (FORD), Information Sciences Institute
+ (ISI) and National Center for Atmospheric Research (NCAR). For the
+ purposes here, all hosts can be assumed synchronized to within a few
+ milliseconds to NBS time, so that the delays and offsets reflect only
+ the net paths themselves.
+
+ The results of the measurements are given in Table D.1 (UMD) and
+ Table D.2 (UDEL), which show for each of the paths the error X for
+ which the distribution function P[x =< X] has the value shown. Note
+ that the values of the distribution function are shown by intervals
+ of decreasing size as the function increases, so that its behavior in
+ the interesting regime of low error probability can be more
+ accurately determined.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Mills [Page 51]
+
+RFC 1059 Network Time Protocol July 1988
+
+
+ UMD FORD ISI NCAR UMD FORD ISI NCAR
+ Delay 1525 2174 1423 Offset 1525 2174 1423
+ --------------------------- ---------------------------
+ .1 493 688 176 .1 2 17 1
+ .2 494 748 179 .2 4 33 2
+ .3 495 815 187 .3 9 62 3
+ .4 495 931 205 .4 18 96 8
+ .5 497 1013 224 .5 183 127 13
+ .6 503 1098 243 .6 4.88E+8 151 20
+ .7 551 1259 265 .7 4.88E+8 195 26
+ .8 725 1658 293 .8 4.88E+8 347 35
+ .9 968 2523 335 .9 4.88E+8 775 53
+ .99 1409 6983 472 .99 4.88E+8 2785 114
+ .999 14800 11464 22731 .999 4.88E+8 5188 11279
+ 1 18395 15892 25647 1 4.88E+8 6111 12733
+
+ Table D.1. Delay and Offset Measurements (UMD)
+
+ UDEL FORD UMD ISI NCAR
+ Delay 2986 3442 3215 2756
+ -----------------------------------
+ .1 650 222 411 476
+ .2 666 231 436 512
+ .3 692 242 471 554
+ .4 736 256 529 594
+ .5 787 272 618 648
+ .6 873 298 681 710
+ .7 1013 355 735 815
+ .8 1216 532 845 1011
+ .9 1836 1455 1019 1992
+ .99 4690 3920 1562 4334
+ .999 15371 6132 2387 11234
+ 1 21984 8942 4483 21427
+
+ Table D.2.a Delay Measurements (UDEL)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Mills [Page 52]
+
+RFC 1059 Network Time Protocol July 1988
+
+
+ UDEL FORD UMD ISI NCAR
+ Offset 2986 3442 3215 2756
+ -----------------------------------
+ .1 83 2 16 12
+ .2 96 5 27 24
+ .3 108 9 36 36
+ .4 133 13 48 51
+ .5 173 20 67 69
+ .6 254 30 93 93
+ .7 429 51 130 133
+ .8 1824 133 165 215
+ .9 4.88E+8 582 221 589
+ .99 4.88E+8 1757 539 1640
+ .999 4.88E+8 2945 929 5278
+ 1 5.63E+8 4374 1263 10425
+
+ Table D.2.b Offset Measurements (UDEL)
+
+ The results suggest that accuracies less than a few seconds can
+ usually be achieved for all but one percent of the measurements, but
+ that accuracies degrade drastically when the remaining measurements
+ are included. Note that in the case of the UMD measurements to FORD
+ almost half the measurements showed gross errors, which was due to
+ equipment failure at that site. These data were intentionally left
+ in the sample set to see how well the algorithms dealt with the
+ problem.
+
+ The next two tables compare the results of minimum filters (Table
+ D.3) and median filters (Table D.4) for various n when presented with
+ the UMD - - NCAR raw sample data. The results show consistently
+ lower errors for the minimum filter when compared with the median
+ filter of nearest value of n. Perhaps the most dramatic result of
+ both filters is the greatly reduced error at the upper end of the
+ range. In fact, using either filter with n at least three results in
+ no errors greater than 100 milliseconds.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Mills [Page 53]
+
+RFC 1059 Network Time Protocol July 1988
+
+
+ Filter Samples
+ 1 2 4 8 16
+ P[x=<X] 1423 1422 1422 1420 1416
+ - --------------------------------------------
+ .1 1 1 1 0 0
+ .2 2 1 1 1 1
+ .3 3 2 1 1 1
+ .4 8 2 2 1 1
+ .5 13 5 2 2 1
+ .6 20 10 3 2 2
+ .7 26 15 6 2 2
+ .8 35 23 11 4 2
+ .9 53 33 20 9 3
+ .99 114 62 43 28 23
+ .999 11279 82 57 37 23
+ 1 12733 108 59 37 23
+
+ Table D.3. Minimum Filter
+ (UMD - NCAR)
+
+ Filter Samples
+ 3 7 15
+ P[x=<X] 1423 1423 1423
+ ----------------------------
+ .1 2 2 2
+ .2 2 4 5
+ .3 5 8 8
+ .4 10 11 11
+ .5 13 14 14
+ .6 18 17 16
+ .7 23 21 19
+ .8 28 25 23
+ .9 36 30 27
+ .99 64 46 35
+ .999 82 53 44
+ 1 82 60 44
+
+ Table D.4. Median Filter
+ (UMD - NCAR)
+
+ While the UMD - NCAR data above represented a path across the NSFNET
+ Backbone, which normally involves only a few hops via Ethernets and
+ 56-Kbps links, the UDEL - NCAR path involves additional ARPANET hops,
+ which can contribute substantial additional delay dispersion. The
+ following Table D.5. shows the results of a minimum filter for
+ various n when presented with the UDEL - NCAR raw sample data. The
+ range of error is markedly greater than the UMD - NCAR path above,
+ especially near the upper end of the distribution function.
+
+
+
+Mills [Page 54]
+
+RFC 1059 Network Time Protocol July 1988
+
+
+ Filter Samples
+ 1 2 4 8 16
+ P[x=<X] 2756 2755 2755 2753 2749
+ --------------------------------------------
+ .1 12 9 8 7 6
+ .2 24 19 16 14 14
+ .3 36 27 22 20 19
+ .4 51 36 29 25 23
+ .5 69 47 36 30 27
+ .6 93 61 44 35 32
+ .7 133 80 56 43 35
+ .8 215 112 75 53 43
+ .9 589 199 111 76 63
+ .99 1640 1002 604 729 315
+ .999 5278 1524 884 815 815
+ 1 10425 5325 991 835 815
+
+ Table D.5. Minimum Filter (UDEL - NCAR)
+
+ Based on these data, the minimum filter was selected as the standard
+ algorithm. Since its performance did not seem to much improve for
+ values of n above eight, this value was chosen as the standard.
+ Network Time Protocol (Version 1): Specification and Implementation.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Mills [Page 55]
+
+RFC 1059 Network Time Protocol July 1988
+
+
+Appendix E. NTP Synchronization Networks
+
+ This section discusses net configuration issues for implementing a
+ ubiquitous NTP service in the Internet system. Section E.1 describes
+ the NTP primary service net now in operation, including an analysis
+ of failure scenarios. Section E.2 suggests how secondary service
+ nets, which obtain wholesale time from the primary service net, can
+ be configured to deliver accurate and reliable retail time to the
+ general host population.
+
+E.1. Primary Service Network
+
+ The primary service net consists of five primary servers, each of
+ which is synchronized via radio or satellite to a national time
+ standard and thus operates at stratum one. Each server consists of
+ an LSI-11 Fuzzball, a WWVB or GOES radio clock and one or more net
+ interfaces. Some servers provide switching and gateway services as
+ well. Table E.1 shows the name, Internet address, type of clock,
+ operating institution and identifying code.
+
+Name Address Clock Operating Institution and (Code)
+----------------------------------------------------------------------
+DCN5.ARPA 128.4.0.5 WWVB U Delaware, Newark, DE (UDEL)
+FORD1.ARPA 128.5.0.1 GOES Ford Research, Dearborn, MI
+ (FORD)
+NCAR.NSF.NET 128.116.64.3 WWVB National Center for Atmospheric
+ Research, Boulder, CO (NCAR)
+UMD1.UMD.EDU 128.8.10.1 WWVB U Maryland, College Park, MD
+ (UMD)
+WWVB.ISI.EDU 128.9.2.129 WWVB USC Information Sciences
+ Institute, Marina del Rey, CA
+ (ISI)
+
+ Table E.1. Primary Servers
+
+ Figure E.1 shows how the five primary servers are interconnected as
+ NTP peers. Note that each server actively probes two other servers
+ (along the direction of the arrows), which means these probes will
+ continue even if one or both of the two probed servers are down. On
+ the other hand, each server is probed by two other servers, so that
+ the result, assuming all servers are up, is that every server peers
+ with every other server.
+
+
+
+
+
+
+
+
+
+Mills [Page 56]
+
+RFC 1059 Network Time Protocol July 1988
+
+
+ +------------------------------------------------+
+ V |
+ +--------+ +--------+ +--------+
+ | |<-------------| |<-------------| |
+ | NCAR | | ISI | | FORD |
+ | |----+ +--| |<--+ +---->| |
+ +--------+ | | +--------+ | | +--------+
+ | | | | | A
+ | +---|------|---------------|----+ |
+ | | | | | |
+ | | +------|---------------|---------+ |
+ | | | | | |
+ | | | | V |
+ | +--------+ | | +--------+ |
+ | | |<--+ +--| | |
+ +-->| UMD | | UDEL |---+
+ | |--------------------->| |
+ +--------+ +--------+
+
+ Figure E.1. Primary Service Network
+
+ All of the five primary servers shown are directly connected to a
+ radio clock and thus normally operate at stratum one. However, if
+ the radio clock itself becomes disabled or the propagation path to
+ its synchronizing source fails, then the server drops to stratum two
+ and synchronizes via NTP with its neighbor at the smallest
+ synchronizing distance. If a radio clock appears to operate
+ correctly but delivers incorrect time (falseticker), the server may
+ remain synchronized to the clock. However, gross discrepancies will
+ become apparent via the NTP peer paths, which will ordinarily result
+ in an operator alarm.
+
+ Assume that, if a radio clock appears up, it is a truechimer;
+ otherwise, the clock appears down. Then the above configuration will
+ continue to provide correct time at all primary servers as long as at
+ least one radio clock is up, all servers are up and the servers
+ remain connected to each other through the net. The fact that the
+ graph and all of its subgraphs are completely connected lends an
+ incredible resilience to the configuration.
+
+ If some radio clocks appear up but are in fact falsetickers, the
+ primary servers connected to those clocks will not provide correct
+ time. However, as the consequents of the voting procedure and
+ complete connectivity of the graph and its subgraphs, any combination
+ of two falsetickers or of one falseticker and one down server will be
+ detected by their truechimer neighbors.
+
+
+
+
+
+Mills [Page 57]
+
+RFC 1059 Network Time Protocol July 1988
+
+
+E.2. Secondary Service Networks
+
+ A secondary server operating at stratum n > 1 ordinarily obtains
+ synchronization using at least three peer paths, two with servers at
+ stratum n-1 and one or more with servers at stratum n. In the most
+ robust configurations a set of servers agree to provide backup
+ service for each other, so distribute some of their peer paths over
+ stratum-(n-1) servers and others over stratum-n servers in the same
+ set. For instance, in the case of a stratum-2 service net with two
+ secondary servers and the primary service net of Figure E.1, there
+ are five possible configurations where each stratum-1 path ends on a
+ different primary server. Such configurations can survive the loss
+ of three out of the four stratum-1 servers or net paths and will
+ reject a single falseticker on one of the two stratum-1 paths for
+ each server.
+
+ Ordinary hosts can obtain retail time from primary or secondary
+ service net using NTP in client/server mode, which does not require
+ dedicated server resources as does symmetric mode. It is anticipated
+ that ordinary hosts will be quite close to a secondary server,
+ perhaps on the same cable or local net, so that the frequency of NTP
+ request messages need only be high enough, perhaps one per hour or
+ two, to trim the drift from the local clock.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Mills [Page 58]
+