C/C++ ntp 校时(chrony使用)

一、介绍

1.1 ntp 介绍

NTP(Network Time Protocol,网络时间协议)是一种用于在计算机网络中同步时钟的协议,旨在确保网络中所有计算机和设备具有相同的准确时间。

NTP 可以达到以下精度

在局域网 (LAN) 环境中,NTP 可以达到毫秒级别(通常能够实现1毫秒内)甚至亚毫秒级别的精度。
在广域网 (WAN) 环境中,NTP 的精度通常在几毫秒到几十毫秒之间,取决于网络条件。

官方历史版本和协议规范:

  1. NTPv0:

    • 最初的 NTP 版本,虽然详细文档不如后续版本那么易于获取,但该版本标志着 NTP 的开端。
  2. NTPv1:

    • 文档: RFC 958(1985年)
    • 描述了早期的 NTP 协议,包括其基本结构和操作。
  3. NTPv2:

    • 文档: RFC 1059(1988年)
    • 引入了更详细的报头格式和错误检测机制,增强了协议的健壮性。
  4. NTPv3:

    • 文档: RFC 1305(1992年)
    • 增加了广播模式和多播模式,支持了对称和非对称的通信方式,增强了安全性。引入了许多现代化特性,如对原子钟和 GPS 的支持。
  5. NTPv4:

    • 文档: RFC 5905(2010年)
    • 目前广泛使用的版本,支持 64 位时间戳,提供了增强的安全性、灵活性和更好的时间同步精度。NTPv4 规范包括了加密和认证功能,并对时间同步的稳定性和性能进行了优化。

1.2 sntp和 ntp

SNTP(Simple Network Time Protocol,简单网络时间协议)是 NTP(Network Time Protocol,网络时间协议)的一个简化版本。它设计用于那些不需要 NTP 所有复杂功能和精度的环境。

NTP(Network Time Protocol)和 SNTP(Simple Network Time Protocol)的精度差异主要取决于它们的设计和实现。以下是一些关于两者精度的关键点:

NTP 精度

  1. 高精度:NTP 设计用于提供高精度的时间同步,通常可以达到毫秒级别甚至更高的精度。它通过精细的算法来处理网络延迟和时间漂移,能够在不同的网络条件下保持准确性。

  2. 网络延迟补偿:NTP 采用复杂的算法来补偿网络延迟和抖动,包括使用时间戳来测量延迟,并通过时间戳来计算精确的时钟漂移。

  3. 服务器选择:NTP 客户端可以从多个时间源选择最优的服务器,以提高同步的准确性和可靠性。

  4. 实测精度:在理想环境下,NTP 可以达到亚秒级别的精度。在网络条件良好的情况下,甚至可以达到毫秒级别的精度。

SNTP 精度

  1. 较低精度:SNTP 比 NTP 简化了很多复杂的功能,因此通常提供较低的精度。SNTP 主要用于那些对精度要求不高的场景,通常在毫秒级别以下。

  2. 网络延迟补偿:SNTP 不进行复杂的网络延迟补偿,而是直接从一个时间服务器获取时间,因此其精度受到网络延迟变化的影响较大。

  3. 单一时间源:SNTP 通常使用单一的时间服务器,没有 NTP 的时间源选择机制,这可能会影响同步精度,特别是在网络条件不稳定的情况下。

  4. 实测精度:SNTP 的精度通常比 NTP 差,可能在几十毫秒到几秒之间,具体取决于网络环境和服务器的稳定性。

总结:

  • NTP 提供了高精度的时间同步,能够在各种网络条件下保持较高的准确性。它适用于对时间精度有较高要求的应用。

  • SNTP 精度较低,适用于对时间精度要求不高的场景。其同步精度受限于网络延迟和简单的时间同步机制。

如果需要非常精确的时间同步,NTP 是更好的选择。如果时间同步精度要求较低,且希望简化实现,SNTP 可以满足需求。

1.3 ntp 校时原理

