下载 FreeRTOS
 

出色的 RTOS & 嵌入式软件

最新资讯
简化任何设备的身份验证云连接。
利用 CoAP 设计节能型云连接 IoT 解决方案。
11.0.0 版 FreeRTOS 内核简介:
FreeRTOS 路线图和代码贡献流程。
使用 FreeRTOS 实现 OPC-UA over TSN。

coreSNTP 库术语

轮询间隔

SNTP 客户端可定期同步系统时间与时间服务器,以确保系统时钟 的偏差不会超出应用程序所允许的阈值。轮询间隔就是与时间服务器保持同步 的连续尝试之间的时间间隔。

时钟偏移

收到服务器响应时,CoreSNTP 库会计算出系统时间 与服务器时间之间的偏移值。此计算值被称为时钟偏移值,它可以是正值(系统晚于服务器时间), 也可以是负值(系统早于服务器时间) 。时钟偏移值是 coreSNTP 库在收到网络上的服务器响应时计算出来的 。此值用于校正在网络上发送和接收 SNTP 数据包时出现的时间延迟 。

coreSNTP 库使用下方数学公式计算时钟偏移值:

                T2      T3
     ---------------------------------   <-----   *SNTP/NTP server*
              /\         \
              /           \
    Request* /             \ *Response*
            /              \/
     ---------------------------------   <-----   *SNTP client*
          T1                T4
 
 The four most recent timestamps, T1 through T4, are used to compute
 the clock offset of the SNTP client relative to the server where:
 
    T1 = Client Request Transmit Time
    T2 = Server Receive Time (of client request)
    T3 = Server Response Transmit Time
    T4 = Client Receive Time (of server response)
 
 Clock Offset = T(NTP/SNTP server) - T(SNTP client)
              = [( T2 - T1 ) + ( T3 - T4 )]
                ---------------------------
                             2
        
Kiss-o'-Death 数据包

当 SNTP/NTP 服务器拒绝来自 SNTP/NTP 客户端的时间请求时,它发送的拒绝响应 就叫做 "Kiss-o'-Death" 数据包。服务器可能会在响应数据包中发送 4 个字母的 “kiss 代码”, 给出拒绝理由。CoreSNTP 库的序列化器/反序列化器 API 向应用程序提供 它从 SNTP 服务器拒绝响应数据包中解析出来的 “kiss 代码”。通常情况下, 客户端 API 层会通过避免重复使用此服务器, 而是转到您已配置的库服务器列表中的下一个服务器来处理这些服务器拒绝响应。因此,我们建议 您在应用程序中配置多个时间服务器以获得弹性; 从而在主服务器出现意外服务中断时,可使用备份服务器。

NTP 时代和 NTP 时代纪元

NTP 时代由可用 32 位无符号整数表示的秒数组成(~ 136 年)。 NTP 时代的 32 位限制是 NTP 时间戳的 “秒” 部分的 32 位宽度造成的。 NTP 时代纪元是指此时代的开始时间或基准时间。例如, NTP 时代 0 代表 1900 年 1 月 1 日 0 时 0 分 0 秒到 2036 年 2 月 7 日 6 时 14 分 27 秒 这段时间。1900 年 1 月 1 日 0 时 0 分 0 秒就是 NTP 时代 0 的纪元时间。

下列 NTP 时代表摘自 NTPv4 的建议规范。CoreSNTP 库为 NTP 0 和 NTP 1 时代内的时间戳提供支持。

   +-------------+------------+-----+---------------+------------------+
   | Date        | MJD        | NTP | NTP Timestamp | Epoch            |
   |             |            | Era | Era Offset    |                  |
   +-------------+------------+-----+---------------+------------------+
   | 1 Jan -4712 | -2,400,001 | -49 | 1,795,583,104 | 1st day Julian   |
   | 1 Jan -1    | -679,306   | -14 | 139,775,744   | 2 BCE            |
   | 1 Jan 0     | -678,491   | -14 | 171,311,744   | 1 BCE            |
   | 1 Jan 1     | -678,575   | -14 | 202,939,144   | 1 CE             |
   | 4 Oct 1582  | -100,851   | -3  | 2,873,647,488 | Last day Julian  |
   | 15 Oct 1582 | -100,840   | -3  | 2,874,597,888 | First day        |
   |             |            |     |               | Gregorian        |
   | 31 Dec 1899 | 15019      | -1  | 4,294,880,896 | Last day NTP Era |
   |             |            |     |               | -1               |
   | 1 Jan 1900  | 15020      | 0   | 0             | First day NTP    |
   |             |            |     |               | Era 0            |
   | 1 Jan 1970  | 40,587     | 0   | 2,208,988,800 | First day UNIX   |
   | 1 Jan 1972  | 41,317     | 0   | 2,272,060,800 | First day UTC    |
   | 31 Dec 1999 | 51,543     | 0   | 3,155,587,200 | Last day 20th    |
   |             |            |     |               | Century          |
   | 8 Feb 2036  | 64,731     | 1   | 63,104        | First day NTP    |
   |             |            |     |               | Era 1            |
   +-------------+------------+-----+---------------+------------------+

                 Figure 4: Interesting Historic NTP Dates 
Copyright (C) Amazon Web Services, Inc. or its affiliates. All rights reserved.