手当たり次第に書くんだ

飽きっぽいのは本能

NTP でトラブルがあったのであらためて調べてみた

近頃、NTP に関するトラブルに遭遇したため、あらためて NTP について調べてみました。

NTP とは

概要

  • Network Time Protocol の略
  • ネットワークに接続される機器が持つ時計を正しい時刻へ同期するための通信プロトコル

バージョン

  • 2010 年 6 月に最新バージョンの NTP4 が RFC の Proposed Standard(RFC 公開後のインターネット標準化過程の最初の段階)となった

時刻同期の仕組み

  • NTP プロトコル上では、協定世界時 (UTC) を使って時刻を送受信する
  • 上位の NTP サーバーとのネットワーク通信の遅延を継続的に計測し、受け取った時刻情報を補正して自動的にミリ秒単位の精度で時計を校正する

階層構造

  • NTP は stratum (stratum1-16) と呼ばれる階層構造を持ち、最上位のサーバーが正確な時計から標準時を取得して下位のホストはそれを参照する事で時刻を合わせる
  • 最上位の NTP サーバーが stratum1 となり、階層を下りるごとに数字が一つずつ大きくなる。最下位の stratum16 には時刻同期することはできない
  • stratum1 の NTP サーバーは、GPS や標準電波、原子時計などの正確な時刻源 (stratum0) に直結されている
  • 一般的に stratum の大きさよりも、NTP サーバーとのネットワーク的な近さのほうが時刻精度に大きく影響する
  • ntpd は下位 stratum の NTP サーバーとも接続することができる

時刻同期の確認

Linux、または組み込み Linux を使用したアプライアンス等では、多くの場合、ntpd が標準的に使用されています。

時刻同期状態の確認

ntpd では、ntpq -p コマンドで時刻同期状態を確認できます。下記はさくらの VPS での出力例です。

[root@centos ~] # ntpq -p

remote refid st t when poll reach delay offset jitter
==============================================================================
*ntp1.sakura.ad. 10.84.87.146 2 u 844 1024 377 0.828 0.226 0.108

Tally Code

先頭の記号は Tally Code と言います。Tally Code は自分が判断した相手先のステータスを示します。次にステータスの意味を示します。

Tally Codeステータス説明
nonereject使えないと判断された NTP サーバー
xfalsetickintersection アルゴリズムで使えないと判断された NTPサーバー
.excess参照する NTP サーバーが多いので使わない NTP サーバー
outlyercluster アルゴリズムで使えないと判断された NTP サーバー
+candidatcombine アルゴリズムに合格し、いつでも参照可能な NTP サーバー
#selected同期距離が遠いが参照可能な NTP サーバー
*sys.peer同期中であると宣言された NTP サーバー
Tally Code

上記に示したとおり、正常に同期できていればステータスが sys.peer になります。数時間、他の状態である場合は調査が必要です。

各フィールドの意味

フィールド説明
remoteNTP サーバーのホスト名
refid参照 ID。CDMA 同期の Endrunで は CDMA、GPS 同期では GPS、不明の場合は 0.0.0.0 となる
ststratum 値
t階層タイプを示す。l:local, u:unicast, m:multicast, b:broadcast となる
when最後のパケットを受け取ってからの時間(秒)を示す
pollポーリング間隔(秒)を示す。最初は高速に同期ができるように短いポーリング間隔となるが、NTP サーバーの負荷を減らすため、時刻同期された後は徐々に長くなる
reachNTP サーバーへの直近 8 回分の接続結果を 8 ビットの 8 進数で示す。全て成功していれば 377(2 進数で 11111111)となる
delayポーリングインターバルの遅延の推定値(パケット往復時間)を示す(単位:ミリ秒)
offsetNTP サーバーとのオフセット(ずれ)を示す。同期中は値が徐々に小さくなり、正確な時刻に調整される。10 ミリ秒以下なら問題はない(単位:ミリ秒)
jitterオフセット値の分散を示す。値が小さいほど正確な時刻同期が可能になる。10 ミリ秒以下なら問題はない(単位:ミリ秒)
各フィールドの意味

余談

たまに Catalyst(Cisco 製のスイッチ)は NTP サーバーになることができないと言っている人に会いますが、Catalyst がなれないのは自身のローカルクロックを提供する NTP サーバーになれないだけで、Catalyst が他の NTP サーバーを参照して時刻同期できていれば、その同期した時刻を提供する NTP サーバーとして動作しています。たぶん、ntp master コマンドが使えないのでそう思っているだけだと思います。Cisco の ntp master コマンドは ntpd で server 127.127.1.0 と設定(自身のローカルクロックを提供)した場合の動作と同等です。ちなみに最近の新しい Catalyst(3650 等)、Nexus は ntp master コマンド を使用することができます。IOSではないからだと思います。

NTP でトラブルがあったのであらためて調べてみた

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

トップへ戻る