GMT,UTC,CST,DST,RTC,NTP,SNTP,NITZ: 嵌入式的时间
ref
嵌入式开发中,几个时间概念?
彻底搞懂UTC时间
NTP协议详解
使用NTP协议获取网络时间戳(C/C++实现)
NTP协议详解
时区
- GMT:格林尼治标准时间
- GMT+8 12:00: 东八区北京当地时间12:00
- 地球在椭圆轨道速度不均, 可能与实际太阳时差16min
- UTC: 协调世界时, 世界标准时间
∼
\sim
∼GMT
- CST: 中国标准时,
G
M
T
+
8
=
U
T
C
+
8
=
C
S
T
GMT+8=UTC+8=CST
GMT+8=UTC+8=CST
- DST: 夏令时, 夏季调快一小时, 中国不用
时钟
- RTC: 硬件时钟
- 高精度晶振作时钟源, 外加电池掉电可工作, (片内RTC, 外部RTC)
- 系统时钟:
linux
, RTOS
中启动时读取硬件时钟RTC
, 之后独立运行 - 网络时钟: 授时服务器
SNTP
, NTP
- 网络上指定若干时钟源服务器, 提供授时服务, 服务器间也可相互比较校正
时间同步
- NTP: 网络时间协议
- 基于UDP, 用于网络时间同步的协议, 使网络中的计算机时钟同步到UTC
- 可以分发, 授时
- SNTP: 简单网络时间协议
- 以1900年1月1日0点0分0秒为起点, NTP改编, 子集 (linux起点为1970年1月1日0点0分0秒)
- 只有授时无分发, 只能获取时间, 简化了全部流程, 只能同步一个时钟源
- 客户端/服务端工作方式
- 服务端接收GPS信号/自带原子钟为时间基准
- 客户端定期访问SNTP服务器得准确时间信息
- 分辨率到毫秒级, SNTP必须联网
- 一些SNTP服务器(打开cmd,
ping ntp.ntsc.ac.cn
试一下)
- 国家授时中心 NTP 服务器:ntp.ntsc.ac.cn
- 阿里云公共 NTP 服务器:time.pool.aliyun.com
- 腾讯云公共 NTP 服务器:time1.cloud.tencent.com
- 教育网(高校自建)服务器:ntp.sjtu.edu.cn
- NITZ: 无线网络向移动设备提供本地日期, 时间, 时区, 夏令时偏移
NTP协议
- NTP: 网络时间协议, 基于UDP, 用于网络时间同步的协议, 使网络中的计算机时钟同步到UTC
NTP报文格式
- LI 闰秒标识器,占用2个bit
- VN 版本号,占用3个bits,表示NTP的版本号,现在为3
- Mode 模式,占用3个bits,表示模式
- stratum(层),占用8个bits
- Poll 测试间隔,占用8个bits,表示连续信息之间的最大间隔
- Precision 精度,占用8个bits,,表示本地时钟精度
- Root Delay根时延,占用8个bits,表示在主参考源之间往返的总共时延
- Root Dispersion根离散,占用8个bits,表示在主参考源有关的名义错误
- Reference Identifier参考时钟标识符,占用8个bits,用来标识特殊的参考源
- 参考时间戳,64bits时间戳,本地时钟被修改的最新时间。
- 原始时间戳,客户端发送的时间,64bits。
- 接受时间戳,服务端接受到的时间,64bits。
- 传送时间戳,服务端送出应答的时间,64bits。
- 认证符(可选项)
交互过程
客户端在
t
0
t0
t0 发送一个NTP协议包到服务端, 经一段网络延时传输后, 服务端在
t
1
t1
t1 接收到数据包, 经过一段时间处理后, 在
t
2
t2
t2 向客户端返回数据包, 再经一段网络延时传输, 客户端在
t
3
t3
t3 收到NTP数据包
-
t
0
,
t
3
t0, t3
t0,t3相对客户端,
t
1
,
t
2
t1, t2
t1,t2相对服务端, 有少许区别, 需要修正:
t
2
+
δ
2
t_2+\frac{\delta}{2}
t2+2δ
- 客户端&服务端时间系统偏移
θ
=
(
t
1
−
t
0
)
+
(
t
2
−
t
3
)
2
\theta=\frac{(t_1-t_0)+(t_2-t_3)}{2}
θ=2(t1−t0)+(t2−t3)
- 网络往返延迟
δ
=
(
t
3
−
t
0
)
−
(
t
2
−
t
1
)
\delta=(t_3-t_0)-(t_2-t_1)
δ=(t3−t0)−(t2−t1)