首页 > 编程知识 正文

如何用c语言编写时钟,时钟简单c语言程序

时间:2023-05-05 07:36:24 阅读:16735 作者:698

参考信息: NTP网络时钟协议的实现

概念介绍和含义

网络时间协议networktimeprotocol(NTP )是一种用于在整个网络中发布准确时间的T C P/I P协议,其自身的传输基于U D P,并拥有端口号123。 这允许计算机或网络设备与服务器或时钟源(石英时钟、GPS等)同步,提供高精度的时间修改(与LAN上的标准的差小于1毫秒,WAN上的几十毫秒),并通过加密进行确认NTP提供了准确的时间。 首先需要准确的时间源。 这个时间必须是国际标准时间UTC。 NTP获取UTC的时间源可来自原子钟、天文台、卫星或因特网。 这样就有了准确可靠的时间源。 时间按NTP服务器级别传播。 根据与外部UTC源的距离,将所有服务分组到不同的Stratun (分层)中。 Stratum-1位于顶层,具有外部UTC访问权限,Stratum-2从Stratum-1获取时间,Stratum-3从Stratum-2获取时间,依此类推,但Stratum分层的总数所有这些服务在逻辑上形成增量体系结构并相互连接,Stratum-1的时间服务是整个系统的基础。 计算机通常连接到多个时间服务器,并且使用统计学算法过滤来自不同服务器的时间,以选择最佳路径和源来校正主机时间。 即使主机长时间无法连接到服务器,NTP服务也可以正常工作。 为了防止对时间服务器的恶意破坏,NTP使用识别(Authentication )机制来检查成对的信息是否来自其声称的服务器,检查数据的返回路径,以及抗干扰保护机制

实现NTP

一、在Windows系统上实现(PC-PC ) :

服务器端(Windows2000 OR WindowsXP ) :

方法1 :

步骤1 :指定主时间服务器。 在DOS方式中输入“net time/set sntp 3360 pool.NTP.org”。 在此指定pool.NTP.org是主时间服务器还是其他地址。

步骤2 :开始与主时间服务器同步。 关闭windows time服务,然后启动该服务。 在“管理工具”的“服务”界面中进行,或者在DOS中输入“net stop w32time”、“net start w32time”。

步骤3 :自动设置电脑Windows time服务的启动方法。 在“管理工具”的“服务”接口下完成。 请注意,此windows主机无法加入域。 不参加,就无法启动windows time服务。 此时,此windows计算机已是连接到主服务器的客户,以后每次计算机启动时都会自动与主服务器对齐。 如果网络不通,电脑也将在45分钟后再次自动校准时间。 必须注意的是,电脑时钟和标准时间的误差不能超过12小时。 否则,无法进行自动校正,必须手动修正。

步骤4 :将这台电脑作为时间服务器,局域网内部的电脑对准时间。 运行" regedit ",在" HKEY _ local _ machine _ system _ current control set _ services _ w32time _ parameters "的LocalNTP中

方法2 :

安装第三方NTP服务器软件,并建议使用NTP V4.1

1 .安装时提示设置服务器地址,输入ntp服务器的IP地址

2.ntpd控制:控制面板-管理工具-组件服务-NetworkTimeProtocol

可以启动ntpd守护进程以维持时间同步

C:WINNT目录中包含ntp的配置文件ntp.conf

如下设定:

服务器127.127.1.0首选项

fudge 127.127.1.0 stratum 10

5 .检查NTP是否在: ntpqp上运行

客户端:

的主要任务是连接到局域网中的时间服务器,以保持计算机时钟与服务器的同步。 分Linux、Windows98、2000、XP几种情况介绍

LINUX主机

