2

【网络干货】NTP时间同步技术详解

 1 year ago
source link: https://zhuanlan.zhihu.com/p/138339057
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

【网络干货】NTP时间同步技术详解

一、NTP 基本原理

NTP 实现过程如图所示。RouterA 和 RouterB 通过广域网 WAN(Wide Area Network)相连,它们都有自己独立的系统时钟,通过 NTP 实现系统时钟自动同步。

作如下假设:

 在 RouterA 和 RouterB 的系统时钟同步之前, RouterA 的时钟设定为 10:00:00a.m., RouterB的时钟设定为 11:00:00a.m.。
 RouterB 作为 NTP 时间服务器, RouterA 的时钟要与 RouterB 的时钟进行同步。
 报文在 RouterA 和 RouterB 之间单向传输需要 1 秒。
 RouterA 和 RouterB 处理 NTP 报文的时间都是 1 秒。

NTP 实现图

v2-9b37c7a5489ed7e378df14257388e963_720w.webp

系统时钟的同步流程如下所示:
1. RouterA 发送一个 NTP 报文给 RouterB,该报文中带有它离开 RouterA 时的时间戳10:00:00a.m.(T1)。

2. 此 NTP 报文到达 RouterB 时, RouterB 加上到达时间戳 11:00:01a.m.(T2)。

3. 此 NTP 报文离开 RouterB 时, RouterB 再加上离开时间戳 11:00:02a.m.(T3)。

4. RouterA 接收到该响应报文时,加上新的时间戳 10:00:03a.m.(T4)。至此, RouterA 获得了足够信息来计算以下两个重要参数:

 NTP 报文来回一个周期的时延:Delay= ( T4 - T1 ) - ( T3 – T2 )。
 RouterA 相对 RouterB 的时间差:Offset= ( ( T2- T1 ) + ( T3 – T4 ) ) / 2。

5. RouterA 根据计算得到 Delay 为 2 秒, Offset 为 1 小时。RouterA 根据这些信息来设定自己的时钟,实现与 RouterB 的时钟同步。

说明:
以上是 NTP 工作原理的简略描述, RFC1305 为 NTP 定义了复杂的算法来确保时钟同步的精确性。

二、网络结构

NTP 的目的是:在一个同步子网中,主时间服务器通过 NTP 协议将时间信息传递到其他二级时间服务器,即同步二级时间服务器与主时间服务器的时钟。

这些服务器按层级关系连接,每一级称为一个层数(stratum),如:主时间服务器为 stratum 1,二级时间服务器为 stratum 2,以此类推。时钟层数越大,准确性越低。

在 NTP 的网络结构中,主要存在如下概念:

 同步子网:如图所示,由主时间服务器、二级时间服务器、客户端和它们之间互连的传输路径组成同步子网。

 主时间服务器:通过线缆或无线电直接同步到标准参考时钟,标准参考时钟通常是 RadioClock 或卫星定位系统等。

 二级时间服务器:通过网络中的主时间服务器或者其他二级服务器取得同步。二级时间服务器通过 NTP 将时间信息传送到局域网内部的其它主机。

 层数(stratum):层数是对时钟同步情况的一个分级标准,代表了一个时钟的精确度,取值范围 1~16,数值越小,精确度越高。1 表示时钟准确度最高, 16 表示未同步。

NTP 网络结构

在正常情况下,同步子网中的主时间服务器和二级时间服务器呈现出一种分层主从结构。在这种分层结构中,主时间服务器位于根部,二级时间服务器向叶子节点靠近,层数递增,准确性递减,降低的程度取决于网络路径和本地时钟的稳定性。

说明:
当同步子网中存在多台主服务器时,可通过算法来选择最优的服务器。

如此设计的目的是:
 当一台或多台主/二级时间服务器或它们之间的网络路径发生故障时,同步子网的主从分层结构将自动发生重构以获得最精确和最可靠的时间。

 当同步子网中正常使用的主时间服务器都失效,备用的主时间服务器将继续运行。

当子网中所有的主时间服务器都失效时,其它二级时间服务器将在它们内部达到同步。此时,这些二级时间服务器将脱离同步子网,自动运行在它们最后一次确定的时间和频率。由于这些计算精度很高,所以当一台具有比较稳定的振荡器的路由器长时间脱离子网时,它的计时误差可以保持在一天不大于几毫秒。

