ntp原理及客户端实现
NTP简介
NTP(Network Time Protocol)是由美国德拉瓦大学的David L. Mills教授于1985年提出,除了可以估算封包在网络上的往返延迟外,还可独立地估算计算机时钟偏差,从而实现在网络上的高精准度计算机校时,它是设计用来在Internet上使不同的机器能维持相同时间的一种通信协议。时间服务器(time server)是利用NTP的一种服务器,通过它可以使网络中的机器维持时间同步。在大多数的地方,NTP可以提供1-50ms的可信赖性的同步时间源和网络工作路径。
网络时间协议(NTP)的详细说明在RFC-1305[Mills 1992]中。RFC-1305对 NTP协议自动机在事件、状态、转变功能和行为方面给出了明确的说明。它以合适的算法以增强时钟的准确性,并且减轻多个由于同步源而产生的差错,实现了准确性低于毫秒的时间服务,以满足目前因特网中路径量测的需要。
NTP是一个跨越广域网或局域网的复杂的同步时间协议,它通常可获得毫秒级的精度。RFC2030[Mills 1996]描述了SNTP(Simple Network Time Protocol),目的是为了那些不需要完整NTP实现复杂性的主机,它是NTP的一个子集。通常让局域网上的若干台主机通过因特网与其他的NTP主机同步时钟,接着再向局域网内其他客户端提供时间同步服务。
NTP的特点
1,从UTC获取标准时间
网络时间协议,提供在互连的网络上提供校时服务和发送标准时间给计算机。目前已成为Internet上时间同步的标准协议。NTP提供准确时间,首先要有准确的时间来源,这一时间应是国际标准时间UTC。NTP获得UTC的时间来源可以是原子钟,天文台,卫星,也可以从Internet上获取。这样就有了准确而可靠的时间源。
2,NTP服务器分层提供服务
时间按NTP服务器的等级传播。按照离外部UTC源的远近将所有服务器归入不同的Stratum(层)中。Stratum-1在顶层,有外部UTC接入,而 Stratum-2则从Stratum-1获取时间,Stratum-3从Stratum-2获取时间,以此类推,但Stratum层的总数限制在15以内。所有这些服务器在逻辑上形阶梯式的架构相互连接,而Stratum-1的时间服务器是整个系统的基础。
3,过滤算法选择时间的最佳路径和来源
计算机主机一般同多个时间服务器连接,利用统计学的算法过滤来自不同服务器的时间包,以选择最佳的路径和来源来校正主机时间。即使主机在长时间无法与某一时间服务器相联系的情况下,NTP服务依然有效运转。
4,识别机制抗干扰和恶意破坏
为防止对时间服务器的恶意破坏,NTP使用了识别(Authentication)机制,检查来对时的信息是否是真正来自所宣称的服务器并检查资料的返回路径,以提供对抗干扰的保护机制。
NTP的实现方式
1,无线时钟:服务器系统可以通过串口连接一个无线时钟。无线时钟接收GPS(全球卫星定位系统)的卫星发射的信号来决定当前时间。无线时钟是一个非常精确的时间源,但是需要花一定的费用。
2,时间服务器:还可以使用网络中NTP时间服务器,通过这个服务器来同步网络中的系统的时钟。http://www.eecis.udel.edu/~mills/ntp/servers.html列出了Internet上有效的一级时间服务器。
3,局域网内的同步:如果只是需要在本局域网内进行系统间的时钟同步,那么就可以使用局域网中任何一个系统的时钟。你需要选择局域网中的一个节点的时钟作“权威的”的时间源,然后其它的节点就只需要与这个时间源进行时间同步即可。使用这种方式,所有的节点都会使用一个公共的系统时钟,但是不需要和局域网外的系统进行时钟同步。如果一个系统在一个局域网的内部,同时又不能使用无线时钟,这种方式是最好的选择。
NTP的工作模式
1,Sever/Client mode:用户向一个多几个服务器提出服务请求,根据所交换的信息,从中选择认为最准确的时间,并调整本地的时钟。
2,Multicast/Broadcast mode:此种模式是适用于用在高速的LAN上。利用一个或多个服务器在固定的周期向某个多播地址做广播。
3,Symmetric mode:二个以上的Server互相进行时间消息的通讯,可以互相校正对方的时间,以维持整个subnet的时间一致性。
NTP协议结构
NTP packet = NTP header + Four TimeStamps = 48bytes
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
[header, 16bytes]
2 3 3 8 8 8 共32bits
LI VN Mode Stratum Poll Precision
Root Delay (32bits)
Root Dispersion (32bits)
Reference Identifier (32bits)
[Timestamp 1, 8bytes]
Reference Timestamp (64bits)
[Timestamp 2, 8bytes]
Originate Timestamp (64bits)
[Timestamp 3, 8bytes]
Receive Timestamp (64bits)
[Timestamp 4, 8bytes]
Transmit Timestamp (64bits)
Key Identifier (optional) (32bits)
Message digest (optional) (128bits)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
字段说明:
* LI:LeapYearIndicator, 跳跃指示器,警告在当月最后一天的最终时刻插入的迫近闺秒(闺秒)。
* VN:VersionNumber, 版本号。
* Mode:模式, 0-预留;1-对称行为;3-客户机;4-服务器;5-广播;6-NTP 控制信息
* Stratum:层级。
* Poll:PollInterval, 有符号整数表示连续信息间的最大间隔。
* Precision:有符号整数表示本地时钟精确度。
* Root Delay:有符号固定点序号表示主要参考源的总延迟,很短时间内的位15到16间的分段点。
* Root Dispersion:无符号固定点序号表示相对于主要参考源的正常差错。
* Reference Identifier:识别特殊参考源。
* Reference Timestamp
* Originate Timestamp:这是向服务器请求分离客户机的时间,采用64位时标格式。
* Receive Timestamp:这是向服务器请求到达客户机的时间,采用64位时标(Timestamp)格式。
* Transmit Timestamp:这是向客户机答复分离服务器的时间,采用64位时标(Timestamp)格式。
* Authenticator(可选):主要标识符和信息数字域就包括已定义的信息认证代码(MAC)信息。
网络延时与时钟偏差的测量
Timestamp Name ID When Generated
Originate Timestamp T1 time request sent by client
Receive Timestamp T2 time request received at server
Transmit Timestamp T3 time reply sent by server
Destination Timestamp T4 time reply received at client
t 为服务器和客户端之间的时间偏差;
d 为两者之间的往返时间
∵ T2 = T1 + t + d/2; ∴ T2 - T1 = t + d/2;
∵ T4 = T3 - t + d/2; ∴ T3 - T4 = t - d/2;
∴ d = (T2 - T1) + (T4 - T3); t = [(T2 - T1) + (T3 - T4)] / 2;
NTP客户端实现
ntpclient是一个运行在类UNIX机器上实现RFC-1305的ntp客户端, 可以在这里http://doolittle.icarus.com/ntpclient/下载,作者是Larry Doolittle。正在看,还不是特别明白 :-)