目录
一、什么是NTP?
网络时间协议(NTP)是时间同步协议。它用于在服务器和客户端之间同步时间。服务器端使用的是UDP端口号是123和323。使用NTP的目的是使所有设备的时间与网络上时钟服务器的时间同步,以使网络上所有设备的时间保持一致。对于提供NTP服务的服务器,它既可以作为时间源接受来自其它客户端的同步,自己本身也可做为客户端向网络上的其它时钟服务器同步时间。
二、计算机时间分类
1、系统时间:一般来说就是我们使用date命令查看到的时间,linux系统下所有时间的调用都使用的是系统时间,除了直接访问硬件时间的命令如: clock。
2、硬件时间(RTC): 主板BIOS中的时间,由主板电池供电来维护运行,系统在开机时会读取硬件时间,并根据硬件时间来设置系统时间,系统开机之后时间就由系统来管理,不在受硬件时间的控制。
三、NTP如何工作?
1.设备A向设备B发送NTP消息。消息离开设备A时带有时间戳。时间戳为10:00:00 am(T1)。
2.当此NTP消息到达设备B时,设备B添加其自己的时间戳。时间戳是11:00:01 am(T2)。
3.当此NTP消息离开设备B时,设备B添加其自己的时间戳并将时间戳更改为11:00:02(T3)。
4.设备A收到响应消息后,设备A的本地时间为上午10:00:03(T4)。
5.此时,设备A具有足够的信息来计算两个重要参数:
1、NTP数据包的往返时延Delay=设备A发送消息到收到消息之间所经历的时间-设备B处理消息数据所消耗的时间=(T4-T1)-(T3-T2)=2秒。
2、设备A和设备B之间的时间差offset(平均值)=设备B当前时间-设备A当前时间≈((设备A发给设备B两者当时时间差)+(设备B回复设备A两者当时时间差))/2=1小时。
说明:由于设备A发送给设备B的时间,在设备B收到之时、设备A当前的时间就从之前10点增加到了消息在到达设备B时途中所花费的时间,因此T2-T1的时间差就多增加消息发给设备B途中所花费的时间,并非两者实时的时间差。同理T3-T4的时间差值就少计算了设备B回复给设备A消息途中花费的时间差,并不是设备A收到消息当时本地的时间减去此时设备A的时间,因为在设备A收到消息时,设备B的时间已经在消息回复途中增加了。因此为了尽可能保持两者时间的同步,时间差取的是平均值并非丝毫不差。
四、NTP时钟同步方式(linux)
1、直接同步:
使用ntpdate命令进行同步,直接进行时间变更。如果服务器上存在一个12点运行的计划任务,当前服务器时间是13点,但标准时间是11点,使用此命令可能会造成任务重复执行。因此使用ntpdate同步可能会引发风险,因此该命令也多用于配置时钟同步服务时第一次同步时间时使用。
2、平滑同步:
使用ntpd进行时钟同步,可以尽可能小的减少系统计划任务数量的重复执行,它每次同步时间的偏移量不会太陡,是慢慢来的。正因这样,ntpd平滑同步可能消耗的时间会比较常,一时间难以看出系统时间变化。
描述:假设设备A当前的时间是13:00,通过联系时钟同步服务器计算推算出了当前的标准时间是8:00、与标准时间差5h。如果此时设备A采用平滑同步时间的工作方式,那么设备A并不会直接将当前时间减少5h,调整到标准时间8:00。而是采用平滑的、一点一点的缩小与标准时间差。比如:一开始设备A先将本地当前时间13:00向前偏移2h,调整到11:00点;然后时间从11:00开始向后接着计时,其间设备A就重复执行了从11:00到13:00之间预先设置好的计划任务如黄色框区域所包含的计划任务。当设备A时间到了15:00时又进行了一次时间的平滑同步,将当前系统时间由15:00点向前偏移了2h,假设偏移后的时间是14:00;之后系统开始从14:00继续开始计时,其间设备A只是重复执行了第二个黄色框时间内的计划任务。当设备系统时间为19:00时,设备A又开始进行时间的平滑同步,将系统当前时间向前偏移1h变成18:00;然后继续开始计时,其间同样只是重复执行了从18:00到19:00之间第三个黄色框时间内的计划任务。通过以上过程,设备A总共执行了3次时间的平滑同步:减2h---->减2h----->减1h。设备A系统时间总共减少了5个小时,最终减少的时间和标准时间差相同以此通过几次时间平滑偏移完成了系统时间和标准时间的同步一致,并且尽可能小的减少了系统内的计划任务因时间调整重复执行的不同类型任务数量。
五、时间同步实现软件(既是客户端软件也是服务端软件)
*由于客户端系统时间经常时而不准,为了能让其在任何情况下向NTP服务器自动同步时间,需保持客户、服务端程序在后台持续运行。
1、ntp: 将主机系统时间和世界协调时间UTC进行同步,在局域网内误差可达0.1ms,在互联网内绝大地方时间误差控制在1-50ms。
2、chrony: 红帽系统8.0以后系统默认安装的ntp服务软件,可使系统时间与NTP服务器、GPS接收器以及手表进行同步。还可以作为NTP服务器为其它客户端提供时钟同步服务。在局域网内误差控制在几十微秒,在互联网上时间同步误差控制在几十毫秒内,时间同步更精准。
六、chrony时钟同步软件介绍
两个主要程序:
1、chronyd: 后台运行的NTP服务守护进程,用于将内核控制的系统时间和时钟服务器时间进行同步。并根据从NTP服务器获取的时间信息计算出标准时间差,并以此对系统时间进行补偿调整。
2、chronyc: 客户命令行工具,用于监控性能并进行多样化配置。它既可以在运行chronyd实例的计算机上进行使用,也可以在一台不同的远程计算机上进行使用。
服务单元unit文件: /usr/lib/systemd/system/chronyd.service
监听端口: 323/udp,123/udp(为了兼容老版红帽系统自带的的ntp时间同步软件)
配置文件:/etc/chrony.conf
七、/etc/chrony.conf配置文件介绍
- server-----指定本机要同步的NTP服务器IP地址或域名。iburst选项表示时间源可达时,一下子发8个数据包而不是一个数据包向服务器同步时间。包间隔为2s,可加速用户初始时间同步速度。
- driftfile----根据从时间源获取的标准时间计算出系统本身调整时间的差值,并将其记录到此处指定的文件中,以便系统重启后为调整系统时间做补偿。
- rtcsync----开启内核模式。使内核控制的系统时间每11分钟拷贝到实时时间RTC,即硬件时间内。
- allow/deny -----设置是否允许某台主机、子网、或者网络访问到本系统NTP服务。
- cmdallow/cmddeny-------指定那台主机可以通过chronyd使用控制命令。
- bindcmdaddress-----指定chronyd时间同步服务所监听的接口IP地址
- makestep------为客户端的时钟同步设置时间差阈值。只有用户系统时间偏差超过所允许的时间阈值时,进行系统时间的调整。
- local stratum 10----即使上面server指令中的时间服务器不可用,也允许将本地时间作为标准时间授时给其它客户端。我们知道NTP组网架构有层级划分:如阿里云服务器为企业内部的A1设备授时------>A1设备又为企业的A2、A3设备提供时间同步服务------->A3设备又给企业内的A4设备提供NTP服务。这样站在阿里云服务器角度,阿里云服务器就属于0层---->A1设备属于1层------>A2、3设备属于2层------>A4设备就属于3层了(层:客户机到达时钟源服务器中间所经历的其它NTP服务器跳数)。因此,"local stratum 10"就表示在server处的服务器不可访问时,本系统作为NTP服务器只给位于其下(从本服务器开始算起:服务器本身属于0层)10层内的设备提供授时服务。
八、chronyc命令
help----查询更多有关chronyc的交互命令
accheck-----指定客户端地址或域名检查其是否可以访问到本地ntp服务器
activity-----显示当前有多少NTP服务源在线/离线
sources [-v]-----显示当前时间源的同步信息
sourcestats [-v]------显示当前时间源的同步统计信息
add server ------手动添加一台新的NTP服务器(并不会保存到配置文件中)
clients -----查看有哪些客户端已访问到本服务器
delete ------手动删除NTP服务器
settime -----手动设置守护进程时间
sracking-------显示系统时间信息
九、网络公共NTP服务
cn.pool.ntp.org------虚拟化集群的ntp服务器
ntp.aliyun.com-----阿里云linux公共NTP服务器
time.pool.aliyun.com------阿里云windows的NTP服务器
s1b.time.edu.cn--------清华大学NTP服务器
210.72.145.44--------国家授时中心服务器
十、Chrony时钟同步搭建案例
实验环境:
实验描述:
NTP-Server/Client扮演客户机角色向阿里云同步时间、同时也扮演内网NTP时钟源服务器角色向内网主机Cliet提授时服务。
注意:
1、客户端系统时间与NTP服务器系统时间差过大,客户端将有可能不会执行时间同步。
2、若本机系统为时钟同步的Server和Client两种角色,当本地系统无法访问指定的服务器进行时钟同步时,则默认也不允许向其它的客户机提供授时服务。除非手动配置允许对本地客户端授时的层级。
Server端:
1、安装NTP服务客户端软件chrony(红帽8.0默认已安装)。
2、查看主机系统时间和硬件时间,为了时间同步测试将系统和硬件时间调错。
2、修改/etc/chrony.conf配置文件。
本系统向阿里云NTP服务器同步系统时间:
允许企业内部的主机访问本NTP服务:
3、防火墙放行chrony监听的UDP_323和123端口。
4、开启chronyd时钟同步服务
5、查看系统时间同步状况。
6、在NTP服务器端测试客户端能否访问到本机提供的ntp服务(可省略)。
Client端:
1、安装chrony客户端软件(红帽8.0默认已安装)。
2、修改/etc/chrony.conf配置文件来指定本机所要向哪台NTP时钟源同步时间。
3、将系统时间调错,用于测试后面同步效果。
4、开启chronyd服务,并查看chrony.conf配置文件指定的NTP服务器是否处于运行状态。
5、查看系统时间同步状况
6、切换到ntp服务器查看有哪些客户机已访问到本服务器(可省略)
@声明:“山月润无声”博主知识水平有限,以上文章如有不妥之处,欢迎广大IT爱好者指正,小弟定当虚心受教!