1.引言网络时间协议NTP(NetworkTimeProtocol)是用于互联网中时间同步的标准互联网协议。NTP的用途是把计算机的时间同步到某些时间标准。目前采用的时间标准是世界协调时UTC(UniversalTimeCoordinated)。NTP的主要开发者是美国特拉华大学的DavidL.Mills教授。NTP的设计充分考虑了互联网上时间同步的复杂性。NTP提供的机制严格、实用、有效,适应于在各种规模、速度和连接通路情况的互联网环境下工作。NTP以GPS时间代码传送的时间消息为参考标准,采用了Client/Server结构,具有相当高的灵活性,可以适应各种互联网环境。NTP不仅校正现行时间,而且持续跟踪时间的变化,能够自动进行调节,即使网络发生故障,也能维持时间的稳定。NTP产生的网络开销甚少,并具有保证网络安全的应对措施。这些措施的采用使NTP可以在互联网上获取可靠和精确的时间同步,并使NTP成为互联网上公认的时间同步工具。目前,在通常的环境下,NTP提供的时间精确度在WAN上为数十毫秒,在LAN上则为亚毫秒级或者更高。在专用的时间服务器上,则精确度更高。2.互联网环境中的时间同步要求在互联网上,一般的计算机和互联设备在时间稳定度方面的设计上没有明确的指标要求。这些设备的时钟振荡器工作在不受校对的自由振荡的状况。由于温度变化、电磁干扰、振荡器老化和生产调试等原因,时钟的振荡频率和标准频率之间存在一些误差。按误差的来源、现象和结果可以按固有的或者外来的、短期的或者长期的、以及随机的或者固定的等进行分类。这些误差初看来似乎微不足道,而在长期积累后会产生相当大的影响。假设一台设备采用了精确度相当高的时钟,设其精确度为0.001%,那么它在一秒中产生的偏差只是10微秒,一天产生的时间偏差接近1秒,而运行一年后则误差将大于5分钟。必须指出,一般互联网设备的时钟精确度远低于这个指标。设备的时间校准往往取决于使用者的习惯,手段常为参照自选的标准进行手工设定。在互联网上进行时间同步具有重要意义。互联网起源于军事用途明显的ARPA网。在军事应用领域,时间从来就是一个非常重要的考虑因素。对于互联网的时间同步和NTP的研究,就是在美国国防部的资助下启动和进行的。随着互联网的发展和延伸到社会的各个方面,在其他的领域对时间同步也提出了多种要求,例如各种实时的网上交易、制造过程控制、通信网络的时间配置、网络安全性设计、分布性的网络计算和处理、交通航班航路管理以及数据库文件管理和呼叫记录等多种涉及时间戳的应用,都需要精确、可靠和公认的时间。在计算机网络的发展过程中产生了一些比较简单的与时间有关的应用和服务。它们通过时间标记的通信使网络设备的时间向统一的参考源看齐靠拢,在所覆盖的网络范围上得到一致同步,确保获得精确可靠的时间,这包括了TCP/IP中ICMP的时间标记、Digital公司的DTS服务等。这些应用为NTP提供了理论借鉴和应用经验。3.NTP发展的追溯和现状NTP的发展可以分为三个时期。3.1.NTPv1之前的工作时间协议的首次实现记载在InternetEngineeringNote[IEN-173]之中,其精确度为数百毫秒。稍后出现了首个时间协议的规范,即[RFC778],它被命名为DCNET互联网时间服务,而它提供这种服务还是借助于InternetControlMessageProtocol(ICMP),即互联网控制消息协议中的时间戳和时间戳应答消息。作为NTP名称的首次出现是在[RFC958]之中,该版本也被称为NTPV0。其开宗明义是为ARPA网提供时间同步。它已完全脱离ICMP,而作为独立的协议在完成更高要求的时间同步。它对于如本地时钟的误差估算和精密度等基本运算、参考时钟的特性、网络上的分组数据包及其消息格式进行了描述。但是不对任何频率误差进行补偿,也没有规定滤波和同步的算法。3.2.NTPv1到NTPv3NTPv1出现于1988年6月,在[RFC1059]中描述了首个完整的NTP的规范和相关算法。这个版本就已经采用了client/server模式以及对称操作。但是它不支持鉴权和NTP的控制消息。1989年9月推出了取代[RFC958]和[RFC1059]的NTPv2[RFC1119]。几乎同时,DEC公司也推出了一个时间同步协议,数字时间同步服务,DigitalTimeSynchronizationService(DTSS)。在1992年3月,NTPv3[RFC1305]问世,该版本总结和综合了NTP先前版本和DTSS,正式引入了校正原则,并改进了时钟选择和时钟滤波的算法,而且还引入了时间消息发送的广播模式。这个版本取代了NTP的先前版本。3.3.NTPv3后的进展NTPV3发布后,一直在不断地进行改进,这些版本标注为xntp3-y,这里x表示试验,y表示第几次修改。NTP实现的一个重要功能是对计算机操作系统的时钟调整。在NTPv3研究和推出的同时,有关在操作系统核心中改进时间保持功能的研究也在并行地进行。1994年推出了[RFC1589],名为akernelmodelforprecisiontimekeeping,即精密时间保持的核心模式,这个实现可以把计算机操作系统的时间精确度保持在微秒数量级。几乎同时,又提出了NTPV4改进建议。对本地时钟调整算法,通信模式,新的时钟驱动器,适配规则等方面的改进描述了具体方向。1999年在[RFC2783]中,描述了每秒脉冲的操作系统用户应用接口(Pulse-per-secondAPIforUnix-likeoperatingsystem,version1)。在该实现中,计算机操作系统的时钟可以用精密的外部时间参考源的秒脉冲来加以校准和稳定。NTPv4的工作也在进行之中。它也将适用于IPV6;它将改进时钟模型,在各种同步源和网络通路的情况下更精确地预测和调节频率和时间;提出相应的新算法将降低网络抖动和振荡器漂移的冲突,并且将加速启始时的时间同步收敛速度;重新设计工作在锁频环、锁相环或者两者混合模式下的时钟校正算法;还将提供关于自动配置(例如,manycastmode)、可靠性、降低互联网话务量和加强网络安全性的鉴权(使用public-key密码)等方面的新特性。V4的正式版本还没有面世,但改进过程中的许多方法已经加入xNTP3.y之中。NTP发展的另一分支是SNTP-SimpleNetworkTimeProtocol,即简单网络时间协议。SNTP适用于时间精确度低于NTP的客户机,并强烈建议仅限于使用在时间同步网的终端位置。在1992年8月,[RFC1361]的SNTP问世,它的精确度为秒级。[RFC1361]的1995年3月,提出了[RFC1769],它取代了[RFC1361]其功能和被其取代的[RFC1361]相似,时间精确度为数百毫秒级。SNTP的最新规范是1996年的[RFC2030],并被冠以简单网络时间协议V4。SNTP的实现比较简单,特别对于Client侧的实现。一些商用的操作系统直接支持Client端的SNTP协议。4.时间同步子网络互联网中运用NTP进行时间同步和分配所涉及的设备和通路的集合称为时间同步子网络。时间同步子网络以分层主从结构模式运行,其结构示意图见于图1。在这种结构中,少许几个高层设备可以为大量的低层设备提供同步信息。图1时间同步网络结构图时间同步网络理论上根据其精确度和重要性一般分为从0-15的共16个级别或更多级,实际上不会大于6级。级别编码越低,精确度和重要性越高。时间的分配自级别编码小的层次向较大的层次进行,即由第0级向第15级分配渗透。第0级设备处于该子网络的特殊位置,是时间同步网络的基准时间参考源。它位于子网络的顶端,目前普遍采用全球卫星定位系统,即由GPS播发的UTC时间代码,本身并不具有NTP。子网络中的设备可以扮演多重角色。例如一个第二层的设备,对于第一层来说是客户机;对于第三层可能是服务器;对于同层的设备则可以是对等机。这里对等机的含义是相互用NTP进行同步的计算设备。NTP工作在时间同步子网络1级以下的其他各级设备中。图1中,在第1级和第2级上用机盒图式表示的设备是网络时间服务器,或者称为NTP时间服务器;用计算机主机和工作站图式表示的是一般互联网中的对应物,在时间同步子网络中它们均被视为时间服务器的时间客户机(下面简称服务器和客户机)。服务器可以是专用设备,也可以是备有专用时钟电路的通用计算机。出于对精确度和可靠性的考虑,下层设备同时引用若干个上层设备作为参考源;而且也可以引用同层设备作为参考源。NTP能够时间参考源中选择最好的几个时间源来推断现行时间。在同层设备配置为互为参考时,NTP会在两个对等机间进行自动选择,以精确度高者作为两者共同的参考源,而绝非两者互相引用。时间同步子网络和电信网络中的数字同步网一样,不允许出现时间环路。数字同步网中依据的是SSM信息;而NTP则利用协议的优势,自动识别高精确度的时钟源,确保时钟单方向地同步到高精确度的时钟,这样就绝对避免了时间环路的出现。5.NTP的通信模式NTP以客户机和服务器方式进行通信。每次通信共计两个包。客户机发送一个请求数据包,服务器接收后回送一个应答数据包。两个数据包都带有时间戳。NTP根据这两个数据包代的时间戳确定时间误差,并通过一系列算法来消除网络传输的不确定性的影响。在数据包的传送方式上,有客户机和服务器一对一的点对点方式,还有多个客户机对一个服务器的广播/多播方式。两者工作方法基本相同。处于两种方式下的客户机在初始时和服务器进行如同点对点的简短信息交换,据此对往返延时进行量化判断。此后广播/多播客户机只接收广播/多播消息的状态,并根据第一次信息交换的判断值修正时间。不同之处在于时间服务器在广播方式下周期性地向广播地址发送时间刷新信号;而在多播方式下周期性地向多播地址发送时间刷新信号。在广播/多播方式下一个服务器可以为大量的客户机提供时间,但精度较低。NTP要求的资源开销和通信带宽很小。NTP采用UDP协议,端口号设定为123。UDP占用很小的网络带宽,在众多客户机和少许服务器通信时有利于避免拥塞。NTP数据包的净长度在V3下为64个字节,V4下为72个字节;在IP层分别为76和84个字节。如果通信方式是广播模式,服务器以固定的间隔向客户机广播发送一个数据包;如果是服务器/客户机方式,则通信间隔将在指定的范围内变化(一般是64秒到1024秒),同步情况越好,间隔就越长。6.NTP的基本结构NTPV3和V4的结构基本相同,分别示于图6.a和图6.b。图6.bNTPV4结构框图参见图6.a和图6.b,NTP实际是一个反馈控制环路,在环路的工作简述如下:当NTP获得时间同步信息后,时间滤波器从时间样本中选取最佳的样本,和本地时间进行比较。选择和聚类算法的功能是对往返延迟、离差和偏移等参数进行分析,在有效参考源选取若干名列前茅者。合成算法对名列前茅者的信号进行综合,获取比任何单一信号更为优秀的时间参考。环路滤波器和可变频率振荡器是一个自适应的混合锁相/锁频环路,它在时钟校正算法的控制下,调节本地时钟,提供本地时间。NTPV4的基本结构框图参见图6.b。NTPV4和V3相似颇多,不同之处主要为两点:V4中对等机的通信间隔由网络相位抖动和本地时钟振荡器的频率稳定度确定,而V3对本地时钟的稳定度不作考虑;V4对VFO的调节间隔为固定的值,如1秒,而V3则未作硬性规定。从NTP的基本结构框图中可以看出NTP和其他的互联网协议之间的一个重大的区别,这就是NTP不仅仅依靠软件完成,而且还要依靠通用计算机系统范畴之外的本地时钟电路实现,也就是框图中的VFO及其接口部分。NTP及其相关协议系列对这部分的要求作了描述,但具体的实现却全部是NTP之外的技巧。7.NTP的数据包格式NTP网络结构中,无论是服务器或是客户机之间通信的数据包均带有时间戳。时间戳用32位表示,前面16位是整数部分,后面16位是小数部分,计数精度可以达到200ps。NTP从时间戳中获得最基本的时间信息。NT