0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線(xiàn)課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

ntp的實(shí)現(xiàn)原理是什么

麥辣雞腿堡 ? 來(lái)源:UndefinedReference ? 作者:jinbao.tang ? 2023-10-27 14:21 ? 次閱讀

ntp實(shí)現(xiàn)原理

我們看一下為啥說(shuō)ntp從實(shí)現(xiàn)時(shí)間同步的角度來(lái)說(shuō)是很簡(jiǎn)單的。在pc上,以windows為例,手動(dòng)關(guān)閉打開(kāi)一下自動(dòng)更新時(shí)間,會(huì)觸發(fā)一次ntp時(shí)間同步。

這個(gè)時(shí)候,我們可以拿到ntp完整的request/response報(bào)文,如下:

ntp client request:

圖片

ntp server response:

圖片

如上圖,我們可以看到,我們可以拿到同步原理提到的t1, t2, t3;而t4是client接收到server response時(shí)的時(shí)間,那么上述時(shí)間分別是如何來(lái)的呢。

* t1: client發(fā)送request的前一刻,記下當(dāng)前utc時(shí)間,然后塞入到request transmit timestamp中去。但是這個(gè)不能作為真正的t1來(lái)使用,因?yàn)榍懊嫣岬搅?,ntp是使用的udp,所以有可能會(huì)丟包。因此真正的t1應(yīng)該ntp server收到client request時(shí),從request報(bào)文中提取到t1,最后再給到client使用。也就是上圖的t1。
* t2: 也就是server收到client request的時(shí)間
* t3: server發(fā)送response的時(shí)間
* t4: client收到server response的時(shí)間
  
  知道這些原理之后,我們就可以很好設(shè)計(jì)出我們的代碼實(shí)現(xiàn)思路,如下:
 

C++                  
//ntp client                  
// send request with t1                  
std::chrono::time_point_cast(          
        std::chrono::system_clock::now());          
std::time_t time_stamp = time_point.time_since_epoch().count();          
request_message_- >SetTransTs(time_stamp);          
int ret = SendMsg(request_message_- >GetData(), MESSAGE_LENGTH);          


// receive response, and get t1, t2, t3          
int ret = RecvMsg(request_message_- >GetData(), MESSAGE_LENGTH);          
auto req_tx_ts_ = response_message_- >GetOriginTs();  // t1          
auto req_rx_ts_ = response_message_- >GetRecvTs();    // t2          
auto resp_tx_ts_ = response_message_- >GetTransTs();  // t3          
auto time_point = std::chrono::time_point_cast(          
        std::chrono::system_clock::now());          
std::time_t time_stamp = time_point.time_since_epoch().count();          
auto resp_rx_ts_us_ = static_cast(time_stamp);  // t4            

auto offset =            
        req_rx_ts_us_ - req_tx_ts_us_ + resp_tx_ts_us_ - resp_rx_ts_us_;            
offset /= 2;            

// adjust the clock            
AdjustClock(offset);
C++                  
// ntp server                  
// receive ntp request message                  
RecvMsg(request_message_- >GetData(), MESSAGE_LENGTH);                  
// get receive request_frame timestamp, get t1, t2                  
auto time_point = std::chrono::time_point_cast(          
        std::chrono::system_clock::now());          
auto req_rx_ts = time_point.time_since_epoch().count();//t2          
auto req_tx_ts = request_message_- >GetTransTs();//t1          

// send ntp response message          
response_message_- >SetOriginTs(req_tx_ts);//t1          
response_message_- >SetRecvTs(req_rx_ts);//t2          
auto time_point = std::chrono::time_point_cast(          
        std::chrono::system_clock::now());          
