NTP协议解析

article/2025/10/6 19:05:55

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

使用NTP的目的是对网络内所有具有时钟的设备进行时钟同步,使网络内所有设备的时钟保持一致,从而使设备能够提供基于统一时间的多种应用。

对于运行NTP的本地系统,既可以接收来自其他时钟源的同步,又可以作为时钟源同步其他的时钟,并且可以和其他设备互相同步。

NTP工作原理

NTP的基本工作原理如所示。Device A和Device B通过网络相连,它们都有自己独立的系统时钟,需要通过NTP实现各自系统时钟的自动同步。为便于理解,作如下假设:

在Device A和Device B的系统时钟同步之前,Device A的时钟设定为10:00:00am,Device B的时钟设定为11:00:00am。

 Device B作为NTP时间服务器,即Device A将使自己的时钟与Device B的时钟同步。

   NTP报文在Device A和Device B之间单向传输所需要的时间为1秒。

NTP技术 - yu - sms

       系统时钟同步的工作过程如下:

   Device A发送一个NTP报文给Device B,该报文带有它离开Device A时的时间戳,该时间戳为10:00:00am(T1)。

  当此NTP报文到达Device B时,Device B加上自己的时间戳,该时间戳为11:00:01am(T2)。

  当此NTP报文离开Device B时,Device B再加上自己的时间戳,该时间戳为11:00:02am(T3)。

  当Device A接收到该响应报文时,Device A的本地时间为10:00:03am(T4)。

至此,Device A已经拥有足够的信息来计算两个重要的参数:

 NTP报文的往返时延Delay=(T4-T1)-(T3-T2)=2秒。

  Device A相对Device B的时间差offset=((T2-T1)+(T3-T4))/2=1小时。

这样,Device A就能够根据这些信息来设定自己的时钟,使之与Device B的时钟同步。

NTP的报文格式

NTP有两种不同类型的报文,一种是时钟同步报文,另一种是控制报文。控制报文仅用于需要网络管理的场合,它对于时钟同步功能来说并不是必需的,这里不做介绍。

NTP技术 - yu - sms

 

主要字段的解释如下:

l              LI(Leap Indicator):长度为2比特,值为“11”时表示告警状态,时钟未被同步。为其他值时NTP本身不做处理。

l              VN(Version Number):长度为3比特,表示NTP的版本号,目前的最新版本为3。

l              Mode:长度为3比特,表示NTP的工作模式。不同的值所表示的含义分别是:0未定义、1表示主动对等体模式、2表示被动对等体模式、3表示客户模式、4表示服务器模式、5表示广播模式或组播模式、6表示此报文为NTP控制报文、7预留给内部使用。

l              Stratum:系统时钟的层数,取值范围为1~16,它定义了时钟的准确度。层数为1的时钟准确度最高,准确度从1到16依次递减,层数为16的时钟处于未同步状态,不能作为参考时钟。

l              Poll:轮询时间,即两个连续NTP报文之间的时间间隔。

l              Precision:系统时钟的精度。

l              Root Delay:本地到主参考时钟源的往返时间。

l              Root Dispersion:系统时钟相对于主参考时钟的最大误差。

l              Reference Identifier:参考时钟源的标识。

l              Reference Timestamp:系统时钟最后一次被设定或更新的时间。

l              Originate Timestamp:NTP请求报文离开发送端时发送端的本地时间。

l              Receive Timestamp:NTP请求报文到达接收端时接收端的本地时间。

l              Transmit Timestamp:应答报文离开应答者时应答者的本地时间。

l              Authenticator:验证信息。

NTP的工作模式

 设备可以采用多种NTP工作模式进行时间同步:

             客户端/服务器模式

             对等体模式

            广播模式

            组播模式

用户可以根据需要选择合适的工作模式。在不能确定服务器或对等体IP地址、网络中需要同步的设备很多等情况下,可以通过广播或组播模式实现时钟同步;客户端/服务器和对等体模式中,设备从指定的服务器或对等体获得时钟同步,增加了时钟的可靠性。
1. 客户端/服务器模式

NTP技术 - yu - sms

在客户端/服务器模式中,客户端向服务器发送时钟同步报文,报文中的Mode字段设置为3(客户模式)。服务器端收到报文后会自动工作在服务器模式,并发送应答报文,报文中的Mode字段设置为4(服务器模式)。客户端收到应答报文后,进行时钟过滤和选择,并同步到优选的服务器。

在该模式下,客户端能同步到服务器,而服务器无法同步到客户端。

2. 对等体模式

NTP技术 - yu - sms

 在对等体模式中,主动对等体和被动对等体之间首先交互Mode字段为3(客户端模式)和4(服务器模式)的NTP报文。之后,主动对等体向被动对等体发送时钟同步报文,报文中的Mode字段设置为1(主动对等体),被动对等体收到报文后自动工作在被动对等体模式,并发送应答报文,报文中的Mode字段设置为2(被动对等体)。经过报文的交互,对等体模式建立起来。主动对等体和被动对等体可以互相同步。如果双方的时钟都已经同步,则以层数小的时钟为准

3. 广播模式

NTP技术 - yu - sms

在广播模式中,服务器端周期性地向广播地址255.255.255.255发送时钟同步报文,报文中的Mode字段设置为5(广播模式)。客户端侦听来自服务器的广播报文。当客户端接收到第一个广播报文后,客户端与服务器交互Mode字段为3(客户模式)和4(服务器模式)的NTP报文,以获得客户端与服务器间的网络延迟。之后,客户端就进入广播客户端模式,继续侦听广播报文的到来,根据到来的广播报文对系统时钟进行同步。

4. 组播模式

NTP技术 - yu - sms

在组播模式中,服务器端周期性地向用户配置的组播地址(若用户没有配置组播地址,则使用默认的NTP组播地址224.0.1.1)发送时钟同步报文,报文中的Mode字段设置为5(组播模式)。客户端侦听来自服务器的组播报文。当客户端接收到第一个组播报文后,客户端与服务器交互Mode字段为3(客户模式)和4(服务器模式)的NTP报文,以获得客户端与服务器间的网络延迟。之后,客户端就进入组播客户模式,继续侦听组播报文的到来,根据到来的组播报文对系统时钟进行同步。


http://chatgpt.dhexx.cn/article/ylufxqOy.shtml

相关文章

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调试吧…

ZedGraph类库之基本教程---PieSampleDemo.cs(画饼)

ZedGraph类库之基本教程 PieSampleDemo.cs介绍 这节我把饼形图粗略的介绍一下&#xff0c;如下图。 PieSampleDemo.cs&#xff08;画饼&#xff09; using System; using System.Drawing; using System.Collections; using ZedGraph; namespace ZedGraph.Demo { ///<sum…