参考サイト
NTP
UDPポートの123番を使用する。
各機器が持つ時計(RTC)の時刻が機器間で異なると、時刻に依存したデータに整合性が取れなくなる。
Time Protocolは、機器のRTCを古典的な方法として合わせる方法。
Time Protocolを用いて取得した時刻値には、サーバから機器に時刻値が到達するまでの通信時間が含まれないため、通信時間に起因する遅れの誤差が含まれる。
NTPは通信時間による時刻値の誤差を小さくする工夫がなされた時刻同期のためのプロトコル。
2010年6月の時点では、最新バージョンNTP4がRFCのProporsed Standardとなっている。
時刻同期の仕組み
NTPプロトコルでは、協定世界時(UTC)を使って時刻を送受信する。
上位NTPサーバとのネットワーク通信の遅延を継続的に計測し、受け取った時刻情報を補正して自動的にミリ秒単位の制度で、時計を合わす。
NTPは階層構造を持つ。この階層構造をstratumと呼ぶ。
最上位のサーバが正確な時計から標準時を取得する。
下位のサーバはその標準時を参照し、時刻をあわせる。
最上位のNTPサーバは、stratum 1となる。
階層が下がるごとにstratumの値が1つずつ大きくなり、最下位はstratum 16となる。
stratum 16とは同期することができない。
NTPは、複数のサーバへ時刻を問い合わせることが可能。
可用性と精度の向上につながる。
通常サーバは、複数の上位サーバを利用して時刻を取得する。
GPS、標準電波、原子時計は、stratum 0。stratum 0に直結(IP通信ではない)されたNTPサーバはstratum 1。
NTPの実装であるntpdは、上位stratumだけではなく、複数の同位・下位stratumのNTPサーバとも接続できる。
複数のサーバと時刻の比較、ネットワークの遅延、遅延のばらつきの計測を行い、重み付けを行って最も正確らしい時刻を現在時刻とする。
運用
NTPサーバを設定する際は、サーバのIPアドレスを直接指定するのではなく、ホスト名を用いて指定すべきとされている。(RFC4330)
ドリフト
他のNTPサーバからの時刻と、自機の時計を数回比較することで、時計の進み遅れの度合いも修正できる。この度合いのことをドリフトと言う。
コンピュータの時刻をNTPでいきなり大幅に修正することは、存在しなかった時刻が存在することになってしまい、cronやatなど指定した時刻に実行されるはずのプログラムが実行されなくなってしまうため、問題がある。
よって、ドリフトを調整して時刻を目的の時刻に徐々に近づけていくのが望ましい。
NTPの実装
NTPサーバの実装としては、ntpd (旧xntpd)がある。
NTPクライアントの実装としては、ntpdateがある。
Simple Network Time Protocol
NTPのサブセット版である。SNTPと言う。Windows 2000で採用された。
Windows XP、Windows Server 2003からはフルセット版であるNTPが用いられるようになった。
関連RFC
- RFC 1128
- RFC 1129
- RFC 1305
- RFC 2030
- RFC 4330
- RFC 5905
- RFC 5906
- RFC 5907
- RFC 5908
- RFC 868 - Time Protocol
ハードウェアクロックとシステムクロック
- LPIのサイトから
コンピュータの時刻には、ハードウェアクロック(ハードウェアが管理している時刻)とシステムクロック(linuxカーネルで管理している時刻)の2種類がある。
ハードウェアクロックはrtc (real time clock)とも呼ばれ、PCが起動していなくても常に動作する。システムクロックはコンピュータの起動時にハードウェアクロックを参照し、時刻設定が行われる。
起動後、ハードウェアクロックとシステムクロックは別々に動作する。
(ハードウェアクロックとシステムクロックは同期していないことに注意)。
システムクロックの参照
dateコマンドを実行することで、システムクロックを参照することができる。
ハードウェアクロックの参照
hwclockコマンドを実行すると、ハードウェアクロックを参照できる。
ハードウェアクロックとシステムクロックは、hwclockコマンドのオプションで同期することができる。
-wで、ハードウェアクロックをシステムクロックの時刻と同期する。
-sで、システムクロックをハードウェアクロックの時刻と動機する。
NTP
NTPは、ネットワーク上の他のホストの時計(時刻)と、自ホストのシステムクロックを同期させるためのプロトコル。
ntpdate
コマンドを実行することで、自ホストのシステムクロックを他のホストのシステムクロックと動機を行うことができる。
ntpは、時間が即座に調整されるというわけではなく、システムに問題が発生しないように、徐々に時間が調整されていく。UTCの時刻と内蔵時計の差があまりにも発生している場合は、時間が調整されるまで時間がかかる。
ntpdate
コマンドを使用すると、現在の時刻を即座に調整される。
ntpq -pの出力の意味
出力 | 説明 |
---|---|
* | 参照同期中のサーバを表す |
+ | クロック誤り検査に合格したサーバ |
# | 参照同期中だが、距離が遠いサーバ |
空 | サーバを参照していない |
x | クロック誤り検査に不合格となったサーバ |
. | 参照リストから除外されたサーバ |
refid | 上位NTPサーバが参照しているホスト名 or IPアドレス |
st | 上位NTPサーバの階層 |
t | 階層のタイプ l:local、u:unicast、m:multicast、b:broadcast |
when | 最後のパケットを受け取ってからの時間(秒) |
poll | 問い合わせを行う間隔(秒) |
reach | 到達可能性に関するレジスタデータ(8進数) |
delay | 推定遅延(ミリ秒) |
offset | 偏差補償(ミリ秒) |
jitter | RMS Jitterの平均値(ミリ秒) |
NTPサーバとの動機時刻
NTPデーモンは、ローカルクロックとNTPサーバに対し、基本的にstratumが小さいNTPサーバに同期する。同じstratumのNTPサーバが存在する場合には、応答時間の短い(近い)サーバに同期する。
NTPは内部アルゴリズムにより同期するサーバを決定する。
ntpdは、カーネル時計のstratum値を、NTPサーバより小さくすると、NTPサーバとの動機が行われなくなる場合があるので注意。
ローカルクロック
IPアドレスと似た形式によって、他サーバと同じように表現される。
127.127.t.u
- tはタイプであり、xntpdデーモンでは、1~33のタイプのクロックが標準実装されている。タイプの1番だけは特殊で、"Local Clock Driver"であるカーネルの時計(ローカルクロック)を指している。
- uはタイプ固有のユニット番号を示す。
以下、理解できていないけれど、記述しておく。
・前記の例では、127.127.1.0(ローカルクロック)の設定を行っていません。NTPv4 では、ローカルクロック
の扱いが変わり、NTP サーバと同じローカルクロックアドレスを定義すると、時刻同期できない場合が
あります。他の NTP サーバから参照されない末端の NTP クライアントの場合は、ローカルクロックの設
定をしないでください。
ただし、中間 NTP サーバで、複数の NTP サーバの参照が難しい場合などは、NTPv3 と同様に以下の
例のような定義を設定してください。