1588 P2P鏈路延遲測(cè)量機(jī)制
E2E和P2P
上一篇文章介紹了1588的E2E鏈路延遲測(cè)量機(jī)制,本文順帶把P2P的鏈路延遲測(cè)量機(jī)制也一起介紹一下,這也便于以后介紹E2E透明時(shí)鐘和P2P透明時(shí)鐘。E2E就是End-to-End,它是由Slave clock發(fā)起的測(cè)量鏈路延遲的機(jī)制,而P2P(Peer-to-Peer)則是把每一個(gè)clock看作是對(duì)等的,每一個(gè)clock都會(huì)發(fā)起的鏈路延遲測(cè)量機(jī)制。說(shuō)白了就是E2E的機(jī)制下,只有slave clock測(cè)量鏈路延遲,而P2P的機(jī)制下,每個(gè)clock都會(huì)測(cè)量鏈路延遲。P2P鏈路延遲測(cè)量機(jī)制
P2P鏈路延遲的測(cè)量,使用了和E2E不同的報(bào)文。E2E使用的是Delay_req和Delay_resp,而P2P使用了Pdelay_req,Pdelay_resp和Pdelay_resp_follow_up??聪聢D。整個(gè)過(guò)程是這樣的:
- 發(fā)起端發(fā)送報(bào)文Pdelay_req,并記錄發(fā)送時(shí)間戳t1。響應(yīng)端收到后,記錄接收時(shí)間戳t2。
- 響應(yīng)端立即回復(fù)報(bào)文Pdelay_resp,把t2寫在Pdelay_resp報(bào)文上,告訴發(fā)起端。同時(shí)記錄發(fā)送時(shí)間戳t3。
- 發(fā)起端收到Pdelay_resp,記錄接收時(shí)間戳t4。
- 緊隨Pdelay_resp報(bào)文,響應(yīng)端又發(fā)送一個(gè)叫作Pdelay_resp_follow_up的報(bào)文,將t3寫在該報(bào)文上,告訴發(fā)起端。
t2 - t1 = delay - offset
t4 - t3 = delay offset
t2和t1的時(shí)間差值包含了鏈路延遲delay和兩個(gè)clock的時(shí)間偏差。t4和t3的時(shí)間差值包含了鏈路延遲delay和剛提到的時(shí)間偏差的相反數(shù)。于是鏈路延遲和時(shí)間偏差可以被計(jì)算出來(lái)了。2 * delay = (t2 - t1) (t4 - t3)
2 * offset = (t4 - t3) - (t2 - t1)
時(shí)鐘同步的實(shí)現(xiàn)
通過(guò)上面的介紹我們又學(xué)習(xí)到了P2P鏈路延遲的測(cè)量機(jī)制,上面的兩個(gè)等式可以計(jì)算出鏈路延遲和時(shí)間偏差。然而真正的1588軟件就是用這個(gè)時(shí)間偏差值來(lái)調(diào)整clock的嗎?答案并不是這樣。不要忘了,P2P機(jī)制下,1588同步還有Sync和Follow_up報(bào)文的參與。對(duì)于P2P機(jī)制下的時(shí)鐘同步,1588軟件通常是怎么做的呢?重點(diǎn)來(lái)了。1588軟件通常把時(shí)鐘同步解耦成兩個(gè)任務(wù):
- 第一個(gè)任務(wù)是通過(guò)P2P機(jī)制測(cè)鏈路延遲。
- 第二個(gè)任務(wù)就是通過(guò)Sync/Follow_up報(bào)文同步時(shí)鐘。
t2 - t1 = delay offset