三、NTP 的工作模式

设备可以采用多种 NTP 工作模式进行时间同步:

 单播服务器/客户端模式
 对等体模式
 广播模式
 组播模式
 多播模式

用户可以根据需要选择合适的工作模式。在不能确定服务器或对等体 IP 地址、网络中需要同步的设备数量很多等情况下,可以通过广播或组播模式实现时钟同步;服务器和对等体模式中,设备从指定的服务器或对等体获得时钟同步,增加了时钟的可靠性。

单播服务器/客户端模式

单播服务器/客户端模式运行在同步子网中层数较高层上。这种模式下,需要预先知道服务器的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 结构对应于一个连接。单台设备支持的连接数最多为 128。当连接数超过 128 时,将无法建立新的连接。

四、NTP 访问控制

当同步子网中的一台时间服务器发生意外或遭到恶意攻击时,通常不应该导致子网中其它时间服务器的计时错误。因此, NTP 还提供了如下安全机制:访问权限、 KOD 和 NTP 认证功能。这样就对网络的安全性提供了保障。

访问权限

设备提供一种比较简单安全措施:访问权限,即通过设置访问权限对本地时钟进行保护。

NTP 的访问控制基于访问控制列表 ACL(Access Control List)实现。NTP 支持 5 个等级的访问限制,每个访问限制可指定相应的 ACL 规则。如果 NTP 访问请求命中该访问限制的 ACL 规则,则说明两者匹配成功,即该访问请求享有此级别的访问限制。

当 1 个 NTP 访问请求到达本地时,按照最小访问限制到最大访问限制依次匹配,以第 1 个匹配的为准,匹配顺序如下:

1. peer:(最大访问权限)可以对本地时钟进行时间请求和控制查询,本地时钟也可以同步到远程服务器。
2. server:可以对本地时钟进行时间请求和控制查询,但本地时钟不会同步到远程服务器。
3. synchronization:只允许对本地时钟进行时间请求。
4. query:(最小访问权限)只允许对本地时钟进行控制查询。
5. limited:仅在使能 KOD 功能后生效。在使能 KOD 后控制入方向报文的速率并且发送 Kiss码。

KOD

当单位时间内,服务器收到大量客户端访问报文导致无法负荷时,可在服务器上使能 KOD(Kiss-o'-Death)功能来进行接入控制。KOD 是 NTPv4 提出的一种全新的访问控制技术,主要用于服务器向客户端提供状态报告和接入控制等信息。

KOD 报文是特殊的 NTP 报文,当 NTP 报文携带的层数(Stratum)信息为 0 时,该报文被称为KOD 报文,此时报文中会携带代表接入控制信息的 ASCII(又称 Kiss 码)。目前仅支持 DENY和 RATE 两种 Kiss 码。

在服务器上使能 KOD 功能后,服务器会根据配置向客户端发送 DENY 或 RATE Kiss 码。

说明:
使能 KOD 功能后,还需要配置相应的 ACL 规则。当 ACL 规则为 deny,此时服务器发送 DENY Kiss 码;当 ACL 规则为 permit 且接收到的 NTP 报文速率达到配置的上限时,此时服务器发送RATE Kiss 码。

 当客户端接收到 DENY Kiss 码,客户端将断开与服务器的所有连接,并停止向服务器发送报文。

 当客户端接收到 RATE Kiss 码,客户端将立即缩短与该服务器的轮询时间间隔,且以后每次接收到 RATE Kiss 码,轮询时间间隔都会进一步缩短。

认证功能

在安全性要求较高的网络中,可以启用 NTP 认证功能。不同工作模式下可配置不同的密钥。

当用户在某一 NTP 工作模式下启用 NTP 认证时,系统会记录下此工作模式下相应的密钥 ID。

 发送过程
首先判断在此工作模式下是否需要认证。如果不需要则直接发送报文;如果需要则根据相应密钥 ID 和加密算法对报文进行加密,然后发送报文。

说明:
目前设备只支持 MD5 的密钥验证算法。

接受过程
在接受报文时,首先判断是否要对报文进行认证处理。如果不需要认证,则直接对报文进行后续处理;如果需要认证,则根据对应密钥 ID 和解密算法来认证。如果认证失败,则直接丢弃报文;如果认证通过,则对接收到的报文进行处理


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK