参考:
http://baike.baidu.com.cn/view/60648.htm
http://www.enhan.com.cn/blog/index.php/tech/520
网络时间协议NTP是用于互联网中时间同步的标准之一,它的用途是把计算机的时钟同步到世界协调时UTC,其精度在局域网内可达0.lms,在Internet上绝大多数的地方其精度可以达到1- 50ms .
1 NTF协议发展史
1.1 v0版本
网络时间协议(NTP)的首次实现记载在Internet Engineering Note之中,其精确度为数百毫秒。
稍后出现了首个时间协议的规范,即RFC-778,它被命名为DCNET互联网时间服务,而它提供这种服务还是借助于Internet control Message Protocol (ICMP),即互联网控制消息协议中的时间戳和时间戳应答消息作为NTP。
名称的首次出现是在RFC-958之中,该版本也被称为NTP v0,其目的是为ARPA网提供时间同步。它己完全脱离ICMP,是作为独立的协议以完成更高要求的时间同步,它对于如本地时钟的误差估算和精密度等基本运算、参考时钟的特性、网络上的分组数据包及其消息格式进行了描述。但是不对任何频率误差进行补偿,也没有规定滤波和同步的算法。
1.2 v1版本
美国特拉华大学(University of Delaware)的David L .Mills主持了由美国国防部高级研究计划局DARPA、美国国家科学基金NSF和美国海军水面武器中心NSWC资助的网络时间同步项目,成功的开发出了NTP协议的第1, 2, 3版。
NTP version 1 出现于1988年6月,在RFC-1059中描述了首个完整的NTP的规范和相关算法。
这个版本已经采用了client/server模式以及对称操作,但是它不支持授权鉴别和NTP的控制消息。
1.3 v2版本
1989年9月推出了取代RFC-958和RFC-1059的NTP v2版本即RFC-1119。
1.4 v3版本
几乎同时,DEC公司也推出了一个时间同步协议,数字时间同步服务DTSS(Digital Time Synchronization Service)。
在1992 年3月,NTP v3版本RFC-1305问世。
该版本总结和综合了NTP先前版本和DTSS,正式引入了校正原则,并改进了时钟选择和时钟滤波的算法,而且还引入了时间消息发送的广播模式,这个版本取代了NTP的先前版本。
1.5 v4版本
NTP v 3 发布后,一直在不断地进行改进,NTP实现的一个重要功能是对计算机操作系统的时钟调整。在NTP v3研究和推出的同时,有关在操作系统核心中改进时间保持功能的研究也在并行地进行。
1994年推出了RFC-1589,名为A KernelModel for Precision Time keening,即精密时01保持的核心模式,这个实现可以把计算机操作系统的时间精确度保持在微秒数量级。
几乎同时,改进建议对本地时钟调整算法,通信模式,新的时钟驱动器,又提出了NTP v4适配规则等方面的改进描述了具体方向。截止到2010年6月,最新的NTP版本是第4版(NTPv4),其标准化文档为 RFC 5905,它继承自RFC 1305所描述的NTP v3。
2 工作原理
2.1 简述
NTP提供准确时间,首先要有准确的时间来源,这一时间应该是国际标准时间UTC。NTP获得UTC的时间来源可以是原子钟、天文台、卫星,也可以从Internet上获取。这样就有了准确而可靠的时间源。时间按NTP服务器的等级传播。按照离外部UTC 源的远近将所有服务器归入不同的Stratum(层)中。Stratum-1在顶层,有外部UTC接入,而Stratum-2则从Stratum-1获取时间,Stratum-3从Stratum-2获取时间,以此类推,但Stratum层的总数限制在15以内。所有这些服务器在逻辑上形成阶梯式的架构相互连接,而Stratum-1的时间服务器是整个系统的基础。
计算机主机一般同多个时间服务器连接, 利用统计学的算法过滤来自不同服务器的时间,以选择最佳的路径和来源来校正主机时间。即使主机在长时间无法与某一时间服务器相联系的情况下,NTP服务依然有效运转。为防止对时间服务器的恶意破坏,NTP使用了识别(Authentication)机制,检查来对时的信息是否是真正来自所宣称的服务器并检查资料的返回路径,以提供对抗干扰的保护机制。
2.2 网络结构
同步子网由主时间服务器、二级时间服务器、客户端和它们之间互连的传输路径组成,如下图:
- 主时间服务器直接同步到主参考时钟,主参考时钟通常是Radio Clock 或卫星定位系统等。
- 二级时间服务器通过网路中的主时间服务器或者其它二级服务器取得同步。二级时间服务器通过NTP 将时间信息传送到局域网内部的其它主机。
在正常情况下,同步子网中的主服务器和次级服务器呈现出一种分层主从结构,在这种分层结构中,主服务器位于根部,次级服务器向叶子节点靠近,层数递增,准确性递减。随着层数从1 开始递增,可获得的样本的准确度逐层降低,降低的程度取决于网络路径和本地时钟的稳定性。为了避免对每一特定结构进行误差估计时所必须的单调乏味的计算,采用根据相对于同步子网的根的延迟和离差按比例计算平均度量误差非常有用。
这种设计的结果是:
A 当一台或多台主/次级服务器或它们之间的网络路径发生故障时,子网的分层主从分层结构将自动发生重构以获得最精确和最可靠的时间;
B 当子网中所有的正常情况下的主服务器都失效,一台或多台备用主服务器继续运行。
然而,当子网中所有的主服务器都失效时,其它次级服务器将在它们内部达到同步,这时接近达到预先选择的最大值“极限值”。当一台服务器通向各条路径的距离都达到极限值时,这台服务器将脱离子网,自动运行在它最后一次确定的时间和频率。由于这些计算精度很高,尤其是频率,所以当一台具有比较稳定的振荡器的服务器长时间脱离子网时,它的计时误差可以保持在一天不大于几毫秒。
当有多台主服务器时,通过算法来选择最小同步距离的服务器。但是,当这些主服务器处于大致相同的距离时,可能会是在它们中间进行随机选择。
- 如果任何两台主服务器之间的偏差与同步距离相比较小,则使用随机选择将不会降低准确性
- 如果任何两台主服务器之间的偏差与同步偏差量相比较大时,则建议使用过滤算法和选择算法,在可利用的服务器中选择最好的,丢弃较差的服务器
2.3 校时过程
NTP 实现过程如图1所示。ME60A 和ME60B 通过广域网相连,它们都有自己独立的系统时钟,通过NTP 实现系统时钟自动同步。
作如下假设:
- 在ME60A 和ME60B 的系统时钟同步之前,ME60A 的时钟设定为10:00:00am,ME60B 的时钟设定为11:00:00am。
- ME60B 作为NTP 时间服务器,ME60A 的时钟与ME60B 的时钟同步。
- 数据包在ME60A 和ME60B 之间单向传输需要1 秒。
- ME60A 和ME60B 处理NTP 数据包的时间都是1 秒。
系统时钟同步的工作过程如下:
1. ME60A 发送一个NTP 报文给ME60B,该报文中带有它离开ME60A 时的时间戳10:00:00am(T1)。
2. 此NTP 报文到达ME60B 时,ME60B 加上到达时间戳11:00:01am(T2)。
3. 此NTP 报文离开ME60B 时,ME60B 再加上离开时间戳11:00:02am(T3)。
4. ME60A 接收到该响应报文时,加上新的时间戳10:00:03am(T4)。
至此,ME60A 拥有足够信息来计算以下两个重要参数:
- NTP 消息来回一个周期的时延:Delay=(T4-T1)-(T3-T2)。
- ME60A 相对ME60B 的时间差:Offset=((T2-T1)+(T3-T4))/2。
ME60A 根据这些信息来设定自己的时钟,实现与ME60B 的时钟同步。
3. NTP报文结构
NTP数据报文和控制报文都是封装在UDP 报文中
3.1 NTP数据报文
NTP 数据报文下图所示。
表1 NTP 数据报文字段含义
字段名 | 长度 | 含义 |
LI(Leap Indicator) | 2 bits | 值为“11”时表示告警状态,时钟不能被同步。为其他值时NTP 本身不做处理。 |
VN(Version Number) | 3 bits | NTP 的版本号,目前值为3。 |
Mode | 3 bits | NTP 的工作模式。不同值表示的含义如下:0:reserved,保留。1:symmetric active,主动对等体模式。2:symmetric passive,被动对等体模式。3:client,客户模式。4:server,服务器模式。5:broadcast,广播模式。6:reserved for NTP control messages,NTP 控制报文。7:reserved for private use,内部使用预留。 |
Stratum | 8 bits | 时钟的层数,定义了时钟的准确度。层数为1 的时钟准确度最高,从1 到15 依次递减。 |
Poll Interval | 8 bits | 轮询时间,即发送报文的最小间隔时间。 |
Precision | 8 bits | 时钟的精度。 |
Root Delay | 32 bits | 到主参考时钟的总往返延迟时间。 |
Root Dispersion | 32 bits | 本地时钟相对于主参考时钟的最大误差。 |
Reference Identifier | 32 bits | 标识特定参考时钟。 |
Reference Timestamp | 64 bits | 本地时钟最后一次被设定或更新的时间。如果值为0 表示本地时钟从未被同步过。 |
Originate Timestamp | 64 bits | NTP 报文离开源端时的本地时间。 |
Receive Timestamp | 64 bits | NTP 报文到达目的端的本地时间。 |
Transmit Timestamp | 64 bits | 目的端应答报文离开服务器端的本地时间。 |
Authenticator | 96 bits | (可选)验证信息。 |
3.2 NTP控制报文
NTP 控制报文格式如下图所示:
表2 NTP 控制报文字段含义
字段名 | 长度 | 含义 |
00 | 2 bits | 保留位。NTP 本身不做处理。 |
VN(Version Number) | 3 bits | NTP 的版本号,目前值为3。 |
6 | 3 bits | 表明是控制报文。 |
REM | 3 bits | R:0 表示命令,1 表示响应。E:0 表示发送正常响应,1 表示发送错误响应。M:0 表示最后一个分片,1 表示其他。 |
Op | 5 bits | 操作码,表明命令的类型。 |
Sequence | 16 bits | 发送或接受到报文的顺序号。 |
Status | 16 bits | 表明当前系统的状态。 |
Association ID | 16 bits | 连接标示。 |
Offset | 16 bits | 偏移量 |
Count | 16 bits | 数据域的长度。 |
Data | Max 468 bits | 包括发送报文或接受报文中的数据信息。 |
Padding | 16 bits | 填充 |
Authenticator | 96 bits | (可选)验证信息。 |
4 NTP 实现
4.1 NTP 的实现模型
客户端设备为每个远端对等体运行三个进程,分别为:发送进程、接收进程、更新进程。这三个进程操作数据文件中的同一分块,通过报文传送系统互相连接。
当一个客户端设备同时存在多个对等体时,会在数据文件中划分出多个区域,每一个对等体对应一个特定的区域。NTP 的实现模型如下图所示:
发送进程
发送进程由定时器控制,收集数据文件中的信息并向远端对等体发送NTP 报文。每个发出的NTP 报文中都包含时间戳,以及确定层次和管理关联所必须的信息。报文发送速度取决于当地时钟和远端对等体所需要的准确度。
接收进程
接收进程接收NTP 报文(也可能包括其它协议的报文),并收集来自与主机直连的Radio Clocks 的信息。
当接收到一个NTP 的回应报文时,接收进程根据报文中携带的信息,计算出本地时钟和远端对等体时钟间的偏移量,并将其与对确定误差和对等体选择有用的信息一起写进数据文件。
更新进程
在接收到一个NTP 的回应报文后,处理来自每一个对等体的偏移数据,并用特定的选择算法选择出一个最优的对等体。
这步操作可能包括对少量对等体的多次观察,或者对许多对等体的少量观察。这取决于所需要的准确度。
本地时钟进程
本地时钟为各项系统进程提供了稳定的时间信息、并为网络中的其它用户提供了时钟参考。
根据更新进程中产生的偏移数据,使用特定方法对本地时钟的相位和频率进行调节。常用的调节方法有:
- 对本地时钟进行一步更新。
- 对本地时钟进行渐进的相位调节使偏差逐步较少到零。
4.2 工作模式
NTP 连接可以运行4 种工作模式:对等体模式、客户/服务器模式、广播模式和组播模式。
4.2.1 对等体模式
对等体模式下,主动对等体和被动对等体可以互相同步,等级低(层数大)的对等体向等级高(层数小)的对等体同步。
- 主动对等体:运行在这一模式下的主机定期发送报文,不考虑它的对等体是否可达及对等体的层数。运行在这一模式下的主机可以向对方提供同步信息,但可以依照对方的时间信息同步本地时钟。主动对等体模式运行在同步子网中比较接近叶子节点的时间服务器(层数较高)上。一种比较可靠的时间服务:在本机的同一层配一个对等体,在本机的上一层(层数小一层)配两台对等体。在这种模式下轮询的频率就变得不太重要,即使是在连接失败错误的报文被返回的情况下也不会对本地时钟有太大的影响。
- 被动对等体:运行在这一模式的主机接收并回应报文。运行在被动对等体模式的主机可以向对方提供同步信息,但可以依照对方的时间信息同步本地时钟。运行被动对等体模式的必备条件:本机接收的报文来自一个运行在主动对等体模式下的对等体,且该对等体的层数等于或低于本机并路由可达。被动对等体模式运行在同步子网中层次较低层上时。这种模式下,不需要预先知道对等体的特性,因为只有当本机收到NTP 报文时才建立连接及相关的状态变量。
在NTP 对等体模式下,主动对等体相当于客户端,被动对等体相当于服务器端。
- 对等体的一方运行在主动模式(主动对等体、客户或广播模式),这需要在命令行中进行设置。
- 对等体的另一方运行在被动模式(被动对等体或服务器模式),被动模式一般不需要预先配置。但是,对等体的双方可以同时被配置运行在主动对等体模式。
如果对等体双方同时运行在同一模式时会出错。这种情况下,对等体的双方会忽略来自对方的报文,并解除连接
4.2.2 客户/服务器模式
- 客户模式:运行在客户模式的主机定期向服务器端发送报文,不管服务器端是否可达及服务器端的层数。运行在这种模式的主机,通常是局网内部的工作站,它可以依照对方的时钟进行同步,但不会修改对方的时钟。
- 服务器模式:运行在服务器模式的主机接收并回应报文。运行在服务器模式的主机,通常是局网内部的时间服务器,它可以向客户端提供同步信息,但不会修改自己的时钟。
运行在客户模式的主机在重新启动时和重新启动后定期向运行在服务器模式的主机发送NTP 报文。服务器交换报文的地址和端口号,填写所需的信息,然后把报文发送给客户端。服务器在客户端发送请求之间无需保留任何状态信息,客户端根据本地情况自由管理发送报文的时间间隔。
在这种模式下,NTP 协议可以看作是一个简单的远程过程调用,在精确度和强壮性上无多大损失,尤其是当协议运行在高速局网上时。
4.2.3 广播模式
- 运行在广播模式下,周期性向广播地址255.255.255.255 发送时钟同步报文,不管它的对等体是否可达或层数为多少。运行在广播模式的主机通常是局网内运行高速广播介质的时间服务器,向所有对等体提供同步信息,但不会修改自己的时钟。
- 客户端侦听来自服务器的广播消息包。当接收到第一个广播消息包后,为估计网络延迟,客户端先启用一个短暂的服务器/客户端模式与远程服务器交换消息,之后恢复广播模式,继续侦听广播消息包的到来,根据到来的广播消息包对本地时钟再次进行同步。
广播模式应用在有多台工作站、不需要很高的准确度的高速局网。典型的情况是局网中的一台或多台时间服务器定期向工作站发送广播报文,广播报文在毫秒级的延迟基础上确定时间。
在采用多台时间服务器的情况下,为了提高可靠性,需要改进时钟选择算法。
4.2.4 组播模式
- 服务器端周期性向组播地址发送时钟同步报文。运行在组播模式的主机通常是局网内运行高速广播介质的时间服务器,向所有对等体提供同步信息,但不会修改自己的时钟。
- 客户端侦听来自服务器的组播消息包。当接收到第一个组播消息包后,为估计网络延迟,客户端先启用一个短暂的服务器/客户端模式与远程服务器交换消息,之后,客户端恢复组播式,继续侦听组播消息包的到来,根据到来的组播消息包对本地时钟进行同步。
4.3 事件处理
NTP 中重大事件发生的条件:当对等体的定时器超时时,会发送报文,这种情况下只在配置了主动模式的对等体一方发生;另一种情况是当从各种对等体发送的NTP 报文到达时。一个事件的发生还可能是操作命令的结果或者是可发现的系统错误,如主参考时钟失败。
发送过程
除了广播客户模式和所有的服务器模式,在客户端对等体的定时器到达???时开始执行发送过程。在广播客户模式下,永远不会发送报文。而在服务器模式下,只有当收到报文需要应答时报文才会被发送。当接收到的NTP 报文不会在本地建立起一个永久的连接时,发送过程也会被接收过程调用。
为了使应答有效,需要在发送报文中加入发送时间戳,所以必须准确地保存发送时的值。
接受过程
接受到数据包后,首先检测包的模式字段是否为0,如为0 表明发送报文的对等体运行的是老版本的NTP,发送端和对等体端的模示对应,则接受该包进行下一步的处理,如果对应的模式的结果为error 则丢弃收到的包,另外如果该连接不是预先配置的连接则删除该连接。具体分为如下4 种情况:
- 本端模式为客户端模式,对端模式也为客户端模式,则此时组合的结果为error,则丢弃该包,发送错误回应报文。
- 组合结果为recv,收到的包被处理,并且在包头有效时,将该连接标识为可达。如果包头有效,而且数据也有效则调用时钟更新过程对本地时钟进行更新。否则,如果连接不是预先配置的连接,则删除该连接。
- 如果组合结果为xmit 收到的包被处理,并且立即发送应答报文,然后如果没有预先配置则删除该连接。
- 如果组合结果为pkt 收到的包被处理,并且在包头有效时将该连接标识为可达。如果包头有效,而且数据也有效,则调用时钟更新过程对本地时钟进行更新。否则,如果连接不是预先配置的连接,立即发送一个应答包然后删除该连接。
包处理过程
包处理过程检查报文的有效性,计算延迟/偏差样本,调用其它过程进行数据过滤并选择同步源。首先要求transmit timestamp 与从同一对等体收到的最后一个报文的发送时间戳不同,否则,该报文有可能是一个旧的副本。
其次要求originate timestamp 与上一个发送给同一对等体的发送时间必须相同,否则该报文有可能次序颠倒、是假报文或较差的包文。当模式为广播模式(5)时,往返延迟为0,这时的时间传输操作的准确性达不到最优,不过这样获得的准确度对大多数目标已足够了。
之后使用时钟过滤可以从一个给定的时钟选择最好的样本;也可以从分层的时钟组中选择最好的时钟。最终确定出对等体的延迟(peer.delay)、偏移量(peer.offset)和离差(peer.dispersion)。
时钟更新过程
当有效的时钟offset、delay 和dispersion 由时钟过滤过程确定后,时钟选择调用时钟更新过程。时钟选择和时钟combining 过程的结果是最终的时钟修正值,本地时钟过程使用该值来更新本地时钟。如果在这些过程中没有选择到合适的参考源,那么时钟更新过程不再进行任何操作,直接结束。
时钟选择过程被调用,时钟选择过程由两个算法组成:intersection 算法和clustering(聚类)算法。intersection 算法构造一个适合作为同步源的候选对等体列表,并为每一个对等体计算一个confidence 时间间隔,然后采用 一种来自Marzullo and Owicki [MAR85]的技术丢弃falsetickers。clustering 算法将剩下的候选对等体按层数和同步距离进行排序,再按选择离差重复丢弃外围的对等体,直到剩下最准确、最精确和最稳定的对等体。
当时钟选择过程形成的候选对等体的offset、delay 和dispersion 很接近时,时钟combining 对候选时钟的情况进行综合分析,之后把综合形成的参数提供给本地时钟,从而进行时钟的更新。
本地时钟
为了实现既准确又精确的本地时钟,主机必须配备一个硬件时钟,该硬件时钟由一个振荡器、接口组成,并且具有需要的精度和稳定性。
一个逻辑时钟是由硬件组件和软件组件组成,软件组件根据NTP 或一些其它时间同步协议计算出来的更新量对本地时间或频率进行更新。它可提供精确的时间和频率调节。
5 NTP 的应用
5.1 NTP 应用环境
随着网络拓扑的日益复杂,整个网络内设备的时钟同步将变得十分重要。NTP 的出现就是为了解决网络内设备系统时钟的同步问题。
NTP 为以下应用提供了一致性保证:
- 在备份服务器和客户机之间进行增量备份时,要求这两个系统之间的时钟必须同步。
- 复杂的事物往往需要细分,当由多个系统来处理时,为保证事件的正确顺序,多个系统必须参考同一时钟。
- 确保系统之间的RPC(远程系统调用)能够正常进行。为了保证一个系统调用不会重复进行,一个调用只在一个时间间隔内有效。如果系统间的时钟不同步,一个调用可能在还没有发生之前就会因为超时而不能进行。
- 有的应用程序需要知道一个用户是什么时候登录到系统的;以及一个文件的修改时间。
- 在一个网络中,系统之间的时钟相差一分钟或者更少的情况很多。如果网络很大,不可能完全依靠系统管理员手工输入date(时间设置命令)命令来调节各个系统的时钟。
- 调试与事件时间戳:从不同ME60 采集的调试与事件时间戳是没有什么意义的,除非这些ME60 是以同一公共时间为参考。
NTP 的目标是对网络内所有具有时钟的设备进行时钟同步,使网络内所有设备的时钟时间基本保持一致,从而使设备能够提供基于统一时间的多种应用。对于运行NTP 的本地系统,既可以接受来自其他时钟源的同步,又可以作为时钟源去同步别的时钟,并且可以通过彼此交换时间信息,互相同步,最终使得全网络内所有设备的系统时钟达到基本一致。
NTP 通常能够使广域网内的所有系统时钟在10 毫秒内同步。
5.2 NTP 应用实例
局域网中时间服务器和internet 网络中的时间服务器同步,本局域网络的主机通过和本网络的时间服务同步达到和internet 网络时间的同步。如下图所示
附件:
NTF协议 rfc1305.txt