wang123

使用NTP网络时间协议同步你的网络

NTP协议全称网络时间协议(Network Time Procotol)。它的目的是在国际互联网上传递统一、标准的时间。具体的实现方案是在网络上指定若干时钟源网站,为用户提供授时服务,并且这些网站间应该能够相互比对,提高准确度。

NTP 最早是由美国Delaware大学的Mills教授设计实现的,从1982件最初提出到现在已发展了将近20年,2001年最新的NTPv4精确度已经达到了200毫秒。对于实际应用,又有确保秒级精度的SNTP(简单的网络时间协议)。

NTP是一个跨越广域网或局域网的复杂的同步时间协议,它通常可获得毫秒级的精度。RFC2030[Mills 1996]描述了SNTP(Simple Network Time Protocol),目的是为了那些不需要完整NTP实现复杂性的主机,它是NTP的一个子集。通常让局域网上的若干台主机通过因特网与其他的NTP主机同步时钟,接着再向局域网内其他客户端提供时间同步服务。

NTP协 议是OSI参考模型的高层协议,符合UDP传输协议格式,拥有专用端口123。

随着时间的推移, 计算机的时钟会倾向于漂移。 网络时间协议 (NTP) 是一种确保您的时钟保持准确的方法。它为路由器、交换机、工作站和服务器之间提供了一种时间同步的机制。所以NTP Server经常应用于一些有时间同步要求的IT系统环境中。

一、服务端设置

Mac OS X Server似乎默认就有了,只说一下Linux下如何设置。
在Ubuntu Linux中应用NTP Server非常方便:
1. 安装
sudo apt-get install ntp  


2. 配置
配置文件是/etc/ntp.conf

a. 找到server一项,添加你喜欢的Time Server
server time.asia.apple.com  iburst dynamic  

b. 设置权限,我的所有restrict条目如下
 
  1. restrict -4 default kod notrap nomodify nopeer noquery   
  2. restrict -6 default kod notrap nomodify nopeer noquery   
  3.   
  4. # Local users may interrogate the ntp server more closely.   
  5. restrict 127.0.0.1   www.5a520.cn
  6. restrict ::1  
  7.   
  8. # Clients from this (example!) subnet have unlimited access, but only if  
  9. # cryptographically authenticated.   
  10. #restrict 192.168.123.0 mask 255.255.255.0 notrust   
  11. restrict 192.168.0.0 mask 255.255.255.0  


3. 重启ntp服务器
/etc/init.d/ntp restart

4. 查看服务器是否工作正常
在服务器运行
Java代码 复制代码
  1. ntpq -p  


二、工作站同步

好了,测试一下吧,假设你的新服务器IP地址为192.168.0.7。在客户端运行如下命令:
ntpdate -u 192.168.0.7

同步成功后,将会显示如下:
6 Mar 15:44:24 ntpdate[9921]: adjust time server 192.168.0.7 offset -0.007277 sec

三、交换机同步

Cisco IOS
Java代码 复制代码
  1. ciscorouter> enable   
  2. password: *********   
  3. ciscorouter# config t   
  4. ciscorouter(config)# ntp update-calendar   
  5. ciscorouter(config)# ntp server 192.168.0.4  
  6. ciscorouter(config)# ntp server 192.168.0.7  
  7. ciscorouter(config)# exit   
  8. ciscorouter# wr mem  


Dell 6248
Java代码 复制代码
  1. dell6248-corner>en   
  2. dell6248-corner#configure    
  3. dell6248-corner(config)#sntp server 192.168.0.7  
  4. dell6248-corner(config)#  


四、一些常见的时间服务器