实际上,在上面介绍Linux系统的ntp服务时,他已经说ntp时间服务也是时间服务的客户端。 将/etc/ntp.conf文件中的“server pool.ntp.org”更改为“server内部时间服务IP地址”即可。 如果不想使用ntp服务,还可以使用ntp包中包含的ntpdate命令。 只需手动运行ntpdate时间服务器的IP地址。 如果希望每天自动定时,请将此命令放在cron中,注意同一台计算机上不能同时使用ntp服务和ntpdate命令。

Windows2000主机

执行设定时间服务器时的前三个步骤即可

WindowsXP主机

以Windows2000主机方式设置,或双击任务栏右下角的时钟图标,打开“日期和时间属性”对话框,然后在“internet时间”卡上单击“自动与internet时间服务器同步”

Windows98主机

需要安装第三方软件,建议

用achron 。软件操作简单,只要将“Hostname or IP Address”中输入局域网内时间服务器的IP地址,“Protocol”中选SNTP即可。当然在windows98电脑上执行“net time 机器名或IP地址 /set /yes”也可能与其它windows电脑同步时钟,前提是这些电脑在同一网段,并且安装有netbios协议。把该命令放在autoexec.bat 中,就可以做到开机自动对时了。

二、 UNIX系统下的实现(PC-PC):

服务器端

以LINUX REDHAT 9.0为例:

第一步:检查是否已经安装有ntp软件包。输入“rpm -qa|grep ntp”,如果已经安装应该显示“ntp-4.1.2-0.rc1”。

第二步:安装ntp软件,从下载rpm包,输入“rpm -ivh ntp-xxx.rpm”执行安装。

第三步:配置ntp服务。备份原/etc/ntp.conf文件后,输入以下内容

server pool.ntp.org

server pool.ntp.org

server pool.ntp.org

driftfile /etc/ntp/drift

3行server都设pool.ntp.org是为了提供连接冗余,当第一个地址连接失败时,后面的地址提供时间服务,注意这里的pool.ntp.org对应一组IP地址,由DNS随机分配。

第四步:启动ntp服务。输入“service ntp restart”。 为了保证以后Linux机启动后ntp服务能自动启动,还要输入“chkconfig ntpd on”。Linux下的ntp软件不但能自动与互联网上的时钟保持同步,同时本身已经是一台SNTP服务器了,可以供局域网内的电脑校对时间。建议启动 NTP服务后,先用date命令手工校正一下时间,以后系统会自动与互联网上的主时间服务器保持同步。ntp服务还有一个好处,如果当前系统的时间与标准时间有所误差,它不是马上把时间校正,而是逐步缩小与标准时间的误差,以免系统内部出现时间突变。

以HP-UX为例:

在hp-ux系统上时区的配置文件是/etc/TIMEZONE,内容如下

TZ=EAT-8

export TZ

时区设置完毕就即可配置ntp服务器,修改配置文件/etc/ntp.conf,设置以下几个参数:

server 用来同步时间的上级服务器,网上有很多免费的。

restrict 设置访问权限,注意restrict default ignore一定要注释掉

参考设置示例:

server 203.117.180.36

restrict 192.168.0.0 mask 255.255.255.0 notrust nomodify notrap

允许192.168网段的机器访问服务器,但不允许他们修改。

客户端设置与Windows系统下实现的客户端设置相同

三、网络设备的NTP实现(以CISCO IOS为例):

NTP的时钟源在一般的情况下也可以使用路由器上的时钟。高档的路由器/交换机上提供了硬件时钟,称为calendat,与clock相互独立,在系统重启时clock使用calendar的值。可以用命令calendar set设置硬件时钟的值,用命令clock read-calendar将系统时钟设置为calendar的值,也可以用命令clock update-calendar将当前系统时钟值写入calendar中。在客户端,用ntp master x.x.x.x 指定NTP服务器地址(CatOS:set ntp server x.x.x.x),用命令ntp update update-calendar 可以让NTP协议定时更新calendar的值。如果更改了时钟源的时间,需要数分钟才能同步到客户端,更新calendar需要更长的时间。常用的调试命令有:show ntp status 和 show ntp associations等。

