前言
网络时间协议NTP(Network Time Protocol)的主要开发者是美国特拉华大学的MILLS David L教授设计实现的,由时间协议、ICMP时间戳消息及IP时间戳选项发展而来。NTP用于将计算机客户或服务器的时间与另一服务器同步,使用层次式时间分布模型。在配置时,NTP可以利用冗余服务器和多条网络路径来获得时间的高准确性和高可靠性。即使客户机在长时间无法与某一时间服务器相联系的情况下,仍可提供高准确度时间。
实际应用中,还有确保秒级精度的简单的网络时间协议SNTP(Simple Network Time Protocol)。SNTP是NTP的一个子集,主要用于那些不需要NTP的精度以较高实现复杂性的网络时间同步客户机。SNTP协议已减少了网络延时对校对准确的影响,但没有冗余服务器和校正时钟频率误差功能。
一、ntp安装
每一台电脑都需要安装ntp,安装命令
sudo apt install ntp ntpdate
查看ntp是否启动
service --status-all
二、配置步骤
首先要选择一台电脑作为系统的服务器,其他电脑都以这台服务器为准,进行服务器的配置
sudo gedit /etc/ntp.conf
在文件末尾加入
restrict 服务器IP mask 255.255.255.0 nomodify
server 127.127.1.0
fudge 127.127.1.0 stratum 10
其中restrict后面跟的是服务器的ip地址,最后面的参数有:
ignore :关闭所有的 NTP 联机服务
nomodify :客户端不能更改服务端的时间参数,但是客户端可以通过服务端进行网络校时。
notrust :客户端除非通过认证,否则该客户端来源将被视为不信任子网
noquery :不提供客户端的时间查询:用户端不能使用ntpq,ntpc等命令来查询ntp服务器
notrap :不提供trap远端登陆:拒绝为匹配的主机提供模式 6 控制消息陷阱服务。陷阱服务是 ntpdq 控制消息协议的子系统,用于远程事件日志记录程序。
nopeer :用于阻止主机尝试与服务器对等,并允许欺诈性服务器控制时钟
kod :访问违规时发送 KoD 包。
第二行和第三行是为了让本机的硬件时间和本机的ntp服务进行时间同步。
配置完成后保存,执行
service ntp restart
(注意一下,还是有很多文章写的是ntpd, 而在ubuntu下面service对应的就是ntp)
接着,在客户端上也要打开:
sudo gedit /etc/ntp.conf
添加
server 服务器IP prefer
之后
service ntp restart
完成之后重启ntp,服务器端关闭防火墙
sudo ufw disable
在客户端执行命令:
sudo ntpdate 服务器ip地址
可能遇到的问题1: the NTP socket is in use, exiting
解决方法 在客户端处:
sudo service ntp stop
关闭ntp服务,然后在执行ntpdate即可
可能遇到的问题2: ubuntu开启防火墙时,下端设备无法进行NTP对时,因此需要关闭防火墙 或者开放NTP占用的 123端口
解决方法:
关闭防火墙:
ufw disable
ufw status 查看状态
永久关闭防火墙:chkconfig iptables off
开放端口:
iptables -t filter -A INPUT -p udp --destination-port 123 -j ACCEPT
其他
1. ntp相关命令
service ntp start 启动
service ntp stop 停止
service ntp restart 重新启动
重启后通过如下命令观察NTP的运行状态:
watch ntpq -p
这个命令可以列出目前我们的 NTP 与相关的上层 NTP 的状态,上头的几个字段的意义为:
remote: 它指的就是本地机器所连接的远程NTP服务器;
refid: 它指的是给远程服务器提供时间同步的服务器;
st: 远程服务器的层级别(stratum). 由于NTP是层型结构,有顶端的服务器,多层的Relay Server再到客户端。所以服务器从高到低级别可以设定为1-16. 为了减缓负荷和网络堵塞,原则上应该避免直接连接到级别为1的服务器的;
when: 几秒钟前曾经做过时间同步化更新的动作;
poll: 本地机和远程服务器多少时间进行一次同步(单位为秒).在一开始运行NTP的时候这个poll值会比较小,那样和服务器同步的频率也就增加了,可以尽快调整到正确的时间范围.之后poll值会逐渐增大,同步的频率也就会相应减小;
reach: 已经向上层 NTP 服务器要求更新的次数;
delay: 网络传输过程当中延迟的时间,单位为 10^(-6) 秒;
offset: 时间补偿的结果,单位与 10^(-3) 秒;
jitter: Linux 系统时间与 BIOS 硬件时间的差异时间, 单位为 10^(-6) 秒。简单地说这个数值的绝对值越小我们和服务器的时间就越精确;
*: 它告诉我们远端的服务器已经被确认为我们的主NTP Server,我们系统的时间将由这台机器所提供;
+: 它将作为辅助的NTP Server和带有号的服务器一起为我们提供同步服务. 当号服务器不可用时它就可以接管;
-: 远程服务器被clustering algorithm认为是不合格的NTP Server;
x: 远程服务器不可用;
2. ntp授时原理
NTP最典型的授时方式是Client/Server方式。如下图1所示,客户机首先向服务器发送一个NTP 包,其中包含了该包离开客户机的时间戳T1,当服务器接收到该包时,依次填入包到达的时间戳T2、包离开的时间戳T3,然后立即把包返回给客户机。客户机在接收到响应包时,记录包返回的时间戳T4。客户机用上述4个时间参数就能够计算出2个关键参数:NTP包的往返延迟d和客户机与服务器之间的时钟偏差t。客户机使用时钟偏差来调整本地时钟,以使其时间与服务器时间一致。
图中:T1为客户发送NTP请求时间戳(以客户时间为参照);T2为服务器收到NTP请求时间戳(以服务器时间为参照);T3为服务器回复NTP请求时间戳(以服务器时间为参照);T4为客户收到NTP回复包时间戳(以客户时间为参照);d1为NTP请求包传送延时,d2为NTP回复包传送延时;t为服务器和客户端之间的时间偏差,d为NTP包的往返时间。
现已经T1、T2、T3、T4,希望求得t以调整客户方时钟:
T2 = T1 + t + d1
T4 = T3 - t + d2
d = d1 + d2
假设NPT请求和回复包传送延时相等,即d1=d2,则可解得
相关链接:
【1】原理:https://www.vfe.cc/NewsDetail-2332.aspx
【2】https://blog.csdn.net/qishi_blog/article/details/52793206
【3】ntp同步:https://blog.csdn.net/w892824196/article/details/89225639
【4】错误:https://blog.csdn.net/qq_43147136/article/details/105504314
【5】https://blog.csdn.net/wofeile880_jian/article/details/79411452