210.72.145.44  ── (国家授时中心服务器IP地址)
133.100.11.8  ── 日本 福冈大学
time-a.nist.gov 129.6.15.28 ── NIST, Gaithersburg, Maryland
time-b.nist.gov 129.6.15.29 ── NIST, Gaithersburg, Maryland
time-a.timefreq.bldrdoc.gov 132.163.4.101 ── NIST, Boulder, Colorado
time-b.timefreq.bldrdoc.gov 132.163.4.102 ── NIST, Boulder, Colorado
time-c.timefreq.bldrdoc.gov 132.163.4.103 ── NIST, Boulder, Colorado
utcnist.colorado.edu 128.138.140.44 ── University of Colorado, Boulder
time.nist.gov 192.43.244.18 ── NCAR, Boulder, Colorado
time-nw.nist.gov 131.107.1.10 ── Microsoft, Redmond, Washington
nist1.symmetricom.com 69.25.96.13 ── Symmetricom, San Jose, California
nist1-dc.glassey.com 216.200.93.8 ── Abovenet, Virginia
nist1-ny.glassey.com 208.184.49.9 ── Abovenet, New York City
nist1-sj.glassey.com 207.126.98.204 ── Abovenet, San Jose, California
nist1.aol-ca.truetime.com 207.200.81.113 ── TrueTime, AOL facility, Sunnyvale, California
nist1.aol-va.truetime.com 64.236.96.53 ── TrueTime, AOL facility, Virginia


五、使用Python脚本来获取时间

Java代码 复制代码
  1. #!/usr/bin/python   
  2. from socket import *   
  3. import struct,os,time,sys   
  4.   
  5. # Script to set Linux hardware clock (/usr/sbin/hwclock) from an NTP   
  6. # time server.   Run as "setclock.py" to simply print the time from   
  7. # the NTP server.  Run as "setclock.py --set" to set the Linux   
  8. # hardware clock (as the super user, of course).   
  9.   
  10. # Based on Simon Foster's simple SNTP client from ASPN Python cookbook.   
  11. # Adapted by Paul Rubin; this script lives at:   
  12. #    http://www.nightsong.com/phr/python/setclock.py   
  13.   
  14. time_server = ('time.apple.com'123)   
  15. # time.apple.com is a stratum 2 time server.  (123 is the SNTP port number).   
  16. # More servers info can be found at   
  17. #   
  18. #   http://www.eecis.udel.edu/~mills/ntp/servers.htm   
  19. #   
  20. # Note it's considered antisocial to use a stratum 1 server (like NIST)   
  21. for purposes like this which don't need extreme accuracy (i.e. syncing   
  22. # your own big NTP network).  See www.ntp.org for more info.   
  23. #   
  24. # You could also use time.windows.com (Microsoft server) which syncs   
  25. # all Windows XP machines everywhere, so it can presumably handle lots   
  26. # of clients.   
  27.   
  28. # number of seconds between NTP epoch (1900) and Unix epoch (1970).   
  29. TIME1970 = 2208988800L      # Thanks to F.Lundh   
  30.   
  31. client = socket( AF_INET, SOCK_DGRAM )   
  32. data = '\x1b' + 47 * '\0'  
  33. client.sendto(data, time_server)   
  34. data, address = client.recvfrom( 1024 )   
  35. if data:   
  36.     print 'Response received from', address,'\n'  
  37.     t = struct.unpack( '!12I', data )[10]   
  38.     if t == 0:   
  39.         raise 'invalid response'  
  40.     ct = time.ctime(t - TIME1970)   
  41.     print 'Current time = %s\n' % ct   
  42.     if len(sys.argv) > 1 and sys.argv[1] == "--set":   
  43.         os.system("/usr/sbin/hwclock --set '--date=%s'"% ct)   
  44. else:   
  45.     raise 'no data returned'  


上面这个脚本原址在这里,http://www.nightsong.com/phr/python/setclock.pyhttp://www.bt285.cnhttp://www.guihua.org。使用方式如下:
$ python setclock.py
Response received from ('17.151.16.23', 123)

Current time = Fri Mar  6 16:03:19 2009

posted on 2009-03-06 19:48 阅读(2173) 评论(0)  编辑  收藏

<2009年3月>
22232425262728
1234567
891011121314
15161718192021
22232425262728
2930311234

导航

统计

常用链接

留言簿(3)

随笔档案

搜索

最新评论

阅读排行榜

评论排行榜