auto resp_tx_ts = time_point.time_since_epoch().count();          
response_message_- >SetTransTs(resp_tx_ts);//t3          
SendMsg(response_message_- >GetData(), MESSAGE_LENGTH);
聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 車(chē)載
    +關(guān)注

    關(guān)注

    18

    文章

    615

    瀏覽量

    83413
  • 時(shí)間同步
    +關(guān)注

    關(guān)注

    1

    文章

    122

    瀏覽量

    10019
  • 時(shí)鐘同步
    +關(guān)注

    關(guān)注

    0

    文章

    89

    瀏覽量

    12788
  • NTP
    NTP
    +關(guān)注

    關(guān)注

    1

    文章

    176

    瀏覽量

    13938
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    基于NTP的高精度時(shí)鐘同步系統(tǒng)實(shí)現(xiàn)

    基于NTP的高精度時(shí)鐘同步系統(tǒng)實(shí)現(xiàn)Windows操作系統(tǒng)內(nèi)置的NTP授時(shí)精度不高,分辨率最高只有10 ms。給出一個(gè)基于Windows操作系統(tǒng)的計(jì)算機(jī)網(wǎng)絡(luò)同步時(shí)鐘實(shí)現(xiàn)方案,該方案可以有
    發(fā)表于 09-19 09:21

    NTP服務(wù)的搭建方法

    NTP服務(wù)搭建服務(wù)端安裝檢查是否安裝NTP [root@jie ~] # rpm -q ntp ntp-4.2.2p1-7.el5安裝方式NTP
    發(fā)表于 07-15 07:17

    CentOS的ntp服務(wù)器搭建

    ntp】CentOS上搭建ntp服務(wù)器,并實(shí)現(xiàn)時(shí)間同步
    發(fā)表于 03-20 11:18

    NTP協(xié)議簡(jiǎn)介

    一、NTP協(xié)議簡(jiǎn)介??網(wǎng)絡(luò)時(shí)間協(xié)議NTP(Network Time Protocol)的主要開(kāi)發(fā)者是美國(guó)特拉華大學(xué)的MILLS David L教授設(shè)計(jì)實(shí)現(xiàn)的,由時(shí)間協(xié)議、ICMP時(shí)間戳消息及IP時(shí)間
    發(fā)表于 07-29 06:50

    通過(guò)NTP獲取Epoch/Unix時(shí)間NTP代表網(wǎng)絡(luò)時(shí)間

    通過(guò)NTP獲取 Epoch/Unix時(shí)間NTP代表“網(wǎng)絡(luò)時(shí)間協(xié)議”,它是用于在計(jì)算機(jī)系統(tǒng)之間進(jìn)行時(shí)鐘同步的網(wǎng)絡(luò)協(xié)議。 換句話(huà)說(shuō),它用于同步網(wǎng)絡(luò)中的計(jì)算機(jī)時(shí)鐘時(shí)間。本文將介紹如何使用帶Arduino
    發(fā)表于 01-27 06:03

    求解關(guān)于AT ESP8266 無(wú)法實(shí)現(xiàn)NTP時(shí)間同步的問(wèn)題?

    聯(lián)網(wǎng),本以為可以大功時(shí),卻發(fā)現(xiàn)NTP無(wú)法同步。關(guān)于NTP配置的各種文檔看了很多,使用都很簡(jiǎn)單,沒(méi)有特殊的配置要求。但是搞了一下午沒(méi)有任何進(jìn)展。希望各位前輩幫忙分析。如上圖,組件全部加載成功,NTP已經(jīng)
    發(fā)表于 03-15 14:36

    NK-980IoT評(píng)測(cè)EMAC功能模塊(二)

    IEEE1588介紹IEEE1588是網(wǎng)絡(luò)精密時(shí)鐘同步協(xié)議也稱(chēng)PTP,利用傳統(tǒng)的NTP實(shí)現(xiàn)的能PTP能達(dá)到s級(jí),利用EMAC帶IEEE1588的芯片比如NUC980應(yīng)當(dāng)能達(dá)到ms級(jí)甚至更高,也有PYH帶時(shí)鐘的如DP83640。
    發(fā)表于 04-08 14:49

    基于NTP的網(wǎng)絡(luò)時(shí)統(tǒng)系統(tǒng)的實(shí)現(xiàn)

    本文基于NTP 協(xié)議針對(duì)某具體廣域網(wǎng)的結(jié)構(gòu)特點(diǎn)和應(yīng)用需求進(jìn)行了網(wǎng)絡(luò)時(shí)統(tǒng)系統(tǒng)的框架設(shè)計(jì),并根據(jù)具體應(yīng)用給出了實(shí)現(xiàn)算法,通過(guò)編程實(shí)現(xiàn)和網(wǎng)絡(luò)構(gòu)建得到的仿真實(shí)驗(yàn)結(jié)果,驗(yàn)證
    發(fā)表于 09-12 16:53 ?62次下載

    NTP的基本功能和工作原理

    學(xué)習(xí)完本課程,您應(yīng)該能夠:了解NTP的基本功能和工作原理,熟悉NTP的各種工作模式,熟練掌握NTP的配置方法。
    發(fā)表于 04-12 14:32 ?14次下載

    實(shí)現(xiàn)嵌入式linux自動(dòng)同步網(wǎng)絡(luò)時(shí)間---NTP

    因?yàn)锳RM板斷電重啟問(wèn)題,為保證能獲取到準(zhǔn)確的實(shí)時(shí)時(shí)間,所以需要實(shí)現(xiàn)自動(dòng)從網(wǎng)絡(luò)上獲取時(shí)間,這就需要用到NTPNTP是網(wǎng)絡(luò)時(shí)間協(xié)議(Network Time Protocol)的簡(jiǎn)稱(chēng),它是用來(lái)同步網(wǎng)
    發(fā)表于 11-02 09:36 ?12次下載
    <b class='flag-5'>實(shí)現(xiàn)</b>嵌入式linux自動(dòng)同步網(wǎng)絡(luò)時(shí)間---<b class='flag-5'>NTP</b>

    NTP服務(wù)器介紹

    NTP服務(wù)器 產(chǎn)品介紹: NTP服務(wù)器是—款基于CPLD的高精度時(shí)頻同步設(shè)備。該設(shè)備接收GPS、北斗衛(wèi)星信號(hào),或母鐘信號(hào),通過(guò)踉蹤鎖定外部信號(hào)馴服內(nèi)部晶振,采用智能時(shí)間優(yōu)化算法,為用戶(hù)提供精確、穩(wěn)定
    的頭像 發(fā)表于 01-17 09:30 ?838次閱讀
    <b class='flag-5'>NTP</b>服務(wù)器介紹

    ntp的同步原理是什么

    NTP(Network Time Protocol,網(wǎng)絡(luò)時(shí)間協(xié)議)是一種用于同步計(jì)算機(jī)系統(tǒng)時(shí)間的協(xié)議。那么ntp的同步原理是什么呢? ntp最典型的授時(shí)方式是Client/Server方式,如下
    的頭像 發(fā)表于 01-19 17:24 ?1675次閱讀
    <b class='flag-5'>ntp</b>的同步原理是什么

    安徽京準(zhǔn) NTP網(wǎng)絡(luò)校時(shí)器 NTP服務(wù)器 電廠(chǎng)應(yīng)用方案

    【安徽京準(zhǔn)】NTP網(wǎng)絡(luò)校時(shí)器(NTP服務(wù)器)電廠(chǎng)應(yīng)用方案
    的頭像 發(fā)表于 08-08 09:27 ?313次閱讀
    安徽京準(zhǔn) <b class='flag-5'>NTP</b>網(wǎng)絡(luò)校時(shí)器 <b class='flag-5'>NTP</b>服務(wù)器 電廠(chǎng)應(yīng)用方案

    國(guó)產(chǎn)麒麟系統(tǒng) NTP網(wǎng)絡(luò)時(shí)間服務(wù)器實(shí)現(xiàn)信創(chuàng)平臺(tái)自主可控

    【國(guó)產(chǎn)麒麟系統(tǒng)】NTP網(wǎng)絡(luò)時(shí)間服務(wù)器實(shí)現(xiàn)信創(chuàng)平臺(tái)自主可控
    的頭像 發(fā)表于 08-09 10:25 ?1919次閱讀
    國(guó)產(chǎn)麒麟系統(tǒng) <b class='flag-5'>NTP</b>網(wǎng)絡(luò)時(shí)間服務(wù)器<b class='flag-5'>實(shí)現(xiàn)</b>信創(chuàng)平臺(tái)自主可控

    常見(jiàn)NTP服務(wù)器軟件比較

    的時(shí)間同步。 1. NTP (Network Time Protocol) 優(yōu)點(diǎn): 標(biāo)準(zhǔn)實(shí)現(xiàn)NTPNTP協(xié)議的官方實(shí)現(xiàn),遵循RFC 5
    的頭像 發(fā)表于 12-18 15:14 ?765次閱讀