手当たり次第に書くんだ

飽きっぽいのは本能

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 ステータス 説明
なし reject 使えないと判断されたNTPサーバーを示す
x falsetick intersectionアルゴリズムで使えないと判断されたNTPサーバーを示す
. excess 参照するNTPサーバーが多いので使わないNTPサーバーを示す
outlyer clusterアルゴリズムで使えないと判断されたNTPサーバーを示す
+ candidat combineアルゴリズムに合格し、いつでも参照可能なNTPサーバーを示す
# selected 同期距離が遠いが参照可能なNTPサーバーを示す
* sys.peer 同期中であると宣言されたNTPサーバーを示す

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

各フィールドの意味

フィールド 説明
remote NTPサーバーのホスト名を示す
refid 参照IDを示す。CDMA同期のEndrunではCDMA、GPS同期ではGPS、不明の場合は0.0.0.0となる
st stratum値を示す
t 階層タイプを示す。l:local、u:unicast、m:multicast、b:broadcastとなる
when 最後のパケットを受け取ってからの時間(秒)を示す
poll ポーリング間隔(秒)を示す。最初は高速に同期ができるように短いポーリング間隔となるが、NTPサーバーの負荷を減らすため、時刻同期された後は徐々に長くなる
reach NTPサーバーへの直近8回分の接続結果を8ビットの8進数で示す。全て成功していれば377(2進数で11111111)となる
delay ポーリングインターバルの遅延の推定値(パケット往復時間)を示す(単位:ミリ秒)
offset NTPサーバーとのオフセット(ずれ)を示す。同期中は値が徐々に小さくなり、正確な時刻に調整される。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でトラブルがあったのであらためて調べてみた

コメントを残す

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

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

トップへ戻る