NTP 协议的基本工作原理

  • 时间服务器体系结构:
    NTP 使用一种分层的时间服务器体系结构来实现时间同步。这些服务器被分为多个层级(stratum),最高层级(stratum 1)通常使用原子钟或GPS设备作为时间源,较低层级(stratum 2、stratum 3等)的服务器通过网络与更高层级的服务器同步。

  • 时钟同步过程:

    • 时钟选择:客户端选择最优的时间服务器进行同步,考虑服务器的可用性、延迟和精度。
    • 时钟调整:客户端使用时钟漂移和网络延迟等信息,调整本地时钟。
    • 时钟稳定:通过周期性的同步和调整,保持本地时钟与远程服务器的同步性和精确性。
  • 安全性增强:
    最新版本的 NTP 提供了加密通信和身份验证功能,确保时间源的真实性和数据完整性,防止恶意攻击和篡改。

二、Linux C/C++ ntp 选型

2.1 实现方案

2.2 选型依据

  • NTP实现比较:ntp、chrony、openntpd
  • 校时精度:越高越好
  • 易用性:是不是简单易用
  • 流行度:
  • 常见Linux 发行版默认使用的校时工具:Centos、Debian、Ubuntu
    • CentOS:之前是ntpd,CentOS 7及以后版本使用Chrony。
    • Debian 默认使用 systemd-timesyncd 来进行时钟同步。systemd-timesyncd 是 systemd 的一部分,提供简单的网络时间协议(NTP)客户端功能,用于自动校时。
    • Ubuntu 也使用 systemd-timesyncd 作为默认的校时工具,与Debian类似。

目前Linux中最常用的校时工具

  • systemd-timesyncd:由于其与systemd的集成和轻量级特性,systemd-timesyncd已成为许多现代Linux发行版的默认选择,特别是在桌面和通用用途的发行版中。
  • Chrony:以其高精度和良好的网络条件适应性而受到青睐,常用于服务器和企业级环境。
  • ntpd:作为传统的NTP守护进程,仍然在一些系统中使用,尤其是在一些老旧或特定的环境。

2.3 选型结论(chrony)

选择chrony 理由

  • 相对 ntpd 更轻量,同时配置简单
  • 同时支持 ntpclient 和 ntpserver
  • 支持更高精度 ntp 校时(chrony和ntpd 相对 sntp 校时精度更高)
  • 支持 GPS 校时(需要搭配gpsd使用)
  • 支持 PPS 信号处理(GPS + PPS 实现高精度校时)

2.4 选型范围

2.4.1 ntpd 更新记录

三、chrony 使用

3.1 编译/交叉编译

  1. 配置编译选项

    # 配置本机编译
    make distclean
    ./configure --prefix=$PWD/install_x64
    make -j && make install
    

    配置交叉编译:

    make distclean
    export CC="arm-fslc-linux-gnueabi-gcc -march=armv7-a -mthumb -mfpu=neon -mfloat-abi=hard --sysroot=/opt/fslc-x11/2.4.4/sysroots/armv7at2hf-neon-fslc-linux-gnueabi"
    export CXX="arm-fslc-linux-gnueabi-g++  -march=armv7-a -mthumb -mfpu=neon -mfloat-abi=hard --sysroot=/opt/fslc-x11/2.4.4/sysroots/armv7at2hf-neon-fslc-linux-gnueabi"
    export CPPFLAGS="-I. "
    ./configure --prefix=$PWD/install_imx6q
    make -j
    
  2. 编译

    • 会生成 config.h 文件:使能开关、默认配置路径
    #define LINUX 1
    #define DEBUG 0
    #define FEAT_CMDMON 1
    #define FEAT_NTP 1
    #define FEAT_REFCLOCK 1
    #define HAVE_IN_PKTINFO 1
    #define FEAT_IPV6 1
    #define _GNU_SOURCE 1
    #define HAVE_IN6_PKTINFO 1
    #define HAVE_CLOCK_GETTIME 1
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值