NTPのStratum階層とGPS時刻同期の仕組み
Windowsの時刻がずれやすいと感じたことをきっかけに、NTPの仕組みやStratum階層、GPSを用いた時刻同期について調べた内容をまとめる。
NTPとは
NTP(Network Time Protocol)は、ネットワーク上の機器間で時刻を同期するためのプロトコルである。現在広く使われているのはNTPv4(RFC 5905)で、1985年の初版から改良が重ねられている。
NTPはStratum(階層)と呼ばれるツリー構造で時刻を配信する。上位の正確な時刻源から下位へ順に同期することで、ネットワーク全体の時刻精度を維持している。
Stratum階層
NTPのStratum階層は以下のように定義される。
- Stratum 0 : 基準時刻源そのもの。原子時計やGPS受信機などのハードウェアデバイスが該当する。Stratum 0はネットワーク上のサーバではなく、シリアルポートやUSBなどでStratum 1サーバに直接接続される
- Stratum 1 : Stratum 0に直接接続されたNTPサーバ。プライマリタイムサーバとも呼ばれる
- Stratum 2以降 : 上位のStratumサーバに同期するサーバ。数字が大きくなるほど基準時刻源から離れており、累積する遅延やジッタの影響を受けやすくなる
- Stratum 16 : RFC 5905において「未同期」を意味する特別な値。有効なStratumは0から15までであり、Stratum 16のサーバは同期が確立されていないことを示す
一般的に、Stratumの数値が小さいほど基準時刻源に近く、精度が高い傾向にある。ただし、Stratumはあくまで基準時刻源からのホップ数を示す指標であり、ネットワーク品質やサーバの構成によっては、Stratumが低いからといって必ずしも最終的な同期精度が優れるとは限らない。
GPSが時刻源になる理由
GPS衛星は軌道上で正確に位置を特定し測位信号を送信する必要があるため、各衛星に原子時計が搭載されている。GPS受信機はこの信号から高精度な時刻情報を取得できる。
GPSによる測位の仕組みも時刻に基づいている。GPS受信機は複数の衛星から受信した信号の到達時間差を利用して、各衛星までの距離を算出し、三辺測量(trilateration)の原理で自身の位置を特定する。つまり、GPSとは本質的に「高精度な時刻配信システム」であり、測位はその応用にすぎない。
このため、GPS受信機はNTPにおけるStratum 0の基準時刻源として利用できる。GPS受信機をコンピュータに接続し、gpsdやchronyなどのソフトウェアで構成すれば、そのコンピュータはStratum 1のNTPサーバとして機能する。
Windowsの時刻ずれ
Windowsは既定でtime.windows.comをNTPサーバとして使用する。時刻のずれが生じる原因としては、同期の頻度や精度の設定が一般的なユースケース向けに最適化されていることが挙げられる。Windowsの時刻同期サービス(W32Time)はもともとKerberos認証の要件を満たす程度の精度を想定しており、高精度な時刻同期を目的として設計されたものではない。
NTPサーバをより信頼性の高いものに変更することで、ある程度の改善が期待できる。
Cloudflare Time Service
Cloudflareは無料の公開NTPサービスとして time.cloudflare.com を提供している。世界中に分散されたエニーキャストネットワークを活用しており、地理的に最も近いサーバから時刻を取得できる。NTPに加えて、NTS(Network Time Security)にも対応しており、時刻同期の安全性を高められる点が特徴である。
自作Stratum 1サーバについて
前述の通り、GPS受信機をコンピュータに接続してNTPサーバを構成すれば、原理上はStratum 1サーバを自作できる。しかし、実用上考慮すべき点がある。
- GPS信号の受信には屋外にアンテナを設置するか、窓際など空が見える環境が必要になる
- 安定した運用には、受信機の品質、ソフトウェアの適切な設定、継続的なメンテナンスが求められる
- 自分だけが利用するNTPサーバにこうした構成を組む費用対効果は高くない
個人利用においては、Cloudflareやpool.ntp.orgなどの実績ある公開NTPサービスを利用するのが現実的な選択である。これらのサービスは十分な精度と可用性を備えており、一般的な用途では不足を感じることはない。