NTP协议原理

SNTP 协议原理

SNTP 是简单网络时间协议(Simple Network Time protocol)的简称,它是目前 Internet 网上 实现时间同步的一种重要工程化方法。本文对 SNTP 协议的工作原理、工作模式、时间戳格 式、信息帧格式进行了研究,最后对 SNTP 协议的应用提出一些有益的建议。 关键词:SNTP;时间同步;时间戳格式;报文格式 Title Analysis for SNTP protocol Abstract: SNTP is abbreviation for simple network time protocol. At present it is an important engineering method for time synchronization in Internet. This paper describe principle,mode,timestamp format,message format of SNTP, finally we give some advice for application. Key words: SNTP; time synchronization ; ,timestamp format ; message format 0 引言 在一些需要精确时间同步的场合,如电力通讯、通信计费、分布式网络计算、气象预报等, 仅靠计算机本身提供的时钟信号是远远不够的。 据统计, 计算机时间与国际标准时间偏差在 1 分钟以上的占到 90%以上,这是因为计算机的时钟信号来源于自带的简单晶体振荡器,而 这种晶体振荡器守时性很差,调整好时间后,一般每天都有都有几秒钟的时间漂移。上面提 及的应用对时间准确度的要求均是需要秒级的, NTP 协议就是提供精确网络时间服务的一种 重要方法。NTP 协议是网络时间协议的简称(Network Time Protocol),目前它被广泛用于 在 Internet 上进行计算机时钟同步,它通过提供完全的机制来访问国际标准时间,在大多数 情况下,NTP 根据同步源和网络路径的不同,能够提供 1-50MS 的时间精确度。 NTP 协议为了保证高度的精确性,需要很复杂算法,但是在实际很多应用中,秒级的精确度 就足够了,在这种情况下,SNTP 协议出现了,它通过简化原来的访问协议,在保证时间精 确度的前提下,使得对网络时间的开发和应用变得容易。SNTP 主要对 NTP 协议涉及有关访 问安全、服务器自动迁移部分进行了缩减。 SNTP 协议目前的版本号是 SNTP V4,它能与以前的版本兼容,更重要的是 SNTP 能够与 NTP 协议具有互操作性,即 SNTP 客户可以与 NTP 服务器协同工作,同样 NTP 客户也可以接收 SNTP 服务器发出的授时信息。这是因为 NTP 和 SNTP 的数据包格式是一样的,计算客户时 间、时间偏差以及包往返时延的算法也是一样的。因此 NTP 和 SNTP 实际上是无法分割的。

1/7

本文主要对 SNTP 协议进行分析,主要涉及协议工作原理、工作模式、时间戳格式、报文格 式,最后对 SNTP 协议的应用提出一些建议。 1 SNTP 协议工作原理 SNTP 协议采用客户/服务器工作方式, 服务器通过接收 GPS 信号或自带的原子钟作为系统的 时间基准, 客户机通过定期访问服务器提供的时间服务获得准确的时间信息, 并调整自己的 系统时钟,达到网络时间同步的目的。客户和服务器通讯采用 UDP 协议,端口为 123。授时 原理可以用下面的图作一个描述: 图 1:授时原理图 T1:客户方发送查询请求时间(以客户方时间系统为参照),标记为 Originate Timestamp; T2:服务器收到查询请求时间(以服务器时间系统为参照),标记为 Receive Timestamp; T3:服务器回复时间信息包时间(以服务器时间系统为参照),标记为 Transmit Timestamp; T4:客户方收到时间信息包时间(以客户方时间系统为参照),标记为 Destination Timestamp; D1:请求信息在网上传播所消耗的时间 D2:回复信息在网上传播所消耗的时间 现已知 T1 、T2、T3、T4,希望求得以调整客户方时钟有: (1)

假设请求和回复在网上传播的时间相同,即 D1=D2,则可解得: (2) 可以看到, D 只与 T2T1 差值、T3T4 差值相关,而与 T2T3 差值无关,即最终的结果与服务 器处理请求所需的时间无关。据此,客户方 A 即可通过 T1、T2、T3、T4 计算出时差θ去调 整本地时钟。

2/7

2 SNTP 协议工作模式 SNTP 协议可以使用单播、广播或多播模式进行工作。单播模式是指一个客户发送请求到预 先指定的一个服务器地址, 然后从服务器获得准确的时间、 来回时延和与服务器时间的偏差。 广播模式是指一个广播服务器周期地向指定广播地址发送时间信息, 在这组地址内的服务器 侦听广播并且不发送请求。 多播模式是对广播模式的一种扩展, 它设计的目的是对地址未知 的一组服务器进行协调。在这种模式下,多播客户发送一个普通的 NTP 请求给指定的广播 地址,多个多播服务器在此地址上进行侦听。一旦收到一个请求信息,一个多播服务器就对 客户返回一个普通的 NTP 服务器应答,然后客户依此对广播地址内剩下的所有服务器作同 样的操作,最后利用 NTP 迁移算法筛选出最好的三台服务器使用。 客户和服务器地址可以采用通常的 IPV4 或 IPV6。IANA 保留 IPV4 地址 224.0.1.1,保留 IPV6 以:101 结束的地址作为 NTP 广播或多播的地址。用户也可以根据具体情况,建立自己的地 址空间,只要不与已经使用的地址空间冲突。 为了局限广播或多播服务占用太多的网络资源,调节多播信息 IP 头中的 TTL 值到一个合理 的水平非常重要。 只有在地址范围内的多播客户能接收到多播信息, 只有在地址范围内的服 务器组能够对客户的响应进行应答。在 Internet 上,SNTP 广播或多播客户极易受到来自其 它 SNTP 服务器的攻击,因此在 Internet 上使用该服务时,一定要采用访问控制和加密的措 施。 3 SNTP 数据格式 SNTP 协议同其它的网络应用层协议一样, 都具有一定的数据格式, 它主要涉及时间的表示, 即时间戳的格式,数据如何组帧在网络上传输,即信息帧格式。 3.1 SNTP 时间戳格式 SNTP 时间戳是该协议的重要产品,用来对时间进行精确表示。它由一个 64 位无符号浮点数 组成, 整数部分为头 32 位, 小数部分为后 32 位; 单位为秒, 时间相对于 1900 年 1 月零点。 它能表示的最大数字为 4,294,967,295 秒,同时具有 232PS 的精确性,这能满足最苛刻 的时间要求。值得注意的是在 1968 年的某一个时间(2,147,483,648 秒)时间戳的最高 位已被设置为 1,在 2036 年的某一个时间(4,294,967,295 秒)64 位字段将会溢出,所 有位将会被置为零,此时的时间戳将会被视为无效。为了解决这一问题,尽量延长 SNTP 时 间戳的使用时间,一种可能的办法为:如果最高位设置为 1,UTC 时间范围为 1968-2036 之 间,时间计算起点从 1900 年 1 月 0 点 0 分 0 秒开始计算;如果最高位设置为 0,UTC 时间 范围为 2036-2104 之间,时间计算起点从 2036 年 2 月 7 日 6 点 28 分 16 秒开始计算; 3.2 SNTP 信息帧格式
3/7

SNTP 协议是 UDP 协议的客户,它利用 UDP 的 123 端口提供服务,SNTP 客户在设置请求信 息时要把 UDP 目的端口设置为该值,源端口可以为任何非零值,服务器在响应信息中对这 些值进行交换。同其它应用层协议一样,SNTP 协议的数据通信也是按数据帧的格式进行, 下图是对 SNTP 信息帧格式的描述: 图 2:SNTP 信息帧格式

LI:当前时间闰秒标志。字段长度为 2 位整数,只在服务器端有效。取值定义为: LI=0:无警告; LI=1:最后一分钟是 61 秒; LI=2:最后一分钟是 59 秒; LI=3:警告(时钟没有同步) 服务器在开始时,LI 设置为 3,一旦与主钟取得同步后就设置成其它值。 VN:版本号。字段长度为 3 位整数,当前版本号为 4。 Mode:指示协议模式。字段长度为 3 位,取值定义为: Mode=0:保留 Mode=1:对称主动; Mode=2:对称被动; Mode=3:客户; Mode=4:服务器; Mode=5:广播; Mode=6:保留为 NTP 控制信息; Mode=7:保留为用户定义;

4/7

