searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

NTP(网络时间协议)原理与实现

2023-11-28 06:51:52
80
0

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
 
 
0条评论
0 / 1000
t****n
1文章数
0粉丝数
t****n
1 文章 | 0 粉丝
t****n
1文章数
0粉丝数
t****n
1 文章 | 0 粉丝
原创

NTP(网络时间协议)原理与实现

2023-11-28 06:51:52
80
0

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
 
 
文章来自个人专栏
探索
1 文章 | 1 订阅
0条评论
0 / 1000
请输入你的评论
0
0