[转]Linux时间同步基础知识

原文地址:Linux时间同步基础知识 | 云中君 (gitee.io)

总结:中国使用CST: China Standard Time,中国标准时间,与 原子钟报时的协调世界时(UTC)关系:比UTC早8个小时,记为UTC+8,使用date -s "20220708 10:30:40"命令可直接设置CST,同时UTC会同步更新即CST-8小时,重启后RTC硬件时钟与UTC同步一致

一、操作系统中的两种时间
A real-time clock(RTC): 通常被称为一个硬件时钟,(指主板上的时钟设备,通常可在BIOS中设置的时钟),独立于操作系统的当前状态,并且即使在计算机被关闭时它也是运行的。
A system clock: 系统时钟,也被称为软件时钟。它是由系统内核维护的,并且它的初始值是基于RTC时钟的。一旦操作系统启动,并且系统时钟基于RTC时钟初始化后,系统时钟就完全独立于RTC时钟了。
系统时间通常使用的是UTC时间,并且根据需要由应用软件转换成本地时间(local time)。本地时间(Local Time)
是在当前时区考虑到夏日节约时(DST)后的实际时间。Real-time clock(RTC硬件时钟)可以使用UTC时间,也可以使用本地时间(local time),推荐使用UTC。

二、UT、UTC、GMT、CST、CET、DST等名词解释以及它们之间的关系
UT: Universal Time,世界时,是以地球自转运动为标准的时间计量系统。UT本身是一个广泛的概念,其下包括UT0,UT1,UT2等。其中UT0是完全按照天体运行计算出来的时间,UT1是在UT0的基础上做了一些调整,UT2是在UT0和UT1的基础上又进行了一些调整。由于天体运行的一些不确定性(比如地球的自转并非匀速的,而是以复杂的方式进行着加速和减速),所以UT时间并不是均匀流过的。
UTC: Coordinated Universal Time,协调世界时,又称世界统一时间、世界标准时间、国际协调时间。由于英文(CUT, Coordinated Universal Time)和法文(TUC, Temps
Universel Coordonné)的缩写不同,作为妥协,简称UTC。UTC是一个目前国际通用的时间标准。UTC以原子时秒长为基础,在时刻上尽量接近于GMT格林尼治标准时间。UTC的时间是均匀的。为了能够尽量减小和UT时间的误差,UTC引入了闰秒(在某些年份的最后一分钟是61秒),以确保UTC是UT1之间的误差在0.9秒之内。
GMT: Greenwich Mean Time,格林尼治标准时间,是指位于伦敦郊区的皇家格林尼治天文台的标准时间,因为本初子午线被定义在通过那里的经线。理论上来说,格林尼治标准时间的正午是指当太阳横穿格林尼治子午线时(也就是在格林尼治上空最高点时)的时间。由于地球在它的椭圆轨道里的运动速度不均匀,这个时刻可能与实际的太阳时有误差,最大误差达16分钟。由于地球每天的自转是有些不规则的,而且正在缓慢减速,因此格林尼治时间已经不再被作为标准时间使用。现在的标准时间,是由原子钟报时的协调世界时(UTC)。
我们基本可以认为UTC与GMT是一样的,也就是UTC=GMT。
CST: China Standard Time,中国标准时间,也就是北京时间。在时区划分上,属东八区,比UTC早8个小时,记为UTC+8。也就是说CST=UTC+8=GMT+8。
CET: Central European Time,欧洲中部时间,是比世界标准时间(UTC)早一个小时的时区名称之一。它被大部分欧洲国家和部分北非国家采用。
DST: Daylight Saving Time,夏日节约时间。是指在夏天太阳升起的比较早时,将时钟拨快一小时,以提早日光的使用,在英国则称为夏令时间(Summer Time)。这个构想于1784年由美国班杰明·富兰克林提出来,1915年德国成为第一个正式实施夏令日光节约时间的国家,以削减灯光照明和耗电开支。自此以后,全球以欧洲和北美为主的约70个国家都引用这个做法。目前被划分成两个时区的印度也正在商讨是否全国该统一实行夏令日光节约时间。欧洲手机上也有很多GSM系统的基地台,除了会传送当地时间外也包括夏令日光节约时间,做为手机的时间标准,使用者可以自行决定要开启或关闭。值得注意的是,某些国家有实施「夏日节约时间」的制度,出国时别忘了跟随当地习惯在表上调整一下,这可是机械表没有的功能设计哦!