在单播和多播模式,客户在请求时把这个字段设置为 3,服务器在响应时把这个字段设置为 4。在广播模式下,服务器把这个字段设置为 5。 Stratum:指示服务器工作的级别,该字段只在服务器端有效,字段长度为 8 位整数。取值 定义为: Stratum=0:故障信息; Stratum=1:一级服务器; Stratum=2-15:二级服务器; Stratum=16-255:保留; Poll Interval:指示数据包的最大时间间隔,以秒为单位,作为 2 的指数方的指数部分,该字 段只在服务器端有效。字段长度为 8 位整数,取值范围从 4-17,即 16 秒到 131,072 秒。 Precision:指示系统时钟的精确性,以秒为单位,作为 2 的指数方的指数部分,该字段只在 服务器端有效。字段长度为 8 位符号整数,取值范围从-6 到-20。 Root Delay: 指示与主时钟参考源的总共往返延迟, 以秒为单位, 该字段只在服务器端有效。 字段长度为 32 位浮点数,小数部分在 16 位以后,取值范围从负几毫秒到正几百毫秒。 Root Dispersion:指示与主时钟参考源的误差,以秒为单位,该字段只在服务器端有效。字 段长度为 32 位浮点数,小数部分在 16 位以后,取值范围从零毫秒到正几百毫秒。 Reference Identifier:指示时钟参考源的标记,该字段只在服务器端有效。对于一级服务器, 字段长度为 4 字节 ASCII 字符串,左对齐不足添零。对于二级服务器,在 IPV4 环境下,取值 为一级服务器的 IP 地址,在 IPV6 环境下,是一级服务器的 NSAP 地址。

Reference Timestamp:指示系统时钟最后一次校准的时间,该字段只在服务器端有效,以前 面所述 64 位时间戳格式表示。 Originate Timestamp:指示客户向服务器发起请求的时间,以前面所述 64 位时间戳格式表 示。 Transmit Timestamp: 指示服务器向客户发时间戳的时间, 以前面所述 64 位时间戳格式表示。 Authenticator(可选):当需要进行 SNTP 认证时,该字段包含密钥和信息加密码。
5/7

4 SNTP 服务器的基本工作过程 下面以最常用的 SNTP 工作模式-单播模式,来说明 SNTP 服务器的工作过程: SNTP 服务器在初始化时,Stratum 字段设置为 0,LI 字段设置为 3,Mode 字段设置为 3, Reference Identifier 字段设置为 ASCII 字符“INIT”,所有时间戳信息设置为 0; 一旦 SNTP 服务器与外部时钟源取得同步后,进入工作状态,Stratum 字段设置为 1,LI 字段 设置为 0,Reference Identifier 字段设置为外部时钟源的 ASCII 字符,如“GPS”,Precision 字段设置为-6 到-20 之间的一个数值,通常设置为-16。VN 字段设置为客户端请求信息包的 VN 字段值, Root Delay 和 Root Dispersion 字段通常设置为 0, Reference Timestamp 字段设置 为从外部时钟源最新取得的时间,Originate Timestamp 字段设置为客户请求包的 Transmit Timestamp 字段值,Transmit Timestamp 字段设置为服务器发出时间戳给客户的时间。 SNTP 服务器在工作过程中,如果与外部时钟源失去同步,Stratum 字段设置为 0,Reference Identifier 字段设置为故障原因的 ASCII 字符,如:“LOST”,此时客户收到这个信息时,要 丢弃服务器发给它的时间戳信息。 5 SNTP 应用的建议 为了使 SNTP 更好地在网络中进行应用,尤其是在设计和管理有大量计算机需要授时的情况 下,有以下建议: 1. 尽量在本地局域网内部部署 SNTP 服务器, 而不要采用 Internet 网上的公用 SNTP 服务器, 因为 Internet 网络的时延不确定性, 服务质量得得不到保证, 会对授时的精度产生很大影响; 2. 客户端对服务器的授时请求周期要大于 1 分钟,以免造成 SNTP 服务器资源迅速消耗,而 不能及时响应客户的请求; 3. 当网络中客户机数目大于 500 台时, 应该配置多台 SNTP 服务器, 以达到要求的授时精度。 SNTP 最多每秒种能同时响应 500 个请求, 一旦超过这一数目, 授时的精确度就得不到保证; 4. 在需要高可靠授时的应用,最好配备多台 SNTP 服务器,利用 DNS 系统实现负载均衡和 集群; 5. 客户端应该能够识别服务器端的故障,一旦发现 Stratum 字段为 0,应该立刻丢弃服务器 发来的时间戳,转向其它服务器取时间,以避免授时错误; 6 结论

6/7

SNTP 协议是目前网络上提供精确时间服务的一种有效手段,但是很少有人对它进行详细的 分析,我们所作的工作对于开发者和网络管理人员来说都是非常有益的,对于开发者来说, 能够根据协议开发自己的 SNTP 服务器,同时对 SNTP 协议的不足之处进行改进;对于网络 管理者来说,在理解 SNTP 工作原理和方式的基础上,通过网络的优化,使 SNTP 服务发挥 最佳的效能。

7/7


相关文档

NTP协议原理简介
NTP协议简介
NTP_SNTP时钟协议原理
NTP协议
26-NTP协议
NTP协议实现程序
第5章 NTP协议
NTP原理
NTP(网络时间协议)
第6章 NTP协议
电脑版