计算机网络中的时间同步
2018-07-19王文韬
王文韬
摘 要 每台计算机都有自己的硬件时钟,并由主板上的电池保证在关机情况下也能计时。通常情况下,计算机每次开机会从硬件时钟读取时间,并且使用自己的时钟进行计时,但是在单个时钟之间不可避免的会有计时误差,在长时间使用后,时间误差会积累到比较大的数值。这在一般应用中不会造成太大的麻烦,但是在某些应用中,比如集群服务、数据库等,则会发生宕机、系统无法启动等严重后果,所以就必须要配置时间服务器为网络提供时间服务,保证整个网络中的时间在所有计算机中都是一致的。
关键词 计算机;时钟同步;配置
中图分类号 TP3 文献标识码 A 文章编号 1674-6708(2018)214-0133-02
1 Windows下的时间同步
Windows系统下的时间同步由windows time服务完成,使用SNTP协议进行通信,可以达到秒级的时间同步精度,能够满足对时间精度要求不太高的情况下的需求。SNTP协议采用客户端/服务器工作方式,服务器接收GPS信号或使用自带的原子钟作为系统的时间基准,客户机按照预先设定的时间间隔定期访问服务器,获得准确的时间信息,并调整自己的系统时钟,来同步自己的时间。一台服务器同时也可以是客户端,从上层的时间服务器获得高精度时间,并向自己的客户端进行授时。
windows中的客户端,平时使用自己的硬件时钟计时,在访问服务器获得准确时间后,如果时间偏移较大,会直接调整系统时间,所以系统时间在同步时会发生跳变。如果时间偏移较小,会逐渐调整自己的时钟,直到与时间源同步,不会发生大幅度的时间跳变。
Windows时间同步配置可以通过修改注册表来进行,配置服务器的相关注册表项如下。
2 Windows时间服务器配置
1)H K E Y _ L O C A L _ M A C H I N E \ S Y S T E M \ CurrentControlSet\Services\W32Time\Config
\AnnounceFlags,将键值改为a(十六进制)。
该键值的参数含义如下:
0 不作为时间服务器;
1 始终为时间服务器;
2 自动为时间服务器,代表由Windows时间服务来决定角色;
4 始终为可靠时间服务器;
8 自動为可靠时间服务器,代表由Windows时间服务来决定角色。
键值a表示同时选择了2和8,也是系统的默认设置。
在这个键值设置为a时,如果时间服务器配置了自己的时间源服务器,但是又无法从时间源服务器同步时间,会认为自己的时间不可靠而有可能停止授时,所以最好将配置改为5,强制在自己失去时间源的时候仍然进行授时服务
2)H K E Y _ L O C A L _ M A C H I N E \ S Y S T E M \ CurrentControlSet\services\W32Time\ TimeProviders\NtpServer
将Enabled键值改为1,允许服务器进行授时服务。重启windows time 服务后便可开始对客户端授时。
3 Windows时间服务客户端配置
Windows时间同步客户端在域环境下,默认从域控制器同步时间,同步的“type”配置为“NT5DS”。独立客户端,可以打开系统的“日期和时间”,其中有一个“Internet时间”页签,更改里面的服务器地址为自己的授时服务器地址即可。如果需要设置的机器太多,可以将下面的内容编辑到注册表文件中,然后导入注册表进行设置。
Windows Registry Editor Version 5.00
[ H K E Y _ L O C A L _ M A C H I N E \ S Y S T E M \ CurrentControlSet\services\W32Time\ Parameters]
"Type"="NTP"
"NtpServer"="time.windows.com,0x9"
Type设置为NT5DS时,"NtpServer"设置不起作用。
将上面的time.windows.com替换为自己的授时服务器ip地址或机器名即可。该设置在时间服务器名称后必须指定0x9或其它参数,否则本设置无效。默认0x9=SpecialInterval+Client
可选的参数:
0x01 SpecialInterval以SpecialInterval中指定的时间间隔同步时间,不使用MaxPollInterval和MinPollInterval中的配置。0x02 UseAsFallbackOnly 仅作为备用时间源
0x04 SymmatricActive 使用动态轮询模式0x08 Client 客户端模式。
4 Windows缓慢校时
如果满足一定条件,windows将会采取缓慢校时的策略同步时间,下面是相关的设置。
进行缓慢校时,需要满足两个公式。
1)| C u r r e n t T i m e O f f s e t | < MaxAllowedPhaseOffset
CurrentTimeOffset是本机和时间源的时差,单位是时钟周期。在windows中,1ms=10000时钟周期。MaxAllowedPhaseOffset缺省设置为300秒。
假设本机时间和时间源相差3分钟。
CurrentTimeOffset=3×60×1000×10000 =1800000000
MaxAllowedPhaseOffset=300×1000×10000 =3000000000
满足| C u r r e n t T i m e O f f s e t | < MaxAllowedPhaseOffset的条件
2)|CurrentTimeOffset| / (PhaseCorrectRa te*UpdateInterval) < SystemClockRate / 2
SystemClockRate是系统的时钟周期,可以使用w32tm命令查看本机的ClockRate,然后算出时钟周期。
C:\>w32tm /query /status /verbose
ClockRate: 0.0155995s
SystemClockRate=0.0155995×1000×10000 =155995
PhaseCorrectRate默认为1
UpdateInterval域成员默认为30000带入公式计算:
1800000000/(1×30000)=60000
155995/2=77998
60000<77998,所以系统会缓慢校时。
4.1 下面是对缓慢校时过程的跟踪
数据分为三列,第一列是本机的当前时间,第二列是本機时间和时间源之间的误差,第三列是第二列中相邻两次误差之间的差值,反应了本地时钟和时间源时钟之间的走时误差。
10:12:13修改了本地时间,使之和时间源有了222秒的误差,可以看到现在并未校时。
4.2 Windows和linux之间的时间同步
Windows和linux之间,由于windows使用的windows time服务采用了SNTP协议,所以windows可以将linux作为时间源同步时间,却不能向linux系统授时,如果需要为liunx系统授时,就要通过第三方软件,比如ntp-4.2.8p10-win32。
软件安装后在“C:\Program Files (x86)\ NTP\etc”路径下会有ntp.conf配置文件,配置完成后重启服务即可。如果想要查看NTP同步状态,需要再安装ntp-time-server-monitor,之后就可以在软件中完成查看NTP同步状态、调整配置文件、重启NTP服务等工作。
在安装ntp-4.2.8p10-win32软件时,安装软件会在本地用户中增加“NTP”用户,并在系统中安装“Network Time Protocol Daemon”服务。windows自己的windows time服务会被禁用。配置完成后重启NTP服务,就可以开始向linux系统授时了。
参考文献
[1]刘曙琴,陈珍萍,黄友锐,等.无线传感器网络中带延时的一致性时间同步[J].传感器与微系统,2017(1):64-66,74.