1588的E2E鏈路延遲測量機(jī)制
[導(dǎo)讀]無用的前言做1588已經(jīng)很多年了,現(xiàn)在才開始想起來寫一些技術(shù)文章。這是第一篇,希望能堅(jiān)持寫下去。1588標(biāo)準(zhǔn)的內(nèi)容其實(shí)很多、很細(xì),但終究是做網(wǎng)絡(luò)時鐘同步,所有方法和機(jī)制最終都是為計(jì)算出slaveclock和masterclock的時間偏差。所以想最快,最直觀的了解1588是怎么同...
無用的前言
做1588已經(jīng)很多年了,現(xiàn)在才開始想起來寫一些技術(shù)文章。這是第一篇,希望能堅(jiān)持寫下去。1588標(biāo)準(zhǔn)的內(nèi)容其實(shí)很多、很細(xì),但終究是做網(wǎng)絡(luò)時鐘同步,所有方法和機(jī)制最終都是為計(jì)算出slave clock和master clock的時間偏差。所以想最快,最直觀的了解1588是怎么同步網(wǎng)絡(luò)中的時鐘,那就應(yīng)該看標(biāo)準(zhǔn)中最基本的E2E鏈路延遲測量機(jī)制,了解slave clock是如何通過該機(jī)制同步。E2E鏈路延遲測量機(jī)制
直接上圖,這是1588標(biāo)準(zhǔn)中,E2E鏈路延遲測量機(jī)制的原理圖。E2E鏈路延遲測量機(jī)制也叫Delay request-response鏈路延遲測量機(jī)制。其實(shí)不難理解,兩個網(wǎng)絡(luò)設(shè)備要靠網(wǎng)絡(luò)報(bào)文來交換時間信息完成時間同步,而這些網(wǎng)絡(luò)報(bào)文的發(fā)送和接收都會記錄對應(yīng)的時間戳??梢允擒浖臅r間戳,也可以是硬件的時間戳,如MAC時間戳或者PHY時間戳。
進(jìn)入正題,我們來看這個同步的過程。- Master發(fā)送Sync報(bào)文,發(fā)送時間戳記為t1。
- Slave收到Sync報(bào)文,接收時間戳記為t2。
- Master發(fā)送完Sync報(bào)文后立即發(fā)送Follow_up報(bào)文,并把t1寫在Follow_up報(bào)文上告訴slave。
- Slave發(fā)送Delay_req報(bào)文,發(fā)送時間戳記為t3。
- Master收到Delay_req報(bào)文,接收時間戳記為t4。立即回復(fù)Delay_resp報(bào)文,并把t4寫在Delay_resp報(bào)文上告訴slave。
t2 - t1 = delay offset
t4 - t3 - delay - offset其實(shí)Sync報(bào)文從發(fā)送到接收的過程,t2 - t1的時間差值不只包含了鏈路延遲,同時也包含了時間偏差。而Delay_req報(bào)文從發(fā)送到接收也是類似的,t4 - t3的時間差值不只包含了鏈路延遲,同時也包含了時間偏差。這兩個時間偏差剛好是相反數(shù)。有人可能會問,從master到slave的鏈路延遲,和從slave到master的鏈路延遲是一樣的嗎?重點(diǎn)來了,1588標(biāo)準(zhǔn)的核心假設(shè),就是master和slave之間的鏈路延遲是對稱的。如果有任何非對稱延遲的引入,那計(jì)算的時間偏差就會引入誤差。所以嚴(yán)格的說兩個網(wǎng)絡(luò)設(shè)備做1588同步,如果中間經(jīng)過了路由器或者交換機(jī)等轉(zhuǎn)發(fā)設(shè)備,而這些路由器或交換機(jī)并不支持1588協(xié)議的話,那就會引入非對稱鏈路延遲,影響同步的精度。這些話題以后再慢慢介紹。回歸正題,總之這兩個公式是可以算出來鏈路延遲,和時間偏差的。2 * delay = (t4 - t3) (t2 - t1)
2 * offset = (t2 - t1) - (t4 - t3)





