Precision Time Protocol

**Precision Time Protocol** (**PTP**)は、コンピュータネットワーク全体でクロックを同期させるために使用される通信プロトコルである。

Local Area Network(LAN)においてマイクロ秒以下の精度のクロック同期を達成し、測定や制御システムにも使用できるようにする。PTPは現在、金融取引、携帯電話の基地局、海底音響アレイ、および正確なタイミングを必要とするが衛星ナビゲーション信号を使用できないネットワークの同期に使用されている。

PTPは当初、2002年に発行された**IEEE 1588-2002** *"Standard for a Precision Clock Synchronization Protocol for Networked Measurement and Control Systems"（ネットワーク化された測定および制御システムのための精密クロック同期プロトコルの規格）*において定義された。2008年に、改訂規格 **IEEE 1588-2008**がリリースされた。これは「PTPバージョン2」とも呼ばれ、精度や堅牢性を向上させたが、元の2002年バージョンとの下位互換性はない。

「IEEE 1588は、NTPとGPSという2つの主要プロトコルのどちらでもうまく機能しないニッチを埋めるように設計されている。IEEE 1588は、NTPの使用で達成可能なものを超える精度を必要とするローカルシステム用に設計されている。また、各ノードでGPS受信機のコストを負担できない、またはGPS信号にアクセスできないアプリケーション向けにも設計されている。」

## アーキテクチャ
IEEE 1588規格は、クロック分配のための階層的マスタースレーブアーキテクチャとして定義されている。このアーキテクチャでは、時間配信システムは1つ以上の通信媒体（ネットワークセグメント）と1つ以上のクロックで構成されている。*ordinary clock*（通常クロック）は、単一のネットワーク接続を持つデバイスで、同期基準の発信元（マスター）または宛先（スレーブ）のいずれかである。*boundary clock*（境界クロック）は、複数のネットワーク接続を持ち、あるを別のネットワークセグメントに正確に同期させることができる。システム内の各ネットワークセグメントに対して同期マスターが選択される。ネットワーク内において高精度な時刻を持つデバイスをグランドマスターに指定する。グランドマスターは、そのネットワークセグメント上にあるクロックに同期情報を送信する。セグメント上に存在する境界クロックは、接続されている他のセグメントに正確な時間を中継する。

単純化PTPシステムは、単一のネットワークに接続された通常クロックからなり、境界クロックは使用されない。クロックの中からグランドマスターが選出され、他の全てのクロックはそれに直接同期する。

IEEE 1588-2008では、PTPメッセージの伝達に使用されるネットワーク機器に関連する新たな種類のクロックが導入されている。*transparent clock（透過クロック）*は、デバイスを通過するときにPTPメッセージを変更する。ネットワーク機器を通過するのに費やされた時間によってメッセージ内のタイムスタンプが修正される。この方式では、ネットワーク全体のパケット遅延変動を補正することで、配信の正確性が向上する。

PTPは通常、UNIX時間と同じエポック（1970年1月1日）を使用する。UNIX時間は協定世界時(UTC)に基づいており閏秒の影響を受けるが、PTPは国際原子時(TAI)に基づいており、閏秒の影響を受けない。PTPグランドマスターは現在のUTCとTAIの差分を通知するので、受信した時間からUTCは計算できる。

## プロトコルの詳細
PTPシステムにおける同期と管理は、通信媒体を介してメッセージを交換することによって行われる。PTPでは以下のメッセージタイプを使用する。

* *Sync,* *Follow_Up,* *Delay_Req,* *Delay_Resp* - 通常クロックと境界クロックが使用し、クロックを同期するための時間関連の情報を通信する。
* *Pdelay_Req*, *Pdelay_Resp,* *Pdelay_Resp_Follow_Up* - 透過クロックが、通信媒体による遅延を測定するために使用する。透過クロックとそれに関連するこれらのメッセージは、IEEE 1588-2002では使用できない。
* *Announce* - IEEE 1588-2008のBMCA（後述）において、クロック階層を構築してグランドマスターを選択するために使用する。
* *Management* - PTPシステムの監視・設定・維持（ネットワーク管理）のために使用する。
* *Signaling* - クロック間のタイムクリティカルではない通信に使用される。このメッセージはIEEE 1588-2008で導入された。

