NTPのStratum階層とGPS時刻同期の仕組み

Share

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サービスを利用するのが現実的な選択である。これらのサービスは十分な精度と可用性を備えており、一般的な用途では不足を感じることはない。

Read more

青空文庫のParser

青空文庫のParser

青空文庫のParserを作ってます。 GitHub - P4suta/aozora: Pure-functional Rust parser for 青空文庫記法 (Aozora Bunko notation): ルビ, 傍点, 縦中横, 外字, 返り点, indent containers, page breaks.Pure-functional Rust parser for 青空文庫記法 (Aozora Bunko notation): ルビ, 傍点, 縦中横, 外字, 返り点, indent containers, page breaks. - P4suta/aozoraGitHubP4suta Rustで作ってますが、配布物はcargoのほかにnpm/pypiでも入手できます Documentation * Playground — try it in

By Sakashita Yasunobu

イケイケなWinスクショアプリを作りました

パソコンのスクショってなんというか、地味というか、撮ってそのままだと何とものっぺりしていますよね。 特にWindowsだとMacっぽい丸っこい感じとかもなく、無骨だなあと。 ということで、それっぽくおしゃれな背景や角丸を付けておしゃれに撮影をしてくれるスクショアプリを作りました。 GitHubで公開しています。 GitHub - P4suta/Snaply: Snaply — a modern, clean-architecture Windows screenshot tool (WinUI 3 / .NET 10)Snaply — a modern, clean-architecture Windows screenshot tool (WinUI 3 / .NET 10) - P4suta/SnaplyGitHubP4suta ウィンドウ・領域選択・スクリーンのキャプチャができます。 タッチスクリーンなどにも対応しているはずです。 撮影をすると、クリップボードにコピーされ、フォルダーへの保存もされます。

By Sakashita Yasunobu
Find My Files

Find My Files

Windowsにおける爆速ファイル検索アプリの定番といえば、Everythingです。 voidtoolswebhost2 その高速さの理由は、NTFSの仕組みをうまく活用していることにあります。Windowsで一般的に使われているNTFSには、ファイル情報を管理するマスターファイルテーブル(MFT)と、ファイルシステムの変更履歴を記録するUSN Journalがあります。Everythingはこれらを利用することで、初回に高速にファイル一覧を構築し、その後はUSN Journalを監視してリアルタイムにインデックスを更新しています。そのため、数百万ファイル規模の環境でも非常に高速な検索を実現しています。 もちろん、単純にファイル名やパスを保持するだけでは、大量のメモリを消費してしまいます。また、数百万件ものファイルから一瞬で目的のものを見つけるためには、メモリ効率の高いデータ構造や高速な検索アルゴリズムなど、さまざまな工夫が必要になります。 このように、Everythingは見た目こそシンプルですが、中身はかなり高度なことをやっているソフトウェアです。 なお、Everyth

By Sakashita Yasunobu