N T P的会聚( c o n v e rg e n c e )可能需要长达半个小时,这意味着在修改N T P主系统时钟之后,再过半个小时其它的时钟才进行同步。这是因为N T P将时钟的改变视为时钟系统的不稳定。NTP需在等待系统稳定后才会进行同步和传递时钟的改变

在Cisco网络系统中的NTP配置需要用到的命令及定义:

ntp access-group: 该全局命令用于路由器N T P服务的访问控制。

ntp authenticate: 是一个全局命令,它启用N T P身份验证。

ntp authentication-key: 该全局命令用于定义N T P身份验证的键值。

ntp broadcast: 是一个接口命令,用于指定一特定接口来发送N T P广播包。

ntp broadcast client: 是一个接口命令,使路由器通过特定接口来接收N T P广播包。

ntp broadcast delay: 是一个全局命令,它用于设定数据包在路由器和N T P服务器之间一个回程所需时间的估计值。

ntp clock-period: 这条全局命令不必输入,当使用N T P进行系统时钟同步时,路由器将自动产生这条命令。

ntp disable: 这条接口命令使特定接口不接收N T P包。

ntp master: 这条全局命令用来配置路由器为N T P主时钟,只有当没有可用的外部N T P源或者为测试用途才使用该命令。

ntp peer: 该全局命令使路由器的系统时钟与其对等体的时钟同步(或对对等体的时钟进行同步)。

ntp server: 该全局命令使路由器的系统时钟由时间服务器进行同步。

ntp source: 该全局命令强制路由器在其N T P包中使用特定的源地址。

ntp trusted-key: 该全局命令用于确认路由器的特定身份验证键值。

ntp update-calendar: 该全局命令使N T P周期性地更新Cisco 7XXX 系列路由器的日历。

show ntp status: 是一执行模式命令,用于显示路由器的N T P信息,它可以表明该路由器是通过N T P对等体进行时钟同步还是通过N T P服务器进行同步。

show ntp association[detail]: 这条执行模式命令显示与N T P有关的信息,如轮询周期等。

简要配置示例:

EXAMPLE 1

路由器A和路由器B通过串口连接,路由器A被设为N T P主时钟,路由器B都被配置成根据路由器A来同步时钟。

RouterA#clock set xx:xx:xx:xx

RouterA(config)# int s0

RouterA(config-if)#ip add 172.23.1.1 255.255.255.0

RouterA# ntp master 1

RouterB#ntp server 172.23.1.1

...

EXAMPLE 2

路由器A被设置为N T P主时钟,路由器B被配置成通过N T P服务器与路由器A进行时钟同步,路由器C则被配置成路由器B的对等体,与B的时钟同步。三台路由器通过串口进行连接,路由器A和B之间、路由器B和C之间的连接都使用交叉电缆。

...

RouterA#clock set xx:xx:xx:xx

RouterA(config)# int s0

RouterA(config-if)#ip add 172.23.1.1 255.255.255.0

RouterA# ntp master 1

RouterB#ntp server 172.23.1.1

RouterB(config-if) ip add 172.16.1.2 255.255.255.0

RouterC#ntp peer 172.16.1.2

...

EXAMPLE 3

使用局域网广播的CISCO NTP

3台路由器通过以太网接入同一个网段,路由器a作为NTP服务器通过e0接口向以太网发送NTP广播。

...

RouterA#clock set xx:xx:xx:xx

routerA(config0#int e0

RouterA(config-if)#ip add 172.23.1.1 255.255.255.0

RouterA(config-if)#ntp broadcast

RouterA# ntp master

RouterB(config)#int e0

RouterB(config-if) # ip add 172.23.1.2 255.255.255.0

RouterB(config-if) #ntp broadcast client

RouterC(config)#int e0

RouterC(config-if) # ip add 172.23.1.3 255.255.255.0

RouterC(config-if) #ntp broadcast client

PC客户端配置同前两种方法。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。