时间同步有两种形式,一种是NTP的网络校准时间,一种是可以CAN通信的时间同步。
一、NTP时间同步
参看:什么是NTP?
参看:NTP协议详解及C语言实现
网络时间协议NTP(Network Time Protocol)是TCP/IP协议族里面的一个应用层协议,用来使客户端和服务器之间进行时钟同步,提供高精准度的时间校正。NTP服务器从权威时钟源(例如原子钟、GPS)接收精确的协调世界时UTC,客户端再从服务器请求和接收时间。
1、为什么时钟同步很重要?
出于诸多原因,精确的时间对于网络至关重要,比如:
- 网络管理:从不同网络设备采集来的日志信息进行分析时,需要以时间作为参照依据。如果不同设备上的系统时间不一致,会因先后顺序等问题给故障定位带来障碍。
- 计费系统:计费业务对于时间尤其敏感,要求所有设备的时间保持一致,否则会引起计费不准确,导致用户质疑、投诉等。
- 协同处理:多个系统协同处理同一个复杂事件,为保证正确的执行顺序,多个系统必须参考同一时钟。
- 系统时间:某些应用或服务需要准确的时间来标记用户登录、交易等操作信息,确保可追溯记录。
因此有一个统一的标准时间对于网络而言意义重大。
NTP就是用来使网络中的各个主机时钟同步的一种协议,他把主机的时钟同步到协调世界时UTC,其精度在LAN网络内可达1毫秒内,在WAN网络上可以达到几十毫秒内。
2、NTP同步原理
NTP最典型的授时方式是Client/Server方式,如下图所示。
NTP同步原理
-
- 客户端首先向服务端发送一个NTP请求报文,其中包含了该报文离开客户端的时间戳
t1
;
- 客户端首先向服务端发送一个NTP请求报文,其中包含了该报文离开客户端的时间戳
-
- NTP请求报文到达NTP服务器,此时NTP服务器的时刻为
t2
。当服务端接收到该报文时,NTP服务器处理之后,于t3
时刻发出NTP应答报文。该应答报文中携带报文离开NTP客户端时的时间戳t1
、到达NTP服务器时的时间戳t2
、离开NTP服务器时的时间戳t3
;
- NTP请求报文到达NTP服务器,此时NTP服务器的时刻为
-
- 客户端在接收到响应报文时,记录报文返回的时间戳
t4
。
- 客户端在接收到响应报文时,记录报文返回的时间戳
客户端用上述4个时间戳参数就能够计算出2个关键参数:
NTP报文从客户端到服务器的往返延迟delay。
客户端与服务端之间的时间差offset。
根据方程组:
可以解得时间差为:
NTP客户端根据计算得到的offset来调整自己的时钟,实现与NTP服务器的时钟同步。
3、NTP 的数据格式
NTP 定义了两种数据格式:时间戳(timestamp)
和日期戳(datestamp)
。它们分别提供不同范围的时间表示法。
时间戳
长 64 位,前 32 位表示从时代起点(era epoch,目前起点为 1900/1/1 00:00:00)开始的秒数,后 32 位表示秒数的小数部分。这样的时间表示具有 232 皮秒(即 232×10-12 秒)的精度。但这种表示法只能表示有限范围内的时间,因此时间戳存在一个 136 年的周期,一个周期称为一个 NTP 的时代(era)。下一个时代的起点在 2036 年。
日期戳
长 128 位,前 32 位表示时代编号(从 0 开始),后 96 位是一个时间戳,分别为 32 位的秒数和 64 位的小数部分。容易发现,日期戳能表示的时间范围更广,精度也更高,它的跨度长于宇宙的年龄,精度小于光通过一个原子的时间。
时间戳常用于通信时的数据包中,而日期戳一般只在实现内部使用。
扩展:
几个时间相关的概念
- GMT时间: Greenwich Mean Time,格林尼治平时,又称格林尼治平均时间或格林尼治标准时间。是指位于英国伦敦郊区的皇家格林尼治天文台的标准时间。
GMT存在较大误差,因此现在已不再被作为标准时间使用。现在的标准时间,是由原子钟报时的协调世界时(UTC) - UTC时间: Universal Time Coordinated,中文名称:世界标准时间或世界协调时。
UTC时间可以理解为全世界都公用的一个时间。它实际上反映了一种约定,即为全世界所认可的一个统一时间,而不是某特定地区的时间。
中国人常用的北京时间比UTC时间快8个小时。也即UTC时间凌晨0点时,北京时间已经是早上8点,这就是为啥全世界人往往不直接用UTC时间计时原因。 - CST时间: China Standard Time,即中国标准时间。在时区划分上,属东八区,比协调世界时早8小时,记为UTC+8。
- UNIX时间戳(timestamp): 计算机中的UNIX时间戳,是以GMT/UTC时间1970-01-01T00:00:00为起点,到当前具体时间的秒数(不考虑闰秒)。这样做的目的,主要是通过“整数计算”来简化计算机对时间操作的复杂度。
UTC时间和UNIX时间戳转换工具:
这部分之前都写了好几篇文章了。
参看:STM32开发 – UTC、UNIX时间戳、北京时间之间的转换
参看:DSP学习-- UTC转UNIX时间戳
参看:DSP学习 – GPS时间校准电脑系统时间
4、NTP报文格式
NTP协议的标准,RFC1350协议