馬繼偉,何佳洲,丁春山
(江蘇自動化研究所,江蘇 連云港 222061)
一種基于心跳檢測的網(wǎng)絡時間同步方法
馬繼偉,何佳洲,丁春山
(江蘇自動化研究所,江蘇 連云港 222061)
針對基于NTP的網(wǎng)絡時間同步方法缺乏必要機制對各節(jié)點的狀態(tài)進行監(jiān)控的問題,提出了一種基于心跳檢測的網(wǎng)絡時間同步方法,實現(xiàn)了源節(jié)點對從節(jié)點的狀態(tài)監(jiān)控。使用Winpcap開源庫在驅(qū)動層獲取時間戳,能夠?qū)崿F(xiàn)微秒級的時間同步。利用心跳檢測機制,從節(jié)點可以監(jiān)測源節(jié)點的狀態(tài)。另外提供了一種備用機制,當源節(jié)點故障時,可以實現(xiàn)源節(jié)點的動態(tài)切換。最后實驗驗證了方法的可行性。
時間同步;心跳檢測;源節(jié)點切換;狀態(tài)監(jiān)控
目前常用的網(wǎng)絡時間同步主要包括基于廣播的網(wǎng)絡時間同步、基于NTP的網(wǎng)絡時間同步和基于PTP的網(wǎng)絡時間同步?;趶V播的網(wǎng)絡時間同步是從節(jié)點根據(jù)源節(jié)點廣播的參考時間修正本地時鐘,是一種單向的時間同步,誤差主要來源于網(wǎng)絡傳輸?shù)难舆t,同步精度不高,并且傳輸延遲不易測量和估計,能達到毫秒級的同步精度。NTP是一種標準的互聯(lián)網(wǎng)時間同步協(xié)議,使用了一種純軟件的方式來實現(xiàn)網(wǎng)絡時間同步,其同步精度能達到毫秒量級[1]。為了滿足網(wǎng)絡實時通信、金融結算、測量儀器和工業(yè)控制等分布式網(wǎng)絡測控系統(tǒng)中定時同步的需要,IEEE1588定義了PTP(精確時鐘同步)協(xié)議,在現(xiàn)有網(wǎng)絡的基礎上增加了硬件支持,使用軟硬件結合的方式實現(xiàn)了網(wǎng)絡時間同步[2-3],大幅提高了時間同步精度,能夠達到微秒量級。
NTP已經(jīng)成為了目前應用最廣泛的網(wǎng)絡時間協(xié)議,能夠?qū)崿F(xiàn)毫秒級的時間同步,但卻缺乏必要機制對各節(jié)點的狀態(tài)進行動態(tài)監(jiān)控。在實際應用中我們不僅要關注如何實現(xiàn)主從節(jié)點的時間同步、如何提高時間同步的精確度以及如何降低時間同步所需的成本,同時還需要掌握各節(jié)點的工作狀態(tài)以及同步情況,所以就需要對各個節(jié)點進行狀態(tài)監(jiān)控[4]。NTP協(xié)議是分層主從結構運行的,當源節(jié)點故障時會影響下層節(jié)點的授時精度,在局域網(wǎng)中這個問題更加明顯。由于傳統(tǒng)NTP的局限性以及當前網(wǎng)絡時間同步的需要,本文在NTP的基礎上提出了一種純軟件的網(wǎng)絡時間同步新方法,利用狀態(tài)監(jiān)控機制實現(xiàn)了源節(jié)點對其他網(wǎng)絡節(jié)點的狀態(tài)監(jiān)控;利用心跳檢測機制[5]和源節(jié)點切換機制,當源節(jié)點故障時可以實現(xiàn)源節(jié)點的動態(tài)切換。
本文首先對NTP進行分析,然后給出了一種基于心跳檢測的網(wǎng)絡時間同步方法,由心跳檢測、源節(jié)點切換、時間偏差估計與修正以及狀態(tài)監(jiān)控四部分組成。最后實驗驗證了方法的可行性,對于局域網(wǎng)的時間同步具有重要意義。
NTP最早于1985年由美國David L. Mills教授提出,是用于互聯(lián)網(wǎng)上時間同步的標準互聯(lián)網(wǎng)協(xié)議。通過該協(xié)議可以估算出NTP報文在互聯(lián)網(wǎng)上的傳輸延遲和時鐘偏差,從而實現(xiàn)網(wǎng)絡上計算機之間可靠和精確的時間同步。
30多年來,NTP不斷發(fā)展完善,從NTPv0到NTPv4演變過程如表1所示。
表1 NTP演變過程
此外,1992年RFC1361提出了NTP的簡化版本SNTP,去除了過濾和錯誤管理功能,精度只能達到秒級;1995年提出的RFC1769,時間精度提高到數(shù)百毫秒;1996年提出的RFC2030給出了SNTP的最新規(guī)范SNTPv4,精度能達到更高。SNTP能用單播方式和廣播方式操作,也能在IP 多播方式下操作。SNTP實質(zhì)是簡化了NTP服務器和客戶端策略,在協(xié)議實現(xiàn)上沒有什么更改, 適用于使用個人計算機的 UDP/TIME 客戶。
NTP使用分層網(wǎng)絡拓撲,按照離時間源的遠近將各NTP時間服務器分成16個層級,實現(xiàn)了下層節(jié)點對上層節(jié)點的時間請求。從圖1可知,在NTP網(wǎng)絡中,NTP主機主要分布在2-4層,且在第3層的NTP主機最多,在5層以上的NTP主機數(shù)可以忽略不計。另外從文獻[11-15]可知,隨著互聯(lián)網(wǎng)基礎設施質(zhì)量的提升,NTP網(wǎng)絡的計時性能也在不斷提升。同時越來越多的系統(tǒng)正在試圖與NTP網(wǎng)絡保持同步并搜索更多更可靠的時鐘源。
圖1 不同時期NTP網(wǎng)絡各層級服務器分布圖
隨著NTP協(xié)議的廣泛應用,對NTP網(wǎng)絡的研究也在不斷進行,文獻[11-15]研究并分析了不同時期的NTP網(wǎng)絡,使用網(wǎng)絡爬蟲程序?qū)ふ襈TP主機并發(fā)送同步請求,在一周時間內(nèi)探測到的NTP網(wǎng)絡大小以及響應的主機數(shù)如表2所示。從表2可知NTP網(wǎng)絡不斷增大,在16年里增大了150倍以上。近幾年來互聯(lián)網(wǎng)發(fā)展迅速,SNTP服務以及NTP協(xié)議運用得更加普遍。從表2也可以看到:相比于1999的報告2005年搜索到的NTP網(wǎng)絡更大但響應的主機數(shù)卻更少,主要是因為隨時間的推移,服務器更加安全,由于防火墻的阻擋或服務器的配置等因素,服務器僅允許基本的時間查詢,而不會有其他的響應。近年來幾乎沒有最新的文獻去繼續(xù)Murta等人的工作,但是顯然NTP網(wǎng)絡更加龐大。目前互聯(lián)網(wǎng)上客戶機主要使用NTP池來獲得時間,總共含有大約4000個服務器。所以說對這些服務器的搜索與研究也是有非常有必要的。
考慮到局域網(wǎng)中對時間同步以及對各節(jié)點狀態(tài)監(jiān)控的需求,本文提出了基于心跳檢測的網(wǎng)絡時間同步方法,由心跳檢測、源節(jié)點切換、時間偏差估計與修正以及狀態(tài)監(jiān)控四部分組成,實現(xiàn)了微秒級的時間同步以及對各節(jié)點的狀態(tài)監(jiān)控。另外提供了一種備用機制,在源節(jié)點故障時可以實現(xiàn)源節(jié)點自動切換,從而繼續(xù)保持網(wǎng)內(nèi)時間同步。源節(jié)點和從節(jié)點的工作流程如圖2所示。
表2 不同時期NTP網(wǎng)絡大小對比
圖2 各節(jié)點工作流程
2.1 心跳檢測
心跳檢測是一種從節(jié)點對源節(jié)點工作狀態(tài)判定的機制,通過接收源節(jié)點廣播的心跳信息,判斷源節(jié)點的狀態(tài)(正常/異常/故障)。從節(jié)點定時檢測在規(guī)定的時間內(nèi)是否收到源節(jié)點的心跳信息,收到則認為源節(jié)點正常,否則認為源節(jié)點異常,如果連續(xù)3次源節(jié)點異常,則認為源節(jié)點故障。心跳檢測的具體過程如下:
1)源節(jié)點周期性地廣播心跳信息,廣播周期為theartbeatBroadcast;
2)從節(jié)點記錄并更新每次接收到心跳報文的時間theartbeatRecv,首次接收到心跳報文的時間記t0。從t0+0.5theartbeatBroadcast開始,每隔theartbeatBroadcast檢測一次是否收到心跳信息,檢測時間記為tcheck;
a) 如果tcheck-theartbeatRecv b) 如果連續(xù)三次判定源節(jié)點異常,則認為源節(jié)點故障。 2.2 源節(jié)點切換 當源節(jié)點故障時,為了保證整個局域網(wǎng)內(nèi)時間的相對同步,需要重新選取一個源節(jié)點,進行源節(jié)點切換。圖3給出了源節(jié)點故障前后各節(jié)點的工作情況。當源節(jié)點故障時,各從節(jié)點會廣播平均時間偏差如圖3(c)所示,這個平均偏差是從節(jié)點相對于故障源節(jié)點的各個同步周期時間偏差的平均值,同步時間越長,這個均值越穩(wěn)定。均值越小表示該節(jié)點的性能越好,選擇均值最小的節(jié)點作為新的源節(jié)點。 圖3 源節(jié)點切換前后各節(jié)點工作情況 源節(jié)點切換的具體過程如下: 1)各節(jié)點通過心跳檢測判定源節(jié)點是否正常工作,若源節(jié)點正常,則所有節(jié)點工作狀態(tài)不變。 2.3 時間偏差估計與修正 我們知道網(wǎng)絡時間同步的精確度在很大程度上取決于獲取時間戳的精確度。傳統(tǒng)的NTP在應用層獲取時間戳,通過調(diào)用操作系統(tǒng)的函數(shù)實現(xiàn)時間戳獲取和本地時間修正的功能。但是在應用層獲取時間戳只能達到毫秒級,并不能滿足某些實時測控系統(tǒng)的需要。本文使用文獻[16]中介紹的方法,利用Winpcap開源庫,繞過TCP/IP協(xié)議棧,在內(nèi)核空間NPF設備驅(qū)動程序中獲取時間戳,相比傳統(tǒng)NTP時間戳獲取更靠近底層,能夠獲得微秒級的時間。 WinPcap是一個基于Win32平臺的,用于捕獲網(wǎng)絡數(shù)據(jù)包并進行分析的開源庫,它包括了一個內(nèi)核級的數(shù)據(jù)包過濾器NetgroupPacketFilter(NPF),一個低層動態(tài)鏈接庫(Packet.dll),一個高層的、依賴于系統(tǒng)的庫(wpcap.dll)。Packet.dll庫提供了低層的API,它可以直接訪問驅(qū)動的函數(shù),并且依賴于微軟操作系統(tǒng)的可編程接口;wpcap.dll提供了更多強大的,高層次的,和libpcap(一個知名的Unix捕獲庫)兼容的捕獲原語。 基于winpcap的網(wǎng)絡時間同步原理圖如圖4。 圖4 基于winpcap的網(wǎng)絡時間同步原理圖 2.4 狀態(tài)監(jiān)控 這里的狀態(tài)監(jiān)控分為兩部分,即從節(jié)點對源節(jié)點的狀態(tài)監(jiān)控以及源節(jié)點對從節(jié)點的狀態(tài)監(jiān)控。通過前面的心跳檢測從節(jié)點可以判斷出源節(jié)點的狀態(tài)(正常/異常/故障)。源節(jié)點對從節(jié)點的狀態(tài)監(jiān)控是通過判斷指定時間內(nèi)接收到的同步報文數(shù)量以及主從節(jié)點時間偏差來確定從節(jié)點的狀態(tài)(正常且同步/正常不同步/故障)的一種機制。下面介紹源節(jié)點對從節(jié)點的狀態(tài)監(jiān)控方法(K步檢查法): 1)從節(jié)點周期性地向源節(jié)點發(fā)送同步報文,包含上一時間同步周期的時間偏差θi,i表示從節(jié)點編號; 2)源節(jié)點收到同步報文,分別統(tǒng)計收到各節(jié)點的累積同步報文數(shù)目nSync(i),并更新θi。 3)當θi<=λSync時,則認為從節(jié)點i與源節(jié)點時間同步,否則從節(jié)點i與源節(jié)點時間不同步。 4)當出現(xiàn)某一個i1使得nSync(i1)=K時做以下判斷: a) 如果nSync(i)>0,則認為從節(jié)點i正常工作; b) 如果nSync(i)=0,則認為從節(jié)點i故障; c) 判斷完畢,將nSync(i)歸零,進入到下一個監(jiān)控周期。 其中nSync(i)表示該監(jiān)控周期內(nèi)接收到的來自節(jié)點i的同步報文個數(shù),λSync表示時間同步門限,K表示步數(shù)上限。 在局域網(wǎng)環(huán)境下使用5臺計算機進行實驗。時間同步周期為2s,心跳消息廣播周期為5s,時間同步門限λSync取1ms,進行仿真實驗驗證方法的可行性。 為模擬源節(jié)點故障時間的隨機性,引入隨機數(shù),隨機選取某一心跳檢測周期自動斷開源節(jié)點進行實驗。表3為取500以內(nèi)隨機數(shù)的情況,“√”表示當前的源節(jié)點,“—”表示故障節(jié)點。從表3可知選取節(jié)點1作為初始源節(jié)點,在439個心跳檢測周期后節(jié)點1發(fā)生故障,然后其余各節(jié)點廣播本節(jié)點相對于節(jié)點1的平均時間偏差,進行自組織選取平均偏差最小的節(jié)點5作為新的源節(jié),以此類推。這樣網(wǎng)內(nèi)節(jié)點不斷減少,最后將斷開的節(jié)點重新手動選取源節(jié)點,重新入網(wǎng)進行驗證。 表3 源節(jié)點切換情況表 節(jié)點1作為源節(jié)點時,各節(jié)點相對節(jié)點1的時間偏差的均值分別為56.63us、143.62us、95.49us、48.05us。時間同步偏差曲線如圖5所示。 圖5 節(jié)點1作為源節(jié)點時間同步偏差曲線 以上實驗結果表明,在2s時間同步周期情況下,本文提供的方法能夠?qū)崿F(xiàn)同步精度在200us以內(nèi)。在任意時刻源節(jié)點故障,通過心跳檢測機制從節(jié)點能夠監(jiān)測到源節(jié)點故障信息并且實現(xiàn)源節(jié)點動態(tài)切換,切換到平均時間偏差相對較小的節(jié)點,將其作為新的源節(jié)點,然后保持網(wǎng)內(nèi)的相對時間同步。另外當故障節(jié)點修復后手動選取源節(jié)點能夠快速入網(wǎng)同步。在整個實驗過程中,源節(jié)點都能夠通過從節(jié)點反饋的偏差信息以及接收到的同步請求報文數(shù)量監(jiān)控到從節(jié)點的狀態(tài)。 本文提出了一種純軟件實現(xiàn)的網(wǎng)絡時間同步新方法。該方法包括心跳檢測、源節(jié)點切換、時間偏差估計與修正以及狀態(tài)監(jiān)控四部分,可以實現(xiàn)微秒級的時間同步以及對各節(jié)點的狀態(tài)監(jiān)控。通過心跳檢測和源節(jié)點切換機制,從節(jié)點可以監(jiān)測到源節(jié)點的工作狀態(tài),并且當源節(jié)點故障時可以實現(xiàn)源節(jié)點動態(tài)切換,具有很好的容錯性與擴展性,適用于對時間同步精度有一定要求并且需要監(jiān)控各節(jié)點狀態(tài)的局域網(wǎng)絡。最后通過實驗驗證了方法的可行性。但需要注意的是,該方法對網(wǎng)絡環(huán)境有一定的依賴性,因此網(wǎng)絡的穩(wěn)定性以及網(wǎng)絡安全等問題是下一步需要進行研究的。 [1] D. Mills, U. Delaware,J. Martin.RFC 5905:Network Time Protocol Version 4: Protocol and Algorithms Specification[R],2010. [2] 宋亞輝,李在銘. 局域網(wǎng)時鐘同步技術綜述[J]. 儀器儀表學報,2005,26(22):550-552. [3] 王勇,李智軍. 網(wǎng)絡化測控設備間的時間同步[J].儀器儀表學報,2006,27(9):1085-1087. [4] 董甲東,鄭春香. 分布式系統(tǒng)的時間同步容錯機制研究[J]. 計算機技術與發(fā)展,2008,18(3):99-101. [5] (美)拉姆(Lam, C.).Hadoop實戰(zhàn)[M].韓冀中,譯. 北京:人民郵電出版社,2011. [6] David L. Mills. RFC 958:Network Time Protocol(NTP). September, 1985. [7] David L. Mills. RFC 1059: Network Time Protocol (Version 1) Specification and Implementation. July, 1988. [8] David L. Mills. RFC 1119: Network Time Protocol (Version 2) Specification and Implementation. September, 1989. [9] David L. Mills. RFC 1305:Network Time Protocol(Version 3)Specification,Implementation and Analysis. March, 1992. [10]D. Mills,W. Kasch,J. Martin,J. Burbank,W. Kasch. RFC 5905:Network Time Protocol Version 4: Protocol and Algorithms Specification. June 2010. [11]Mills, D. L, On the Accuracy and Stability of Clocks Synchronized by the Network Time Protocol in the Internet System[J].ACM Computer Communication Review,1989,20(1):65-75. [12]Guyton, J. D., Schwartz, M.F, Experience with a Survey Tool for Discovering Network Time Protocol Servers[C]. Proc. Usenix Summer Tech. Conf.(1994),2001. [13]Mills, D.L., Thyagarajan, A. Huffmann, B.C, Internet Timekeeping around the Globe[J]. Proc. Precision Time and Time Interval Applications and Planning Meeting,1997,9(8):38-43. [14]Minar, N. A Survey of NTP Network[EB/OL]. http:∥www.media.mit.edu/nelson/research/ntp-survey99. [15]CD. Murta, PR Torres, P Mohapatra. Chractering Quality of Time and Topology in a Time Synchronization Network[J].International Journal of Hybrid information Technology,2006,8(5):1145-6. [16]諶華金,何佳洲.一種基于數(shù)據(jù)鏈路層的局域網(wǎng)時間同步新機制[J].計算機應用,2010,30(5):1183-1187. A Network Time Synchronization Method Based on Heartbeat Detection MA Ji-wei, HE Jia-zhou, DING Chun-shan (Jiangsu Automation Research Institute, Lianyungang 222061, China) A new network time synchronization method based heartbeat detection is proposed to solve the problem of NTP-based network time synchronization, which lacks the necessary mechanism to monitor the state of each node. Using the Winpcap open-source library to obtain the time stamp in the driver layer, which can achieve the microsecond time synchronization. With the heartbeat detection mechanism, the slave node can monitor the state of the source. In addition, this paper provides a backup mechanism to achieve the dynamic switching of the source node when the source node fails. Finally, the feasibility of the method is verified by the experiments. time synchronization; heartbeat detection; source node switching; state monitoring 2016-12-06 馬繼偉(1992-),男,重慶大渡口人,研究方向為時間同步。 何佳洲(1966-),男,博士,研究員,博士生導師。 丁春山(1981-),男,碩士,高級工程師。 1673-3819(2017)01-0116-06 TP317;E917 A 10.3969/j.issn.1673-3819.2017.01.025 修回日期: 2016-12-203 仿真結果及分析
4 結束語