时区
中国跨5个时区,实际只用东八时区(utc +8)的标准时即北京时间为准。
GMT:格林尼治时间,由于时区众多,需要一个基准,早期使用GMT。
UTC:协调世界时,因为地球在椭圆轨道里的速度不均匀,自转也不规则,且正在减速。所以,格林尼治时间不再被作为标准时间,被UTC取代,以原子时秒长为基础,时刻上尽量接近于格林尼治平时。
时区:如中国比UTC快8小时,写作UTC+8,称东8区。夏威夷比UTC时间慢10小时,写作UTC-10,称西10区。
缩写 全称 中文名称 类型 UTC 偏移量
+03 +03 - UTC +03:00
+04 +04 - UTC +04:00
+05 +05 - UTC +05:00
+0530 +0530 - UTC +05:30
+06 +06 - UTC +06:00
ACDT Australian Central Daylight Time 澳大利亚中部夏令时 夏令时 UTC +10:30
ACST Australian Central Standard Time 澳大利亚中部标准时间 - UTC +09:30
… …
… …
… …
CST Central Standard Time 中部标准时间 - UTC -06:00
CST China Standard Time 中国标准时间 - UTC +08:00
CST Cuba Standard Time 古巴标准时间 - UTC -05:00
ChST Chamorro Standard Time 查莫罗标准时间 - UTC +10:00
… …
… …
… …
NTP精度
高精度的时钟同步系统广泛运用于各领域,网络上的各台计算机利用NTP服务器进行时钟调整,从而实现计算机之间的时钟同步。然而NTP授时精度有限,无法满足所有的授时需求。
一般的计算机和嵌入式设备在时钟度方面没有明确的指标要求, 时钟精度只有10-4~10-5,每天可能误差达十几秒或更多,如不校正,累积误差不可忽视。
一: 网络时间协议
NTP(Network Time Protocol)由时间协议、ICMP时间戳消息及IP时间戳选项发展而来。NTP用于将一台服务器的时间与另一服务器同步,使用层次式时间分布模型。NTP可利用冗余服务器、网络路径获得高准确性和高可靠性。
SNTP(Simple Network Time Protocol)。秒级精度的简单的网络时间协议,是NTP的一个子集,用于不需要像NTP那样高精度得场景。SNTP协议减少了网络延时对校对准确的影响,但没有冗余服务器和校正时钟频率误差功能。
二:NTP授时精度
NTP授时精度:受NTP服务器与客户端间的网络状况影响,主要取决于NTP包往返路由的延时对称程度,往返路由的延时不对称值最大不超过网络延时。一般广域网的网络延时在10 ms~500 ms之间;局域网的网络延时在计时操作系统内核处理延迟的情况下通常小于1 ms。
假定局域网内NTP延时小于1ms,理论上授时误差小于0.5 ms,但对于Windows操作系统内置的NTP客户和NTP服务,并不能达到此精度。Windows NTP时钟分辨率因操作系统和硬件不同而有所不同,时钟分辨率通常为10ms或15ms。基于Windows操作系统内置的NTP授时精度最高不超过10 ms。
三:进一步提高NTP授时精度的方法
网络延时相对较大的原因在于时间戳一般都是在应用层加盖。为减少操作系统内核处理延时的影响提高NTP授时精度,发/收NTP包时间戳应尽量接近主机真实发/收包时刻。一个办法是修改网卡驱动程序,将NTP包发/收时间戳从应用程序移至网卡驱动程序,可消除操作系统内核处理延时不确定而引入的误差。这种方法在局域网中可大幅提高NTP授时精度至μs级。
为了减少齐度引起晶振频率漂移对时钟准确度的影响,可以采用数字齐漂补偿方法,提高时钟*计时准确度。先测出工作齐度范围内齐度对应的齐漂补偿系数,工作时每隔一定时间,根据实际齐度查出对应补偿系数动态地修正时间。
时钟频率偏差和时钟分辨率低是局域网NTP授时精度不高的主要原因。
硬件和系统时钟
| 硬件时钟 | 系统时钟 | |
|---|---|---|
| 别名 | RTC、CMOS时钟、BIOS时钟 | 内核时钟、软件时钟 |
| 物理位置 | 主板芯片(如DS1307) | 操作系统内核内存中 |
| 供电方式 | 主板电池(CR2032) | 系统电源(断电消失) |
| 访问接口 | I/O端口或/dev/rtc设备 | 系统调用(gettimeofday等) |
| 更新频率 | 1Hz(每秒1次) | 1000Hz+(每毫秒多次) |
| 访问速度 | 慢(I/O操作) | 快(内存读取) |
| 时区处理 | 存储UTC或本地时间 | 实时转换 |
| 主要用途 | 持久存储、启动初始化 | 运行时计时、应用程序 |
- 启动依赖:系统时钟初始化依赖于硬件时钟
- 双向同步:可通过hwclock工具相互同步
- 硬件时钟是 “持久存储”,系统时钟是 “运行缓存”
- 在虚拟化环境中,硬件时钟可能是虚拟的
- 时区配置不一致是常见问题
关机状态 ──硬件时钟(独立运行)──> 开机 ──读取─> 系统时钟(开始运行)
↑ ↑ ↓
│ │ 应用程序时间
│ │ ↓
└──写入(同步)────────────────┘ 网络时间同步(NTP)
命令:
hwclock -w 系统 → 硬件 保存当前系统时间到硬件 写入硬件
hwclock --systohc 系统 → 硬件 同上,更明确的语法 system to hardware clock
hwclock -s 硬件 → 系统 开机时初始化系统时间 设置系统时间
hwclock --hctosys 硬件 → 系统 同上,更明确的语法 hardware clock to system
NTP
主流的时钟同步服务ntpd chrony(主流) timedatectl ,一次性同步使用ntpdate
ntp安装:
# 程序包ntp,服务名ntpd,检测命令 ntpq
rpm -q ntp #查询软件包是否被安装
yum install ntp -y #安装
Systemctl start ntpd ## 启动
注意许多Linux发行版(如RHEL 8/CentOS 8、SUSE)默认使用chrony作为时间服务。如果安装了ntp,请确保禁用chronyd,以避免端口冲突
ntp配置:
配置ntp.conf服务:
一个典型的/etc/ntp.conf服务端配置文件如下:
# 1. 定义上游时间源服务器
server 0.asia.pool.ntp.org iburst
server 1.asia.pool.ntp.org iburst
server 2.asia.pool.ntp.org iburst
server 3.asia.pool.ntp.org iburst
# 或使用国内的阿里云NTP服务器
# server ntp.aliyun.com iburst
# 2. 定义访问控制规则(安全关键)
# 默认拒绝所有访问(包括查询、配置修改、对等体请求等)
restrict default kod nomodify notrap nopeer noquery
# 允许本机(localhost)不受限制地访问
restrict 127.0.0.1
restrict ::1
# 允许特定内网网段(例如192.168.1.0/24)同步时间,但不允许它们修改服务器配置
restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap
# 本地时钟作为极端情况下的后备时间源
# fudge设置层级关系。当所有外部服务器不可用时,使用本地时钟(层级为10,优先级很低)
server 127.127.1.0
fudge 127.127.1.0 stratum 10
# 其他必要配置
# 用于记录系统时钟频率偏移的文件
driftfile /var/lib/ntp/ntp.drift
# 记录日志(可选)
# statsdir /var/log/ntpstats/
# statistics loopstats peerstats clockstats
# filegen loopstats file loopstats type day enable
# filegen peerstats file peerstats type day enable
# filegen clockstats file clockstats type day enable
restrict
作用:控制NTP服务的访问权限。这是保证服务安全的关键,必须为默认策略(通常是最严格的)和特定网络(如本地局域网)分别设置规则
ignore:忽略所有类型的NTP连接请求
nomodify:客户端不能更改服务端的时间参数,但是客户端可以通过服务端进行网络校时。
notrust :拒绝没有认证的用户端请求
noquery :客户端不能使用ntpq,ntpc来查询ntp服务器,等于不提供校对时间服务
notrap :不提供trap远程登录功能,trap服务是一种远程时间日志服务 拒绝为匹配的主机提供模式 6 控制消息陷阱服务。陷阱服务是 ntpdq控制消息协议的子系统,用于远程事件日志记录程序。
nopeer :用于阻止主机尝试与服务器对等
kod : 访问违规时发送 KoD包,向不安全的访问者发送Kiss-Of-Death报文。 restrict -6 表示IPV6地址的权限设置。
server/pool :
server指定ntp服务器的地址 格式:server [ip or hostname] [perfer],pool会自动从池中轮询多个服务器。iburst参数可加快初始同步速度
例:
server 127.127.1.0 # 将当前主机作为时间服务器
pool 2.pool.ntp.org iburst
fudge
配置本地时钟作为备用时间源(当所有外部服务器都不可用时),设置时间服务器的层级 格式:fudge ip
[stratum int] stratum设置其层级(数字越大,优先级越低)
例:
server 127.127.1.0
fudge 127.127.1.0 stratum 10
# 注意:fudge必须和server一块用,而且是在server的下一行 stratum 0~15 0:表示顶级 10:通常用于给局域网主机提供时间服务
配置客户端
假设连接互联网额ntp
# 使用pool.ntp.org提供的公共服务器池(自动选择最优节点)
pool 2.pool.ntp.org iburst
# 或手动指定几个服务器(冗余备份,推荐至少2-3个)
server time1.cloud.tencent.com iburst
server ntp.aliyun.com iburst
# 允许本机进行任何查询
restrict 127.0.0.1
restrict ::1
# 记录系统时钟频率偏移的文件(必须有写权限)
driftfile /var/lib/ntp/ntp.drift
假设网络中有自建的NTP服务器(IP为10.0.0.1),客户端配置如下:
# 指向内部NTP服务器(可配置多个)
server 10.0.0.1 iburst
# server 10.0.0.2 iburst # 备份服务器
# 允许本机访问
restrict 127.0.0.1
# 可选:指定发送NTP请求的源接口或IP
# ntp source-interface eth0 # 在某些系统(如SONiC)上可用[citation:4]
driftfile /var/lib/ntp/ntp.drift
#确保driftfile指定的路径(如/var/lib/ntp/)存在且ntpd进程有写入权限
如果本地时间与服务器相差太大,ntpd可能无法同步。可先用ntpdate <服务器>进行一次手动大步调整
问题排查可以使用ntpq -p,如果状态异常,如服务器状态异常(如reach值为0),请按以下步骤检查:
- 网络连通性:使用ping和nc -uzv <服务器> 123检查能否访问NTP服务器的UDP 123端口。
- 服务状态:使用systemctl status ntpd查看ntpd进程是否正常运行。
- 日志查询:查看系统日志(如journalctl -u ntpd)获取具体错误信息。
ntpq -p #查看当前服务器与上层 ntp 的状态
[root@TKFE-APP1 ~]# ntpq -p
remote refid st t when poll reach delay offset jitter
==============================================================================
+XX.X29.160.66 .GPS. 1 u 148 1024 377 0.299 0.686 0.045
-XX.X35.95.66 .GPS. 1 u 181 1024 377 0.656 0.791 1.830
*XX.X32.31.66 .GPS. 1 u 445 1024 377 0.446 0.683 0.048
-XX.X33.31.66 .GPS. 1 u 134 1024 377 0.429 0.719 0.031
+XX.X34.19.66 .GPS. 1 u 177 1024 377 0.386 0.675 0.019
remote - 本机和上层ntp的ip或主机名,“+”有连线可做候选,“*”正在使用的
refid - 更上一层的ntp地址
st - stratum的 级别
when - 多少秒前曾经同步过时间
poll - 下次更新在多少秒后
reach - 已经向上层ntp服务器要求更新的次数
delay - 网络延迟
offset - 时间补偿
jitter - 系统时间与bios时间差
ntpdate
安装
yum install ntpdate -y #命令安装
作用:
用于一次性同步系统时钟的命令行工具,它通过NTP(Network Time Protocol)协议从时间服务器获取准确的时间并立即设置系统时钟。
- 手动时间同步:一次性将本地系统时间与NTP服务器时间对齐
- 时间校正:快速纠正系统时间偏差
- 初始化时间:在ntpd服务启动前设置初始准确时间
例
# 基本语法
ntpdate [选项] NTP服务器
# 常用示例
ntpdate pool.ntp.org # 使用公共NTP服务器池
ntpdate 192.168.1.100 # 使用本地NTP服务器
使用本地ntp服务校准时间
[root@TKFE-APP1 ~]# ntpdate -u 10.132.31.66
24 Oct 13:42:37 ntpdate[15580]: adjust time server XX.X32.31.66 offset 0.000594 sec
选项 作用
-u 使用非特权端口(123→1023以上端口)
-b 强制调整时间(即使偏差很大)
-s 静默模式,输出重定向到syslog
-d 调试模式,不实际设置时间
-q 查询模式,只显示时间差
-t 设置超时时间(秒)
与 ntpd 的区别
特性 ntpdate ntpd(chronyd)
工作方式 一次性同步 持续运行,渐进调整
时间调整 立即跳变 平滑调整(slew)
适用场景 手动/脚本调用 长期运行的后台服务
精度 一般 更高
资源占用 临时运行 常驻内存
优势:
- 简单快速:单命令完成时间同步(例如可以写入定时任务)
0 0 * * 1 /usr/sbin/ntpdate -u ip ##每周一零点零分同步一次时间,要求较高的可每小时,每分钟同步一次
- 应急修复:快速纠正大的时间偏差
- 脚本友好:便于自动化任务
- 向后兼容:几乎所有Unix/Linux系统都支持
ntpstat
用于检查 NTP服务同步状态。显示系统时间是否已与 NTP 服务器同步,以及同步的精度。
例:
$ ntpstat
synchronised to NTP server (192.168.1.1) at stratum 2
time correct to within 25 ms
polling server every 64 s
# 如果返回unsynchronised说明未同步
说明:
- 已同步到 NTP 服务器 192.168.1.1
- 层级(stratum): 2(值越小越接近权威时间源)
- 时间精度: 25 毫秒以内
- 轮询间隔: 每 64 秒同步一次
对比
ntpstat 检查NTP同步状态 简单状态报告
ntpq -p 查看NTP对等连接状态 显示所有NTP服务器状态
chronyc tracking chrony的状态信息 chrony专用的详细状态
Chrony
Chrony当前主流的时钟同步服务,与ntpd不同,它可以更快地且更准确地同步系统时钟,
简介
- 使用ntp协议
- 作为NTPv4(RFC 5905)服务器或对等服务器以向网络中的其他计算机提供时间服务
- 在恶劣环境下(网络拥堵间歇性中断等)同步效率很高
- Internet下误差几毫秒内;局域网下误差几十微秒;
- chrony服务由chronyd和chronyc组成
- chronyd:用户空间下的守护进程,调整内核中运行的系统时钟和时钟服务器同步。它确定计算机增减时间的比率,并对此进行补偿
- chronyc:用户命令行工具,用于监控性能并进行多样化的配置。它可以在chronyd实例控制的计算机上工作,也可在一台不同的远程计算机上工作
配置:
下面配置示例,用centos7自带的chrony服务替代ntp服务作为时间服务
yum install chrony #系统一般自带,无需手动按照
systemctl start chronyd && systemctl enable chronyd
# rpm -ql chrony
/etc/chrony.conf #chrony的主配置文件
/usr/bin/chronyc #chronyc是一个命令行交互式接口程序,可用于监视chronyd的性能,并在运行时更改各种操作参数。
/usr/lib/systemd/system/chronyd.service #CentOS 7.x版本对应的unit file
/usr/sbin/chronyd #chronyd是一个可以在启动时启动的守护程序,它既可以充当服务端进程也可以充当服务端进程
服务端与客户端配置
| 服务端 (NTP Server) | 客户端 (NTP Client) | |
|---|---|---|
| 核心功能 | 同步外部时间源,并为内网其他设备提供时间 | 仅向指定的时间服务器(可以是服务端)同步时间 |
| 关键配置 | 1. 设置 server 同步上游 2. 取消 allow 注释以允许客户端 3. 添加 local stratum 10 | 仅设置 server 指向服务端地址 |
| 配置示例 | /etc/chrony.conf server ntp.aliyun.com iburst allow 192.168.1.0/24 local stratum 10 | /etc/chrony.conf server 192.168.1.100 iburst |
常用命令
chronyc sources -v #查看时间同步源:
chronyc -a makestep #立即手工同步
chronyc sourcestats -v #查看时间同步源状态:
chrony和ntpd对比
| chrony | ntp |
|---|---|
| 无间断工作 | 轮询工作 |
| 网络拥塞时正常 | 可能会失效 |
| 与时钟同步更快、精度更高 | 精度一般 |
| 快速适应时钟速率的突然变化 | 适应时间较长 |
| 随系统自带使用 | 需要手动搭建 |
| 体积小、占用内存小 | 体积较大、内存占用率高 |
| 配置简单 | 配置复杂 |
| 部分支持 | 支持ntpv4的所有操作模式 |
| 不支持 | 支持自动密钥协议(RFC 5906号)使用公钥加密对服务器进行身份验证 |
| 依赖于其他程序(例如:GPS) | 包括许多参考时钟的驱动程序 |
chrony 更适合现代动态环境,尤其是云和虚拟化场景。
ntpd 在传统高精度、稳定网络环境中仍有优势。
大多数 Linux 发行版已转向 chrony 作为默认(如 RHEL/CentOS 8+、Fedora、openSUSE)。
推荐优先考虑 chrony,除非有明确的 ntpd 依赖需求(如硬件时钟集成或遗留系统兼容)。
1078

被折叠的 条评论
为什么被折叠?



