三、计算机的时间
一台计算机上我们是有两个时钟的,一个是硬件时间时钟(Real Time Clock简称RTC),一个是系统时间(System Clock)。
硬件时钟是指嵌在主板上的特殊的电路。正因为有它存在,我们电脑在关机之后,还能保持正常进行计时。
系统时钟就是操作系统的kernel所用来计算时间的时钟。它是从1970年1月1日 00:00:00的UTC时间到目前为止的秒数总和之值。在Linux下,系统时间在开机的时候会和硬件时间进行同步(synchronization),之后就开始各自独立运行了。
那么既然两个时钟各自独自运行,那么时间久了必然就会产生误差。下面我实时输出计算机的系统时间和硬件时间
[root@c64-client ~]# date #查看系统时间
Sat Nov 2 21:02:29 CST 2013
[root@c64-client ~]# hwclock --show #查看硬件时间
Sun Nov 3 05:02:22 2013 -0.126978 seconds
我们可以看出,硬件时间和系统时间是不相等的。我们可以通过下面两个命令,灵活的进行时间同步。
[root@c64-client ~]# hwclock --hctosys #将硬件时间设置成系统时间
[root@c64-client ~]# hwclock --systohc #将系统时间设置成硬件时间
知道了如何同步两个时间,那么如果如果想更改怎么做呢?
12 [root@c64-client ~]# hwclock --set --date="mm/dd/yy hh:mm:ss" #修改硬件时间到指定时间
[root@c64-client ~]# date -s "dd/mm/yyyy hh:mm:ss" #修改系统时间到指定时间
现在我们知道了如何设置系统和硬件的时间,那么当两个时间都不准确了怎么办呢?
此时,我们就要用到文章开头提到的NTP服务器了。我们已经知道了NTP服务器是提供时间同步服务了。
那么NTP服务器是怎么工作的呢?
通过谷歌查阅文档,我们知道NTP服务器是基于NTP协议想客户端提供时间同步服务的。NTP(Network Time Protocol)是一种用来使系统和一个精确的时间源保持时间同步的协议。NTP协议是通过Server和Client的方式进行的。
下面我们引入网络设备中的NTP工作原理,来让大家理解。
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小时。
虽然NTP协议中有对往返时延的计算,但是在生产环境中还是会因为时延问题导致时间不同步,原因出在哪里呢?
时间延迟通常由2部分构成,一部分来自于外部网络传输上的延迟,一部分来自于内部协议层编解码时标的过程中。NTP协议本身的计算就加入了网络传输延迟的因素,因此只要NTP从钟有优秀的同步计算能力,传输延时并不会对同步精度产生很大影响,此时内部协议层编解码时标的过程中产生的时间延迟是影响网络同步精度的主要因素。传统的NTP网络中,如果NTP从钟和NTP服务器之间间隔了多个stratum,由于在每个节点编解码时标时都产生时延,因此这个NTP从钟所获得的时间精度较差。
综上所述,在生产环境中,我们受降低时延和解决后端数据应用服务器无法连接公网,却又必须进行时间同步这两方面的因素影响,促使我们必须在内网搭建一台或两台NTP服务器(实现负载均衡高可用)来实现我们企业内部的时间同步服务。
OK!本文就讲到这里了,该讲的原理都讲的差不多了。由于时间在我们生产环境应用中非常重要,所以此篇幅略有点长。下篇我将详细讲解,如何在企业内网部署NTP服务器。更多详情见请继续阅读下一页的精彩内容:
参考阅读: