大家好,欢迎来到IT知识分享网。
NTP基础概念
网络时间协议NTP(Network Time Protocol)是TCP/IP协议族里面的一个应用层协议。
NTP用于在一系列分布式时间服务器与客户端之间同步时钟。NTP的实现基于IP和UDP。NTP报文通过UDP传输,端口号是123。
随着网络拓扑的日益复杂,整个网络内设备的时钟同步将变得十分重要。如果依靠管理员手工修改系统时钟,不仅工作量巨大,而且时钟的准确性也无法得到保证。NTP的出现就是为了解决网络内设备系统时钟的同步问题。
NTP主要应用于网络中所有设备时钟需要保持一致的场合,比如:
- 网络管理:对从不同路由器采集来的日志信息、调试信息进行分析时,需要以时间作为参照依据。
- 计费系统:要求所有设备的时钟保持一致。
- 多个系统协同处理同一个复杂事件:为保证正确的执行顺序,多个系统必须参考同一时钟。
- 备份服务器和客户机之间进行增量备份:要求备份服务器和所有客户机之间的时钟同步。
- 系统时间:某些应用程序需要知道用户登录系统的时间以及文件修改的时间。
NTP是从时间协议和ICMP时间戳报文演变而来,在准确性和健壮性方面进行了特殊的设计。
NTP工作机制
NTP客户端和NTP服务器相连,它们都有自己独立的系统时钟,现在通过NTP实现系统时钟自动同步。设定参数及同步方式如下:
- 在NTP客户端和NTP服务器的系统时钟同步之前,NTP客户端的时钟设定为Ta,NTP服务器的时钟设定为Tb。
- NTP服务器作为NTP时间服务器,NTP客户端的时钟要与NTP服务器的时钟进行同步。
- 这里描述的原理是在NTP客户端和NTP服务器的系统时钟精度为0,即完全精确的场景下进行的。
同步算法
- NTP客户端在T1时刻发送一个NTP请求报文给NTP服务器,该请求报文携带离开NTP客户端时的时间戳T1。
- NTP请求报文到达NTP服务器,此时NTP服务器的时刻为T2。NTP服务器处理之后,于T3时刻发出NTP应答报文。该应答报文中携带离开NTP客户端时的时间戳T1、到达NTP服务器时的时间戳T2、离开NTP服务器时的时间戳T3。
- NTP客户端在T4时刻接收到该应答报文。
通过上面的NTP报文交互,NTP客户端获得4个时间参数,分别为T1、T2、T3、T4。由于NTP客户端和NTP服务器的时钟完全精确,我们可以通过以下公式计算出NTP客户端与NTP服务器之间的时间差,也就是NTP客户端需要调整的时间。
- 计算NTP报文从NTP客户端发送到NTP服务器所需要的时间Delay。
- Delay = [ ( T4 – T1 ) – ( T3 – T2 ) ] / 2
- 计算NTP客户端与NTP服务器之间的时间差Offset。
- 以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的网络结构中,主要存在如下概念:
- 同步子网:由主时间服务器、二级时间服务器、PC客户端和它们之间互连的传输路径组成同步子网。
- 主时间服务器:通过线缆或无线电直接同步到标准参考时钟,标准参考时钟通常是Radio Clock或卫星定位系统等。
- 二级时间服务器:通过网络中的主时间服务器或者其他二级服务器取得同步。二级时间服务器通过NTP将时间信息传送到局域网内部的其它主机。
- 层数(stratum):层数是对时钟同步情况的一个分级标准,代表了一个时钟的精确度,取值范围1~15,数值越小,精确度越高。1表示时钟精确度最高,15表示未同步。
在正常情况下,同步子网中的主时间服务器和二级时间服务器呈现出一种分层主从结构。在这种分层结构中,主时间服务器位于根部,二级时间服务器向叶子节点靠近,层数递增,准确性递减,降低的程度取决于网络路径和本地时钟的稳定性。
如此设计的目的是:
- 当一台或多台主/二级时间服务器或它们之间的网络路径发生故障时,同步子网的主从分层结构将自动发生重构以获得最精确和最可靠的时间。
- 当同步子网中正常使用的主时间服务器都失效,备用的主时间服务器将继续运行。
当子网中所有的主时间服务器都失效时,其它二级时间服务器将在它们内部达到同步。此时,这些二级时间服务器将脱离同步子网,自动运行在它们最后一次确定的时间和频率。由于这些路由器计算精度很高,所以当一台具有比较稳定的振荡器的路由器长时间脱离子网时,它的计时误差可以保持在一天不大于几毫秒。
当同步子网中存在多台主时间服务器时,可通过算法来选择最优的服务器。
NTP的工作模式
设备可以采用多种NTP工作模式进行时间同步:
一、单播服务器/客户端模式
单播服务器/客户端模式运行在同步子网中层数较高层上。这种模式下,需要预先知道服务器的IP地址。
客户端:运行在客户端模式的主机(简称客户端)定期向服务器端发送报文,报文中的Mode字段设置为3(客户端模式)。当客户端接收到应答报文时,客户端会进行时钟过滤和选择,并同步到时钟优选的服务器。
- 客户端不管服务器端是否可达及服务器端的层数。
- 运行在这种模式的主机,通常是网络内部的工作站,它可以依照对方的时钟进行同步,但不会修改对方的时钟。
服务器:运行在服务器模式(简称服务器)的主机接收并回应报文,报文中的Mode字段设置为4(服务器模式)。
- 运行在服务器模式的主机,通常是网络内部的时间服务器,它可以向客户端提供同步信息,但不会修改自己的时钟。
- 运行在客户端模式的主机在重新启动时和重新启动后定期向运行在服务器模式的主机发送NTP报文。
- 服务器收到客户端的报文后,首先将报文的目的IP地址和目的端口号分别与其源IP地址和源端口号相交换,再填写所需的信息,然后把报文发送给客户端。
服务器无需保留任何状态信息,客户端根据本地情况自由管理发送报文的时间间隔。
二、对等体模式
对等体模式运行在同步子网中层数较低处。这种模式下,主动对等体和被动对等体可以互相同步,等级低(层数大)的对等体向等级高(层数小)的对等体同步。
- 对等体模式下,主动对等体会发起Mode字段为3(客户端模式)NTP报文,由被动对等体响应4(服务器模式)的NTP报文。这一交互过程主要是为了获得网络延迟,使两端设备进入对等体模式。
- 主动对等体:运行在这一模式下的主机定期发送报文,报文中的Mode字段设置为1(主动对等体)。不考虑它的对等体是否可达以及对等体的层数。运行在这一模式下的主机可以向对方提供同步信息,也可以依照对方的时间信息同步本地时钟。
- 被动对等体:运行在这一模式的主机接收并回应报文,报文中的Mode字段设置为2(被动对等体)。运行在被动对等体模式的主机可以向对方提供同步信息,也可以依照对方的时间信息同步本地时钟。
被动对等体不需要用户配置,只有当本机收到NTP报文时才建立连接及相关的状态变量。
三、广播模式
广播模式应用在有多台工作站、不需要很高的准确度的高速网络。典型的情况是网络中的一台或多台时间服务器定期向工作站发送广播报文,广播报文在毫秒级的延迟基础上确定时间。
广播服务器:
运行在广播模式下,周期性向广播地址255.255.255.255发送时钟同步报文,报文中的Mode字段设置为5(广播模式或组播模式)。不管它的对等体是否可达或层数为多少。
运行在广播模式的主机通常是网络内运行高速广播介质的时间服务器,向所有对等体提供同步信息,但不会修改自己的时钟。
广播客户端:
客户端侦听来自服务器的时钟同步报文。当接收到第一个时钟同步报文,客户端与服务器交互Mode字段为3(客户端模式)和4(服务器模式)的NTP报文,即客户端先启用一个短暂的服务器/客户端模式与远程服务器交换消息,以获得客户端与服务器间的网络延迟。之后恢复广播模式,继续侦听时钟同步报文的到来,根据到来的时钟同步报文对本地时钟再次进行同步。
四、组播模式
组播模式适用于有大量客户端分布在网络中的情况。通过在网络中使用NTP组播模式,NTP服务器发送的组播消息包可以到达网络中所有的客户端,从而降低由于NTP报文过多而给网络造成的压力。
组播服务器:服务器端周期性向组播地址发送时钟同步报文,报文中的Mode字段设置为5(广播模式或组播模式)。运行在组播模式的主机通常是网络内运行高速广播介质的时间服务器,向所有对等体提供同步信息,但不会修改自己的时钟。
组播客户端:客户端侦听来自服务器的组播消息包。当客户端接收到第一个组播报文后,客户端与服务器交互Mode字段为3(客户端模式)和4(服务器模式)的NTP报文,即客户端先启用一个短暂的服务器/客户端模式与远程服务器交换消息,以获得客户端与服务器间的网络延迟。之后,客户端恢复组播模式,继续侦听组播消息包的到来,根据到来的组播消息包对本地时钟进行同步。
五、多播模式
多播模式适用于服务器分布分散的网络中。客户端可以发现与之最近的多播服务器,并进行同步。多播模式适用于服务器不稳定的组网环境中,服务器的变动不会导致整网中的客户端重新进行配置。
多播客户端:多播模式下的客户端周期性地向IPv4/IPv6组播地址发送请求报文(Mode字段设置为3)。当客户端接收到应答报文时,客户端会进行时钟过滤和选择,并同步到时钟优选的服务器。
多播服务器:多播服务器持续侦听报文。若某个服务器可以被同步,则服务器将使用客户端的单播地址返回报文(Mode字段设置为4)。
为了防止多播模式下,客户端不断的向多播服务器发送NTP请求报文增加设备的负担,协议规定了最小连接数的概念。多播模式下,客户端每次和服务器时钟同步后,都会记录下此次同步过程中建立的连接数,将调用最少连接的数量称为最小连接数。
以后当客户端调动的连接数达到了最小连接数且完成了同步,客户端就认为同步完成;同步完成后每过一个超时周期,客户端都会传送一个报文,用于保持连接。同时,为了防止客户端无法同步到服务器,协议规定客户端每发送一个NTP报文,都会将报文的生存时间TTL(Time To Live)进行累加(初始为1),直到达到最小连接数,或者TTL值达到上限(上限值为255)。
若TTL达到上限,或者达到最小连接数,而客户端调动的连接数仍不能完成同步过程,则客户端将停止一个超时周期的数据传输以清除所有连接,然后重复上述过程。
在NTP模块实现中,对每一个同步源都建立了一个PEER结构,并把这些PEER结构以Hash的形式存储成链状。每一个PEER结构对应于一个连接。
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/59479.html