1、NTP 协议介绍1引言网络时间协议 NTP(Network Time Protocol)是用于互联网中时间同步的标准互联网协议。NTP 的用途是把计算机的时间同步到某些时间标准。目前采用的时间标准是世界协调时 UTC(Universal Time Coordinated)。NTP 的主要开发者是美国特拉华大学的 David L. Mills 教授。NTP 的设计充分考虑了互联网上时间同步的复杂性。NTP 提供的机制严格、实用、有效,适应于在各种规模、速度和连接通路情况的互联网环境下工作。NTP 以 GPS 时间代码传送的时间消息为参考标准,采用了 Client/Server 结构,具有相当高的
2、灵活性,可以适应各种互联网环境。NTP 不仅校正现行时间,而且持续跟踪时间的变化,能够自动进行调节,即使网络发生故障,也能维持时间的稳定。NTP 产生的网络开销甚少,并具有保证网络安全的应对措施。这些措施的采用使 NTP 可以在互联网上获取可靠和精确的时间同步,并使 NTP 成为互联网上公认的时间同步工具。目前,在通常的环境下,NTP 提供的时间精确度在 WAN 上为数十毫秒,在LAN 上则为亚毫秒级或者更高。在专用的时间服务器上,则精确度更高。2互联网环境中的时间同步要求在互联网上,一般的计算机和互联设备在时间稳定度方面的设计上没有明确的指标要求。这些设备的时钟振荡器工作在不受校对的自由振荡
3、的状况。由于温度变化、电磁干扰、振荡器老化和生产调试等原因,时钟的振荡频率和标准频率之间存在一些误差。按误差的来源、现象和结果可以按固有的或者外来的、短期的或者长期的、以及随机的或者固定的等进行分类。这些误差初看来似乎微不足道,而在长期积累后会产生相当大的影响。假设一台设备采用了精确度相当高的时钟,设其精确度为 0.001%,那么它在一秒中产生的偏差只是 10微秒,一天产生的时间偏差接近 1 秒,而运行一年后则误差将大于 5 分钟。必须指出,一般互联网设备的时钟精确度远低于这个指标。设备的时间校准往往取决于使用者的习惯,手段常为参照自选的标准进行手工设定。在互联网上进行时间同步具有重要意义。互
4、联网起源于军事用途明显的ARPA 网。在军事应用领域,时间从来就是一个非常重要的考虑因素。对于互联网的时间同步和 NTP 的研究,就是在美国国防部的资助下启动和进行的。随着互联网的发展和延伸到社会的各个方面,在其他的领域对时间同步也提出了多种要求,例如各种实时的网上交易、制造过程控制、通信网络的时间配置、网络安全性设计、分布性的网络计算和处理、交通航班航路管理以及数据库文件管理和呼叫记录等多种涉及时间戳的应用,都需要精确、可靠和公认的时间。在计算机网络的发展过程中产生了一些比较简单的与时间有关的应用和服务。它们通过时间标记的通信使网络设备的时间向统一的参考源看齐靠拢,在所覆盖的网络范围上得到一
5、致同步,确保获得精确可靠的时间,这包括了TCP/IP 中 ICMP 的时间标记、Digital 公司的 DTS 服务等。这些应用为 NTP 提供了理论借鉴和应用经验。 3NTP 发展的追溯和现状NTP 的发展可以分为三个时期。31NTP v1 之前的工作时间协议的首次实现记载在 Internet Engineering Note IEN-173 之中,其精确度为数百毫秒。稍后出现了首个时间协议的规范,即 RFC 778 ,它被命名为 DCNET 互联网时间服务,而它提供这种服务还是借助于 Internet Control Message Protocol (ICMP),即互联网控制消息协议中的
6、时间戳和时间戳应答消息。 作为 NTP 名称的首次出现是在 RFC 958之中,该版本也被称为 NTP V0。其开宗明义是为 ARPA 网提供时间同步。它已完全脱离 ICMP,而作为独立的协议在完成更高要求的时间同步。它对于如本地时钟的误差估算和精密度等基本运算、参考时钟的特性、网络上的分组数据包及其消息格式进行了描述。但是不对任何频率误差进行补偿,也没有规定滤波和同步的算法。32NTP v1 到 NTP v3NTP v1 出现于 1988 年 6 月, 在RFC 1059中 描述了首个完整的 NTP 的规范和相关算法。这个版本就已经采用了 client/server 模式以及对称操作。但是它
7、不支持鉴权和 NTP 的控制消息。1989 年 9 月推出了取代RFC 958和RFC 1059的 NTP v2 RFC 1119 。几乎同时,DEC 公司也推出了一个时间同步协议,数字时间同步服务,Digital Time Synchronization Service(DTSS)。在 1992 年 3 月,NTPv3 RFC 1305问世,该版本总结和综合了 NTP 先前版本和 DTSS,正式引入了校正原则,并改进了时钟选择和时钟滤波的算法,而且还引入了时间消息发送的广播模式。这个版本取代了 NTP 的先前版本。33NTP v3 后的进展 NTP V3 发布后,一直在不断地进行改进,这些版
8、本标注为 xntp3-y,这里x 表示试验,y 表示第几次修改。 NTP 实现的一个重要功能是对计算机操作系统的时钟调整。在 NTP v3 研究和推出的同时,有关在操作系统核心中改进时间保持功能的研究也在并行地进行。 1994 年推出了RFC 1589,名为 a kernel model for precision timekeeping,即精密时间保持的核心模式,这个实现可以把计算机操作系统的时间精确度保持在微秒数量级。几乎同时,又提出了NTP V4 改进建议。对本地时钟调整算法,通信模式,新的时钟驱动器,适配规则等方面的改进描述了具体方向。1999 年在 RFC 2783 中,描述了每秒脉
9、冲的操作系统用户应用接口(Pulse-per-second API for Unix-like operating system, version 1)。在该实现中,计算机操作系统的时钟可以用精密的外部时间参考源的秒脉冲来加以校准和稳定。NTP v4 的工作也在进行之中。它也将适用于 IPV6;它将改进时钟模型,在各种同步源和网络通路的情况下更精确地预测和调节频率和时间;提出相应的新算法将降低网络抖动和振荡器漂移的冲突,并且将加速启始时的时间同步收敛速度;重新设计工作在锁频环、锁相环或者两者混合模式下的时钟校正算法;还将提供关于自动配置(例如,manycast mode)、可靠性、降低互联网话
10、务量和加强网络安全性的鉴权(使用 public-key 密码)等方面的新特性。V4 的正式版本还没有面世,但改进过程中的许多方法已经加入 xNTP3.y 之中。NTP 发展的另一分支是 SNTPSimple Network Time Protocol ,即简单网络时间协议。 SNTP 适用于时间精确度低于 NTP 的客户机,并强烈建议仅限于使用在时间同步网的终端位置。在 1992 年 8 月,RFC 1361 的 SNTP 问世,它的精确度为秒级。 RFC 1361的 1995 年 3 月,提出了RFC 1769,它取代了RFC 1361其功能和被其取代的RFC 1361 相似,时间精确度为数
11、百毫秒级。SNTP 的最新规范是 1996 年的 RFC 2030,并被冠以简单网络时间协议V4。SNTP 的实现比较简单,特别对于 Client 侧的实现。一些商用的操作系统直接支持 Client 端的 SNTP 协议。4时间同步子网络互联网中运用 NTP 进行时间同步和分配所涉及的设备和通路的集合称为时间同步子网络。时间同步子网络以分层主从结构模式运行,其结构示意图见于图 1。在这种结构中,少许几个高层设备可以为大量的低层设备提供同步信息。图 1 时间同步网络结构图时间同步网络理论上根据其精确度和重要性一般分为从 015 的共 16 个级别或更多级,实际上不会大于 6 级。级别编码越低,精
12、确度和重要性越高。时间的分配自级别编码小的层次向较大的层次进行,即由第 0 级向第 15 级分配渗透。第 0 级设备处于该子网络的特殊位置,是时间同步网络的基准时间参考源。它位于子网络的顶端,目前普遍采用全球卫星定位系统,即由 GPS 播发的 UTC时间代码,本身并不具有 NTP。子网络中的设备可以扮演多重角色。例如一个第二层的设备,对于第一层来说是客户机;对于第三层可能是服务器;对于同层的设备则可以是对等机。这里对等机的含义是相互用 NTP 进行同步的计算设备。NTP 工作在时间同步子网络 1 级以下的其他各级设备中。图 1 中,在第 1级和第 2 级上用机盒图式表示的设备是网络时间服务器,
13、或者称为 NTP 时间服务器;用计算机主机和工作站图式表示的是一般互联网中的对应物,在时间同步子网络中它们均被视为时间服务器的时间客户机(下面简称服务器和客户机)。服务器可以是专用设备,也可以是备有专用时钟电路的通用计算机。出于对精确度和可靠性的考虑,下层设备同时引用若干个上层设备作为参考源;而且也可以引用同层设备作为参考源。NTP 能够时间参考源中选择最好的几个时间源来推断现行时间。在同层设备配置为互为参考时,NTP 会在两个对等机间进行自动选择,以精确度高者作为两者共同的参考源,而绝非两者互相引用。时间同步子网络和电信网络中的数字同步网一样,不允许出现时间环路。数字同步网中依据的是 SSM
14、 信息;而 NTP 则利用协议的优势,自动识别高精确度的时钟源,确保时钟单方向地同步到高精确度的时钟,这样就绝对避免了时间环路的出现。5NTP 的通信模式NTP 以客户机和服务器方式进行通信。每次通信共计两个包。客户机发送一个请求数据包,服务器接收后回送一个应答数据包。两个数据包都带有时间戳。NTP 根据这两个数据包代的时间戳确定时间误差,并通过一系列算法来消除网络传输的不确定性的影响。在数据包的传送方式上,有客户机和服务器一对一的点对点方式,还有多个客户机对一个服务器的广播/多播方式。两者工作方法基本相同。处于两种方式下的客户机在初始时和服务器进行如同点对点的简短信息交换,据此对往返延时进行
15、量化判断。此后广播/多播客户机只接收广播/多播消息的状态,并根据第一次信息交换的判断值修正时间。不同之处在于时间服务器在广播方式下周期性地向广播地址发送时间刷新信号;而在多播方式下周期性地向多播地址发送时间刷新信号。在广播/多播方式下一个服务器可以为大量的客户机提供时间,但精度较低。NTP 要求的资源开销和通信带宽很小。NTP 采用 UDP 协议,端口号设定为123。UDP 占用很小的网络带宽,在众多客户机和少许服务器通信时有利于避免拥塞。NTP 数据包的净长度在 V3 下为 64 个字节,V4 下为 72 个字节;在 IP 层分别为 76 和 84 个字节。如果通信方式是广播模式,服务器以固
16、定的间隔向客户机广播发送一个数据包;如果是服务器/客户机方式,则通信间隔将在指定的范围内变化(一般是 64 秒到 1024 秒),同步情况越好,间隔就越长。6NTP 的基本结构NTP V3 和 V4 的结构基本相同,分别示于图 6.a 和图 6.b。图 6.b NTP V4 结构框图参见图 6.a 和图 6.b,NTP 实际是一个反馈控制环路,在环路的工作简述如下:当 NTP 获得时间同步信息后,时间滤波器从时间样本中选取最佳的样本,和本地时间进行比较。选择和聚类算法的功能是对往返延迟、离差和偏移等参数进行分析,在有效参考源选取若干名列前茅者。合成算法对名列前茅者的信号进行综合,获取比任何单一
17、信号更为优秀的时间参考。环路滤波器和可变频率振荡器是一个自适应的混合锁相/锁频环路,它在时钟校正算法的控制下,调节本地时钟,提供本地时间。NTP V4 的基本结构框图参见图 6.b。NTP V4 和 V3 相似颇多,不同之处主要为两点:V4 中对等机的通信间隔由网络相位抖动和本地时钟振荡器的频率稳定度确定,而 V3 对本地时钟的稳定度不作考虑;V4 对 VFO 的调节间隔为固定的值,如 1 秒,而 V3 则未作硬性规定。从 NTP 的基本结构框图中可以看出 NTP 和其他的互联网协议之间的一个重大的区别,这就是 NTP 不仅仅依靠软件完成,而且还要依靠通用计算机系统范畴之外的本地时钟电路实现,
18、也就是框图中的 VFO 及其接口部分。NTP 及其相关协议系列对这部分的要求作了描述,但具体的实现却全部是 NTP 之外的技巧。7NTP 的数据包格式NTP 网络结构中,无论是服务器或是客户机之间通信的数据包均带有时间戳。时间戳用 32 位表示,前面 16 位是整数部分,后面 16 位是小数部分,计数精度可以达到 200ps。NTP 从时间戳中获得最基本的时间信息。NTP 数据包消息直接遵循 UDP 的消息头格式,其分组数据包由若干个数据字组成,每个字长为 32 比特,详见图 7.b。其中,未加底色的方框中内容为NTP v3 和 v4 共同部分;浅灰底色部分为 NTP v4 专有部分;深灰底色
19、部分为鉴权加密专用部分。在数据包传送时,可以采用 DES-CBC 或 MD5 进行数据加密。限于篇幅,这里不对 NTP 消息包中各个域的含义进行介绍。图 7.b NTP 数据包格式8NTP 的算法从图 6.a 和图 6.b 中可以看到,NTP 涉及 4 个算法:时间滤波算法、时间选择算法、聚类算法和时钟调节算法。严格地说,这些算法并不是协议的固有部分,但是 NTP 的实现却有赖于这些算法。8.1时间滤波算法该算法的功能是确认数据包的有效性和从某个给定的时间参考源的时间样本中选取最佳的样本。它可以分成健全性校验和滤波两个部分。健全性校验的内容有:数据包的唯一性,数据包内容的符合性,服务器工作是否
20、正常,往返延迟和离差数值是否合理,如果协议配置了安全性要求,则还将进行鉴权。其后进行滤波。它备有一个时间参数寄存器数组,其深度 N 根据系统配置设置。时间参数的形式为 , 。当前的时间参数根据 NTP 消息交换时的发送启始时间、对端接收时间、对端回送时间和收到回送时间等四个时间戳信息计算得出,以(,)形式表示。这里 是样本时钟偏移, 和 是相关的往返延迟和离差。算法根据当前时间参数(,),参照门限要求和时间参数寄存器数组中的历史信息,计算求得样本的滤波离差 、同步距离 并且更新时间参数寄存器数组。 和 表示了当前时间的偏移和最大误差,在后续的时钟选择算法中将作为参数用于时间同步参考源的选择。该
21、算法在典型情况下可以把偏移的均方误差降低 18 dB。8.2 时间选择算法NTP 客户机可以有若干时间同步参考源。时间选择算法则用于在若干时间参考源中选取最佳的若干参考源。 NTP 首先使用滤波算法的结果滤波离差 和同步距离 确定对于各个时间源的有效的时间域值,也称之为交越值。然后对所有的时间逐一进行校验,如落入交越值规定的范围内时,认为有效,否则将被予以剔除。8.3 聚类算法NTP 内部有一张时间参考源的表格,记录可供访问的所有时间参考源。这些参考源中最为优秀的方能作为候选者进入参考源的优选目录。从可靠性和效率的折中考虑,通常在参考源中选取 10 个最佳的时钟进入优选目录。聚类算法根据前面滤
22、波和选择两个算法的结果,对优选目录中的时间参考源重新选择。衡量标准说到底是精确度,具体表现则为 NTP 的级、离差、延时、偏移和偏移的一次导数等的加权组合。现行候选者如能通过聚类算法则留用,否则将被剔除出优选目录,并在其他参考源中选取一个最佳者加入优选目录。通过聚类算法,可以减少网络时间漂移产生的不良影响。84时钟调节时钟调节是 NTP 实现至关重要的一个环节。时间精确度强烈依赖于时钟振荡器的稳定度和时钟调节的精密度。在 NTP 中,网络响应能力的变化产生的误差为抖动;振荡器频率稳定度产生的误差为漂移。目前使用自适应混合时钟调整算法。该调整算法校准计算机时钟的时间,补偿固有频率误差,根据测得的
23、抖动和漂移动态地调节相关参数。算法使用了锁相环路 PLL 和锁频环路 FLL 两者的合成。PLL 消除抖动非常有效,而只能间接地降低漂移,而 FLL 正好相反。因此,在抖动主导的环境,使用 PLL 效果明显;在漂移占主导地位的环境中,FLL 效果明显。调整算法如图 8.4 的反馈控制系统进行实现。这里,r 表示周期性轮询产生的参考相位,c 是可变频率振荡器 VFO 产生的控制相位。鉴相器输出信号 Vd 表示 r 和 c 的瞬时相位差。时钟滤波器相当一个带抽头的延迟线,由算法决定抽头位置。时钟选择、群集和合成算法组合滤波器的数据以生成信号 Vs。环路滤波器产生信号 Vc,控制 VFO 的频率c 和相位 c。该算法在不同的网络抖动和振荡器漂移情况下,自动控制管理消息更新间隔。更新间隔的上限从先前的不到 0.5 小时秒扩展到 1.5 天,大大减轻了网络开销,增加了可靠性。而且切换时间源时,它不会出现跳频现象。图 8.4 时钟调节算法9结语NTP 和互联网的同步在国外已经得到广泛应用。据统计 99 年已有将近 1 万 4 千个专用时间服务器在工作,相应的对等服务器超过 18 万台。使用准确的和有依据的时间不仅仅是许多工作的需要,而且正在成为企业和个人地位和身份的象征。在国内 NTP 的应用日益广泛,例如在时间戳认证方面,随着网络应用的普及和深化,NTP 的运用领域会获得更大的拓展。