NTPと時刻同期

NTPとは

NTP(Network Time Protocol)は、ネットワーク越しにコンピュータの時計を正しい時刻へ合わせるためのプロトコルです。標準ポートは 123番、通信には [[UDP]] を使います。

コンピュータの内蔵時計は放っておくと少しずつずれます。1日に数秒でも、数か月動き続けるサーバーでは無視できない差になります。NTP は上位の正確な時刻源に問い合わせ、通信の往復時間を考慮しながら、時計を少しずつ正しい時刻へ寄せていきます。

Stratum(階層)の仕組み

NTP は時刻源を階層で管理します。この階層を Stratum(ストラタム)と呼びます。

階層内容
Stratum 0原子時計・GPS受信機など、基準となる時刻源そのもの
Stratum 1Stratum 0 に直結したサーバー。最も正確
Stratum 2Stratum 1 から時刻をもらうサーバー
Stratum 3 以降さらに下位。社内サーバーはこのあたりが一般的

数字が小さいほど基準に近く正確です。世界中に公開 NTP サーバーがあり、多くの組織は上位サーバーを参照する社内 NTP サーバーを1台置き、他のサーバーはそこを見る構成にします。

時刻がずれると何が起きるか

時刻同期は地味ですが、ずれると広範囲に障害が出ます。

  • ログの追跡ができない — 複数サーバーの [[ログ設計]] が時刻でつながらず、障害の因果関係を追えなくなる
  • 証明書の検証に失敗する — [[HTTPS・TLS]] の証明書は有効期間を時刻で判定するため、時計が大きくずれると「期限切れ」と誤判定される
  • 認証が通らない — ワンタイムパスワードや一部の認証方式は時刻に依存する
  • バッチが二重・未実行になる — 定時起動の処理がずれ、更新日時の前後関係も逆転しうる

設定と確認

[[Linux]] では従来の ntpd に加え、[[systemdとサービス管理]] に含まれる systemd-timesyncd や chrony が使われます。

timedatectl status        # 時刻同期の状態を確認
chronyc sources           # 参照している時刻源と誤差を表示

「System clock synchronized: yes」になっていれば同期できています。

初学者向けポイント

  • サーバーのタイムゾーンは UTC で統一し、表示側で日本時間に変換する運用が扱いやすい
  • 時刻を一気に飛ばす(step)と処理が二重実行されることがあるため、通常は少しずつ寄せる(slew)方式が使われる
  • 仮想マシンやコンテナは時計がずれやすい — ホスト側の同期状況もあわせて確認する

関連技術とのつながり

  • [[UDP]] — NTP は軽量な UDP 123番で通信する
  • [[ログ設計]] — 複数サーバーのログを時系列で突き合わせる前提が時刻同期
  • [[Linux]] — chrony や systemd-timesyncd による同期設定が実務の中心
  • [[systemdとサービス管理]] — 時刻同期サービスの起動・監視を担う
  • [[HTTPS・TLS]] — 証明書の有効期間判定に正しい時刻が必要
Q: NTPが使うトランスポート層のプロトコルとポート番号はどれ?
- [x] UDPの123番
- [ ] TCPの22番
- [ ] TCPの443番
解説: NTP は UDP の 123番を使います。22番は SSH、443番は HTTPS です。

Q: NTPのStratum(階層)についての説明として正しいのはどれ?
- [ ] 数字が大きいほど基準の時刻源に近く正確
- [x] 数字が小さいほど基準の時刻源に近く正確
- [ ] 数字は正確さと無関係で識別用の番号にすぎない
解説: Stratum 0 が基準となる時刻源で、そこから離れて数字が大きくなるほど誤差が積み重なります。

Q: サーバーの時刻がずれることで起きる問題として本文が挙げているのはどれ?
- [ ] ディスク容量が自動的に減る
- [x] 複数サーバーのログを時系列で突き合わせられなくなる
- [ ] ネットワーク帯域が半分になる
解説: ログの追跡不能に加え、証明書の検証失敗やバッチの二重実行など広範囲に影響します。