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

NTP简介及相关概念

NTP简介及相关概念

记录NTP相关的一些知识点。

1. 什么是NTP

1.1 NTP简介

网络时间协议NTP(Network Time Protocol)是TCP/IP协议族里面的一个应用层协议,用来使客户端和服务器之间进行时钟同步,提供高精准度的时间校正。NTP服务器从权威时钟源(例如原子钟、GPS)接收精确的协调世界时UTC,客户端再从服务器请求和接收时间。
NTP基于UDP报文进行传输,使用的UDP端口号为123。

“网络时间协议 (NTP) 能够精确显示时间和日期信息,以确保联网计算机系统的时钟与网络或互联网上的常用时间源保持同步。全球许多标准机构都配备了原子钟,它们可作为时间参考。全球定位系统的卫星中内置了多个原子钟,因此它们的时间信号极其精确。不过,出于军事原因,这些信号可能会被故意降级。理想情况下,每个站点都应有一台服务器,并附带自己的参考时钟,作为站点内部的时间服务器。许多设备通过低频广播或全球定位系统 (GPS) 接收时间和日期。然而,在大多数情况下,可以使用分布在各地并连接到互联网的公开访问的时间服务器。这些 NTP 服务器提供‘协调世界时’ (UTC) 。

1.2 为什么时钟同步很重要?

出于诸多原因,精确的时间对于网络至关重要,比如:

  • 网络管理:从不同网络设备采集来的日志信息进行分析时,需要以时间作为参照依据,需要准确的数据包和日志的时间戳。如果不同设备上的系统时间不一致,会因先后顺序等问题给故障定位带来障碍。
  • 计费系统:计费业务对于时间尤其敏感,要求所有设备的时间保持一致,否则会引起计费不准确,导致用户质疑、投诉等。
  • 协同处理:多个系统协同处理同一个复杂事件,为保证正确的执行顺序,多个系统必须参考同一时钟。
  • 系统时间:某些应用或服务需要准确的时间来标记用户登录、交易等操作信息,确保可追溯记录。

因此有一个统一的标准时间对于网络而言意义重大。

NTP就是用来使网络中的各个主机时钟同步的一种协议,他把主机的时钟同步到协调世界时UTC,其精度在LAN网络内可达1毫秒内,在WAN网络上可以达到几十毫秒内。

1.3 NTP协议发展历史

NTP是由美国Delaware大学David L .Mills教授设计的,是最早用于网络中时钟同步的标准之一。NTP是从时间协议和ICMP时间戳报文演变而来,NTP的版本演进如下所示。

NTP发展历史

1.4 NTP 时钟层级

NTP允许客户端从服务器请求和接收时间,而服务器又从权威时钟源(例如原子钟、GPS)接收精确的协调世界时UTC。

NTP以层级来组织模型结构,层级中的每层被称为Stratum。通常将从权威时钟获得时钟同步的NTP服务器的层数设置为Stratum 1,并将其作为主时间服务器,为网络中其他的设备提供时钟同步。而Stratum 2则从Stratum 1获取时间,Stratum 3从Stratum 2获取时间,以此类推。时钟层数的取值范围为1~16,取值越小,时钟准确度越高。层数为1~15的时钟处于同步状态;层数为16的时钟被认为是未同步的,不能使用的。

NTP模型结构

1.5 NTP同步原理

NTP最典型的授时方式是Client/Server方式,如下图所示。

NTP同步原理

  1. 客户端首先向服务端发送一个NTP请求报文,其中包含了该报文离开客户端的时间戳t1;
  2. NTP请求报文到达NTP服务器,此时NTP服务器的时刻为t2。当服务端接收到该报文时,NTP服务器处理之后,于t3时刻发出NTP应答报文。该应答报文中携带报文离开NTP客户端时的时间戳t1、到达NTP服务器时的时间戳t2、离开NTP服务器时的时间戳t3;
  3. 客户端在接收到响应报文时,记录报文返回的时间戳t4。