メッセージはイベント(*event*)メッセージと一般(*general*)メッセージに分類される。イベントメッセージはタイムクリティカルである。これは、送信と受信のタイムスタンプの正確さの正確さが直接クロック分配の正確さに影響するためである。*Sync*, *Delay_Req*, *Pdelay_Req*, *Pdelay_resp* はイベントメッセージである。一般メッセージは、メッセージ内のデータがPTPにとって重要であるという点でより典型的なProtocol Data Unitであるが、その送信・受信タイムスタンプは重要ではない。*Announce*, *Follow_Up*, *Delay_Resp*, *Pdelay_Resp_Follow_Up*, *Management*, *Signaling*は一般メッセージである。

### メッセージ転送
PTPメッセージは、メッセージの伝送にUser Datagram Protocol over Internet Protocol(UDP/IP)を使用する。IEEE 1588-2002はIPv4のみを使用するが、IEEE 1588-2008ではIPv6でも使用できるように拡張されている。IEEE 1588-2002では、全てのPTPメッセージがマルチキャストで送信されるが、IEEE 1588-2008では、デバイスがポート単位でユニキャスト送信をネゴシエートするためのオプションが導入された。マルチキャスト送信では、IPマルチキャストアドレスが使用される。IPマルチキャストアドレスでは、IPv4およびIPv6に対してマルチキャストグループアドレスが定義されている（表を参照）。イベントメッセージはポート番号319、一般メッセージはポート番号320を使用する。

IEEE 1588-2008では、カプセル化がDeviceNet、ControlNet、PROFINETに対して定義されている。

### ドメイン
ドメインは、PTPを使用して互いに同期し相互作用するクロックのセットである。クロックは、受信または生成するPTPメッセージ内の*Subdomain_name*(IEEE 1588-2002)または*domainNumber*(IEEE 1588-2008)フィールドの内容によって、ドメインに割り当てられる。ドメインにより、同じ通信媒体上で複数のクロック分配システムを共存させることができる。

## BMCA
best master clock algorithm(BMCA)は、最適な候補クロックの分散選択を実行するアルゴリズムであり、次のクロック特性に基づく。

* 識別子 - 個々のクロックにユニークに設定された数値識別子。通常、デバイスのMACアドレスに基づいて設定される。
* 品質 - データフィールド*stratumを*知っているのはV1(IEEE 1588-2002)だけであるが、IEEE 1588のどちらのバージョンでも、予想されるタイミング偏差、クロックの実装に用いられている技術、クロック階層(clock stratum)スキーマにおける位置に基づいてクロック品質を定量化する。PTP V2(IEEE 1588-2008)では、データフィールド*clockAccuracy*, *clockClass*を使用して、クロックの全体的な品質を定義する。
* 優先度 PTPドメインの*グランドマスター*を選択するためにBMCAによって使用される、管理上割り当てられた優先順位のヒント。IEEE 1588-2002では、優先順位を示すために単一のブール変数を使用する。IEEE 1588-2008では、2つの8ビット優先度フィールドがある。
* 分散 - PTPの基準に対するパフォーマンスの観察に基づいた、クロックの安定性の見積もり。

IEEE 1588-2008は、以下に示す特性を基づく階層選択アルゴリズムを使用する。特性の優先度は、上から順である。

# 優先度1 - ユーザーは各クロックに優先順位を固定的に割り当てることができる。数値が小さいほど優先順位が高くなる。
# クラス - 各クロックは特定のクラスのメンバーであり、各クラスは独自の優先順位を取得する。
# 正確さ - クロックとUTCの間の精度（ナノ秒(ns)単位）
# 分散 - クロックのばらつき
# 優先度2 - 他の基準では決定できなかった場合に使用する、最終定義の優先順位。数値が小さいほど優先順位が高くなる。
# 一意の識別子 - 他の全ての特性が等しい場合は、MACアドレスに基づいて決定される。

IEEE 1588-2002では、同様の特性に基づく選択アルゴリズムを使用している。

