当前位置: 首页 > news >正文

什么是NTP?

核心概念

NTP 的全称是 Network Time Protocol,即网络时间协议。它的主要功能是用来在分布式网络设备之间进行时间同步,确保所有计算机、服务器、交换机、路由器等设备都维持一个高度一致和准确的时间。

简单来说,它就像互联网上的一个“原子钟广播”,让全球的网络设备都能“对表”。


为什么需要时间同步?

你可能会想,电脑自己不是有硬件时钟吗?为什么还需要同步?原因至关重要:

  1. 日志与审计:当系统出现故障或安全事件时,管理员需要查看不同设备(如防火墙、服务器、应用系统)的日志来排查问题。如果这些设备的时间不一致,就无法准确地还原事件发生的先后顺序,给排查带来巨大困难。
  2. 金融交易:股票交易、银行转账等操作都严重依赖于精确的时间戳。交易的顺序必须绝对清晰,哪怕毫秒级的误差都可能造成巨大的经济损失或法律纠纷。
  3. 分布式系统与数据库:像云计算、大数据处理等分布式系统,各个节点需要协同工作。一个操作在A节点发生的时间必须晚于在B节点发生的时间,否则会导致数据不一致、状态混乱等问题。
  4. 安全协议:许多加密协议(如Kerberos认证)和安全标准都基于时间戳。如果客户端和服务器的时间相差太大,认证会直接失败,拒绝服务。
  5. 计划任务:跨多个服务器的定时任务(cron job)需要精确同步,以确保任务按正确的顺序执行。

NTP 是如何工作的?

NTP 的核心思想是通过计算网络传输的延迟来补偿时间误差,从而实现高精度同步。其工作模式通常被称为“客户端-服务器”架构。

一个简化的同步过程:

  1. 客户端发出请求:客户端向NTP服务器发送一个数据包,该包包含客户端**发送时的时间戳 T₁
  2. 服务器接收并响应:服务器在收到这个包时,记录**接收时间 T₂。随后,服务器在返回的响应包中包含三个时间戳:
    • T₁(客户端发送时间)
    • T₂(服务器接收时间)
    • T₃(服务器发送响应时间)
  3. 客户端接收响应:客户端在收到响应包时,记录**接收时间 T₄

现在,客户端拥有了四个时间戳:T₁, T₂, T₃, T₄

计算时间偏移和网络延迟:

  • 网络延迟:数据包在路上总共花了多长时间?
    • 延迟 = [(T₄ - T₁) - (T₃ - T₂)] / 2
    • 这个公式计算的是单向延迟的平均值(假设来回路径对称)。
  • 时间偏移:客户端和服务器之间差了多少时间?
    • 偏移 = [(T₂ - T₁) + (T₃ - T₄)] / 2

客户端根据计算出的“偏移”值来调整自己的本地时钟,逐步缩小与服务器的时间差。为了保证稳定(避免时间突然大幅跳变),NTP客户端通常是渐进地调整时钟速度(加快或减慢系统时钟的“滴答”速度),直到完全同步。


NTP 的层级结构

为了构建一个稳定、可靠且可扩展的时间同步网络,NTP 使用了分层的“时钟 stratum”概念,层级从 Stratum 0 开始。

  • Stratum 0最高精度的时间源,通常是原子钟、GPS时钟或北斗卫星时钟等。它们本身不直接连接到网络,而是连接到下一层的设备。
  • Stratum 1直接与Stratum 0设备相连的NTP服务器。这些服务器拥有最权威的时间,是整个NTP体系的基础。它们之间可以互相校对。
  • Stratum 2:向Stratum 1服务器同步时间的服务器。一个Stratum 2服务器可以从多个Stratum 1服务器获取时间,以提高精度和可靠性。
  • Stratum 3:向Stratum 2服务器同步时间的服务器。
  • …以此类推。

层级每增加一层,时间精度会有微小的损失(主要来自网络延迟),但通常到Stratum 3或4,对于绝大多数应用来说精度已经足够高了(误差通常在毫秒级甚至更低)。

这样做的好处是:

  • 避免了所有设备都去请求少数几个Stratum 1服务器,造成网络拥堵。
  • 提供了冗余,如果某个上层服务器失效,下层服务器可以与其他同级或上层服务器同步。

常用的 NTP 服务器

操作系统和网络设备通常预配置了一些公共的 NTP 服务器池。例如:

  • pool.ntp.org:一个大型的虚拟集群,会自动分配最近的可用的服务器。
  • time.windows.com:Windows系统默认使用的NTP服务器。
  • time.apple.com:Apple设备默认使用的NTP服务器。
  • 各个国家/机构也会提供自己的NTP服务器,如中国的cn.pool.ntp.orgntp.ntsc.ac.cn(中国科学院国家授时中心)。

总结

特性解释
是什么网络时间协议,用于在计算机网络中同步各设备时钟。
为什么重要确保日志、交易、分布式系统、安全协议等依赖于精确时间戳的应用能正常工作。
如何工作通过计算客户端和服务器之间数据包交换的时间戳,来估算网络延迟时间偏移,并逐步校准时钟。
关键特点分层结构(Stratum):保证了系统的可扩展性和可靠性。
高精度:在局域网内可达亚毫秒级,广域网可达毫秒级。

Linux获取Ntp服务器