客户端用上述4个时间戳参数就能够计算出2个关键参数:

  • NTP报文从客户端到服务器的往返延迟delay。
    d e l a y = ( t 4 − t 1 ) − ( t 3 − t 2 ) delay = ( t4 - t1 ) - ( t3 - t2 ) delay=(t4t1)(t3t2)

  • 客户端与服务端之间的时间差offset。

    根据方程组:

    { t 2 = t 1 + o f f s e t + d e l a y 2 t 4 = t 3 − o f f s e t + d e l a y 2 \begin{cases} t2 = t1 + offset + \frac{delay}{2} \\ t4 = t3 - offset + \frac{delay}{2} \\ \end{cases} {t2=t1+offset+2delayt4=t3offset+2delay
    可以解得时间差为:
    o f f s e t = ( t 2 − t 1 ) + ( t 3 − t 4 ) 2 offset = \frac{(t2 - t1) + (t3 - t4)}{2} offset=2(t2t1)+(t3t4)

NTP客户端根据计算得到的offset来调整自己的时钟,实现与NTP服务器的时钟同步。

2. NTP解决方案

NTP(Network Time Protocol)服务器是用于同步计算机系统时间的服务器,有多种方案可以使用。

NTP(Network Time Protocol)服务器是用于同步计算机系统时间的服务器,有多种方案可以使用。以下是常见的NTP服务器解决方案:

2.1 公共NTP服务器

这些是由组织、大学或公司提供的免费公共NTP服务器,适合非关键应用的时间同步。

  • pool.ntp.org:这是一个由全球NTP服务器构成的公共池,自动分配离客户端最近的服务器。推荐使用这个服务:

    server 0.pool.ntp.org
    server 1.pool.ntp.org
    server 2.pool.ntp.org
    server 3.pool.ntp.org
    
  • 国家或地区的NTP服务器:许多国家提供免费的NTP服务器,通常由政府或大学管理。例如:

    • 中国:cn.pool.ntp.org
    • 美国:us.pool.ntp.org
    • 欧洲:europe.pool.ntp.org

2.2 企业级NTP服务器

企业级NTP服务器提供更高的可靠性和安全性,通常用于关键任务的环境。

  • GPS/NTP硬件服务器:许多企业使用基于GPS的NTP服务器设备,这些服务器从GPS卫星获取时间,并提供非常精确的时间同步,适用于银行、数据中心等。
    • 示例:Microsemi SyncServer 系列、Meinberg LANTIME 系列。
  • 企业内部NTP服务器:一些企业会设置内部NTP服务器,与外部NTP服务器同步,然后在局域网中为所有设备提供服务。

2.3 自建NTP服务器

可以使用Linux或Windows系统来搭建自己的NTP服务器:

  • Linux NTP服务器:使用ntpdchrony服务。

    • ntpd:传统的NTP守护进程,适合长期运行的时间同步需求。
    • chrony:新的NTP服务,具有更快的时间调整能力和更高的准确性,特别适用于网络条件不稳定的环境。
  • Windows NTP服务器:Windows Server可以配置为NTP服务器,通过“Windows Time Service (W32Time)”提供时间同步服务。
    Chrony服务和NTP服务对比:

时间同步服务使用场景时间同步精度稳定性简介
Chrony服务适用于高精度、高稳定性、自动化等场景。较高能够更好地适应高延迟和不稳定的网络环境。Chrony是一个实现网络时间协议(NTP)的软件包,用于同步计算机的系统时间与世界各地的NTP服务器。Chrony特别适合在变化的网络环境中运行,能够以快速和高效的方式调整系统时间。更多信息,请参见Chrony。
NTP服务适用于大多数无需太高精度要求的普通场景。正常仅能适应一定程度的网络不稳定。NTP是一种经典的时间同步服务,是NTP协议的一个实现。NTP适用于长期运行的服务器,特别是在网络条件比较稳定的环境下。更多信息,请参见NTP。

2.4 云NTP服务

  • AWS Time Sync Service:Amazon提供的高精度时间同步服务,支持所有EC2实例。

    利用 Amazon Time Sync Service 保持时间同步 | 亚马逊AWS官方博客

  • Google Cloud NTP:Google Cloud提供一个内置的NTP服务。

    在虚拟机上配置 NTP | Compute Engine Documentation | Google Cloud

  • Azure NTP:微软Azure也提供类似的时间同步服务,适用于Azure虚拟机。

    Time sync for Windows VMs in Azure - Azure Virtual Machines | Microsoft Learn

  • Aliyun NTP:阿里云NTP服务。

配置NTP服务确保实例时间准确或一致_云服务器 ECS(ECS)-阿里云帮助中心 (aliyun.com)

2.5 混合NTP方案

  • 内部NTP服务器 + 公共NTP服务器同步:许多企业会设置一个或多个内部NTP服务器,通过这些服务器从公共NTP服务器获取时间并为内网设备提供服务。这样可以减少外网依赖,确保网络内的时间同步一致性。

这些方案可以根据需求、规模和可靠性要求进行选择。如果是关键应用或金融等行业,建议使用企业级NTP服务器或GPS硬件服务器,以确保时间精度和稳定性。

3. 相关知识点

3.1 关于NTP端口

NTP 流量由端口 123 上的 UDP 数据包组成,需要通过基于网络和主机的防火墙允许 NTP 运行。

3.2 UTC、时区和 DST、CST、GMT等概念说明

  1. UTC

UTC(Coordinated Universal Time)是全球标准时间,不受时区或季节变化的影响。它是地球上所有时间的基准,并始终保持不变。UTC用于全球协调时间的精确测量,如卫星系统、航空、航海、网络协议(如NTP)等。所有其他时间(包括各地的本地时间)都基于UTC进行偏移计算。

  1. 时区

时区是根据地球的经度划分出来的区域,每个时区的标准时间与UTC存在一个特定的时差。全球一共划分为24个时区。它们是中时区(零时区)、东1-12区,西1-12区。每个时区横跨经度15度,时间正好是1小时。最后的东、西第12区各跨经度7.5度,以东、西经180度为界。时区根据地理位置和国家划分,调整当地的时间,以方便日常活动与太阳升落的时间相匹配。例如:北京时间 (CST) 是 UTC+8,即东八区;纽约时间 (EST) 是 UTC-5(标准时间)。

  1. DST

即夏令时,Daylight Saving Time,DST 是一种季节性调整措施,通常在夏季将时钟拨快一小时,以延长日光利用时间,减少夜晚使用灯光的时间。DST 用于某些国家和地区,目的是节约能源,但并非所有国家都使用夏令时。例如纽约通常在冬季采用美国东部标准时间(Eastern Standard Time,EST,UTC-5),但在夏季会调整为美国东部夏令时间(Eastern Daylight Time,EDT,UTC-4);伦敦在冬季使用 GMT(UTC+0),在夏季使用 BST(British Summer Time,UTC+1);我们国家目前没有采用DST的做法。

  1. CST

CST(China Standard Time)是中国的标准时间,官方定义为 UTC+8。中国标准时间覆盖了整个中国大陆区域,包括所有的省份和城市。CST 是基于 UTC 的时区,表示当地时间比协调世界时(UTC)快8小时。CST 与北京时间 (Beijing Time) 是相同的,通常在国际上用 CST 来表示中国的标准时间。

  1. GMT

GMT(Greenwich Mean Time)是历史上用于表示标准时间的基准,源于英国伦敦附近的格林尼治天文台。GMT 是基于天文观测的标准时间,主要用于测量时间的零点。GMT 和 UTC 在大多数情况下可以互换使用,因为二者的时间计算方式非常接近。但 UTC 更精确,包含了原子钟的测量,而 GMT 主要依赖天文观测。GMT 在时间记录和国际交流中有着广泛的应用,但在现代时间系统中,UTC 被广泛用于科学和技术领域。

3.3 关于闰秒(Leap Second)

闰秒(Leap Second) 是为了协调原子时间(TAI, International Atomic Time)与地球自转时间(UT, Universal Time)之间的差异而定期插入的额外时间单位。由于地球自转速度并不是完全稳定的,它会受到潮汐、地震、气候等因素的影响,因此科学家们通过加入闰秒的方式来保证协调世界时(UTC)与地球自转时间保持同步。

闰秒(Leap Second) 是为了协调原子时间(TAI, International Atomic Time)与地球自转时间(UT, Universal Time)之间的差异而定期插入的额外时间单位。由于地球自转速度并不是完全稳定的,它会受到潮汐、地震、气候等因素的影响,因此科学家们通过加入闰秒的方式来保证协调世界时(UTC)与地球自转时间保持同步。

详细解释

  1. 背景

    • 原子时间(TAI):是基于原子钟的高精度时间标准,原子钟的计时非常稳定,每天的误差可以忽略不计。
    • 地球自转时间(UT1):是根据地球自转确定的时间,它的变化主要由地球自转速度的波动引起,地球自转有时会比原子时间慢一些。
  2. 问题: 地球自转并不是精确的 24 小时,而是会有所波动,这导致了 UTC(协调世界时)和 UT1(地球自转时间)之间会产生差异。如果不加以调整,随着时间的推移,这种差异会越来越大。因此需要一种机制来定期调整 UTC 和 UT1 的时间差,保持两者的精确同步。

  3. 解决方案闰秒就是这种调整的方式。当科学家测量到 UTC 和 UT1 的时间差达到 0.9 秒左右时,就会决定插入一个“闰秒”。通常情况下,闰秒会被添加到 UTC 时间的6月30日或12月31日的最后一秒

  4. 添加闰秒的方式

    • 在正常情况下,每天的最后一秒计为 23:59:59,接着进入下一天的 00:00:00
    • 当添加闰秒时,一天的最后一秒会变为 23:59:60,然后才进入第二天的 00:00:00
  5. 闰秒的历史

    • 自1972年开始,已经插入了多次闰秒。每次闰秒的插入决定由国际地球自转服务机构(IERS)根据观测数据来进行,具体插入的时间会提前公告。
    • 2022年11月18日,负责协调世界时的国际计量局(BIPM)表示,科学家和政府代表在法国举行的一次会议上投票决定到2035年取消闰秒。根据决议,闰秒将暂时继续正常添加,但到2035年,世界时和国际原子时之间的差异将被允许增长到大于一秒的值。
  6. 闰秒的影响

  • 对于大多数人来说,闰秒的影响不明显,但对于依赖精确时间的系统(如全球定位系统、卫星通信、金融交易系统等),闰秒需要特别考虑和处理。
  • 现代的时间同步协议如 NTP(网络时间协议)等都能够处理闰秒的插入。

4. 相关资料

  1. 使用ntpd配置ntp:https://docs.redhat.com/zh_hans/documentation/red_hat_enterprise_linux/7/html/system_administrators_guide/s1-configure_ntp

  2. How to read the ntpq output?: https://access.redhat.com/solutions/7057435

  3. 19.20. 其它资源 | Red Hat Product Documentation

  4. 什么是NTP?NTP如何实现时钟同步? - 华为 (huawei.com)

  5. 闰秒 - 维基百科,自由的百科全书 (wikipedia.org)
    itional-resources)

  6. 什么是NTP?NTP如何实现时钟同步? - 华为 (huawei.com)

  7. 闰秒 - 维基百科,自由的百科全书 (wikipedia.org)

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • mysql创建存储过程
  • 音频PCM的能量dB计算
  • iOS巨魔商店免越狱作弊解决方案
  • Redis: 用于纯缓存模式需要注意的地方
  • zoom 会议 javascript 转录例子
  • Unity 贴图拷贝与性能对比
  • Python中的`while`循环:探索无限可能
  • 《深入理解 C++虚函数:开启多态之门的关键》
  • 双登集团IPO:铅酸电池业务仍为重心,暴露了成长天花板?
  • AD7606芯片驱动-FPGA实现
  • 打卡50天------图论
  • 【给女朋友讲C++】C++的调试之gdb
  • python socket 发生UDP 和 UDPServer接受UDP实例
  • 快速绘制思维导图:高效思考与信息整理的利器
  • LeetCode 热题 100 回顾
  • [rust! #004] [译] Rust 的内置 Traits, 使用场景, 方式, 和原因
  • [数据结构]链表的实现在PHP中
  • 2017届校招提前批面试回顾
  • Elasticsearch 参考指南(升级前重新索引)
  • exports和module.exports
  • java8 Stream Pipelines 浅析
  • JS 面试题总结
  • learning koa2.x
  • OpenStack安装流程(juno版)- 添加网络服务(neutron)- controller节点
  • scrapy学习之路4(itemloder的使用)
  • text-decoration与color属性
  • ViewService——一种保证客户端与服务端同步的方法
  • Web标准制定过程
  • Xmanager 远程桌面 CentOS 7
  • 反思总结然后整装待发
  • 开源中国专访:Chameleon原理首发,其它跨多端统一框架都是假的?
  • 前端相关框架总和
  • 什么软件可以剪辑音乐?
  • 算法-图和图算法
  • 小程序开发中的那些坑
  • 验证码识别技术——15分钟带你突破各种复杂不定长验证码
  • - 转 Ext2.0 form使用实例
  • ​​快速排序(四)——挖坑法,前后指针法与非递归
  • ​LeetCode解法汇总1410. HTML 实体解析器
  • ​TypeScript都不会用,也敢说会前端?
  • ​什么是bug?bug的源头在哪里?
  • !!Dom4j 学习笔记
  • #QT(QCharts绘制曲线)
  • #微信小程序:微信小程序常见的配置传旨
  • (6) 深入探索Python-Pandas库的核心数据结构:DataFrame全面解析
  • (DFS + 剪枝)【洛谷P1731】 [NOI1999] 生日蛋糕
  • (Oracle)SQL优化基础(三):看懂执行计划顺序
  • (超简单)使用vuepress搭建自己的博客并部署到github pages上
  • (附源码)springboot助农电商系统 毕业设计 081919
  • (附源码)ssm学生管理系统 毕业设计 141543
  • (简单) HDU 2612 Find a way,BFS。
  • (简单有案例)前端实现主题切换、动态换肤的两种简单方式
  • (学习日记)2024.01.19
  • (一)u-boot-nand.bin的下载
  • (原創) 如何解决make kernel时『clock skew detected』的warning? (OS) (Linux)