【RL-TCPnet网络教程】第29章 NTP网络时间协议基础知识
第29章 NTP网络时间协议基础知识
本章节为大家讲解NTP (Network Time Protocol,网络时间协议)和SNTP(简单网络时间协议,Simple Network Time Protocol)的基础知识,方便后面章节的实战操作。
(本章的知识点主要整理自网络)
29.1 初学者重要提示
29.2 NTP基础知识参考资料
29.3 NTP基础知识点
29.4 SNTP基础知识点
29.5 总结
29.1 初学者重要提示
NTP网络时间协议在实际项目中有比较重要的实战价值,需要初学者对NTP和SNTP的基础知识也有个认识。
29.2 NTP基础知识参考资料
大家可以从以下地址获得NTP和SNTP基础知识:
对于初学者来说,学习上面四个参考资料就够了。如果大家有网络方面的书籍,比如《TCP/IP详解》,也可以直接看书籍。
29.3 NTP基础知识点
(这里的知识点整理自上面的参考资料地址)
教程这里也对NTP的基础知识做个介绍,方便大家先有个大概的认识。
29.3.1 NTP简要说明
NTP是网络时间协议(Network Time Protocol),它是用来同步网络中各个计算机时间的协议。
在计算机的世界里,时间非常地重要,例如对于火箭发射这种科研活动,对时间的统一性和准确性要求就非常地高,是按照计算机A的时间,还是按照计算机B的时间,或者其它计算机?NTP就是用来解决这个问题的,NTP是用来使网络中的各个计算机时间同步的一种协议。它的用途是把计算机的时钟同步到国际标准时间UTC(Universal Time Coordinated,世界协调时),其精度在局域网内可达0.1ms,在互联网上绝大多数的地方其精度可以达到1-50ms。
它可以使计算机对其服务器或时钟源(如石英钟,GPS等等)进行时间同步,它可以提供高精准度的时间校正,而且可以使用加密确认的方式来防止病毒的协议攻击。
29.3.2 NTP原理
NTP要提供准确的时间,就必须有准确的时间来源,那可以用格林尼治时间吗?答案是否定的。因为格林尼治时间是以地球自转为基础的时间计量系统,但是地球每天的自转是有些不规则的,而且正在缓慢加速,因此,格林尼治时间已经不再被作为标准时间使用。
新的标准时间,是由原子钟报时的国际标准时间UTC(Universal Time Coordinated,世界协调时)。所以NTP获得UTC的时间来源可以是原子钟、天文台、卫星,也可以从Internet上获取。
有了准确而可靠的时间源,那这个时间如何传播呢?在NTP中,定义了时间按照服务器的等级传播,按照离外部UTC源的远近将所有的服务器归入不同的Stratum(层)中,例如把通过GPS取得发送标准时间的服务器叫Stratum-1的NTP服务器,而Stratum-2则从Stratum-1获取时间,Stratum-3从Stratum-2获取时间,以此类推,但Stratum层的总数限制在15以内。所有这些服务器在逻辑上形成阶梯式的架构相互连接,而Stratum-1的时间服务器是整个系统的基础。
计算机主机一般同多个时钟服务器连接,利用统计学的算法过滤来自不同服务器的时间,以选择最佳的路径和来源以便校正主机时间。即使在主机长时间无法与某一时钟服务器联系的情况下,NTP服务依然可以有效运转。
为了防止对时钟服务器的恶意破坏,NTP使用了识别机制,检查发送来的信息是否真正来自所宣称的时钟服务器并检查信息的返回路径,以提供对抗干扰的保护机制。
NTP时间同步报文中包含的时间是格林威治时间,是从1900年开始计算的秒数。
29.3.3 NTP发展
NTP首次记载是在Internet Engineering Note之中,其精确度为百毫秒。稍后出现了首个时间协议的规范,即RFC-778,它被命名为DCNET互联网时间服务,而它提供这种服务还是借助于ICMP(Internet Control Message Protocol,Internet控制报文协议),即互联网控制消息协议中的时间戳消息和时间戳应答消息作为NTP。
NTP名称的首次出现是在RFC-958之中,该版本也被称为NTP Version0,其目的是为ARPA(Advanced Research Projects Agency,美国国防部高级研究计划署)的网络提供时间同步。它已完全脱离ICMP,是作为独立的协议以便完成更高要求的时间同步功能。它对于本地时钟的误差估算和精密度等基本运算、参考时钟的特性、网络上的分组数据包及其消息格式都进行了描述。但是不对任何频率误差进行补偿,也没有规定滤波和同步的算法。
美国特拉华大学(University of Delaware)的David L .Mills主持了由ARPA、NSF(National Science Foundation,美国国家科学基金)和NSWC(Naval Surface Warfare Center,美国海军水面武器中心)资助的网络时间同步项目,成功的开发出了NTP协议的Version1、Version2和Version3 三个版本。
NTP Version1出现于1988年6月,在RFC-1059中描述了首个完整的NTP规范和相关算法。这个版本已经采用了客户端/服务器端(Client/Server)模式以及对称操作,但是它不支持授权鉴别和NTP的控制消息。
1989年9月推出了取代RFC-958和RFC-1059的NTP Version2版本即RFC-1119。
几乎同时,DEC公司也推出了一个时间同步协议DTSS(Digital Time Synchronization Service,数字时间同步服务)。在1992年3月,NTP Version3版本RFC-1305问世,该版本总结和综合了NTP之前的所有版本和DTSS,正式引入了校正原则,并改进了时钟选择和时钟滤波的算法,而且还引入了时间消息发送的广播模式,这个版本取代了NTP的先前版本。
NTP Version3发布后,一直在不断地进行改进,NTP实现的一个重要功能是对计算机操作系统的时钟调整。在NTP Version3研究和推出的同时,有关在操作系统核心中改进时间保持功能的研究也在同步进行。
1994年推出了RFC-1589,名为A KernelModel for Precision Time keening,可以把计算机操作系统的时间精确度保持在微秒数量级。
截止到2010年6月,最新的NTP版本是第4版(NTP Version 4),其标准化文档为RFC 5905,它继承自RFC 1305所描述的NTP Version3。网络时间同步技术也将向更高精度、更强的兼容性和多平台的适应性方向发展。
29.3.4 NTP时间戳
NTP使用64bit的时间戳,其中32位表示秒,另外32位表示秒的小数,给出一个每2^32秒(136年)才会翻转的时间尺度,理论分辨率2^−32秒。NTP以1900年1月1日作为开始时间,因此第一次翻转将在2036年2月7日发生。
NTP的未来版本可能将时间表示扩展到128位:其中64位表示秒,另外64位表示秒的小数。当前的NTPv4格式支持“时代数字”(Era Number)和“时代偏移”(Era Offset),正确使用它们应该有助于解决日期翻转问题。据NTP的设计者David L. Mills称:“64位的秒小数足以分辨光子以光速通过电子所需的时间。64位的秒足以提供明确的时间表示,直到宇宙变暗。”
29.3.5 NTP时钟同步算法
典型的NTP客户端将定期轮询不同网络上的三个或更多服务器。为同步其时钟,客户端必须计算其时间偏移量和来回通信延迟。时间偏移“θ”定义为:
往返延迟“δ”为:
其中:
t0 是请求数据包传输的客户端时间戳,
t1 是请求数据包回复的服务器时间戳,
t2 是响应数据包传输的服务器时间戳
t3 是响应数据包回复的客户端时间戳。
“θ”和“δ”的值通过过滤器并进行统计分析。异常值被剔除,并从最好的三个剩余候选中导出估算的时间偏移。然后调整时钟频率以逐渐减小偏移,创建一个反馈回路。
当客户端和服务器之间的输入和输出路由都具有对称的标称延迟时,同步是正确的。如果路由没有共同的标称延迟,则将差异取半作为测量误差。
29.4 SNTP基础知识点
(这里的知识点整理自上面的参考资料地址)
简单网络时间协议SNTP(Simple Network Time Protocol),由 NTP 改编而来,主要用来同步因特网中的计算机时钟,在 RFC2030 中定义。它使用在某些嵌入式系统和不需要高精度时间的应用中。
29.4.1 SNTP简要说明
在一些特定的场景中,经常需要整个网络中的计算机保持时间同步。例如,空中管制系统或者轨道交通控制系统中的计算机的时间需要保持精确同步。在大型计算机系统中,往往由很多台计算机共同执行某个计算,也需要各台计算机保持时间同步。那么,我们通过什么方法来同步这些计算机的时间呢?
科学家发明了一种叫做NTP的网络时间协议。网络时间协议是一种在网络计算机上同步计算机时间的的协议,它具有高度的精确性(能精确到几十毫秒),但是算法非常复杂。实际上,在很多应用场景中,并不需要这么高的精确度,通常只要达到秒级的精确度就足够了。于是,科学家在NTP的基础上推出了SNTP(简单网络时间协议,Simple Network Time Protocol)。SNTP大大简化了NTP协议,同时也能保证时间达到一定的精确度。在实际应用中,SNTP协议主要被用来同步因特网上计算机的时间。
29.4.2 SNTP工作原理
SNTP协议采用客户端/服务器的工作方式,可以采用单播(点对点)或者广播(一点对多点)模式操作。SNTP服务器通过接收GPS信号或自带的原子钟作为系统的时间基准。单播模式下,SNTP客户端能够通过定期访问SNTP服务器获得准确的时间信息,用于调整客户端自身所在系统的时间,达到同步时间的目的。广播模式下,SNTP服务器周期性地发送消息给指定的IP广播地址或者IP多播地址。SNTP客户端通过监听这些地址来获得时间信息。
网络中一般存在很多台SNTP服务器,客户端会通过一定的算法选择最好的几台服务器使用。如果一台SNTP服务器在工作过程中失去了外部时间源,此时SNTP服务器会告诉SNTP客户端“我失去了外部时间”。当SNTP客户端收到这个信息时,就会丢弃发生故障的SNTP服务器发给它的时间信息,然后重新选择其他的SNTP服务器。
29.5 总结
本章节就为大家讲解这么多,更多NTP和SNTP的相关知识需要大家查阅相关书籍进行学习,或者网上搜索相关资料进行学习。
【RL-TCPnet网络教程】第29章 NTP网络时间协议基础知识的更多相关文章
- 【RL-TCPnet网络教程】第12章 TCP传输控制协议基础知识
第12章 TCP传输控制协议基础知识 本章节为大家讲解TCP(Transmission Control Protocol,传输控制协议),通过本章节的学习,需要大家对TCP有个基本的认识,方 ...
- 【RL-TCPnet网络教程】第31章 Telnet远程登录基础知识
第31章 Telnet远程登录基础知识 本章节为大家讲解Telnet (Teletype Network) 的基础知识,方便后面章节的实战操作. (本章的知识点主要整理自网络) 31.1 ...
- 【STM32H7教程】第15章 STM32H7的GPIO基础知识(重要)
完整教程下载地址:http://www.armbbs.cn/forum.php?mod=viewthread&tid=86980 第15章 STM32H7的GPIO基础知识(重要) ...
- 【STM32H7教程】第61章 STM32H7的MDMA基础知识和HAL库API
完整教程下载地址:http://www.armbbs.cn/forum.php?mod=viewthread&tid=86980 第61章 STM32H7的MDMA基础知识和HAL ...
- 【STM32H7教程】第59章 STM32H7的DAC基础知识和HAL库API
完整教程下载地址:http://www.armbbs.cn/forum.php?mod=viewthread&tid=86980 第59章 STM32H7的DAC基础知识和HAL库 ...
- Python黑帽编程3.0 第三章 网络接口层攻击基础知识
3.0 第三章 网络接口层攻击基础知识 首先还是要提醒各位同学,在学习本章之前,请认真的学习TCP/IP体系结构的相关知识,本系列教程在这方面只会浅尝辄止. 本节简单概述下OSI七层模型和TCP/IP ...
- 16第一章 ASP.Net编程基础知识
第一章 ASP.Net编程基础知识 第一章 ASP.Net编程基础知识 本章首先介绍用ASP.Net技术编制服务器端动态网页所需的网络和HTML标记语言方面的有关知识.然后 ...
- NodeJs>------->>第三章:Node.js基础知识
第三章:Node.js基础知识 一:Node.js中的控制台 1:console.log.console.info 方法 console.log(" node app1.js 1> ...
- 【安富莱TCPnet网络教程】HTTP通信实例
第41章 HTTP超文本传输协议基础知识 本章节为大家讲解HTTP(HyperText Transfer Protocol,超文本传输协议),从本章节开始,正式进入嵌入式Web的设计和学习. ...
随机推荐
- Oracle DBA 必须掌握的 查询脚本:
Oracle DBA 必须掌握的 查询脚本: 0:启动与关闭 orcle 数据库的启动与关闭 1:连接数据库 2:数据库开启状态的实现步骤: 2-1:启动数据库 2- ...
- django中常用的数据查询方法
https://blog.csdn.net/chen1042246612/article/details/84071006
- CAS5.3.0安装部署
部署环境:JDK1.8.x maven-3.5.2 tomcat-8.x.x 1.下载地址 https://github.com/apereo/cas-overlay-template/tree/5. ...
- PHP 报错--Array to string conversion,请用print_r() 来输出数组
报错如下: 原因:数组不能用 echo 来输出 解决办法:print_r() 来输出数组 解决办法:var_dump() 来查看数据类型
- C#如何拦截 Webbrowser Control的响应内容
场景目标 假如Webbrowser中的一个页面打开后第一件事就是执行了alert,我们想要阻止它该如何做? <html> <head> <script src=" ...
- 利用Google趋势来预测比特币价格 - 续1
之前发布了一篇文章利用Google趋势来预测比特币价格,说到了看到一篇文章很朴素的介绍了google趋势和比特币价格的一个关系.觉得很简单直白,就根据那个模型写了个程序,部署起来了,从十一月十四号到现 ...
- hbase读的性能优化
任何系统都会有各种各样的问题,有些是系统本身设计问题,有些却是使用姿势问题.HBase也一样,在真实生产线上大家或多或少都会遇到很多问题,有些是HBase还需要完善的,有些是我们确实对它了解太少.总结 ...
- net core 依懒注入 中间件
依懒注入 依懒 当一个类需要另一个类协作来完成工作的时候就产生了依赖.比如我们在AccountController这个控制器需要完成和用户相关的注册.登录 等事情.其中的登录我们由EF结合Idneti ...
- wsl 子系统 用户目录位置
C:\Users\DELL\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu18.04onWindows_79rhkp1fndgsc\LocalS ...
- 一道令人抓狂的零一背包变式 -- UVA 12563 Jin Ge Jin Qu hao
题目链接: https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_proble ...