天天看點

ntp網絡時間協定

http://cn.linux.vbird.org/linux_server/0440ntp.php

老實說, Linux 作業系統的計時方式主要是由 1970/01/01 開始計算總秒數,是以,如果你還記得 date 這個指令的話, 會發現它有個 +%s 的參數,可以取得總秒數,這個就是軟體時鐘。但,如同前面說的,計算機硬體主要是以 BIOS 内部的時間為主要的時間依據 (硬體時鐘),而偏偏這個時間可能因為 BIOS 内部晶片本身的問題,而導緻 BIOS 時間與标準時間 (UTC) 有一點點的差異存在!是以為了避免主機時間因為長期運作下所導緻的時間偏差,進行時間同步 (synchronize) 的工作就顯的很重要了!

  • 軟體時鐘:由 Linux 作業系統根據 1970/01/01 開始計算的總秒數;
  • 硬體時鐘:主機硬體系統上面的時鐘,例如 BIOS 記錄的時間;

那麼怎麼讓時間同步化呢?想一想,如果我們選擇幾部主要主機 (Primary server) 調校時間,讓這些 Primary Servers 的時間同步之後,再開放網絡服務來讓 Client 端聯機,并且提供 Client 端調整自己的時間,不就可以達到全部的計算機時間同步化的運作了嗎!那麼什麼協定可以達到這樣的功能呢?那就是 Network Time Protocol ,另外還有 Digital Time Synchronization Protocol (DTSS) 也可以達到相同的功能! 不過,到底 NTP 這個 daemon 是如何讓 Server 與 Client 同步他們的時間呢?

  1. 首先,主機當然需要啟動這個 daemon ,之後,
  2. Client 會向 NTP Server 發送出調校時間的 message ,
  3. 然後 NTP Server 會送出目前的标準時間給 Client ,
  4. Client 接收了來自 Server 的時間後,會據以調整自己的時間,就達成了網絡校時咯!

在上面的步驟中你有沒有想到一件事啊,那就是如果 Client 到 Server 的訊息傳送時間過長怎麼辦?舉例來說,我在台灣以 ADSL 的 PC 主機,聯機到美國的 NTP Server 主機進行時間同步化要求,而美國 NTP Server 收到我的要求之後,就發送當時的正确時間給我,不過, 由美國将資料傳送回我的 PC 時,時間可能已經延遲了 10 秒鐘去了!這樣一來,我的 PC 校正的時間是 10 秒鐘前的标準時間喔!此外,如果美國那麼 NTP 主機有太多的人喜歡上去進行網絡校時了,是以 loading (負荷) 太重啦!導緻訊息的回傳又延遲的更為嚴重!那怎麼辦?

為了這些延遲的問題,有一些 program 已經開發了自動計算時間傳送過程的誤差,以更準确的校準自己的時間!當然啦,在 daemon 的部分,也同時以 server/client 及 master/slave 的架構來提供使用者進行網絡校時的動作!所謂的 master/slave 就有點類似 DNS 的系統咯!舉例來說,台灣的标準時間主機去國際标準時間的主機校時, 然後各大專院校再到台灣的标準時間校時,然後我們再到各大專院校的标準時間校時!這樣一來,那幾部國際标準時間主機 (Time server) 的 loading 就不至于太大,而我們也可以很快速的達到正确的網絡校時的目的呢!台灣常見的 Time Server 有 (注3):

  • tick.stdtime.gov.tw
  • tock.stdtime.gov.tw
  • time.stdtime.gov.tw
  • clock.stdtime.gov.tw
  • watch.stdtime.gov.tw

至于 ntp 這個 daemon 是以 port 123 為連結的埠口 (使用 UDP 封包),是以我們要利用 Time server 來進行時間的同步更新時,就得要使用 NTP 軟體提供的 ntpdate 來進行 port 123 的聯機喔!關于網絡校時更多的說明,可以到 NTP 的官方網站 (注4) 上察看喔!

繼續閱讀