網絡時間協定NTP(Network Time Protocol)是用于網際網路中時間同步的标準網際網路協定。NTP的用途是把計算機的時間同步到某些時間标準。目前采用的時間标準是世界協調時UTC(Universal Time Coordinated)。NTP的主要開發者是美國特拉華大學的David L. Mills教授。
NTP時間伺服器是針對自動化系統中的計算機、控制裝置等進行校時的高科技産品,NTP時間伺服器産品它從GPS衛星上擷取标準的時間信号,将這些資訊通過各種接口類型來傳輸給自動化系統中需要時間資訊的裝置(計算機、保護裝置、故障錄波器、事件順序記錄裝置、安全自動裝置、遠動RTU),這樣就可以達到整個系統的時間同步。
ntp 時間同步是一個複雜的時間同步機制,已經經過 20 年左右的研究和改進。它考慮到了硬體資訊傳輸的延遲誤差、網絡傳輸的延遲誤差等問題,并不是簡單的從ntp 伺服器詢問一個時間并把這個時間設知到用戶端上簡單的事情。
0 1 2 3 4 5 6 7 8
Server --------+---+.--------------------------------
.' `.
/ `.
.' `-.
/ `.
Client .'---------------------`.---------------------
1 2 3 4 5 6 7 8 9
并不是說隻要 ntp client 連接配接到 ntp server ,那麼 ntp client 就會擷取 ntp server 的時間并且同步。 當 ntp client 向 ntp server 發送請求後, server 會傳回一組資料包給 client ,如果 client 經過計算發現資料包裡面的誤內插補點超過了可接受的範圍,那麼就不會接受該傳回值。該誤內插補點于伺服器本身、伺服器的網絡環境、伺服器時間源層級都有關系。
如果我們發現 ntp client 并沒有向 ntp server 同步時間,我們可以使用
# ntpq
進入互動界面,用指令
> ass
列出所有激活的時間伺服器
[root@dhcp-0-065 ~]# ntpq
ntpq > ass
ind assID status conf reach auth condition last_event cnt
===========================================================
1 11024 9614 yes yes none sys.peer reachable 1
ntpq >
然後用指令
> rv
選擇指定的 ntp 伺服器的 assID 檢視具體動作
ntpq > rv 11024
assID=11024 status=9614 reach, conf, sel_sys.peer, 1 event, event_reach,
srcadr=dhcp-0-098.pek.redhat.com, srcport=123, dstadr=10.66.0.65,
dstport=123, leap=00, stratum=2, precision=-20, rootdelay=306.686,
rootdispersion=37.537, refid=10.5.26.10, reach=377, unreach=0, hmode=3,
pmode=4, hpoll=8, ppoll=8, flash=00 ok, keyid=0, ttl=0, offset=-0.014,
delay=0.312, dispersion=9.491, jitter=1.704,
reftime=ceefdf8c.e2a278cd Thu, Jan 7 2010 12:20:28.885,
org=ceefe1f8.5f74624a Thu, Jan 7 2010 12:30:48.372,
rec=ceefe1f8.5f7e5b59 Thu, Jan 7 2010 12:30:48.373,
xmt=ceefe1f8.5e570beb Thu, Jan 7 2010 12:30:48.368,
filtdelay= 4.47 0.35 4.48 0.31 2.85 4.68 0.33 2.47,
filtoffset= 2.08 -0.14 2.00 -0.01 -1.27 2.10 -0.05 1.07,
filtdisp= 0.00 3.84 7.70 11.55 15.42 19.25 23.09 26.94
我們取其中的 flash 值,可以通過
http://www.eecis.udel.edu/~mills/ntp/html/decode.html#flash
這個連結檢視到時間伺服器不被信任的原因。
附:flash=00 ok 表示 ntpd 用戶端信任時間伺服器。
reach=000 表示 ntpd 用戶端尚未收到時間伺服器發來的時間資料包。
refid=INIT 表示校時動作正在初始化。
flash=400 表示時間伺服器的精準值(由時間伺服器提供)過高,ntpd 用戶端不信任該時間伺服器。
reach=003 表示 ntpd 用戶端已經收到 2 個由時間伺服器發送過來的資料包。
補充:solaris上修改/etc/ntp.conf,将server設定為10.10.10.72,然後重新開機服務生效
用 ntpq -p 和 ntptrace 10.10.10.72觀察一下目前NTP服務的狀态。
暫停ntpd服務,執行ntpd -n -dddd 搜集資訊約20分鐘。
service ntpd stop
ntpd -n -dddd > ntpdebug收集資訊再分析
檢視 10.10.10.72的ntp服務狀态:
a), svcs|grep ntp
b), pkginfo | grep ntp
c), netstat -an|grep 123
檢視ntp狀态 /etc/init.d/ntpd status