• NTP同步底层实现


    RFC

    http://www.ietf.org/rfc/rfc5905.txt

    https://www.eecis.udel.edu/~mills/ntp/html/select.html

    https://wenku.baidu.com/view/1539c86a71fe910ef02df83f.html###

    https://wenku.baidu.com/view/d48bf96df111f18583d05a88.html

    https://wenku.baidu.com/view/214946669b6648d7c1c7469e.html

    settimeofday() && adjtime()

    The implementation model includes some means to set and adjust the
    system clock. The operating system is assumed to provide two
    functions: one to set the time directly, for example, the Unix
    settimeofday() function, and another to adjust the time in small
    increments advancing or retarding the time by a designated amount,
    for example, the Unix adjtime() function. In this and following
    references, parentheses following a name indicate reference to a
    function rather than a simple variable. In the intended design the
    clock discipline process uses the adjtime() function if the
    adjustment is less than a designated threshold, and the
    settimeofday() function if above the threshold. The manner in which
    this is done and the value of the threshold as described in
    Section 10.

    如果超过:threshold 则,settimeofday(): 快速调整。否则,adjtime() : 缓慢调整。

    NTP报文

                   +-----------+------------+-----------------------+
                   | Name      | Formula    | Description           |
                   +-----------+------------+-----------------------+
                   | leap      | leap       | leap indicator (LI)   |
                   | version   | version    | version number (VN)   |
                   | mode      | mode       | mode                  |
                   | stratum   | stratum    | stratum               |
                   | poll      | poll       | poll exponent         |
                   | precision | rho        | precision exponent    |
                   | rootdelay | delta_r    | root delay            |
                   | rootdisp  | epsilon_r  | root dispersion       |
                   | refid     | refid      | reference ID          |
                   | reftime   | reftime    | reference timestamp   |
                   | org       | T1         | origin timestamp      |
                   | rec       | T2         | receive timestamp     |
                   | xmt       | T3         | transmit timestamp    |
                   | dst       | T4         | destination timestamp |
                   | keyid     | keyid      | key ID                |
                   | dgst      | dgst       | message digest        |
                   +-----------+------------+-----------------------+
    
                         Figure 7: Packet Header Variables
    
    
           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  |Mode |    Stratum     |     Poll      |  Precision   |
          +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
          |                         Root Delay                            |
          +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
          |                         Root Dispersion                       |
          +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
          |                          Reference ID                         |
          +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
          |                                                               |
          +                     Reference Timestamp (64)                  +
          |                                                               |
          +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
          |                                                               |
          +                      Origin Timestamp (64)                    +
          |                                                               |
          +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
          |                                                               |
          +                      Receive Timestamp (64)                   +
          |                                                               |
          +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
          |                                                               |
          +                      Transmit Timestamp (64)                  +
          |                                                               |
          +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
          |                                                               |
          .                                                               .
          .                    Extension Field 1 (variable)               .
          .                                                               .
          |                                                               |
          +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
          |                                                               |
          .                                                               .
          .                    Extension Field 2 (variable)               .
          .                                                               .
          |                                                               |
          +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
          |                          Key Identifier                       |
          +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
          |                                                               |
          |                            dgst (128)                         |
          |                                                               |
          +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    
                          Figure 8: Packet Header Format
    
    

    其中第一个字段: LI Leap Indicator (leap)

               +-------+----------------------------------------+
               | Value | Meaning                                |
               +-------+----------------------------------------+
               | 0     | no warning                             |
               | 1     | last minute of the day has 61 seconds  |
               | 2     | last minute of the day has 59 seconds  |
               | 3     | unknown (clock unsynchronized)         |
               +-------+----------------------------------------+
    
                             Figure 9: Leap Indicator
    

    verion字段:

                          +-------+--------------------------+
                          | Value | Meaning                  |
                          +-------+--------------------------+
                          | 0     | reserved                 |
                          | 1     | symmetric active         |
                          | 2     | symmetric passive        |
                          | 3     | client                   |
                          | 4     | server                   |
                          | 5     | broadcast                |
                          | 6     | NTP control message      |
                          | 7     | reserved for private use |
                          +-------+--------------------------+
    
                           Figure 10: Association Modes
    

    Stratum (stratum)字段

            +--------+-----------------------------------------------------+
            | Value  | Meaning                                             |
            +--------+-----------------------------------------------------+
            | 0      | unspecified or invalid                              |
            | 1      | primary server (e.g., equipped with a GPS receiver) |
            | 2-15   | secondary server (via NTP)                          |
            | 16     | unsynchronized                                      |
            | 17-255 | reserved                                            |
            +--------+-----------------------------------------------------+
    
                             Figure 11: Packet Stratum
    
    

    Root Delay (rootdelay)

    Root Delay (rootdelay): Total round-trip delay to the reference
    clock, in NTP short format.

    Root Dispersion (rootdisp)

    Root Dispersion (rootdisp): Total dispersion to the reference clock,
    in NTP short format.

    Reference ID (refid)

         +------+----------------------------------------------------------+
         | ID   | Clock Source                                             |
         +------+----------------------------------------------------------+
         | GOES | Geosynchronous Orbit Environment Satellite               |
         | GPS  | Global Position System                                   |
         | GAL  | Galileo Positioning System                               |
         | PPS  | Generic pulse-per-second                                 |
         | IRIG | Inter-Range Instrumentation Group                        |
         | WWVB | LF Radio WWVB Ft. Collins, CO 60 kHz                     |
         | DCF  | LF Radio DCF77 Mainflingen, DE 77.5 kHz                  |
         | HBG  | LF Radio HBG Prangins, HB 75 kHz                         |
         | MSF  | LF Radio MSF Anthorn, UK 60 kHz                          |
         | JJY  | LF Radio JJY Fukushima, JP 40 kHz, Saga, JP 60 kHz       |
         | LORC | MF Radio LORAN C station, 100 kHz                        |
         | TDF  | MF Radio Allouis, FR 162 kHz                             |
         | CHU  | HF Radio CHU Ottawa, Ontario                             |
         | WWV  | HF Radio WWV Ft. Collins, CO                             |
         | WWVH | HF Radio WWVH Kauai, HI                                  |
         | NIST | NIST telephone modem                                     |
         | ACTS | NIST telephone modem                                     |
         | USNO | USNO telephone modem                                     |
         | PTB  | European telephone modem                                 |
         +------+----------------------------------------------------------+
    

    Reference Timestamp

    Reference Timestamp: Time when the system clock was last set or
    corrected, in NTP timestamp format.

    Origin Timestamp (org) ---> T1

    Origin Timestamp (org): Time at the client when the request departed
    for the server, in NTP timestamp format.

    Receive Timestamp (rec) ---> T2

    Receive Timestamp (rec): Time at the server when the request arrived
    from the client, in NTP timestamp format.

    Transmit Timestamp (xmt) ---> T3

    Transmit Timestamp (xmt): Time at the server when the response left
    for the client, in NTP timestamp format.

    Destination Timestamp (dst) --->T4

    Destination Timestamp (dst): Time at the client when the reply
    arrived from the server, in NTP timestamp format.

    Extension Field

    Extension Field n: See Section 7.5 for a description of the format of
    this field.

    In NTPv4, one or more extension fields can be inserted after the
    header and before the MAC, which is always present when an extension
    field is present. Other than defining the field format, this
    document makes no use of the field contents. An extension field
    contains a request or response message in the format shown in
    Figure 14.

           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
          +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
          |          Field Type           |            Length             |
          +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
          .                                                               .
          .                            Value                              .
          .                                                               .
          +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
          |                       Padding (as needed)                     |
          +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    
                         Figure 14: Extension Field Format
    

    Key Identifier (keyid)

    Key Identifier (keyid): 32-bit unsigned integer used by the client
    and server to designate a secret 128-bit MD5 key.

    Message Digest (digest)

    Message Digest (digest): 128-bit MD5 hash computed over the key
    followed by the NTP packet header and extensions fields (but not the
    Key Identifier or Message Digest fields).

    计算时间方法

    大致过程: 机器A同步机器B

    A: 先把当前时间copy到T1
    B: B收到后,立刻把自己时间copy到T2
    B: B发送时,将发送时间copy到T3
    A:A收到时,把接受时间copy到T4

    In the figure, the first packet transmitted by A contains only the
    origin timestamp t1, which is then copied to T1. B receives the
    packet at t2 and copies t1 to T1 and the receive timestamp t2 to T2.
    At this time or some time later at t3, B sends a packet to A
    containing t1 and t2 and the transmit timestamp t3. All three
    timestamps are copied to the corresponding state variables. A
    receives the packet at t4 containing the three timestamps t1, t2, and
    t3 and the destination timestamp t4. These four timestamps are used
    to compute the offset and delay of B relative to A, as described
    below.

    offset

    theta = T(B) - T(A) = 1/2 * [(T2-T1) + (T3-T4)]

    round-trip delay 延迟

    delta = T(ABA) = (T4-T1) - (T3-T2).

    NTP源码函数和这些概念对应关系

    要想看懂ntp源码,如下列表概念很重要

    
                     +---------+----------+-----------------------+
                     | Name    | Formula  | Description           |
                     +---------+----------+-----------------------+
                     | srcaddr | srcaddr  | source address        |
                     | srcport | srcport  | source port           |
                     | dstaddr | dstaddr  | destination address   |
                     | dstport | destport | destination port      |
                     | keyid   | keyid    | key identifier key ID |
                     +---------+----------+-----------------------+
    
                  Figure 16: Peer Process Configuration Variables
    
    
                    +-----------+------------+---------------------+
                    | Name      | Formula    | Description         |
                    +-----------+------------+---------------------+
                    | leap      | leap       | leap indicator      |
                    | version   | version    | version number      |
                    | mode      | mode       | mode                |
                    | stratum   | stratum    | stratum             |
                    | ppoll     | ppoll      | peer poll exponent  |
                    | rootdelay | delta_r    | root delay          |
                    | rootdisp  | epsilon_r  | root dispersion     |
                    | refid     | refid      | reference ID        |
                    | reftime   | reftime    | reference timestamp |
                    +-----------+------------+---------------------+
    
                     Figure 17: Peer Process Packet Variables
    
    
                         +------+---------+--------------------+
                         | Name | Formula | Description        |
                         +------+---------+--------------------+
                         | org  | T1      | origin timestamp   |
                         | rec  | T2      | receive timestamp  |
                         | xmt  | T3      | transmit timestamp |
                         | t    | t       | packet time        |
                         +------+---------+--------------------+
    
                    Figure 18: Peer Process Timestamp Variables
    
    
    
    Mills, et al.                Standards Track                   [Page 31]
    
    RFC 5905                   NTPv4 Specification                 June 2010
    
    
                         +--------+---------+-----------------+
                         | Name   | Formula | Description     |
                         +--------+---------+-----------------+
                         | offset | theta   | clock offset    |
                         | delay  | delta   | round-trip delay|
                         | disp   | epsilon | dispersion      |
                         | jitter | psi     | jitter          |
                         | filter | filter  | clock filter    |
                         | tp     | t_p     | filter time     |
                         +--------+---------+-----------------+
    
                   Figure 19: Peer Process Statistics Variables
    
    

    几个关键数据

    dispersion

    The dispersion statistic epsilon(t) represents the maximum error due
    to the frequency tolerance and time since the last packet was sent.
    It is initialized

    epsilon(t_0) = r.rho + s.rho + PHI * (T4-T1)

    when the measurement is made at t_0 according to the seconds counter.
    Here, r.rho is the packet precision described in Section 7.3 and
    s.rho is the system precision described in Section 11.1, both
    expressed in seconds. These terms are necessary to account for the
    uncertainty in reading the system clock in both the server and the
    client.

    The dispersion then grows at constant rate PHI; in other words, at
    time t, epsilon(t) = epsilon(t_0) + PHI * (t-t_0). With the default
    value PHI = 15 ppm, this amounts to about 1.3 s per day. With this
    understanding, the argument t will be dropped and the dispersion
    represented simply as epsilon. The remaining statistics are computed
    by the clock filter algorithm described in the next section.

    NTP相关算法

    1. Clock Filter Algorithm (时间滤波算法)

    The clock filter algorithm is part of the peer process. It grooms
    the stream of on-wire data to select the samples most likely to
    represent accurate time. The algorithm produces the variables shown
    in Figure 19, including the offset (theta), delay (delta), dispersion
    (epsilon), jitter (psi), and time of arrival (t). These data are
    used by the mitigation algorithms to determine the best and final
    offset used to discipline the system clock. They are also used to
    determine the server health and whether it is suitable for
    synchronization.

    在Clock Filter Algorithm (时间滤波算法) 中,会校验完整唯一的包,并且,计算出每一个包的三个核心指标: offset (theta), delay (delta), dispersion
    (epsilon)。
    其中, dispersion (epsilon) 比较难以理解,这个称之为,离散。

    The clock filter algorithm saves the most recent sample tuples
    (theta, delta, epsilon, t) in the filter structure

    2. Clock Select Algorithm (时间选择算法)


    3. Cluster Algorithm (聚类算法)

    4. Clock discipline Algorithm (聚类算法)

  • 相关阅读:
    使用iText 7读取PDF文件中的文本和图片
    登记或取消登记盈亏库存日记账行数量
    uni-app(未完)
    javaScript的基本优雅写法
    ModuleFederation-模块联邦
    typescript
    img标签src图片路径根目录问题
    开源工具分享
    软件缺陷的度量、分析和统计
    MIT6.824 2020 Lab2 A Raft Leader Election
  • 原文地址:https://www.cnblogs.com/muahao/p/6978879.html
Copyright © 2020-2023  润新知