Contents
近頃、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でトラブルがあったのであらためて調べてみた