NTP网络时间协议

article/2025/10/5 21:47:39

转自https://www.sohu.com/a/206862105_130560

SNPT 秒级时间精度

NTP授时精度与NTP服务器与用户间的网络状况有关:广域网授时精度通常能达50ms级,但有时超过500ms;局域网授时不存在路由器路径延迟问题,因而授时精度理论上可以提到亚毫秒级;但是Windows内置NTP服务,在局域网内其最高授时精度也只能达10ms级。

 

一、NTP协议简介

网络时间协议NTP(Network Time Protocol)的主要开发者是美国特拉华大学的MILLS David L教授设计实现的,由时间协议、ICMP时间戳消息及IP时间戳选项发展而来。NTP用于将计算机客户或服务器的时间与另一服务器同步,使用层次式时间分布模型。在配置时,NTP可以利用冗余服务器和多条网络路径来获得时间的高准确性和高可靠性。即使客户机在长时间无法与某一时间服务器相联系的情况下,仍可提供高准确度时间。

实际应用中,还有确保秒级精度的简单的网络时间协议SNTP(Simple Network Time Protocol)。SNTP是NTP的一个子集,主要用于那些不需要NTP的精度以较高实现复杂性的网络时间同步客户机。SNTP协议已减少了网络延时对校对准确的影响,但没有冗余服务器和校正时钟频率误差功能。

一般的计算机和嵌入式设备在时钟度方面没有明确的指标要求, 时钟精度只有10-4~10-5,每天可能误差达十几秒或更多,如果不及时校正,其累积时间误差不可忽视。许多工业控制过程需要高准确度时间,如:电力系统内众多的计算机监控系统、保护装置、故障录波器等时间同步要在ms级以内。

联网计算机同步时钟最简便的方法是网络授时。网络授时分为广域网授时和局域网授时。广域网授时精度通常能达50ms级,但有时超过500ms,这是因为每次经过的路由器路径可能不相同。现在还没有更好的办法将这种不同路径延迟的时间误差完全消除。局域网授时不存在路由器路径延迟问题,因而授时精度理论上可以提到亚毫秒级Windows内置NTP服务,在局域网内其最高授时精度也只能达10ms级。因此,提高局域网NTP授时精度成为一个迫切需要解决的问题。

二、NTP授时原理

NTP最典型的授时方式是Client/Server方式。如下图1所示,客户机首先向服务器发送一个NTP 包,其中包含了该包离开客户机的时间戳T1,当服务器接收到该包时,依次填入包到达的时间戳T2、包离开的时间戳T3,然后立即把包返回给客户机。客户机在接收到响应包时,记录包返回的时间戳T4。客户机用上述4个时间参数就能够计算出2个关键参数:NTP包的往返延迟d和客户机与服务器之间的时钟偏差t。客户机使用时钟偏差来调整本地时钟,以使其时间与服务器时间一致。

图1 Client/Server方式下NTP授时原理

图1中:T1为客户发送NTP请求时间戳(以客户时间为参照);T2为服务器收到NTP请求时间戳(以服务器时间为参照);T3为服务器回复NTP请求时间戳(以服务器时间为参照);T4为客户收到NTP回复包时间戳(以客户时间为参照);d1为NTP请求包传送延时,d2为NTP回复包传送延时;t为服务器和客户端之间的时间偏差,d为NTP包的往返时间。

现已经T1、T2、T3、T4,希望求得t以调整客户方时钟:

....................................................式(1)

假设NPT请求和回复包传送延时相等,即d1=d2,则可解得“

.....................................式(2)

根据式(1),t也可表示为:t=(T2-T1)+d1=(T2-T1)+d/2.....................式(3)

可以看出,t、d只与T2、T1差值及T3、T4差值相关,而与T2、T3差值无关,即最终的结果与服务器处理请求所需的时间无关。因此,客户端即可通过T1、T2、T3、T4计算出时差t去调整本地时钟。

三、NTP授时精度分析

NTP授时精度与NTP服务器与用户间的网络状况有关,主要取决于NTP包往返路由的延时对称程度,往返路由的延时不对称值最大不超过网络延时。式(2)是在假设NTP请求和回复包在网上传送延时相等,即d1=d2=d/2的情况下得出的,而d1、d2的取值范围在(0...d)间,由式(3)可以得出最大授时误差是±d/2。一般广域网的网络延时在10 ms~500ms之间;局域网的网络延时在计时操作系统内核处理延迟的情况下通常小于1ms。

假定局域网内NTP延时小于1ms,理论上授时误差小于0.5ms,但对于Windows操作系统内置的NTP客户和NTP服务,并不能达到此精度。Windows NTP时钟分辨率因操作系统和硬件不同而有所不同,时钟分辨率通常为10ms或15ms。基于Windows操作系统内置的NTP授时精度最高不超过10ms。

