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

1Passwordを閉じるボタンが……ねえ!

1Passwordを使っていたら、いつの間にかウィンドウの 閉じる/最小化/最大化ボタンが消えていた。Ctrl+Wでウィンドウ自体は閉じられるので長らく放置していたけれど、調べてみたら原因がしょうもなかったので共有しておく。 💡結論 F11を押してみよう 症状 * ウィンドウ右上の最小化・最大化・閉じるボタンが表示されない * タイトルバーも消えている * Ctrl+W では普通に閉じられる * PC再起動、1Passwordの終了・再起動、アンインストール → 再インストール、いずれも変化なし 原因 ただフルスクリーンモードに入っていただけ。 1Passwordコミュニティの投稿「Lost window minimize buttons top rhc.」で全く同じ症状が報告されていて、コミュニティマネージャーの回答が「F11でフルスクリーンを切り替えてみて」だった。 解決手順 1. 1Passwordのウィンドウをクリックしてフォーカスを当てる 2. F11 を押す これでタイトルバーとボタン類が戻ってくる。ダメな場合は Win + ↓(ウィン

By Sakashita Yasunobu

外字と訓点を compile-time hash で解く

aozora は青空文庫の外字参照 (※[#「魚+師」、第3水準1-94-37] のような形) を約 14,000 件のテーブルで解決する。このテーブルを runtime の HashMap ではなく phf (perfect hash function) で持ち、コンパイル時に static 配列に焼き込んでいる。この記事はその選択の根拠と、JIS X 0213 → Unicode フォールバックの設計をまとめたもの。 handbook の対応章: Shift_JIS + 外字 resolver。 外字テーブルの形 外字エントリには 3 種類の解決結果があり、それぞれに対応する variant を GaijiEntry に持たせている。 static GAIJI_TABLE: phf::Map<

By Sakashita Yasunobu

青空文庫の .txt を HTML に変換する最短手順

青空文庫 で配布されている .txt ファイルを HTML に変換したい、という用途向けの手順。Rust の知識は要らない。コマンド 1 行で済む。 1. CLI バイナリを取ってくる aozora の Releases ページ から自分の OS 向けのアーカイブを落とす。 OS アーカイブ名 Linux x86_64 aozora-vX.Y.Z-x86_64-unknown-linux-gnu.tar.gz macOS arm64 aozora-vX.Y.Z-aarch64-apple-darwin.tar.gz Windows x86_64 aozora-vX.Y.Z-x86_64-pc-windows-msvc.zip SHA256SUMS も同梱されているので、

By Sakashita Yasunobu