時間伺服器搭建精確毫秒
A. 如何搭建自己的NTP伺服器
NTP伺服器【Network Time Protocol(NTP)】是用來使計算機時間同步化的一種協議,它可以使計算機對其伺服器或時鍾源(如石英鍾,GPS等等)做同步化,它可以提供高精準度的時間校正(LAN上與標准間差小於1毫秒,WAN上幾十毫秒),且可介由加密確認的方式來防止惡毒的協議攻擊。時間按NTP伺服器的等級傳播。按照離外部UTC源的遠近把所有伺服器歸入不同的Stratum(層)中。
網路時間協議(NTP)用來同步網路上不同主機的系統時間。你管理的所有主機都可以和一個指定的被稱為 NTP 伺服器的時間伺服器同步它們的時間。而另一方面,一個 NTP 伺服器會將它的時間和任意公共 NTP 伺服器,或者你選定的伺服器同步。由 NTP 管理的所有系統時鍾都會同步精確到毫秒級。
在公司環境中,如果他們不想為 NTP 傳輸打開防火牆,就有必要設置一個內部 NTP 伺服器,然後讓員工使用內部伺服器而不是公共 NTP 伺服器。在這個指南中,我們會介紹如何將一個 CentOS 系統配置為 NTP 伺服器。在介紹詳細內容之前,讓我們先來簡單了解一下 NTP 的概念。
為什麼我們需要 NTP?
由於製造工藝多種多樣,所有的(非原子)時鍾並不按照完全一致的速度行走。有一些時鍾走的比較快而有一些走的比較慢。因此經過很長一段時間以後,一個時鍾的時間慢慢的和其它的發生偏移,這就是常說的 「時鍾漂移」 或 「時間漂移」。為了將時鍾漂移的影響最小化,使用 NTP 的主機應該周期性地和指定的 NTP 伺服器交互以保持它們的時鍾同步。
在不同的主機之間進行時間同步對於計劃備份、入侵檢測記錄、分布式任務調度或者事務訂單管理來說是很重要的事情。它甚至應該作為日常任務的一部分。
NTP 的層次結構
NTP 時鍾以層次模型組織。層級中的每層被稱為一個 stratum(階層)。stratum 的概念說明了一台機器到授權的時間源有多少 NTP 跳。
Stratum 0 由沒有時間漂移的時鍾組成,例如原子時鍾。這種時鍾不能在網路上直接使用。Stratum N (N > 1) 層伺服器從 Stratum N-1 層伺服器同步時間。Stratum N 時鍾能通過網路和彼此互聯。
NTP 支持多達 15 個 stratum 的層級。Stratum 16 被認為是未同步的,不能使用的。
准備 CentOS 伺服器
現在讓我們來開始在 CentOS 上設置 NTP 伺服器。
首先,我們需要保證正確設置了伺服器的時區。在 CentOS 7 中,我們可以使用 timedatectl 命令查看和更改伺服器的時區(比如,"Australia/Adelaide",LCTT 譯註:中國可設置為 Asia/Shanghai )
代碼如下:
# timedatectl list-timezones | grep Australia
# timedatectl set-timezone Australia/Adelaide
# timedatectl
繼續並使用 yum 安裝需要的軟體
代碼如下:
# yum install ntp
然後我們會添加全球 NTP 伺服器用於同步時間。
代碼如下:
# vim /etc/ntp.conf
server 0.oceania.pool.ntp.org
server 1.oceania.pool.ntp.org
server 2.oceania.pool.ntp.org
server 3.oceania.pool.ntp.org
默認情況下,NTP 伺服器的日誌保存在 /var/log/messages。如果你希望使用自定義的日誌文件,那也可以指定。
復制代碼
代碼如下:
logfile /var/log/ntpd.log
如果你選擇自定義日誌文件,確保更改了它的屬主和 SElinux 環境。
復制代碼
代碼如下:
# chown ntp:ntp /var/log/ntpd.log
# chcon -t ntpd_log_t /var/log/ntpd.log
現在初始化 NTP 服務並確保把它添加到了開機啟動。
代碼如下:
# systemctl restart ntp
# systemctl enable ntp
驗證 NTP Server 時鍾
我們可以使用 ntpq 命令來檢查本地伺服器的時鍾如何通過 NTP 同步。
下面的表格解釋了輸出列。
remote 源在 ntp.conf 中定義。『*』 表示當前使用的,也是最好的源;『+』 表示這些源可作為 NTP 源;『-』 標記的源是不可用的。
refid 用於和本地時鍾同步的遠程伺服器的 IP 地址。
st Stratum(階層)
t 類型。 'u' 表示單播(unicast)。其它值包括本地(local)、多播(multicast)、廣播(broadcast)。
when 自從上次和伺服器交互後經過的時間(以秒數計)。
poll 和伺服器的輪詢間隔,以秒數計。
reach 表示和伺服器交互是否有任何錯誤的八進制數。值 337 表示 100% 成功(即十進制的255)。
delay 伺服器和遠程伺服器來回的時間。
offset 我們伺服器和遠程伺服器的時間差異,以毫秒數計。
jitter 兩次取樣之間平均時差,以毫秒數計。
控制到 NTP 伺服器的訪問
默認情況下,NTP 伺服器允許來自所有主機的查詢。如果你想過濾進來的 NTP 同步連接,你可以在你的防火牆中添加規則過濾流量。
# iptables -A INPUT -s 192.168.1.0/24 -p udp --dport 123 -j ACCEPT
# iptables -A INPUT -p udp --dport 123 -j DROP
該規則允許從 192.168.1.0/24 來的 NTP 流量(埠 UDP/123),任何其它網路的流量會被丟棄。你可以根據需要更改規則。
配置 NTP 客戶端
1. Linux
NTP 客戶端主機需要 ntpupdate 軟體包來和伺服器同步時間。可以輕松地使用 yum 或 apt-get 安裝這個軟體包。安裝完軟體包之後,用伺服器的 IP 地址運行下面的命令。
代碼如下:
# ntpdate
基於 RHEL 和 Debian 的系統命令都相同。
2. Windows
如果你正在使用 Windows,在日期和時間設置(Date and Time settings)下查找網路時間(Internet Time)。
3. Cisco 設備
如果你想要同步 Cisco 設備的時間,你可以在全局配置模式下使用下面的命令。
代碼如下:
# ntp server
來自其它廠家的支持 NTP 的設備有自己的用於網路時間的參數。如果你想將設備和 NTP伺服器同步時間,請查看設備的說明文檔。
結論
總而言之,NTP 是在你的所有主機上同步時鍾的一個協議。我們已經介紹了如何設置 NTP 伺服器並使支持 NTP 的設備和伺服器同步時間。
B. 網路校時伺服器的詳細參數
低抖動、高性能網路同步器時鍾解決方案
京准電子科技HR-901GB型GPS時間同步伺服器是一款支持NTP和SNTP網路時間同步協議,高精度、大容量、高品質的高科技時鍾產品。
GPS時間同步伺服器設備採用冗餘架構設計,高精度時鍾直接來源於北斗、GPS系統中各個衛星的原子鍾,通過信號解析馴服本地時鍾源,實現衛星信號丟失後本地時鍾精準保持功能。獨特的嵌入式硬體設計、高效Linux操作系統,可靈活擴展多種時鍾信號輸出。
GPS時間同步伺服器全面支持最新NTP對時協議、MD5安全加密協議及證書加密協議,時間精度優於2毫秒。同時支持TOD、10MHz、 1PPS、日誌記錄、USB埠升級下載和干接點告警功能,配合全網時間統一監控軟體,輕松實現網路時間同步及有效監控。
京准電子科技HR-901GB型GPS時間同步伺服器可以廣泛應用於醫療、安防、金融保險、移動通信、 雲計算、電子商務、能源電力、石油石化、工業自動化、智能交通、智慧城市、物聯網等領域。
C. 如何正確的建立windows的時間伺服器
一、選擇伺服器基準時鍾,可選擇內部硬體時鍾和外部NTP授時伺服器。 (首先要保證自己的時間准確)
A.配置 Windows 時間服務以使用伺服器內部硬體時鍾
(1). 單擊「開始」,單擊「運行」,鍵入 regedit,然後單擊「確定」。
(2). 找到並單擊下面的注冊表子項:
程序代碼
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\Config\AnnounceFlags
(3). 在右窗格中,右鍵單擊「AnnounceFlags」,然後單擊「修改」。
(4). 在「編輯 DWORD 值」的「數值數據」框中鍵入 A,然後單擊「確定」。
B.配置 Windows 時間服務以使用外部時間源
(1). 指定時間源。為此,請按照下列步驟操作:
a. 找到並單擊下面的注冊表子項:
程序代碼
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\Parameters\NtpServer
b. 在右窗格中,右鍵單擊「NtpServer」,然後單擊「修改」。
c. 在「編輯值」的「數值數據」框中鍵入 Peers,然後單擊「確定」。
注意:Peers 是一個佔位符,應替換為您的計算機從中獲取時間戳的對等端列表(以空格分隔)。列出的每個 DNS 名稱都必須是唯一的。必須在每個 DNS 名稱後面附加 ,0x1。如果不在每個 DNS 名稱後面附加 ,0x1,則在下面步驟中所做的更改將不會生效。
(2). 選擇輪詢間隔。為此,請按照下列步驟操作:
a. 找到並單擊下面的注冊表子項:
程序代碼
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\TimeProviders\NtpClient
\SpecialPollInterval
b. 在右窗格中,右鍵單擊「SpecialPollInterval」,然後單擊「修改」。
c. 在「編輯 DWORD 值」的「數值數據」框中鍵入 TimeInSeconds,然後單擊「確定」。
注意:TimeInSeconds 是一個佔位符,應替換為您希望各次輪詢之間的間隔秒數。建議值為 900(十進制)。該值將時間伺服器配置為每隔 15 分鍾輪詢一次。
(3). 配置時間校準設置。為此,請按照下列步驟操作:
a. 找到並單擊下面的注冊表子項:
程序代碼
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\Config
\MaxPosPhaseCorrection
b. 在右窗格中,右鍵單擊「MaxPosPhaseCorrection」,然後單擊「修改」。
c. 在「編輯 DWORD 值」的「基數」框中單擊以選擇「十進制」。
d. 在「編輯 DWORD 值」的「數值數據」框中鍵入 TimeInSeconds,然後單擊「確定」。
注意:TimeInSeconds 是一個佔位符,應替換為適當的值,如 1 小時 (3600) 或 30 分鍾 (1800)。您選擇的值將因輪詢間隔、網路狀況和外部時間源而異。
e. 找到並單擊下面的注冊表子項:
程序代碼
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\Config\
MaxNegPhaseCorrection
f. 在右窗格中,右鍵單擊「MaxNegPhaseCorrection」,然後單擊「修改」。
g. 在「編輯 DWORD 值」的「基數」框中單擊以選擇「十進制」。
h. 在「編輯 DWORD 值」的「數值數據」框中鍵入 TimeInSeconds,然後單擊「確定」。
注意:TimeInSeconds 是一個佔位符,應替換為適當的值,如 1 小時 (3600) 或 30 分鍾 (1800)。您選擇的值將因輪詢間隔、網路狀況和外部時間源而異。
二、配置NTP授時伺服器
(1). 將伺服器類型更改為 NTP。為此,請按照下列步驟操作:
a. 單擊「開始」,單擊「運行」,鍵入 regedit,然後單擊「確定」。
b. 找到並單擊下面的注冊表子項:
程序代碼
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\Parameters\Type
c. 在右窗格中,右鍵單擊「Type」,然後單擊「修改」。
d. 在「編輯值」的「數值數據」框中鍵入 NTP,然後單擊「確定」。
(2). 將 AnnounceFlags 設置為 5。為此,請按照下列步驟操作:
a. 找到並單擊下面的注冊表子項:
程序代碼
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\Config\AnnounceFlags
b. 在右窗格中,右鍵單擊「AnnounceFlags」,然後單擊「修改」。
c. 在「編輯 DWORD 值」的「數值數據」框中鍵入 5,然後單擊「確定」。
(3). 啟用 NTPServer。為此,請按照下列步驟操作:
a. 找到並單擊下面的注冊表子項:
程序代碼
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\TimeProviders\NtpServer
b. 在右窗格中,右鍵單擊「Enabled」,然後單擊「修改」。
c. 在「編輯 DWORD 值」的「數值數據」框中鍵入 1,然後單擊「確定」。
三、使配置即時生效
1. 退出注冊表編輯器。
2. 在命令提示符處,鍵入以下命令以重新啟動 Windows 時間服務,然後按 Enter:
程序代碼
net stop w32time && net start w32time
四、配置防火牆允許NTP訪問
如果你需要在伺服器所在區域外訪問該伺服器的NTP服務,需要在防火牆上添加允許:
程序代碼
名稱 埠 協議 方向
SNTP時間基準 123 UDP 入
五、相關注冊表說明
注冊表項 MaxPosPhaseCorrection
路徑 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\Config
注意: 該項指定服務可進行的最大正時間校準量(以秒為單位)。如果服務確定某個更改幅度大於所需的幅度,它將記錄一個事件。(0xFFFFFFFF 是一種特殊情況,它表示總是校準時間。)域成員的默認值是 0xFFFFFFFF。獨立客戶端和伺服器的默認值是 54,000,即 15 小時。
注冊表項 MaxNegPhaseCorrection
路徑 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\Config
注意: 該項指定服務可進行的最大負時間校準量(以秒為單位)。如果服務確定某個更改幅度大於所需的幅度,它將轉而記錄一個事件。(-1 是一種特殊情況,它表示總是校準時間。)域成員的默認值是 0xFFFFFFFF。獨立客戶端和伺服器的默認值是 54,000,即 15 小時。
注冊表項 MaxPollInterval
路徑 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\Config
注意: 該項指定系統輪詢間隔所允許的最大間隔(單位是對數表示的秒)。盡管系統必須根據預定的間隔進行輪詢,但是提供程序可以根據請求拒絕生成示例。域成員的默認值是 10。獨立客戶端和伺服器的默認值是 15。
注冊表項 SpecialPollInterval
路徑 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\TimeProviders\NtpClient
注意: 該項指定手動對等端的特殊輪詢間隔(以秒為單位)。當啟用 SpecialInterval 0x1 標志時,W32Time 將使用此輪詢間隔而非操作系統確定的輪詢間隔。域成員的默認值是 3,600。獨立客戶端和伺服器的默認值是 604,800。
注冊表項 MaxAllowedPhaseOffset
路徑 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\Config
注意: 該項指定 W32Time 嘗試使用時鍾速率調整計算機時鍾的最大偏移量(以秒為單位)。當偏移量大於該速率時,W32Time 將直接設置計算機時鍾。域成員的默認值是 300。獨立客戶端和伺服器的默認值是 1。
備注說明:
1、一般操作:
1)將時間伺服器改成,授時中心地址(210。72。145。44)
net time /setsntp:210.72.145.44
2)啟動時間同步服務
sc start w32time
3)同步時間
w32tm /resync (實際上,大多數情況下,光作第三步即可。) 2、啟動前提:
DOS啟動Window Time服務: net stop w32time 、 net start w32time
要啟動 Window Time 服務,必須先啟動 Remote Access Connection Manager 服務。
D. 如何讓Windows自動校準時間
1。設置時間伺服器
net time /SETSNTP:time.windows.com
這里的time.windows.com 是網際網路世衡校準時間伺服器,可利用的伺服器如下
time.nist.gov
time-nw.nist.gov
time-a.nist.gov
time-b.nist.gov
中國國內可以下面這幾個
ntp.fudan.e.cn
210.72.145.44 中國科學院國家授時中心
2。查詢時間伺服器
net time /QUERYSNTP
3.同步時間
Win2000操作系統: w32tm /once
WinXP 操作系統: w32tm /resync
知道了上面的原理,我們就可以用批處理文件或者其他相關的編程語言來做一個簡單的同步時間的小程序了(不過前提是你的電腦能搜橡做上網哦)
1。新建一個文本文件
在裡面輸入以下內容
net time /SETSNTP:210.72.145.44
w32tm /once 'Win2000下
w32tm /resync 'WinXP 下
保存後,將文件名改為 ResyncTime.bat
2。在[開如隱始]---[運行]中輸入「gpedit.msc"(不包括引號)
在出來的組策略選擇[Windows設置]——[腳本(啟動關機)]在啟動添加剛才建立的批處理文件,保存後即可
以後你的計算機在開機時每次都會與Internet授時伺服器同步了
不過為了這個小程序能長時間的使用,你最好把這個批處理文件的屬性改為系統和隱藏。
E. linux下,記錄響應時間的腳本,精確到毫秒ms
gettimeofday(取得目前的時間)
相關函數
time,ctime,ftime,settimeofday
表頭文件
#include <sys/time.h>
#include <unistd.h>
定義函數
int gettimeofday ( struct timeval * tv , struct timezone * tz )
函數說明
gettimeofday()會把目前的時間有tv所指的結構返回,當地時區的信息則放到tz所指的結構中。
timeval結構定義為:
struct timeval{
long tv_sec; /*秒*/
long tv_usec; /*微秒*/
};
timezone 結構定義為:
struct timezone{
int tz_minuteswest; /*和Greenwich 時間差了多少分鍾*/
int tz_dsttime; /*日光節約時間的狀態*/
};
上述兩個結構都定義在/usr/include/sys/time.h。tz_dsttime 所代表的狀態如下
DST_NONE /*不使用*/
DST_USA /*美國*/
DST_AUST /*澳洲*/
DST_WET /*西歐*/
DST_MET /*中歐*/
DST_EET /*東歐*/
DST_CAN /*加拿大*/
DST_GB /*大不列顛*/
DST_RUM /*羅馬尼亞*/
DST_TUR /*土耳其*/
DST_AUSTALT /*澳洲(1986年以後)*/
返回值
成功則返回0,失敗返回-1,錯誤代碼存於errno。附加說明EFAULT指針tv和tz所指的內存空間超出存取許可權。
範例
#include<sys/time.h>
#include<unistd.h>
main(){
struct timeval tv;
struct timezone tz;
gettimeofday (&tv , &tz);
printf(「tv_sec; %d\n」, tv,.tv_sec) ;
printf(「tv_usec; %d\n」,tv.tv_usec);
printf(「tz_minuteswest; %d\n」, tz.tz_minuteswest);
printf(「tz_dsttime, %d\n」,tz.tz_dsttime);
}
執行
tv_sec: 974857339
tv_usec:136996
tz_minuteswest:-540
tz_dsttime:0
F. 請問關於如何在xp系統下搭建ntp時間同步伺服器
WindowsXP時間伺服器配置
1.在注冊表中將服務NTPServer的Enabled屬性設置為1.Type改為NTP。
2.如果外部時間源獲取時間將Config/AnnounceFlags設置為5.
3.將parameters\NtpServer地址改為外部時間源的IP地址或者DNS,在使用DNS是後面要加上」,0x1」.多個地址之間用空格隔開。
4.其他參數是可選的參數,可根據需要配置。
5.重啟w32time服務.在命令行中,net stop w32time && net start
w32time.就配置完成了。
6.此外,要保證windows
防火牆是關閉的。或者啟動防火牆時,在例外中添加C:\WINDOWS\system32\w32time.dll埠號:123類型UDP。
經過以上六步伺服器端就設置完成了。
WindowsXP客戶端的配置
1.將NtpServer地址設置為伺服器的地址。
2.服務類型改為NTP。
3.SpecialPolInterval自動同步時間間隔根據需要配置比如15分鍾輪詢一次(設置為900,因為單位為秒)。
4.將默認的時間伺服器設置為伺服器的地址, XP默認是微軟的時間伺服器time.windows.com。在注冊表中
HKEY_LOCAL_MACHINE\SOFTWARE\WINDOWS\CurrentVersion\DateTime\Servers
新建一個字元串值(名字3),輸入伺服器的IP地址。
並將默認值改為3.這樣在時期時間屬性\Internet時間默認的時間同步伺服器就成為我們設置的了。