NTP Time
NTP(Network Time Protocol)是一种广泛使用的时间同步协议,旨在通过网络将计算机时钟同步到UTC(Coordinated Universal Time),目的是为了解决不同系统之间时间一致性的问题,可以看一下这个典型的时钟同步算法
工作原理:
- 时间交换:NTP客户端向一个或多个NTP服务器发送时间请求,服务器回应当前的时间。客户端接收到多个服务器的时间后,会计算出最准确的时间。
- 延迟补偿:NTP使用复杂的算法来计算并补偿网络延迟,确保时间的同步性。
场景:在分布式系统中,往往使用NTP来实现时间同步,这样可以让依赖时间戳的处理变得正确。
NTP的时间戳是从1900年1月1日开始计算的,NTP时间戳是64位值,其中高32位用于秒,低32位用于秒的小数部分,所以如果从NTP服务器获取时间戳,会得到一个1900年以来的总秒数,你可以用以下程序将一个NTP时间戳转换为ns级,然后和获取到的UTC时间进行比较,计算延迟
1 | unsigned long long send_timestamp = read_dora_input_timestamp(event); # 这里获得的是封装后的从1970年1月1日开始的NTP时间 |
然后和UTC时间进行计算,如下:
1 | struct timespec ts; |
在这里的clock_gettime
因为传入的是CLOCK_REALTIME
,所以获取的是1970年1月1日到现在的时间,具体的参数信息可以查阅man page
时间格式 | 起始时间 | 位数含义(单位是bit) |
---|---|---|
NTP | 1900年1月1日 | 高32位是秒,低32位是纳秒 |
UNIX | 1970年1月1日 | 高64位是秒,低64位是纳秒 |
在Linux系统中,你可以使用sntp time.pool.aliyun.com
进行时间同步
这里挂一些其他的时间协议:
精确时间协议PTP
简单网络时间协议SNTP
时间触发协议TTP
- Title: NTP Time
- Author: starlitxiling
- Created at : 2024-07-17 15:14:53
- Updated at : 2024-11-12 21:07:35
- Link: http://starlitxiling.github.io/2024/07/17/time/
- License: This work is licensed under CC BY-NC-SA 4.0.
Comments