【初心者向け】時刻同期101 - PTP の基本動作 

#はじめに
この記事は、シスコシステムズの有志による [Cisco Systems Japan Advent Calendar 2020](https://qiita.com/advent-calendar/2020/cisco) の 13 日目として投稿しています。

2017 年版: https://qiita.com/advent-calendar/2017/cisco
2018 年版: https://qiita.com/advent-calendar/2018/cisco
2019 年版: https://qiita.com/advent-calendar/2019/cisco
2020 年版: [その 1](https://qiita.com/advent-calendar/2020/cisco), [その 2](https://qiita.com/advent-calendar/2020/cisco)

全然プログラミングや自動化と関係ないトピックで恐縮ですが、最近勉強している PTP についてご紹介します。

#目次

1. PTP とは？
    2. なんで PTP ? PTP の何が良いの?
2. ITU-T G.8275.1
    3. ITU-T テレコム PTP プロファイル
    4. G.8275.1 の動作
    3. Slave の位相同期の仕組み
4. 最後に

#PTP (Percision Time Protocol)とは?
PTP は IEEE 1588-2019 で定義されたクロック同期のためのプロトコルで、高精度な時刻同期を必要とするネットワークを同期するために使用されています。

特に高速大容量や低遅延な性能が求められる 5G ネットワークでは時刻同期も重要な要件となるため、要件を満たすための技術として PTP が注目されています。
※5G ネットワークにおける時刻同期については[こちら](https://www.google.com/url?sa=t&rct=j&q=&esrc=s&source=web&cd=&ved=2ahUKEwii5-ClrMrtAhXZxosBHQbEA3AQFjAAegQIAxAC&url=https%3A%2F%2Fgblogs.cisco.com%2Fjp%2F2019%2F12%2Fservice-provider-end-to-end-architecture-2-transport-technology-for-5g-2%2F&usg=AOvVaw1_wmFgQgbChpQlso7ywXLw)をご覧ください。

次に PTP で時刻同期をする際の典型的な例を紹介します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/496362/232c65ab-a63f-f2a9-7dda-f3fe92a74f5d.png)

- Telecom Grandmaster (T-GM)：他のネットワークデバイスに PTP を配信する。
- Telecom Boundary Clock (T-BC)：ローカルクロックを T-GM または上流の T-BC クロックに同期させ、下流 T-BC または T-TSC クロックに PTP を配信する。
- Telecom Time Slave Clock (T-TSC)：Slave クロックは、ローカルクロックを別の PTP クロックに同期させるが、他のネットワーク デバイスには PTP を配信しない。
- Transparent clock(T-TC)：PTPパケットを認識するが、そのまま透過させる。PTP アナウンスメッセージを透過する。  

<br>
今この絵を見ても何のことだかよくわからないと思いますが、この記事を最後まで読んでいただけたら

- どの機器が何をしているか
- どのようにして Master-Slave 間でクロックを同期しているか

が理解できると思います。

マニアックな内容ですが、お楽しみいただけますと幸いです。

##なんで PTP ? PTP の何が良いの?
PTP はハードウェアでタイムスタンプ処理を行うため、ナノ秒レベルでの時刻同期を実現します。
一方、古くから使われている NTP (Network Time Protocol) はソフトウェアでタイムスタンプ処理を行うため、ミリ秒レベルに留まります。
現在のモバイルネットワークで求められる性能(±1.5マイクロ秒)に対応しなければならないため、PTP が必要になります。

また PTP には Boundary Clock(BC) と呼ばれるクロックがあり、基準とのズレや配信遅延を検知し補正します。
BC は上流クロックから受信したタイミングを一旦終端して、BC機器内で位相同期を調整して下流クロックへ PTP を再配信します。
これによりエンドツーエンドで位相を合わせることが可能になります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/496362/a38d0be4-4ce7-7500-a5fd-04e73d133b8e.png)



#ITU-T G.8275.1
##ITU-T テレコム PTP プロファイル
このように PTP は高精度な時刻同期を実現することから、モバイルネットワークだけではなく、産業用オートメーションから放送、自動車等、幅広い分野で使用されています。
それぞれのユースケースに合わせて様々な PTP のプロファイルが作成されていますが、今回は、ITU が通信産業向けに ITU-T 勧告として規定したテレコムプロファイルを紹介します。
※ITU = 国際電気通信連合
※ITU-T = 電気通信標準化部門

テレコム PTP プロファイルでは、時刻同期情報の配布方法に加え、達成すべき同期品質や測定方法の内容も策定されています。
<br>
さらに ITU-T のテレコム PTP プロファイルは3つ規定されており、ITU-T の各プロファイルで転送手順も異なります。

- G.8265.1: ネットワークが **PTP 未対応**の機器で構成されており、**IP** で PTP を伝搬する場合に使用されるプロファイル
- G.8275.1: ネットワークが **PTP 対応**の機器で構成されており、**Ethernet** で PTP を伝搬する場合に使用されるプロファイル
- G.8275.2: ネットワークに **PTP 対応と未対応の機器が混在**しており、**IP** で PTP を伝搬する場合に使用されるプロファイル

各プロファイル間は互換性がないので、使用する PTP プロファイルを統一するか、混在する場合はプロファイル変換が必要です。

##G.8275.1 プロファイル

今回は、全ての中継機器が PTP 対応機器である場合に使用される **G.8275.1** プロファイルについて詳しく紹介します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/496362/43434a71-7e84-d6d1-a299-968080cccb0a.png)

