NTP协议
NTP(Network Time Protocol, 网络时间协议)是基于UDP的一种用于计算机时间同步的应用层协议,NTP使用协调世界时(UTC)以极高的精度同步计算机时钟时间,例如在局域网(LAN)中低至1毫秒,在互联网上则在数十毫秒内。
NTP工作原理
NTP通过原子钟、天文台、卫星或者互联网上获取准确的时间来源,并通过不同的等级对服务器进行分层来同步时间。按照离外部UTC时间源的远近,NTP将服务器归入不同的层(Stratum)中,最顶层为有外部UTC接入的Stratum-1,而Stratum-2就会从Stratum-1获取时间,以此类推,最大层数为15层。因此,层数越大时间准确度相对越低,层数16表示未同步。
系统时钟的同步流程如下:
1. NTP客户端在T1时刻发送一个NTP请求报文给NTP服务器,该请求报文携带离开NTP客户端时的时间戳T1。
2. NTP请求报文到达NTP服务器,此时NTP服务器的时刻为T2。
3. NTP服务器处理之后,于T3时刻发出NTP应答报文。该应答报文中携带离开NTP客户端时的时间戳T1、到达NTP服务器时的时间戳T2、离开NTP服务器时的时间戳T3。
4. NTP客户端在T4时刻接收到该应答报文。
通过上面的NTP报文交互,NTP客户端获得4个时间参数,分别为T1、T2、T3、T4。由于NTP客户端和NTP服务器的时钟完全精确,我们可以通过以下公式计算出NTP客户端与NTP服务器之间的时间差,也就是NTP客户端需要调整的时间。
首先计算NTP报文从NTP客户端发送到NTP服务器所需要的时间Delay,Delay = [ ( T4 - T1 ) - ( T3 - T2 ) ] / 2
以T4时刻为例,在这个时刻点,NTP服务器发送过来的报文被NTP客户端接收到时,服务器的时刻已经为T3 + Delay。那么时间差Offset可由以下公式进行计算:T4 + Offset = T3 + Delay
公式整理之后,Offset = T3 + Delay - T4 = T3 + [ ( T4 - T1 ) - ( T3 - T2 ) ] / 2 - T4 = [ ( T2- T1 ) + ( T3 - T4 ) ] / 2。
NTP客户端根据计算得到Offset来调整自己的时钟,实现与NTP服务器的时钟同步。
NTP报文格式
NTPD
ntpd程序是一个操作系统守护进程,它将系统时钟同步到远程NTP时间服务器或本地参考时钟,是RFC 5905定义的NTPv4的完整实现,同时兼容RFC 1305定义的v3以及RFC 1059和RFC 1119定义的v1和v2。该程序可以在多种模式下运行,包括客户机/服务器、对称和广播模式等。
1. 启动ntpd后,使用ntpq -p命令可以列出目前我们的 ntp 与相关的上层 ntp 的状态,各字段的意义为
2. 配置信息。
ntpd的配置文件为/etc/ntp.conf,其中restrict用于设置访问权限,server用来设置上层时间服务器。
- restrict设置语法为
restrict IP地址 mask 子网掩码 parameter
,用于给指定的客户端访问本服务器的权限。参数主要有:
- server设置语法为
server [IP] [parameter]
,参数主要有:
IP为127.127.1.0表示将本地时钟设置为时钟源,并用fudge 127.127.1.0 stratum 1-16
设置本地时钟源的层次。
NTP测试
1. 配置:
一层服务端配置
restrict 192.168.131.0 mask 255.255.255.0 nomodify
server ntp.aliyun.com
server time1.cloud.tencent.com
server ntp.tuna.tsinghua.cn
server cn.ntp.org.cn
peer 192.168.131.129
tos orphan 5
二层服务端配置
restrict 192.168.131.0 mask 255.255.255.0 nomodify
server 192.168.131.128
server 192.168.131.129
tos orphan 5
客户端配置
server 192.168.131.130
配置完成后,重启ntpd服务。
2. 运行状态
一层服务端状态
[root@localhost ~]# ntpq -np
remote refid st t when poll reach delay offset jitter
==============================================================================
*203.107.6.88 100.107.25.114 2 u 55 64 377 63.952 -0.534 7.245
+106.55.184.199 100.122.36.196 2 u 16 64 377 68.024 2.649 15.875
101.6.6.172 .STEP. 16 u - 1024 0 0.000 0.000 0.000
36.154.179.82 .STEP. 16 u - 1024 0 0.000 0.000 0.000
+192.168.131.129 203.107.6.88 3 u 8 64 377 0.018 1.362 6.384
二层服务器状态
[root@localhost ~]# ntpq -np
remote refid st t when poll reach delay offset jitter
==============================================================================
*192.168.131.128 203.107.6.88 3 u 13 64 177 0.241 123.952 18.977
+192.168.131.129 106.55.184.199 3 u 27 64 177 0.585 89.626 25.345
客户端状态
[root@localhost ~]# ntpq -np
remote refid st t when poll reach delay offset jitter
==============================================================================
*192.168.131.130 192.168.131.128 4 u 18 64 377 0.380 -50.947 90.427
断开一台一层服务器(128)的网络连接,原先连接128的二层服务器130会切换到另一台一层服务器129。
[root@localhost ~]# ntpq -np
remote refid st t when poll reach delay offset jitter
==============================================================================
+192.168.131.128 203.107.6.88 3 u 916 128 200 0.324 -7.641 5.337
*192.168.131.129 106.55.184.199 3 u 23 128 377 0.440 14.100 6.423