前言
本系列基于数学,操作系统,计算机网络及网络编程角度出发去探寻 NTP 时钟同步的优化。将大学所学应用在这个优化上。
一、NTP 基本概念
一切都是基于以优化 NTP 时间为主线进行的操作,我们还是需要先去了解一下什么是 NTP。
(一) 什么是 NTP?
NTP(Network Time Protocol)是一种基于分层架构和精密算法设计的网络时间同步协议,其核心目标是通过分布式系统实现全网设备与UTC(协调世界时)的亚毫秒级同步。
其通信基于 UDP。
NTP 官网:www.ntppool.org/zh/
分层时间源架构
NTP采用分层结构实现时间传播,每一层从接收时间,层级(Stratum)从0到15逐级递减精度:
- Stratum 0:直接连接高精度物理时钟(如原子钟、GPS卫星****)。
- Stratum 1:直接同步Stratum 0的服务器,误差在微秒级****。
- Stratum 2~15:逐级向下同步,每增加一层,精度略微下降。层级间通过算法选择最优时间源,避免误差累积 。
NTP 时间同步机制
NTP通过四时间戳计算网络延迟和时钟偏差:
- 客户端发送请求时记录T1(发送时间)
- 服务器记录T2(接收时间)、T3(回复时间)
- 客户端接收响应时记录T4
注意:Client 和 Server 会处于不同的时间状态。比如 Client 比 Server 快 10s,所以存在 t2 的时间戳小于 t1。
延迟(Delay) :Delay = [(T4-T1) - (T3-T2)] / 2
偏移(Offset) :Offset = [(T2-T1) + (T3-T4)] / 2
NTP 报文结构介绍
NTP 报文要求 48 个字节。
| 特征 | 请求报文 | 响应报文 |
|---|---|---|
| Mode字段 | 3(客户端模式) | 4(服务器模式) |
| Stratum字段 | 0(未定义) | 1-15(有效层级) |
| Root Delay | 置0 | 服务器到主时钟的实际延迟 |
| Receive Timestamp | 置0 | 服务器收到请求的时间(T2) |
| Transmit Timestamp | 客户端预填(可选) | 服务器发送响应的时间(T3) |