自学教程 从零学编程

NTP 协议

一、NTP 是什么

NTP(Network Time Protocol,网络时间协议),应用层协议,基于UDP,端口 123。
作用:让网络内多台设备同步系统时间,统一时钟。

广泛用于服务器、交换机、路由器、监控、数据库、日志系统。日志、分布式事务、证书时间校验都依赖准确时间。

二、NTP 层级(Stratum 层)

NTP采用分层服务器架构,层级用Stratum(阶层)标识,数字越小,时间越精准:

  • Stratum 0:参考时钟源(原子钟、GPS时钟硬件),不是网络服务器
  • Stratum 1:直接连接Stratum0的一级NTP服务器
  • Stratum 2:从Stratum1同步时间
  • Stratum n:逐级向下同步,最多到Stratum 15

Stratum 16:时间不可用

客户端不直接对接Stratum0;普通服务器/主机一般同步Stratum2~5的公共NTP服务器。

三、NTP 工作原理

客户端与NTP服务器交换时间戳,计算网络往返延迟、时间偏移量,校正本机系统时钟。
NTP报文包含4个核心时间戳:

  1. T1:客户端发送请求报文的本地时间
  2. T2:服务器收到请求报文的服务器时间
  3. T3:服务器发送应答报文的服务器时间
  4. T4:客户端收到应答报文的本地时间

计算公式:

  • 往返延迟:delay = (T4-T1) - (T3-T2)
  • 时间偏移:offset = ((T2-T1)+(T3-T4))/2

客户端根据offset,调整本机系统时间。

四、NTP工作模式

  1. 客户端/服务器模式(最常用)
    客户端主动向NTP服务器请求时间,单向同步。Windows、Linux服务器默认使用该模式。
  2. 对等模式(对称模式)
    两台NTP服务器互相交换时间,互相校正,用于内网多台时间服务器集群。
  3. 广播/多播模式
    NTP服务器周期性广播时间,局域网设备被动接收时间,适合大规模局域网。

五、NTP报文简要特点

UDP 123端口,报文短小。
支持身份验证(可选),防止恶意服务器篡改时间。

六、相关概念

  1. 系统时钟:操作系统维护的软件时钟
  2. 硬件时钟(RTC):主板CMOS电池供电,关机也走时;开机后系统时间从硬件时钟读取

NTP修改的是系统时钟,可手动同步写入硬件时钟。

  1. 时间校正策略
  • 若时间偏差很小:缓慢微调,一点点加快/减慢时钟(slew模式),避免时间回跳(对数据库、日志很重要)
  • 若时间偏差巨大:直接跳跃设置时间(step模式)

生产环境尽量避免时间回退,会造成日志排序异常、证书校验失败、分布式系统时间戳混乱。

七、常用相关命令

Linux:

ntpdate  # 一次性同步时间
chronyc  # chrony客户端(现代推荐替代ntpd)

Windows:自动同步互联网时间服务器。

八、优缺点

✅ 优点

  1. 跨网络实现时钟同步,计算网络延迟带来的误差;
  2. 分层架构,可部署内网NTP服务器,减轻公网NTP压力;
  3. 支持身份校验,防止恶意篡改时间;
  4. 支持渐进式调时,防止时间跳变。

❌ 缺点

  1. 网络抖动会带来时间误差;网络延迟越大,同步精度越低;
  2. 公网NTP服务器存在访问延迟、被污染风险;
  3. UDP协议,防火墙需要放行123端口。

九、NTP 与 SNTP

SNTP(Simple NTP,简单网络时间协议),是NTP的简化子集,只保留基础时间同步,不做复杂过滤算法,精度低一些,嵌入式设备、Windows时间同步底层常使用SNTP。

十、小结

  1. NTP应用层UDP协议,端口123,用于网络设备时钟同步;
  2. 分层Stratum模型,0层是硬件基准时钟,逐级向下同步;
  3. 通过4个时间戳计算网络延迟与时间偏移,校正本地时钟;
  4. 三种工作模式:C/S、对称对等、广播;
  5. 支持微调时钟避免时间跳变;SNTP是NTP简化版本。

思考题:数据库集群环境,为什么强烈要求所有节点使用NTP统一时间?

标签:

0 条笔记