六千字详细图解网络时间协议(NTP),带你领略NTP的魅力!
来源:网络技术联盟站
你好,这里是网络技术联盟站。
时间是我们日常生活的重要组成部分,而在数字时代,时间同步也在计算机和网络系统中扮演着至关重要的角色。网络时间协议(Network Time Protocol,NTP)是一种用于确保网络中各个设备保持准确时间的关键协议。随着互联网的普及和数字技术的不断发展,NTP变得愈加重要,影响着多个领域,从通信和安全到金融和医疗。
本文瑞哥将带大家详细学习一下NTP协议,希望看了本文,您能够有所收货,让我们直接开始!
目录:
一、什么是NTP?
1.1 为什么要同步网络时间?
1.2 NTP协议的发展历程
1.3 NTP的特点
二、NTP的工作原理
2.1 NTP的层级结构
2.2 NTP工作过程
2.3 时间戳
2.4 NTP的时间同步过程
三、配置NTP
3.1 网络设备
3.2 服务器
四、总结
一、什么是NTP?
NTP,英文全称:Network Time Protocol
,中文全名网络时间协议,是一种用于在计算机网络中同步设备时钟的协议。
它的主要目标是确保网络中的各个设备都具有一致的时间参考,以便它们可以协同工作,进行时间戳记录、数据同步和各种计算任务。NTP采用分层结构来确保时间同步,使网络中的所有设备都能获得准确的时间信息。
1.1 为什么要同步网络时间?
说白了,同步网络时间就是为了应对许多应用和系统对时间的准确性要求非常高的问题,简单罗列一下原因就是:
许多应用程序和系统使用时间戳来记录事件的发生顺序。即使是微小的时间差异,如毫秒级别的差异,都可能导致事件顺序错误,对于事务的准确性和可靠性非常关键。
在一些关键应用中,如金融交易和网络通信,即使是短暂的停机都可能导致巨大的损失。通过同步网络时间,可以确保各种网络设备和应用的时间保持一致,从而避免因时间不同步而导致的问题。
在网络故障排除和恢复中,准确的时间信息对于确定问题的根本原因和追踪故障非常重要。同步网络时间可以帮助精确地记录事件时间戳,有助于快速诊断和修复问题。
许多行业和组织面临合规性和法规要求,其中要求保持时间同步以确保数据的准确性和完整性。同步网络时间有助于满足这些法规要求。
在科学研究和实验中,时间的准确性对于数据采集和分析至关重要。同步网络时间可确保实验结果的可重复性和准确性。
1.2 NTP协议的发展历程
1979 年: NTP的最早应用可以追溯到国家计算机会议,它首次被用于跨大西洋卫星网络上运行的互联网服务的公开演示。 1981 年: NTP的描述记录在互联网工程说明(IEN)173中,成为公共协议,并记录在RFC 778中。它首先作为Hello路由协议的一部分部署在局域网中。 1985 年: NTP版本0(NTPv0)在Fuzzball和Unix中实现,相关信息包括NTP数据包标头以及往返延迟和偏移计算记录在RFC 958中。尽管当时计算机和网络相对较慢,NTP仍然可以实现较高的时间精度。 1988 年: 更完整的NTPv1协议规范和相关算法记录在RFC 1059中。它是第一个描述客户端-服务器和对等模式的版本。 1991 年: David L. Mills的文章在IEEE Transactions on Communications上引起了对NTPv1架构、协议和算法的广泛关注。 1989 年: RFC 1119定义了NTPv2,引入了管理协议和加密身份验证方案,以及大部分算法,这些内容都保留到了NTPv4中。 1992 年: RFC 1305定义了NTPv3,引入了广播模式,以及对所有错误源的分析,帮助选择最佳服务器。 2010 年: RFC 5905发布,包含NTPv4的拟议规范。NTPv4取得了显著的进展,引入了新功能和算法改进。 2022 年: NTP协议继续演进,发布了多份描述协议更新的RFC文档,包括NTS(Network Time Security)等众多外围标准。尽管有“NTPv5”的计划,但该版本尚未发布。
1.3 NTP的特点
NTP是一种高度可靠且灵活的时间同步协议,适用于各种网络环境和应用场景。
全球时间标准: NTP提供了一个全球性的时间标准,即协调世界时(UTC)。UTC被广泛接受为全球时间参考,而NTP的目标是将所有参与的计算机同步到UTC的几毫秒内。
自动寻找可靠时间服务器: NTP使用自动发现机制,可以查找可靠的时间服务器,以确保高质量的时间同步。它可以从多个时间源收集数据,然后通过算法选择最可靠的时间源,从而减少错误的影响。
灵活的扩展性: NTP的架构允许在网络中包含多个参考时钟。这意味着可以在网络中部署多个时间服务器,以提供高可用性和冗余。此外,NTP可以以点对点或分层广播的方式传播时间信息,以适应不同的网络拓扑。
高精度: NTP能够提供高精度的时间同步,通常在毫秒或亚毫秒级别。通过选择合适的同步候选者和使用精密的算法,NTP可以实现高度准确的时间同步。
恢复能力: 当网络连接存在问题时,NTP可以通过使用历史数据或考虑时差来提供帮助。这使得NTP在网络不稳定或有中断的情况下能够持续提供可靠的时间同步。
二、NTP的工作原理
2.1 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协议的核心,确保了时间在网络中的一致性。
2.2 NTP工作过程
NTP请求报文发送: 客户端首先向NTP服务器发送一个NTP请求报文。这个请求报文包含了客户端的当前本地时间戳t1,即报文离开客户端的时间。客户端需要知道这个时间戳,以便后续计算时间同步。
NTP请求报文到达服务器: NTP请求报文在经过网络传输后,到达NTP服务器。在这个时刻,服务器的本地时钟时间为t2。当服务器接收到请求报文时,它将记录t2作为报文到达NTP服务器的时间戳。
NTP应答报文发送: 服务端处理接收到的请求报文,并在t3时刻发出NTP应答报文。这个应答报文包括了以下时间戳信息:
t1:请求报文离开客户端时的时间戳。 t2:请求报文到达NTP服务器时的时间戳。 t3:应答报文离开NTP服务器时的时间戳。
NTP应答报文到达客户端: 客户端在接收到NTP应答报文后,记录报文返回的时间戳t4。这个时间戳表示应答报文到达客户端的时间。
T1是客户端发送NTP请求报文的时间戳,T4是客户端接收NTP应答报文的时间戳。比如,T1 = 50秒,T4 = 70秒。
T2是NTP服务器接收NTP请求报文的时间戳,T3是NTP服务器发送NTP应答报文的时间戳。比如,T2 = 80秒,T3 = 90秒。
往返时间(Round-Trip Time,RTT)是客户端发送请求到收到应答的总时间。可以通过计算T4 - T1来得到RTT:RTT = T4 - T1 = 70秒 - 50秒 = 20秒。
由于服务器在T2时刻接收到请求,并在T3时刻发送响应,所以服务器在处理请求和生成响应之间花费的时间为T3 - T2 = 90秒 - 80秒 = 10秒。
从客户端发送请求到服务器接收请求之间的时间,计算为T2 - T1 = 80秒 - 50秒 = 30秒。
服务器接收请求后处理请求的时间,计算为T3 - T2 = 90秒 - 80秒 = 10秒。
客户端估计服务器响应到达客户端所花费的时间。比如,客户端通过RTT的一半来估计延迟,因为RTT包括了请求到达服务器和响应返回客户端的总时间。所以客户端估计的延迟是 (RTT / 2) = 20秒 / 2 = 10秒。
客户端通过从服务器接收的准确时间(T3)减去客户端估计的延迟(10秒),来调整客户端的本地时钟。这将确保客户端的时钟与NTP服务器的时钟同步,即客户端时钟应该比实际时间快10秒,因此减去10秒,时钟将与服务器同步。
2.3 时间戳
NTP的时间戳是其成功的关键组成部分,它使NTP能够提供高精度和可靠的时间同步,适用于各种领域,包括计算机网络、通信和科学研究。
时间戳格式: NTP使用64位二进制定点时间戳,这个时间戳由两部分组成。前32位表示秒数,后32位表示秒的小数部分。这个时间戳提供了一个时间尺度,每隔2^32秒(约136年)会滚动一次,理论分辨率为2^-32秒(约233皮秒)。 纪元: NTP使用1900年1月1日作为纪元,这意味着时间戳的时间起点是从这一日期开始计算的。因此,NTP的时间戳可以跟踪从1900年1月1日以来的时间。 第一次轮转: 由于NTP的时间尺度是每2^32秒滚动一次,因此第一次轮转发生在2036年2月7日。这意味着NTP时间戳可以提供准确的时间表示,直到2036年。 NTPv4时间戳: NTPv4引入了128位日期格式,其中64位表示秒,另外64位表示秒的小数部分。这个格式中最重要的32位是纪元号,它有助于解决时间翻转的歧义问题。NTPv4的时间戳设计旨在提供足够的精度和范围,以满足各种应用程序对时间的需求。 时间精度: 根据NTP的创建者David L. Mills的说法,时间戳中的64位值足以解析光子以光速通过电子所需的时间,而32位秒值足以提供明确的时间表示,直到宇宙变得暗淡。这显示了NTP的时间戳设计的出色精度和范围。
2.4 NTP的时间同步过程
NTP通过时间戳和网络延迟计算来调整本地时钟,以确保系统时钟与NTP服务器的时钟尽可能一致,实现高精度的时间同步。
第一步、NTP客户端发起时间请求
NTP客户端向NTP服务器发起时间请求,请求服务器的准确时间。这个请求通常包括客户端的当前时间戳。
通常,这是通过UDP协议的端口123完成的。NTP客户端可以是计算机、路由器、交换机或其他网络设备。
第二步、NTP服务器响应
NTP服务器收到客户端的请求,并在响应中包括自己的时间戳。服务器的时间通常比客户端的时间更准确。服务器的响应包括四个时间戳:T1、T2、T3、T4。
T1:客户端发送请求的时间。 T2:服务器接收到请求的时间。 T3:服务器发送响应的时间。 T4:客户端接收响应的时间。
NTP服务器可以是Stratum 1服务器(通常是高精度时间源,如原子钟或GPS时钟)或Stratum 2服务器,依次类推。
第三步、计算网络延迟
客户端使用T1、T2、T3、T4时间戳来计算网络延迟和时钟偏移。根据这些时间戳,客户端可以计算出网络延迟,即信号从客户端发送到服务器再返回所需的时间。你在示例中计算了延迟,这在NTP中非常重要,因为网络延迟会对时钟同步产生影响。
第四步、调整本地时钟
客户端使用计算得到的网络延迟和服务器的时间戳来调整自己的本地时钟。这个调整会将客户端的时钟与服务器的时钟对齐,以减小时钟偏移。
💡请记住:时间同步不是一次性事件,而是定期进行的。客户端设备通常每隔一段时间(通常是每10分钟或每小时)与NTP服务器进行一次时间同步,以确保时钟的准确性。此后的时间同步交换通常只需要一次消息交换,因为客户端已经与NTP服务器建立了时间校准。
三、配置NTP
3.1 网络设备
网络设备这里我们以思科为例。
拓扑图
如上图,R1充当NTP服务器,R2是NTP客户端。它们之间有一条物理连接,以及Loopback0接口作为NTP通信的源地址。 R1提供时间同步服务,而R2从R1同步时间。
配置服务端(R1):
进入配置模式:
R1# configure terminal
配置Loopback0接口并设置IP地址:
R1(config)# interface Loopback0
R1(config-if)# ip address 1.1.1.1 255.255.255.255
这里我们使用Loopback0接口作为NTP服务器的源地址,IP地址为1.1.1.1。
配置Loopback0接口为OSPF区域0:
R1(config-if)# ip ospf 1 area 0
配置FastEthernet0/0接口并设置IP地址:
R1(config)# interface FastEthernet0/0
R1(config-if)# ip address 10.1.1.1 255.255.255.0
这是服务端和客户端之间的物理接口。
配置FastEthernet0/0接口为OSPF区域0:
R1(config-if)# ip ospf 1 area 0
更改时区为中国标准时间(GMT+8):
R1(config)# clock timezone GMT +8
设置服务器的时间,例如将时间设置为2023年11月6日16点00分00秒:
R1# clock set 16:00:00 6 nov 2023
配置R1为NTP主服务器(stratum 1):
R1(config)# ntp master 1
这表示R1将充当NTP主服务器,提供时间同步。
指定NTP源为Loopback0接口:
R1(config)# ntp source loopback 0
这会确保NTP报文使用Loopback0接口的IP地址。
配置客户端(R2):
进入配置模式:
R2# configure terminal
配置Loopback0接口并设置IP地址:
R2(config)# interface Loopback0
R2(config-if)# ip address 2.2.2.2 255.255.255.255
配置Loopback0接口为OSPF区域0:
R2(config-if)# ip ospf 1 area 0
配置FastEthernet0/0接口并设置IP地址:
R2(config)# interface FastEthernet0/0
R2(config-if)# ip address 10.1.1.2 255.255.255.0
配置FastEthernet0/0接口为OSPF区域0:
R2(config-if)# ip ospf 1 area 0
更改时区为中国标准时间(GMT+8):
R2(config)# clock timezone GMT +8
指定NTP服务器的IP地址,例如1.1.1.1:
R2(config)# ntp server 1.1.1.1
这将告诉R2去同步来自1.1.1.1的时间。
指定NTP源为Loopback0接口:
R2(config)# ntp source loopback 0
如果可以访问互联网,你也可以使用公共NTP服务器:
R2(config)# ntp server 202.112.10.36 source FastEthernet0/0
这将使用互联网的NTP服务器同步时间。
验证NTP同步状态和时间设置:
R2# show clock
R2# show ntp status
3.2 服务器
这里以Ubantu系统为例。
拓扑图
如上图,我们有两台机器,一个是NTP Client,一个是NTP Server。
配置NTP 服务器
步骤 1: 安装NTP软件
sudo apt update
sudo apt install ntp
步骤 2: 配置NTP服务器
编辑NTP服务器的配置文件以充当NTP服务器。打开终端并运行以下命令:
sudo nano /etc/ntp.conf
在文件中,找到并编辑以下行,将其配置为NTP服务器。您可以选择是否允许其他客户端与您的NTP服务器同步时间:
# 允许其他客户端同步时间
restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap
# 使用本地时钟作为参考
server 127.127.1.0
fudge 127.127.1.0 stratum 10
步骤 3: 重启NTP服务
保存配置文件并重新启动NTP服务以使更改生效:
sudo systemctl restart ntp
验证NTP 服务器配置
您可以使用以下命令来验证NTP服务器的配置:
检查NTP状态
使用以下命令来查看NTP服务器的状态和同步信息:
ntpq -p
检查系统时间
使用以下命令来查看当前系统时间:
date
配置NTP 客户端
步骤 1: 安装NTP软件
如果您的系统尚未安装NTP软件,请打开终端并运行以下命令以安装:
sudo apt update
sudo apt install ntp
步骤 2: 配置NTP客户端
编辑NTP客户端的配置文件以指定NTP服务器。打开终端并运行以下命令:
sudo nano /etc/ntp.conf
在文件中,找到并编辑以下行以添加或修改NTP服务器。将your_ntp_server_ip
替换为实际的NTP服务器IP地址:
# 指定NTP 服务器
server your_ntp_server_ip
步骤 3: 重启NTP服务
保存配置文件并重新启动NTP服务以使更改生效:
sudo systemctl restart ntp
验证NTP 客户端配置
您可以使用以下命令来验证NTP客户端的配置:
检查NTP状态
使用以下命令来查看NTP服务器的状态和同步信息:
ntpq -p
检查系统时间
使用以下命令来查看当前系统时间:
date
四、总结
今天的文章总结,我就不为了写总结而写,我简单的概述一下NTP的协议,希望大家看这里的总结,就能快速的了解NTP协议。
NTP是一种网络协议,用于实现计算机系统之间的时钟同步,通过数据包交换在可变延迟的数据网络上运行。 NTP的起源可以追溯到1985年,是互联网中最古老的协议之一,由特拉华大学的David L. Mills设计。 NTP的目标是将参与的计算机同步到协调世界时(UTC)的几毫秒内,通过采用交叉算法来减轻可变网络延迟的影响。 NTP通常可以在公共互联网上维持时间准确性在几十毫秒以内,在理想条件下,它在局域网中可以达到更好的一毫秒精度,但不对称路由和网络拥塞可能会导致更大的误差。 NTP的工作模型通常采用客户端-服务器模型,但也可以在对等关系中使用,其中双方都可以充当潜在的时间源。 NTP使用用户数据报协议(UDP)在端口号123上发送和接收时间戳,同时支持广播或多播方式。 NTP负责闰秒的警告,但不负责传输有关本地时区或夏令时的信息。 当前协议版本是NTPv4,向后兼容NTPv3。