NTP(Network Time Protocol) 网络时间协议

NTP是用来使计算机时间同步的一种协议

通过NTP可以使计算机、服务器与时钟源进行时间的高精准度同步

LAN上与标准间差小于1毫秒,WAN上小于几十毫秒


NTP工作过程

1.NTP客户端发起时间请求

NTP客户端向NTP服务器发起时间请求,请求服务器的准确时间。这个请求通常包括客户端的当前时间戳。

通常,这是通过UDP协议的端口123完成的。NTP客户端可以是计算机、路由器、交换机或其他网络设备。

2.NTP服务器响应

NTP服务器收到客户端的请求,并在响应中包括自己的时间戳。服务器的时间通常比客户端的时间更准确。服务器的响应包括四个时间戳:T1、T2、T3、T4。

T1:客户端发送请求的时间。

T2:服务器接收到请求的时间。

T3:服务器发送响应的时间。

T4:客户端接收响应的时间。

NTP服务器可以是Stratum 1服务器(通常是高精度时间源,如原子钟或GPS时钟)或Stratum 2服务器,依次类推。

3.计算网络延迟

客户端使用T1、T2、T3、T4时间戳来计算网络延迟和时钟偏移。根据这些时间戳,客户端可以计算出网络延迟,即信号从客户端发送到服务器再返回所需的时间。你在示例中计算了延迟,这在NTP中非常重要,因为网络延迟会对时钟同步产生影响。

4.调整本地时钟

客户端使用计算得到的网络延迟和服务器的时间戳来调整自己的本地时钟。这个调整会将客户端的时钟与服务器的时钟对齐,以减小时钟偏移。

💡记住:时间同步不是一次性事件,而是定期进行的。客户端设备通常每隔一段时间(通常是每10分钟或每小时)与NTP服务器进行一次时间同步,以确保时钟的准确性。此后的时间同步交换通常只需要一次消息交换,因为客户端已经与NTP服务器建立了时间校准。


NTP层级结构

层级(Stratum)在网络时间协议(NTP)中是用来表示时钟源的分级系统。NTP的分级结构确保了高精度的时间同步,因为它允许网络中的设备根据它们与更高级别的时钟源的接近程度来选择时间源。这有助于确保即使在互联网这样复杂的网络环境中,时间同步也可以保持在可接受的范围内。

NTP使用分层的时间源系统,每个层次都称为"层",顶层的参考时钟被分配编号0。每个层的服务器与下一层的服务器同步,这种分层结构有助于防止层次结构中的循环依赖。

层级编号表示与参考时钟的距离,而不一定代表质量或可靠性。较高层的时间源通常质量更高。NTP数据包中的层字段设置为0表示未指定层级。

Stratum 0

这是最高的层级,通常由地球上的主要时间源提供,例如全球定位系统(GPS)卫星,原子钟等。Stratum 0时钟源被认为是最准确和最可信赖的。NTP服务器无法被分配到Stratum 0。

Stratum 1

这一层级包括直接与Stratum 0时钟源连接的NTP服务器。通常,这些NTP服务器是高精度的,例如使用GPS信号或原子钟,以获得准确的时间。Stratum 1服务器也称为主服务器,它们提供时间信息给下级的Stratum。

Stratum 2

Stratum 2包括那些与Stratum 1服务器同步的NTP服务器。这些服务器依赖于Stratum 1服务器提供的时间信息,但它们仍然可以提供相对高精度的时间。Stratum 2服务器通常用于局域网或其他小规模网络中。

Stratum 3

Stratum 3包括与Stratum 2服务器同步的NTP客户端。这些客户端通过网络连接到Stratum 2服务器,以获得时间同步。Stratum 3服务器通常用于更大规模的网络。

NTP的层级结构可以继续下去,一直到Stratum 15或16,这些层级通常表示未同步的设备或系统。随着层级的下降,时间同步的准确性会降低,因为每一级都会在上级的基础上添加一些网络延迟。

同一层内的时间服务器

在同一Stratum内的时间服务器之间,它们可以通过点对点通信来协商时间,以确保它们的时钟保持一致。这是通过水平箭头所示的方式实现的。

层级上限为15,层级 16 用于表示设备未同步。每台计算机上的NTP算法使用贝尔曼-福特最短路径生成树,以最小化所有客户端到第 1 层服务器的累积往返延迟。

除了层级,NTP还使用参考标识符来标识每个服务器的同步源。这有助于确定每个服务器的同步路径。

💡分层,你只要记住一句话:分层结构确保了时间同步的可靠性,因为在发生故障或问题时,系统可以切换到更高层次的时间服务器,以保持时间准确性。NTP时间服务器层次结构是NTP协议的核心,确保了时间在网络中的一致性分层结构确保了时间同步的可靠性,因为在发生故障或问题时,系统可以切换到更高层次的时间服务器,以保持时间准确性。NTP时间服务器层次结构是NTP协议的核心,确保了时间在网络中的一致性。


NTP Server搭建

NTP服务安装

yum install ntp ntpdate -y

NTP服务安装成功验证

rpm -qa | grep ntp

修改配置文件

vim /etc/ntp.conf

例:同步阿里云NTP服务器

# server 0.centos.pool.ntp.org iburst
# server 1.centos.pool.ntp.org iburst
# server 2.centos.pool.ntp.org iburst
# server 3.centos.pool.ntp.org iburst

server ntp1.aliyun.com
server ntp2.aliyun.com

启动服务

systemctl start ntpd
systemctl status ntpd

查看同步效果

ntpq -p

[root@localhost ~]# ntpq -p
     remote           refid      st t when poll reach   delay   offset  jitter
==============================================================================
 20.206.2.38     LOCAL(0)        11 u    2   64  177    3.406   19.901   1.602
*LOCAL(0)        .LOCL.           5 l   14   64  177    0.000    0.000   0.000
[root@localhost ~]# 

字段

描述

remote

本机和上层ntp的ip或主机名,“+”表示优先,“*”表示次优先

refid

参考上一层ntp主机地址

st

stratum阶层

when

多少秒前曾经同步过时间

poll

下次同步在多少秒后

reach

已经向上层ntp服务器要求更新的次数

delay

网络延迟

offset

时间补偿

jitter

系统时间与bios时间差

设置开机自启

systemctl enable ntpd

防火墙打开udp123端口

firewall-cmd --permanent --add-port=123/udp
firewall-cmd --reload
iptables -L -n