四、基于NTP减少计算机时钟偏差

01、计算机时钟偏差分析

通用PC机自带两类时钟源:硬件时钟和软件时钟(或称为系统时钟)。不论是硬件时钟还是软件时钟,都是由石英晶体振荡器驱动的,通过累计石英晶体振荡器输出脉冲数,换算出时间。所以计算机时钟的准确度取决于晶振频率准确度。受温度变化、电压、芯片老化等因素影响,晶振频率会发生小幅度波动,其中温度对晶振频影响最大。

由于工艺和材料的原因,同一生产线上标称频率相同的石英晶体,其实际频率是不同的,实际频率与标称频率偏差率从10-4量级到10-9量级不等。以10-4量级为例,时钟每天至少误差8.64 s。

02、基于NTP减少计算机时钟频率偏差

时钟频率偏差是时钟长期计时累积误差的主要原因,要提高时钟长期计时精度,必须补偿时钟频率偏差。联网的计算机可采用NTP方式,可非常方便地校准时钟频率偏差。以NTP服务器时钟为标准时间,在某一时刻设置NTP客户机时间为NTP服务器当前时间T0,经过一段时间后,NTP服务器时间为T0+tsn,NTP客户端时间为T0+tcn。因为存在时钟频率偏差,tsn与tcn并不相等。NTP客户端时间tcn需乘以时钟频率偏差系数k才等于tsn,即tsn=k×tcn,所以k=tsn/tcn。

任何晶振实际工作频率都是不稳定的,只是程度不同而已。即使温度补偿的晶振,在常温范围内(摄氏10℃~35℃)也有大约5×10-7~2×10-6的误差。晶振实际频率是受外界多种因素(温度、电压、老化等)影响而改变的。因此,时钟频率偏差系数k并非恒定不变的。每隔一定时间,NTP客户机要对时钟频率偏差系数k进行校正,才能保证计时精度。

五、进一步提高NTP授时精度的方法

局域网络延相对较大的原因在于时间戳一般都是在应用层加盖。为减少操作系统内核处理延时的影响提高NTP授时精度,发/收NTP包时间戳应尽量接近主机真实发/收包时刻。在不改变硬件的条件下,一个可行的办法是修改网卡驱动程序,将记录NTP包发/收时间戳从应用程序移至网卡驱动程序处,可消除操作系统内核处理延时不确定而引入的误差。这种方法在局域网中可大幅提高NTP授时精度至μs级。

为了减少温度引起晶振频率漂移对时钟准确度的影响,可以采用数字温漂补偿方法,提高时钟长期计时准确度。先测出工作温度范围内温度对应的温漂补偿系数,工作时每隔一定时间,根据实际温度查出对应补偿系数动态地修正时间。

时钟频率偏差和时钟分辨率低是局域网NTP授时精度不高的主要原因。


http://chatgpt.dhexx.cn/article/5nbIuHyk.shtml

相关文章

NTP协议解析

NTP(Network Time Protocol,网络时间协议)是由RFC 1305定义的时间同步协议,用来在分布式时间服务器和客户端之间进行时间同步。NTP基于UDP报文进行传输,使用的UDP端口号为123。 使用NTP的目的是对网络内所有具有时钟的…

NTP协议详解

前言 NTP(Network Time Protocol)网络时间协议基于UDP,用于网络时间同步的协议,使网络中的计算机时钟同步到UTC,再配合各个时区的偏移调整就能实现精准同步对时功能。提供NTP对时的服务器有很多,比如微软的NTP对时服务…

NTP 协议

NTP: Network Time Protocal 一、定义:为实现高精确度的时间同步,而设计的网络时钟同步协议。在Linux系统中,它的最新实现是NTP 4.0(一个分布式的网络时钟同步程序)。相关定义和实现参看RFC1305和www.ntp.org。NTP协议…

NTP(Network Time Protocol)协议详解

一、NTP的基本概念: NTP(Network Time Protocol)------网络时间协议-----应用层协议,用来在分布式时间服务器和客户端之间进行时间同步。 二、采用NTP的目的: 是对网络内所有具有时钟的设备进行时钟同步,使网络内所有设备的时钟…

Windows10 debug安装、下载

目录 背景下载安装和使用 背景 由于Windows 10不支持debug命令,如果装虚拟机Windows XP就比较耗内存,所以我用的是DOSBox,然后挂载debug程序文件目录。 下载 DOSBox、debug、masm等等,我已经整理好了,下载地址&…

【WINDOWS系统】WinDbg调试工具

一、Windows 10 调试工具 (WinDbg)的安装 1、下载地址https://docs.microsoft.com/zh-cn/windows-hardware/drivers/debugger/debugger-download-tools#small-classic-windbg-preview-logo-debugging-tools-for-windows-10-windbg 2、安装 记录WinDbg安装目录,待会…