クロック特性は、IEEE 1588-2002の*Sync*メッセージおよびIEEE 1588-2008の*Announce*メッセージによって広告される。現在のクロックマスターはこの情報を定期的に送信する。あるクロックが、自身が現在のクロックマスターよりも良いクロックだと判断した場合、マスタークロックを変更するためにこの情報を送信する。現在のマスターがより良いクロックを認識すると、現在のマスターは*Sync*メッセージおよび関連するクロック特性（IEEE 1588-2008の場合は*Announce*メッセージ）の送信を停止し、より良いクロックがマスターを引き継ぐ。BMCAは、自己宣言されたクロック品質のみを考慮し、ネットワークリンク品質を考慮に入れない。

## 同期
BMCAを使用することで、PTPはIEEE 1588ドメインおよびドメイン内の各ネットワークセグメントのマスタータイムソースを選択する。

クロックは自身とマスターの間のオフセットを決定する。ここで、変数tを物理的な時間とする。特定のスレーブデバイスについて、時間tにおけるオフセットo(t)は、以下のように定義される。

:\ o(t) = s(t) - m(t)

ここで、s(t)は物理時間tにおいてスレーブクロックが測定した時間、m(t)は物理時間tにおいてマスタークロックが測定した時間を表す。

マスタは現在時刻を他のクロックへのメッセージとして定期的にブロードキャストする。IEEE 1588-2002では、ブロードキャストは1秒間に1回以下である。IEEE 1588-2008では、1秒間に10回まで許容される。

各ブロードキャストは時間T_1に始まり、*Sync*メッセージがマスターからドメイン内の全てのクロックに送信される。あるクロックがこのメッセージを受信したときの、そのクロックにおける時間をT_1'とする。

次いでマスターは、正確なT_1のタイムスタンプを入れた*Follow_Up*メッセージをマルチキャストで送信することができる。全てのマスターが*Sync*メッセージに正確なタイムスタンプを乗せる機能を持っているわけではない。ネットワークハードウェアから*Sync*送信時の正確なタイムスタンプを取得できるのは、送信が完了した後である。このような制限のあるマスターは、T_1の正確なタイムスタンプを*Follow_Up*メッセージを使用して伝達する。ネットワークハードウェアにPTP機能が組み込まれたマスターは、*Sync*メッセージに正確なタイムスタンプを乗せることができるので、*Follow_Up*メッセージを送信する必要はない。

マスターと正確に同期するために、クロックは*Sync*メッセージのネットワーク転送時間を個別に決定する必要がある。転送時間は、各クロックからそのマスターまでの往復時間を測定することによって間接的に決定される。クロックは転送時間dを測定するために、マスターとの交換を開始する。交換は時刻 T_2から始まり、マスターに *Delay_Req*メッセージを送信する。マスターは *Delay_Req*を受信し、その受信した時刻T_2'を記録し、そのタイムスタンプを *Delay_Resp*メッセージに含めて応答する。

これらの交換を通して、クロックはT_1, T_1', T_2, T_2'を知る。

dを*Sync*メッセージの転送時間、\tilde{o}をマスタクロックとスレーブクロックの間の定数オフセットとしたとき、次式のようになる。

:\ T_1' - T_1 = \tilde{o} + d \text{ and } \ T_2' - T_2 = - \tilde{o} + d

上記の2つの式を組み合わせると、次のようになる。

:\tilde{o} = \frac 1 2 (T_1'-T_1-T_2'+T_2)

これによって、クロックはこのトランザクション中のオフセット\tilde{o}がわかり、この値を使って自身のクロックを修正し、マスターと一致させる。

ここでは、3つのことを仮定している。1つは、このメッセージ交換が非常に小さい時間で行われるので、このオフセットはその時間にわたって一定であると考えられるということである。2つ目は、マスターからスレーブへのメッセージの転送時間が、スレーブからマスターへのメッセージの転送時間に等しいということである。3つ目は、マスターとスレーブの両方が、メッセージを送受信する時間を正確に測定できるということである。これらの仮定が成り立つ度合いによって、スレーブデバイスでのクロックの精度が決まる。

## オプション機能
IEEE 1588-2008規格では、実装で対応される可能性のある以下の機能がリストされている。

* 代替タイムスケール
* グランドマスタークラスター
* ユニキャストマスター
* 代替マスター
* パストレース

## 関連項目
* 
* 

## 脚注

## 出典