Network Time Protocol
接続されているstratum 0デバイスの数マイクロ秒以内にシステム時刻が同期されているコンピュータである。stratum 1サーバは、サニティーチェックやバックアップのために、他のstratum 1サーバとピアすることができる。プライマリ・タイムサーバとも呼ばれる。
また、ルーターやスイッチングハブなどのネットワーク機器にNTPサーバが搭載される場合がある。もともとは高級なネットワーク機器に搭載される機能であったが、ネットワーク普及に伴う機器の低価格化により、2000年代後半には民生用のネットワーク機器においてもNTPサーバが搭載されている。
一般的なNTPクライアントは、1つ以上のNTPサーバに対してポーリングを行う。クライアントは、タイムオフセットとラウンドトリップタイムを計算する。
タイムオフセット θ は、クライアントとサーバのクロック間の絶対時間の差であり、次式で計算される。
θ = ( t 1 − t 0 ) + ( t 2 − t 3 ) 2 {\displaystyle \theta ={(t_{1}-t_{0})+(t_{2}-t_{3}) \over 2}}
ラウンドトリップタイム δ は、パケットの往復時間からサーバの処理時間を引いたものであり、次式で計算される。
δ = ( t 3 − t 0 ) − ( t 2 − t 1 ) {\displaystyle \delta ={(t_{3}-t_{0})-(t_{2}-t_{1})}}
ここで、
t0 は、クライアントがサーバへリクエストを送信した時刻
t1 は、サーバがクライアントのリクエストを受信した時刻
t2 は、サーバがクライアントへレスポンスを送信した時刻
t3 は、クライアントがサーバのレスポンスを受信した時刻
である。
θとδの値はフィルタを通過し、統計的分析が行われる。外れ値は破棄され、残りの候補の中で最も優れた3つの候補から時間オフセットの推定値が導出される。その後、オフセットが徐々に減少するようにクロック周波数が調整され、フィードバックループを形成する。
正確な同期化は、往路と復路の通信時間がほぼ等しい場合に達成される。両者に差がある場合は、その差の2分の1が誤差になる可能性がある。極端な例では、通信の往復に合計10秒掛かった場合に最大で約5秒の誤差が発生する。
NTPのリファレンス実装は、プロトコルとともに20年以上にわたって継続的に開発されてきた。新しい機能が追加されても、後方互換性が維持されてきた。これには、特にクロックを規律するためのいくつかの繊細なアルゴリズムが含まれており、異なるアルゴリズムを使用しているサーバに同期させると誤動作する可能性がある。このソフトウェアは、パーソナルコンピュータを含むほぼ全てのプラットフォームに移植されている。UNIXではntpd(英語版)というデーモンとして、Windowsではサービスとして動作する。基準クロックにも対応しており、そのオフセットはリモートサーバと同じようにフィルタリングされ、分析されるが、通常はより頻繁にポーリングされる。この実装は2017年に検査され、多数の潜在的なセキュリティ問題が発見された。
NTPプロトコル上では協定世界時 (UTC) を使って時刻を送受信する。
NTPサーバプログラムが他のNTPサーバに接続すると、上位NTPサーバとのネットワーク通信の遅延を継続的に計測し、受け取った時刻情報を補正して自動的にミリ秒単位の精度で自機・OSの時計を校正する。このほか後述するように自機・OSの時計の進み遅れ度合いも校正したり、他のNTPサーバからの問い合わせに応えて時刻も提供する機能が実装されることがある。