windbg 调试崩溃

前言 windbg 是非常强大的调试工具,但是在使用windbg 进修调试时候,很多的命令不知道如何使用。文章简单介绍如何使用windbg进行调试 https://docs.microsoft.com/zh-cn/windows-hardware/drivers/debugger/debugger-download-tools 一、Windows 调试入…

windbg 调试学习

符号服务器地址 微软的公共符号服务器地址:Symbol information 五种符号加载状态 1. deferred: 延迟加载,现在还不需要使用这个模块的符号,将在后面需要的时候加载 2. no symbols: 没有找到相应的符号文件 3. export: 没有找到symbols,但…

Windbg调试(使用方法)

一、Windbg版本信息 Windbg分32位和64位版本,32位程序应使用32位Windbg调试,64位程序应64位Windbg调试。 若想使用64位的Windbg分析32位的程序, 使用如下命令进行CPU模式的切换: .load wow64exts;!sw//例如: 1.查看线程停在哪里…

Windebug

1、 安装drwtsn32(Dr.Watson win7没有了) 用户可以通过drwtsn32命令,查看dmp文件会被保存在何处。 2、 安装windbg,Windbg下载地址: http://www.microsoft.com/whdc/devtools/debugging/default.mspx 3、 设置windbg A、符号表路径…

windbg调试分析dump工具,使用windbg分析Qt崩溃原因

目录 windbg下载和安装windbg调试exe可执行文件windbg分析dump文件 在非开发环境,windbg工具可以对.exe可执行文件进行调试,也可以分析dump文件,是release版本运行模式解决bug的神器。 windbg下载和安装 一般在安装windows系统软件时会安装w…

02-windows调试工具(DebugDiag使用)

工具下载地址:https://www.microsoft.com/en-us/download/details.aspx?id49924csdn的下载地址:https://download.csdn.net/download/qq_37103755/87089384DebugDiag的简介: DebugDiag 工具主要用于帮助解决如挂起、 速度慢、 内存泄漏或内存…

如何使用Debugging Tools for Windows (windebug)简单的使用心得

1.安装debug工具 ​ 下载页面地址:http://www.microsoft.com/whdc/devtools/debugging/installx86.mspx 选择合适的版本安装 ​ 2.安装Symbols(特征库) 建议可以多安装以免出现分析不出来的情况 ​ 下载地址:http://www.mi…

WinDebug快速使用及调试注意事项

参考文献: http://www.cnblogs.com/killmyday/archive/2010/03/14/1685331.html WinDbg是微软发布的一款强大的源码级调试工具,支持用户态和内核态两种模式的调试,支持Dump文件分析、内存泄露诊断、同时支持跨机器远程附加进程调试。在具体…

Windows下调试工具Windbg入门

前言 Windbg简单来说就是一个Windows下对用户态/内核态的程序进行调试,以及对Core Dump文件的分析。对于Crash,资源泄露,死锁等问题的分析,Windbg是一个强有力的利器。 一、下载 微软官网提供的Windbg为windows10版本&#xff…

这可能是最详细的 Windows Debug 详解 了

Debug概览 Debug是什么? debug是Windows 16位或者32位机器上的一款调试工具。也就是说,在WindowsXP及以前的机器上都有debug,直接WinX debug就可以调出;在之后的32位机也有;但是在之后的64位机器上不存在&#xff0c…

Debugging Tools for Windows (WinDbg)的使用

安装 可能大家安装时,直接从外部的网址下载或者拷贝,一般这也是可行的,只不过可能安装的不是最新版本,或者找不到和自己当前系统匹配的版本,所以最简单的方法还是去微软的官网下载 下载地址: Download Debugging tool…

Windows调试工具入门 — windebug

一、 引子 Debugging Tools for Windows是微软发布的一套用于软件调试的工具包(后面如果没有指明,那么我会使用WinDbg来作为这一套调试工具的简称)。我第一次接触是在三年前的一个内核驱动项目,由于进行了IDT中键盘鼠标中断的Hook,使用Softi…

Windebug专题

5 解决问题案例 !cs、~~[TID]&#xff08;经典死锁&#xff09; 随手写的&#xff1a; #include <windows.h > CRITICAL_SECTION cs1; CRITICAL_SECTION cs2; DWORD __stdcall thread1(LPVOID lp) { EnterCriticalSection(&cs1); Sleep(10); EnterCriticalSection(…

winDebug 调试

1.背景 最近由于线上的程序发生了死锁&#xff0c;而且重现的概率很低&#xff0c;正好客户反馈一个任务超时了&#xff0c;登上线上环境发现有一个“僵尸”进程&#xff0c;占用内存不波动&#xff0c;cpu仍在占用&#xff0c; 那么用创建转储文件&#xff0c;用windbg调试吧…