它们之间的关系:
UTC=GMT
CET=UTC/GMT + 1小时
CST=UTC/GMT + 8小时
CST=CET + 7小时

三、UTC与本地时间
UTC + 时区差 = 本地时间
时区差东为正,西为负。在此,把东八区时区差记为 +0800,
UTC + (+0800) = 本地(北京)时间
那么,UTC = 本地时间(北京时间))- 0800

四、UTC与Unix时间戳
在计算机中看到的UTC时间都是从(1970年01月01日 0:00:00)开始计算秒数的。所看到的UTC时间那就是从1970年这个时间点起到具体时间共有多少秒。 这个秒数就是Unix时间戳。

五、什么是ntp?
网络时间协议,英文名称: Network Time Protocol(NTP) 是用来使计算机时间同步化的一种协议,它可以使计算机对其服务器或时钟源(如石英钟,GPS等等)做同步化,它可以提供高精准度的时间校正(LAN上与标准间差小于1毫秒,WAN上几十毫秒),且可介由加密确认的方式来防止恶毒的协议攻击。NTP的目的是在无序的Internet环境中提供精确和健壮的时间服务。
Ntp客户端与服务端使用UDP123端口进行双向通讯,所以我们配置ntp时需要同时在ntp客户端与ntp服务端防火墙放通UDP123端口。
在Linux系统中,NTP协议由运行在用户空间中的守护进程实现。而该守护进程,我们有两个选择:ntpd与chronyd,分别来自ntp软件包和chrony软件包。

ntp的校时方式
时间服务器可以利用以下三种方式与其他服务器对时:broadcast/multicast,client/server和Symmetric。

broadcast/multicast: 方式主要适用于局域网的环境,时间服务器周期性的以广播的方式,将时间信息传送给其他网路中的时间服务器,其时间仅会有少许的延迟,而且配置非常的简单。但是此方式的精确度并不高,对时间精确度要求不是很高的情况下可以采用。
Symmetric: 的方式得一台服务器可以从远端时间服务器获取时钟,如果需要也可提供时间信息给远端的时间服务器。此一方式适用于配置冗余的时间服务器,可以提供更高的精确度给主机。
client/server: 方式与symmetric方式比较相似,只是不提供给其他时间服务器时间信息,此方式适用于一台时间服务器接收上层时间服务器的时间信息,并提供时间信息给下层的用户。
上述三种方式,时间信息的传输都使用UDP协议。时间服务器利用一个过滤演算法,及先前八个校时资料计算出时间参考值,判断后续校时包的精确性,一个相对较高的离散程度,表示一个对时资料的可信度比较低。仅从一个时间服务器获得校时信息,不能校正通讯过程所造成的时间偏差,而同时与许多时间服务器通信校时,就可利用过滤算法找出相对较可靠的时间来源,然后采用它的时间来校时。


作者: yf_9186
链接: https://yfeng9186.gitee.io/blog/2020/2/linux%E6%97%B6%E9%97%B4%E5%90%8C%E6%AD%A5%E5%9F%BA%E7%A1%80%E7%9F%A5%E8%AF%86/#%E4%BA%94%E3%80%81%E4%BB%80%E4%B9%88%E6%98%AFntp%EF%BC%9F
来源: 云中君
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

posted @ 2022-10-08 09:40  dirgo  阅读(326)  评论(0编辑  收藏  举报