クロック同期(クロックどうき、英語: clock synchronization)または時刻同期は、計算機科学や計算機工学の分野で、独立したコンピュータシステム間のクロック(時計)を同期させることである。システムのクロックは、最初は正確に設定されていたとしても、時間をカウントしているクロックのわずかなずれ(クロックドリフト)により、ある程度の時間が経過すると指し示す時間が異なってしまう。時計のずれの結果発生する問題と、それに対する解決策はいくつか存在する。

## 用語

シリアル通信では、クロック同期とは、完全な位相同期ではなく、周波数同期を実現するクロックリカバリを指すことがある。このようなクロック同期は、電気通信における同期や自動ボーレート検出で使用される。

プレシオクロナス(plesiochronous、準同期)やアイソクロナス(isochronous)は、周波数同期と位相同期の緩い制約を持つシステムを指す。シンクロナス(synchronous)は、同期動作は、周波数だけでなく、時間に基づいたよりタイトな同期を意味する。

## 問題

小さなスケールでの時間管理の問題として、クロックスキューに関連した問題があるが、複数のコンピュータが同じグローバルな時間を実現する必要がある分散コンピューティングでは、問題がより複雑になる。

例えば、UNIXでは、makeコマンドを実行すると、新しいコードや変更されたコードのみがコンパイルされ、変更されていないコードの再コンパイルを回避しようとする。makeコマンドは、あるソースファイルを再コンパイルする必要があるかを決定するために、実行しているマシンの時計を使用する。ソースファイルが別のファイルサーバにあり、それぞれのサーバのクロックが同期されていない場合、makeプログラムは正しい結果を生成しない可能性がある。

ストリーミングメディアを正しく再生するためには、クロック同期が必要である。クロック同期化は、Audio over Ethernetシステムの重要な要素である。

## 解決策

中央サーバを持つシステムでは、サーバがシステムの時間を決定するため、同期化の解決策は些細なものである。クリスティアンのアルゴリズムとバークレーアルゴリズムは、このような環境でのクロック同期問題に対する潜在的な解決策である。

分散コンピューティングでは、グローバルな時間が容易にはわからないため、この問題はより複雑になる。インターネット上で最も使用されているクロック同期法は、UDPでのメッセージのやり取りに基づく階層クライアント・サーバー・アーキテクチャであるNetwork Time Protocol (NTP)である。ランポートタイムスタンプとベクタークロックは、分散コンピューティングにおける論理クロックの概念である。

無線ネットワークでは、無線媒体上での同期パケットの衝突の可能性や、低コストの無線機器ではクロックのドリフト率が高くなるため、問題はさらに難しくなる。

### バークレーアルゴリズム

バークレーアルゴリズムは、電波時計などの時刻源がないシステムでも使用できるが、このシステムでできるのはグローバル時間としてグローバル平均時間を維持するだけで、実際の時間と同期させる方法はない。タイムサーバは定期的に全てのタイムクライアントから時間を取得し、その結果を平均化して、求められた平均値に合わせるためにローカルクロックを調整する必要があることをクライアントに通知する。このアルゴリズムは、内部クロックにおいて、それが指し示す時間だけでなく、クロックレートも変化するという事実に基づいている。

### CS-NMS

クロックサンプリング相互ネットワーク同期(CS-MNS、Clock-sampling mutual network synchronization)は、分散型や移動体通信への応用に適している。CS-MNSは、間接的にリンクされた非隣接ノードを含むメッシュネットワーク上でスケーラブルであることが示されており、IEEE 802.11や同様の規格と互換性がある。数マイクロ秒のオーダーまで正確に同期できるが、隣接ノード間のリンクがリンク遅延が無視できるほど(1マイクロ秒未満)の直接物理的な無線接続である必要があるため、隣接ノード間の距離が数百メートルに制限される。

### クリスティアンのアルゴリズム

クリスティアンのアルゴリズムは、タイムサーバの存在に依存している。タイムサーバは、電波時計などの正確な時間源を使用してその時刻を維持し、システム内の他の全てのコンピュータはそれに接続する。タイムクライアントは、タイムサーバへの手続き呼び出しを行うことで、そのクロックを維持する。このアルゴリズムの変種では、ネットワーク無線伝搬時間を考慮に入れることで、より正確な時間計算が可能になる。

### GPS

グローバル・ポジショニング・システム(GPS)は、ナビゲーションの他に、時計の同期にも利用できる。GPSの時間信号の精度は±10ナノ秒である。

### IRIGタイムコード

IRIGタイムコード(Inter-range Instrumentation Group time code)は、タイミング情報を転送するための標準フォーマットである。精密なタイミングのために設計された原子周波数標準やGPS受信機には、IRIG出力が装備されていることが多い。この標準は、米軍の発射場司令官協議会の標準化団体である射程間計装グループ(IRIG)の通信ワーキンググループによって作成された。この規格のための作業は1956年10月に開始され、オリジナルの規格は1960年に承認された。

### NTP

Network Time Protocol (NTP)は非常に堅牢なプロトコルで、インターネット全体で広く使用されている。長年にわたってテストされており、一般的に信頼性の低いネットワーク用の分散型時刻同期プロトコルの最先端とみなされている。このプロトコルは、インターネット上では数ミリ秒単位の時間に、LAN上ではサブミリ秒単位の時間に同期オフセットを削減することができる。ネットワーク遅延計算、コンピュータ負荷の安定度など多岐にわたる計測アルゴリズムを搭載する。時計をコンピュータ機器に反映する方式は、いくつか提案されているが実装者による選択となっている。

NTP プロトコルの簡略化されたバージョンであるSimple Network Time Protocol (SNTP) もマスタースレーブ型時刻同期プロトコルとして使用できるが、NTPの洗練された機能を欠くため、パフォーマンスと信頼性のレベルがはるかに低くなっている。SNTPは時計同期精度に関する規約はなく、実装者による設定が精度となる。

### PTP

Precision Time Protocol (PTP)は、IEEE1588に基づきLAN上で高精度で時間を配信するためのマスタースレーブプロトコルである。タイムスタンプ精度は、10マイクロ秒以下としている。ただし、IEEE1588に対応するハードウェアを搭載していない機器では、NTPと同じ程度の精度となる。

### RBS

Reference Broadcast Synchronization (RBS)アルゴリズムは、無線ネットワークやセンサーネットワークでよく使用されている。この方式では、イニシエータが参照メッセージをブロードキャストして、受信者に自分の時計を調整するように促す。

### RBIS

Reference Broadcast Infrastructure Synchronization (RBIS)プロトコルは、RBSのように、受信機=受信機同期パラダイムに基づくマスタースレーブ同期化プロトコルである。これは、インフラストラクチャモードで構成されたIEEE 802.11ワイヤレスネットワークで使用するように調整されている。このプロトコルは、アクセスポイントへの変更を必要としない。

### 同期イーサネット

同期イーサネット(Synchronous Ethernet)、何らかの同期プロトコル(ホワイトラビットプロジェクトの場合はPTP)と組み合わせることで、サブナノ秒の同期精度を実現するように、イーサネットを同期的に使用する。

### 無線アドホックネットワーク

無線アドホックネットワークでは、マルチホップで同期メッセージを送信し、各ノードが同期メッセージの直接の送信者であるノードと順次同期することで、同期を実現している。例として、Flooding Time Synchronization Protocol(FTSP)やHarmoniaがあり、いずれもマイクロ秒オーダーの精度で同期を達成することができる。