全ての中継機器が PTP 対応機器で構成するネットワークで使用されるため、Full Timing Support (FTS) あるいは Full on pathと呼ばれます。

###G.8275.1 の動作
機器間では下図のように Master と Slave の関係を構築します。
PTP アナウンスメッセージによりSlave が Master に合わせて同期網を構築し、Master はクロック間のズレ (offset) や 伝搬遅延 (delay) を検知し補正しながらタイムスタンプメッセージを下流に伝送します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/496362/3216b3c0-27ed-36b8-5cab-63fad7afc882.png)

※中継機器に PTP 対応機器と非対応機器が混在している場合
PTP 対応機器の場合は PTP のメッセージを理解し処理することができますが、非対応機器の場合は PTP を他のパケットやフレームのように処理してしまいます。そのため非対応機器が混ざっている場合は、G.8275.2を使用します。


エンドツーエンドで時刻を同期するため、各機器は次のように動作します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/496362/be79a240-9ad8-f180-5bb2-2102e7804e52.png)

1. PTP の最上位マスターノード。PRTC で得た UTC に対して ±100 [ns] 以下の精度の周波数と位相をネットワークに配信する。
2. 時刻を上流クロックに合わせる。Slave ポートで受信した PTP を元にジッタとPDV(Packet Delay Variation)をクリーンアップし、Master ポートから下流に PTP を配信する。
3. 下流の T-BC の遅延計算の参考情報として、T-TC で受信してから送信するまでの装置内遅延を送信する。PTP のアナウンスメッセージを処理せずそのまま転送するので、Master-Slaveの関係は構築しない。
4. 2と同様に動作する。
5. 終端装置なので、他の機器には PTP を配信しない。


###Slave の位相同期の仕組み
Slave が Master とのクロックのズレ (offset) や伝送遅延 (delay) を検知して補正する仕組みを説明します。
Slave は Master とタイムスタンプをやりとりして、offset を求めます。
<br>
タイムスタンプの送り方には、次の 2 つのモードがあります。

- One-step: Sync メッセージにタイムスタンプ(t1)を含めて送信
- Two-step: タイムスタンプ(t1)を Follow_Upメッセージに含めて送信
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/496362/ee5f78af-53db-05d8-561d-318f3af401b7.png)

今回は Two-step モードでタイムスタンプを送った時の例で、offset を計算してみます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/496362/e72aba41-c703-f279-872b-f51aba8f25be.png)

**Offset = t2-t1 - meanPathDelay**
※meanPathDelay = 平均伝送遅延

G.8275.1 のベースとなっている IEEE1588-2008 は Master-Slave 間の伝送遅延は同じであることを前提としているため、Master-Slave 間の平均伝送遅延は下記のように求まります。
**meanPathDelay = ((t2-t1) + (t4-t3))/2**
<br>
この例だと平均伝送遅延と offset は下記のように求められます。

- Mean Path Delay = ((t2 - t1) + (t4 - t3)) / 2 = (-18 + 22) / 2 = 2
- Offset = t2 - t1 - Mean Path Delay  = 82 - 100 - 2   = -20

よって、Slave は Master に対して 20 秒遅れていると考え、Slaveは自身のクロックを 20 秒加算します。
<br>
このように、Slave は offset 用いて 自身のクロックを調整します。

※One-step の場合、Sync メッセージに t1 のタイムスタンプが含まれているため、Follow Up のメッセージは送信されません。

#最後に

ここまで PTP とは何ぞや? という所から、PTP の基本的な動作をご紹介してきました。
最初の注釈なしの図を見て、なんとなく各機器の挙動が頭に浮かぶようになりましたでしょうか?

本当は PTP の設定コマンドや動作確認結果まで記事にしたかったのですが、環境の準備が間に合いませんでした。
ハードウェアで処理される機能のため、PTP は仮想環境ではサポートされていないということに気付きました。。。:sob:

実機の準備が出来たら、設定コマンドや動作確認方法についての記事も書きたいと思います。
マニアックすぎて自分でも需要があるのかちょっと疑問ですが、少しでもお役に立てたら幸いです。

それでは良いクリスマスを！

#免責事項
本サイトおよび対応するコメントにおいて表明される意見は、投稿者本人の個人的意見であり、シスコの意見ではありません。本サイトの内容は、情報の提供のみを目的として掲載されており、シスコや他の関係者による推奨や表明を目的としたものではありません。各利用者は、本Webサイトへの掲載により、投稿、リンクその他の方法でアップロードした全ての情報の内容に対して全責任を負い、本Web サイトの利用に関するあらゆる責任からシスコを免責することに同意したものとします。