网络时间协议(,缩写:)是在数据网络潜伏时间可变的计算机系统之间通过分组交换进行时钟同步的一个网络协议,位于OSI模型的应用层。自1985年以来,NTP是目前仍在使用的最古老的互联网协议之一。NTP由特拉华大学的(David L. Mills)设计。
NTP意图将所有参与计算机的协调世界时(UTC)时间同步到几毫秒的误差内。
该协议通常描述为一种主從式架構,但它也可以用在對等網路中,对等体双方可将另一端认定为潜在的时间源。这也可以使用廣播或多播,其中的客户端在最初的往返校准交换后被动地监听时间更新。2010年,RFC 5905发布了一个对NTPv4的建议规范,但该协议自那时以来已经显著改变,截至2014年,更新的RFC尚未发布。在Mills从特拉华大学退休后,该参考实现目前由Harlan Stenn保持为一个开放源代码项目。
时钟层
备用主时钟是一个第0层的NTP源]]
NTP使用一个分层、半分层的时间源系统。该层次的每个级别被称为“stratum”,顶层分配为数字0。一个通过阶层n同步的服务器将运行在阶层n + 1。数字表示与参考时钟的距离,用于防止层次结构中的循环依赖性。阶层并不总是指示质量或可靠性;在阶层3的时间源得到比阶层2时间源更高的时间质量也很常见。电信系统对使用不同的定义。以下提供了阶层0、1、2、3的简要描述。
; 阶层0(Stratum 0)
: 这些是高精度计时设备,例如原子鐘(如铯、铷)、GPS时钟或其他無線電時鐘。它们生成非常精确的信号,触发所连接计算机上的中斷和时间戳。阶层0设备也称为参考(基准)时钟。
; 阶层1
: 这些与阶层0设备相连、在几微秒误差内同步系统时钟的计算机。阶层1服务器可能与其他阶层1服务器对等相连,以进行完整性检查和备份。它们也被称为主要(primary)时间服务器。
NTP的未来版本可能将时间表示扩展到128位元:其中64位元表示秒,64位元表示秒的小数。当前的NTPv4格式支持“时代数字”(Era Number)和“时代偏移”(Era Offset),正确使用它们应该有助于解决日期翻转问题。据Mills称:“64位元的秒小数足以分辨光子以光速通过电子所需的时间。64位元的秒足以提供明确的时间表示,直到宇宙变暗。”
时钟同步算法
典型的NTP客户端将定期輪詢不同网络上的三个或更多服务器。为同步其时钟,客户端必须计算其时间偏移量和來回通訊延遲。时间偏移“θ”定义为:
:\theta = {(t_1 - t_0) + (t_2 - t_3 ) \over 2},
往返延迟“δ”为:
:\delta = {(t_3 - t_0 ) - ( t_2- t_1 )},
其中:
:t0 是请求数据包传输的客户端时间戳,
:t1 是请求数据包回复的服务器时间戳,
:t2 是响应数据包传输的服务器时间戳
:t3 是响应数据包回复的客户端时间戳。
当客户端和服务器之间的输入和输出路由都具有对称的标称延迟时,同步是正确的。如果路由没有共同的标称延迟,则将差异取半作为测量误差。
软件实现
参考实现
NTP参考实现连同协议的开发已持续发展了20多年。随着新功能的添加,向后兼容性仍保持不变。它包含几个敏感的算法,尤其是时钟规律,在同步到使用不同算法的服务器时可能会发生错误。该软件已移植到几乎各个计算平台,包括个人计算机。,也称简单网络时间协议(Simple Network Time Protocol,SNTP)。被某些嵌入式系统和不需要高精度时间的应用所采用。
Windows时间服务
从Windows 2000起的所有Microsoft Windows版本都包括Windows时间服务(W32Time),其具有将计算机时钟同步到NTP服务器的能力。
W32Time服务最初是为实现Kerberos第五版的身份验证协议,它需要误差5分钟内正确时间值以防止重放攻击。Windows 2000和Windows XP中只实现了简单的NTP,并在几个方面违反了NTP第3版的标准。从Windows Server 2003和Windows Vista开始,已包括符合完整NTP的实现。微软称W32Time服务不能可靠地将同步时间保持在1至2秒的范围内。如果需要更高的精度,微软建议使用其他NTP实现。
Windows 10 與 Windows Server 2016 由版本 1607 開始,提供高精度的系統時間,支持1ms的时间精度。
Ntimed
一个新的NTP客户端ntimed由在2014年开始编写。新的实现由Linux基金會赞助,作为参考实现的一个替代,因为它决定更容易地从头开始编写新的实现,而不是修复现有大型代码库的现有问题。截至2015年6月,它尚未正式发布,但ntimed可以可靠地同步时钟。ntimed在Debian和FreeBSD上工作,但也被移植到Windows和Mac OS。
闰秒
在闰秒事件的当天,ntpd从配置文件、附加参考时钟或远程服务器收到通知。因为时间必须是单调递增,所以闰秒的插入方式为:23:59:59、23:59:60、00:00:00。虽然时钟实际上在事件期间停止,但任何查询系统时间的进程都会使它增加微小的量,以保持事件的顺序。如果必要,在序列中删除闰秒的形式为:23:59:58、00:00:00,跳过23:59:59。
2038年問題
安全问题
2014年底,几个安全问题被发现。在以前,研究人员发现NTP服务器可能受到中间人攻击的影响,除非数据包被加密和签名以验证身份。但这所涉及的计算量在繁忙的服务器上可能是不切实际的,尤其是容易遭遇阻斷服務攻擊。NTP消息欺骗可以被用来偏移客户端计算机上的时钟,并配合过期的加密密钥来完成其他攻击。可能受到伪造NTP消息影响的服务包括TLS、DNSSEC、各类缓存方案(例如DNS缓存)、比特币以及许多持久登录方案。
有着25年以上历史的NTP代码库中的参考实现中只发现了几个其他的安全问题,但出现的几个引起了人们的强烈关注。该协议正在对其整个历史进行修订和审查。截至2011年1月,在NTP规范中没有安全修订,也没有在CERT協調中心的报告。几年来,该参考实现的当前代码库已经被多个来源进行安全审计,在当前发布的软件中没有已知的高风险漏洞。
多种实践的存在导致了对网络时间协议(NTP)服务器的破坏或劣化。
NTP已經被用于分布式拒绝服务(DDoS)攻击,方法是将一个具有伪造的返回地址的小的查询发送到NTP服务器。类似DNS放大攻击,服务器将以比攻击者发送数据量大很多倍的数据量回复给伪造的目标。为了避免参与攻击,服务器可以配置为忽略外部查询,或者升级到4.2.7p26或更高版本。
一个緩衝區溢位漏洞已經被发现,并自2014年12月19日提供补丁。漏洞覆盖NTP第四版所有版本,自4.2.8修复。蘋果公司首次使用自动更新功能解决该问题,不过这僅适用最近的MacOS版本。在10.6.8版本中,用户可以手动修复服务器版本,以及普通用户可以在系统首选项-日期和时间中关闭自动更新时间。研究人员认为该协议的设计是相当好的,缺陷出现在协议的实现中。某些错误很基础,例如例程中缺少返回语句,这可能导致某些运行在root权限下的NTP版本被利用以无限制的访问系统。守护进程不使用root权限的系统(例如BSD)不受此缺陷的影响。
参见
*
*
- 原子时
- NITZ
- NTP pool
*
- OpenNTPD
- 精确时间协议(IEEE 1588 PTP)
备注
参考资料
拓展阅读
*
*
外部链接
*
- [http://support.ntp.org/bin/view/Servers/StratumOneTimeServers 公共NTP服务器列表]
- [http://www.pool.ntp.org/zone/asia NTP节点镜像群]
- [http://datatracker.ietf.org/wg/ntp/charter/ IETF NTP working group]
- [http://www.ijs.si/time/ Time and NTP paper]
- [https://web.archive.org/web/20190504164134/http://ntpsurvey.arauc.br/ NTP Survey 2005]
- [ftp://time.nist.gov/pub/leap-seconds.list Current NIST leap seconds file compatible with ntpd]
- David L. Mills, [http://www.eecis.udel.edu/~mills/database/papers/history.pdf A Brief History of NTP Time: Confessions of an Internet Timekeeper]
- [http://www.cse.ucsd.edu/users/marzullo/ Keith Marzullo's homepage]
- [https://ncomputers.org/ntptest NTP Server Test Online Tool]
评论 (0)