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では以下のメッセージタイプを使用する。メッセージはイベント("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)フィールドの内容によって、ドメインに割り当てられる。ドメインにより、同じ通信媒体上で複数のクロック分配システムを共存させることができる。
"best master clock"(BMC)アルゴリズムは、最適な候補クロックの分散選択を実行するアルゴリズムであり、次のクロック特性に基づく。IEEE 1588-2008は、以下に示す特性を基づく階層選択アルゴリズムを使用する。特性の優先度は、上から順である。IEEE 1588-2002では、同様の特性に基づく選択アルゴリズムを使用している。
クロック特性は、IEEE 1588-2002の"Sync"メッセージおよびIEEE 1588-2008の"Announce"メッセージによって広告される。現在のクロックマスターはこの情報を定期的に送信する。あるクロックが、自身が現在のクロックマスターよりも良いクロックだと判断した場合、マスタークロックを変更するためにこの情報を送信する。現在のマスターがより良いクロックを認識すると、現在のマスターは"Sync"メッセージおよび関連するクロック特性（IEEE 1588-2008の場合は"Announce"メッセージ）の送信を停止し、より良いクロックがマスターを引き継ぐ。BMCアルゴリズムは、自己宣言されたクロック品質のみを考慮し、ネットワークリンク品質を考慮に入れない。
BMCアルゴリズムを使用することで、PTPはIEEE 1588ドメインおよびドメイン内の各ネットワークセグメントのマスタータイムソースを選択する。
クロックは自身とマスターの間のオフセットを決定する。ここで、変数formula_1を物理的な時間とする。特定のスレーブデバイスについて、時間formula_1におけるオフセットformula_3は、以下のように定義される。
ここで、formula_5は物理時間formula_1においてスレーブクロックが測定した時間、formula_7は物理時間formula_1においてマスタークロックが測定した時間を表す。
マスタは現在時刻を他のクロックへのメッセージとして定期的にブロードキャストする。IEEE 1588-2002では、ブロードキャストは1秒間に1回以下である。IEEE 1588-2008では、1秒間に10回まで許容される。
各ブロードキャストは時間formula_9に始まり、"Sync"メッセージがマスターからドメイン内の全てのクロックに送信される。あるクロックがこのメッセージを受信したときの、そのクロックにおける時間をformula_10とする。
次いでマスターは、正確なformula_9のタイムスタンプを入れた"Follow_Up"メッセージをマルチキャストで送信することができる。全てのマスターが"Sync"メッセージに正確なタイムスタンプを乗せる機能を持っているわけではない。ネットワークハードウェアから"Sync"送信時の正確なタイムスタンプを取得できるのは、送信が完了した後である。このような制限のあるマスターは、formula_9の正確なタイムスタンプを"Follow_Up"メッセージを使用して伝達する。ネットワークハードウェアにPTP機能が組み込まれたマスターは、"Sync"メッセージに正確なタイムスタンプを乗せることができるので、"Follow_Up"メッセージを送信する必要はない。
マスターと正確に同期するために、クロックは"Sync"メッセージのネットワーク転送時間を個別に決定する必要がある。転送時間は、各クロックからそのマスターまでの往復時間を測定することによって間接的に決定される。クロックは転送時間formula_13を測定するために、マスターとの交換を開始する。交換は時刻 formula_14から始まり、マスターに "Delay_Req"メッセージを送信する。マスターは "Delay_Req"を受信し、その受信した時刻formula_15を記録し、そのタイムスタンプを "Delay_Resp"メッセージに含めて応答する。
これらの交換を通して、クロックはformula_9, formula_10, formula_14, formula_15を知る。
formula_13を"Sync"メッセージの転送時間、formula_21をマスタクロックとスレーブクロックの間の定数オフセットとしたとき、次式のようになる。
上記の2つの式を組み合わせると、次のようになる。
これによって、クロックはこのトランザクション中のオフセットformula_21がわかり、この値を使って自身のクロックを修正し、マスターと一致させる。
ここでは、3つのことを仮定している。1つは、このメッセージ交換が非常に小さい時間で行われるので、このオフセットはその時間にわたって一定であると考えられるということである。2つ目は、マスターからスレーブへのメッセージの転送時間が、スレーブからマスターへのメッセージの転送時間に等しいということである。3つ目は、マスターとスレーブの両方が、メッセージを送受信する時間を正確に測定できるということである。これらの仮定が成り立つ度合いによって、スレーブデバイスでのクロックの精度が決まる。
IEEE 1588-2008規格では、実装で対応される可能性のある以下の機能がリストされている。