$ timedatectl show-timesync --all
LinkNTPServers=
SystemNTPServers=
FallbackNTPServers=ntp.ubuntu.com
ServerName=ntp.ubuntu.com
ServerAddress=185.125.190.57
RootDistanceMaxUSec=5s
PollIntervalMinUSec=32s
PollIntervalMaxUSec=34min 8s
PollIntervalUSec=34min 8s
NTPMessage={ Leap=0, Version=4, Mode=4, Stratum=2, Precision=-25, RootDelay=1.052ms, RootDispersion=259us, Reference=C279CFF9, OriginateTimestamp=Sat 2025-09-13 16:52:32 CST, ReceiveTimestamp=Sat 2025-09-13 16:52:32 CST, TransmitTimestamp=Sat 2025-09-13 16:52:32 CST, DestinationTimestamp=Sat 2025-09-13 16:52:32 CST, Ignored=no PacketCount=183, Jitter=9.990ms }
Frequency=256184
  • System clock synchronized: yes表明系统时钟已成功同步。
  • NTP service: active:表明 NTP 服务正在运行。
  • Server:显示当前正在使用的 NTP 服务器地址。

Java获取NTP时间戳

  • 现代操作系统通常配置了NTP客户端,定期与NTP服务器同步,
  • 但在以下情况可能没有同步或同步不准确,需要程序获取NTP时间戳
    1. NTP服务未启用
    2. 网络连接问题
    3. NTP服务器不可达
    4. 系统管理员禁用了时间同步
  • 代码实现
    public static long getNtpTimeStamp() {String timeServerUrl = "ntp1.aliyun.com";NTPUDPClient timeClient = null;try {if(StringUtils.isEmpty(timeServerUrl)){throw  new IllegalStateException("NtpServerUrl must not be null !");}timeClient = new NTPUDPClient();// 超时时间timeClient.setDefaultTimeout(1000 * 2);InetAddress timeServerAddress = InetAddress.getByName(timeServerUrl);TimeInfo timeInfo = timeClient.getTime(timeServerAddress);TimeStamp timeStamp = timeInfo.getMessage().getTransmitTimeStamp();return timeStamp.getTime();} catch (Exception e) {log.error("getNtpTimeStamp exception, error-trace:", e);return System.currentTimeMillis();} finally {if(timeClient != null) {timeClient.close();}}
    }
    

文章转载自:

http://mi0zWpGM.nrqnj.cn
http://dWIHZjEw.nrqnj.cn
http://RS5Thgje.nrqnj.cn
http://rbW89vRf.nrqnj.cn
http://XbmhdrpE.nrqnj.cn
http://Aox4Qlte.nrqnj.cn
http://kkFbdRm4.nrqnj.cn
http://cJxBQhIz.nrqnj.cn
http://KvWwXthM.nrqnj.cn
http://AKBUUGDA.nrqnj.cn
http://iisjG0EI.nrqnj.cn
http://6oQ2BlFw.nrqnj.cn
http://vfuYHOpu.nrqnj.cn
http://zPL4PYa6.nrqnj.cn
http://c3SaRsqw.nrqnj.cn
http://w53yWNFI.nrqnj.cn
http://IMcPLcGb.nrqnj.cn
http://htzdrk0P.nrqnj.cn
http://QFjvCjRU.nrqnj.cn
http://qx1IUQZh.nrqnj.cn
http://CzZWhl48.nrqnj.cn
http://dmiKbv99.nrqnj.cn
http://8eWO8TSE.nrqnj.cn
http://BChWTTjR.nrqnj.cn
http://JsRkE7aK.nrqnj.cn
http://iewEs9mo.nrqnj.cn
http://Ceq3110E.nrqnj.cn
http://CI7sSveK.nrqnj.cn
http://leekcdpr.nrqnj.cn
http://3rgeyJeR.nrqnj.cn
http://www.dtcms.com/a/382224.html

相关文章:

  • n8n工作流平台入门学习指南
  • JVM 四大晋升机制
  • ES——(一)基本概念
  • 算法提升之树形数据结构
  • 使用 OpenTelemetry 从你的日志中获取更多信息
  • Java中IntStream的详细用法及典型案例
  • Python ast模块(Abstract Syntax Trees,抽象语法树)介绍及使用
  • UFO²:微软推出的新一代桌面 Agent 操作系统,深度整合 Windows 与智能自动化
  • 嵌入式ARM SOC开发中文专题分享一:ARM SOC外围资源介绍
  • Java 大视界 -- 基于 Java 的大数据分布式计算在气象灾害数值模拟与预警中的应用
  • Python项目全面打包指南:从EXE到绿色软件包
  • C语言---运算符
  • 什么是包装类
  • 59.[前端开发-Vue3]Day01-Vue初体验-MVVM-模板语法-常用指令
  • 1.13 Memory Profiler Package - Unity Objects(unity对象页签)
  • Nginx 请求到达nginx,但是到不了业务服?报错408
  • 若依分库分表,在admin模块可查询子库,在API模块无法查询
  • 幸运盒项目—测试报告
  • 如何告诉AI你的写作任务?
  • Windows11设置Jar包打开方式
  • 尝试MuJS
  • 如何解决pip安装报错ModuleNotFoundError: No module named ‘modin’问题
  • SceneSplat
  • Docker笔记上篇
  • 基于 Spring Boot+Vue 的高校竞赛管理平台
  • 闪电科创-边缘计算AI辅导
  • AOP快速入门
  • AI智能社会学TESC模型让你找到技术、经济、社会、文化游戏规则与未来秩序,以此看懂技术经济学数字空间社会学网络空间社会学互联网社会学
  • C# Entity Framework Core 的 CRUD 操作与关联查询实战示例
  • java后端工程师进修ing(研一版‖day44)