计算机时间到底是怎么来的?程序员必看的时间知识!(7)

2023-05-02 来源:飞速影视
通常来说,无线电波的传播速度更快、传播误差小,所以授时中心会通过这种方式,把时间发送给全国各地的「时间服务器」。
时间服务器有了准确的时间后,再通过其它方式(例如网络)广播到下一层的终端用户使用。
经过这么一番研究,到这里我们就可以解释文章开头的问题了。
一个时间服务器,原来是通过国家授时中心同步时间,然后再给其它终端提供时间同步服务的。
那我们的计算机如何和它保持同步呢?
你可能会想,最简单的方式就是,客户端向服务端「请求获取」标准时间,服务端响应时间数据,客户端修改自己的「本机时间」即可。
但事情没你想的这么简单。
因为数据在网络传输过程中,也是需要时间的,这个时间也会影响到时间的准确性。
这怎么办呢?
于是人们想了一种方案,当计算机在做时间校准时,也需要把网络延迟计算进去,最后「修正」这个同步过来的时间,降低误差。
现在,已经有个软件已经把这一切都做好了,如果你了解一些运维相关的工作,就会知道,我们部署应用程序的服务器上,都会启动一个「自动校准」时间的服务,这个服务就是 NTP(Network Time Protocol),它可以保证每台机器的时间与时间服务器保持同步。
那 NTP 是怎么同步服务器时间的呢?
这里就涉及到 2 个重点:
NTP 如何同步时间?
同步时间时,对正在运行的程序有没有影响?
先来看第一个问题: NTP 如何同步时间?
简单来讲,它是通过在网络报文上打「时间戳」的方式,然后配合计算网络延迟,从而修正本机的时间。
根据图示可以计算出网络「传输延迟」,以及客户端与服务端的「时间差」:
网络延时 = (t4 - t1) - (t3 - t2)
时间差 = t2 - t1 - 网络延时 / 2 = ((t2 - t1) (t3 - t4)) / 2
这个计算过程假设网络来回路径是对称的,并且时延相同。
这样一来,客户端就可以「校准」自己的本机时间了,与服务端保持同步,这个时间误差在广域网下是 10ms - 500ms,在局域网下通常可以小于 1ms。
再来看第二个问题: 同步时间时,对正在运行的程序有没有影响?
例如,我们很多时候写的程序代码是这样的:
相关影视
合作伙伴
本站仅为学习交流之用,所有视频和图片均来自互联网收集而来,版权归原创者所有,本网站只提供web页面服务,并不提供资源存储,也不参与录制、上传
若本站收录的节目无意侵犯了贵司版权,请发邮件(我们会在3个工作日内删除侵权内容,谢谢。)

www.fs94.org-飞速影视 粤ICP备74369512号