EN JA
NTPD(8)
NTPD(8) FreeBSD System Manager's Manual NTPD(8)

名称

ntpdNetwork Time Protocol (NTP) デーモン

書式

ntpd [ -aAbDdgLmnPqx][ -c conffile][ -f driftfile][ -k keyfile][ -l logfile][ -p pidfile][ -r broadcastdelay][ -s statsdir][ -t key][ -v variable][ -V variable]

解説

ntpd ユーティリティは、インターネットの標準時間サーバと同期をとって、システム時刻 (time of day) を設定し維持するオペレーティングシステムデーモンです。それは、Network Time Protocol (NTP) バージョン 4 の完全な実装となっていますが、RFC-1305 で定義されているバージョン 3 に対する互換性も保っています。加えて、各々 RFC-1059 と RFC-1119 で定義されているバージョン 1 とバージョン 2 に対する互換性も保っています。

ntpd ユーティリティは、多くの計算を 64-bit 浮動小数点演算で行ない、究極の精度である約 232 ピコ秒を保つ必要があるときだけ、比較的扱いにくい 64-bit 固定小数点操作を行ないます。現在の普通のワークステーションやネットワークでは、この究極の精度は、達成できませんが、この精度は、将来のギガヘルツ級の CPU クロックやギガビット LAN において必要となるでしょう。

通常、 ntpd は、起動時に設定ファイル ntp.conf(5) から読み込み、同期ソースや動作モードを決めます。また、機能が限定されますが、コマンドラインから全ての動作を指定することにより、設定ファイルを使わずに実行することもできます。これは、ローカルホストをブロードキャスト/マルチキャストクライアントとして設定し、全ての通信相手を、実行時にブロードキャストを待受け (listen) て決定する時には、特に有益です。

ntpd に NetInfo サポートが組み込まれている場合、デフォルトの ntp.conf(5) ファイルが読み込めず、また -c オプションによるファイルの指定もされていないときに、 ntpd は、設定を NetInfo より読み込もうとします。

ntpd の実行中は、 ntpq(8) および ntpdc(8) ユーティリティプログラムを使用することで、さまざまな ntpd 内部変数を表示したり、設定オプションを変更したりできます。

ntpd は、起動時に umask 2 の値を調べ、もしそれが 0 ならば、 ntpd は、 umask 2 を 022 に設定します。

以下にあげる引数が使用可能です:

-a
ブロードキャストクライアント、マルチキャストクライアント、と対象的なパッシブアソシエーション (接続) のための暗号化認証を要求します。これは、デフォルトです。
-A
ブロードキャストクライアント、マルチキャストクライアント、と対称的パッシブアソシエーション (接続) のための暗号化認証を要求しません。これは、良い考えではありません。
-b
クライアントがブロードキャストサーバと同期することを有効にします。
-c conffile
デフォルトが /etc/ntp.conf の、設定ファイルの名前とパスを指定します。
-d
デバッグモードを指定します。このオプションは、複数回指定できますが、指定するごとに表示がより詳細になります。これを使用するためには、DEBUG をつけて ntpd をコンパイルする必要があります。
-D level
デバッグレベルを直接指定します。
-f driftfile
デフォルトが、 /etc/ntp.drift の周波数ファイルの名前とパスを指定します。これは、 driftfile driftfile 設定コマンドと同じ操作です。
-g
通常、 ntpd は、オフセットがパニック閾値 (デフィルトは、1000 秒) を越えるなら、システムログにメッセージを出力して終了します。このオプションによって、時刻は、制限なしでどんな値にも設定できます。しかしながら、これは、一度だけ起こり得ます。閾値がその後に越えるなら、 ntpd は、システムログにメッセージを出力して終了します。 -q-x オプションとともに、このオプションを使用することができます。他のオプションについては、 tinker コマンドを参照してください。
-k keyfile
デフォルトが /etc/ntp.keys 対称キーファイルの名前とパスを指定します。これは、 keys keyfile 設定コマンドと同じ操作です。
-l logfile
ログファイルの名前とパスを指定します。デフォルトは、システムログファイルです。これは、 logfile logfile 設定コマンドと同じ操作です。
-L
仮想 IP を listen (接続を受け付け) しません。デフォルトは、listen (接続を受け付け) します。
-m
クライアントが IPv4 マルチキャストグループアドレス 224.0.1.1 でマルチキャストサーバに同期することを有効にします。
-n
フォークしません。
-N
オペレーティングシステムで許された範囲内の、最高の優先度で ntpd を実行します。
-p pidfile
ntpd プロセス ID を記録するために使用されるファイルの名前とパスを指定します。これは、 pidfile pidfile 設定コマンドと同じ操作です。
-P priority
オペレーティングシステムで許された範囲内の、指定された優先度で ntpd を実行します。
-q
最初に時刻を設定した直後に ntpd の実行を終了します。この挙動は、引退させるべきプログラム ntpdate(8) の挙動を真似したものです。このオプションといっしょに、 -g オプションと -x オプションとを指定することができます。注: カーネル時刻制御規則は、このオプションで無効にされます。
-r broadcastdelay
ブロードキャスト/マルチキャストサーバからこのクライアントまでのデフォルト伝播遅延を指定します。このオプションは、プロトコルによって自動的に遅延を計算できない場合にのみ必要となります。
-s statsdir
統計機能によって作成されるファイルのディレクトリパスを指定します。これは、 statsdir statsdir 設定コマンドと同じ操作です。
-t key
キー番号を信頼できるキー (trusted key) のリストに付け加えます。このオプションは、複数回指定できます。
-v variable
-V variable
デフォルトでリストされるシステム変数を追加します。
-x
通常は、オフセットが設定閾値 (デフォルトは、128 ms) より小さい場合、時刻は、徐々に微調整 (slew) されます。設定閾値より大きい場合に、単に時刻設定 (step) されます。このオプションは、手動でクロックを設定するための精度ウィンドウの範囲内である、600 に閾値を設定します。注: 典型的な Unix カーネルのスルー (回転) レートが 0.5 ms/s に制限されているので、それぞれの秒の調整は、2000 秒の償却間隔 (インターバル) を必要とします。したがって、600 秒程度の調整を完了するのにおよそ 14 日かかります。 -g-q オプションとともにこのオプションを使用することができます。他のオプションについては、 tinker コマンドを参照してください。注: カーネル時刻制御規則は、このオプションで無効にされます。

NTP はどのように動作するか

ntpd ユーティリティは、設定した 1 個以上のサーバと、指定したポーリング間隔でメッセージ交換を行ないます。実行を開始する際に、最初の起動か何度目かの起動かによって、このプログラムは、これらのサーバの多数といくつかのメッセージの交換を必要とします。その結果、信号処理と緩和アルゴリズムによりデータを蓄積し、データを整え、時刻設定を行ないます。バースト (破裂) からネットワークを保護するために、数秒の間のランダムな間隔で、各サーバのための初期ポーリング間隔を遅らせます。デフォルトの初期ポーリング間隔は、64 秒です。時計を設定するまでに数分を費やしてしまうことがあります。 ntp.conf(5) に記述されているように、設定コマンド server で指定するキーワード iburst を使い、時計設定するまでの初期遅延を減少させることができます。

現代のオペレーティングシステムとハードウェアの大部分は、 time-of-year (TOY) チップを持っており、電源断の間も時刻を保持しています。マシンが起動すると、このチップを使いオペレーティングシステムの時刻を初期化します。マシンが NTP サーバに対して時刻同期を取った後で、オペレーティングシステムは、そのチップの時刻を必要に応じ修正します。 TOY チップが存在しないか、何らかの理由で TOY チップの時刻とサーバの時刻の違いが 1000 秒より大きい場合、 ntpd は、何か決定的にまずいことが生じたと仮定します。この場合に意味のある動作は、オペレータが介在し手動で時計を設定することです。この場合、 ntpd は、パニックメッセージをシステムログに出力し実行終了します。 -g フラグは、このチェックを上書きし、チップの時刻に関わらずサーバの時刻が時計に設定されます。しかしながら、CMOS バッテリの故障やクロックカウンタの不調などのハードウェアの故障から身を守るために、一度クロックを設定してから誤差が 1000 秒を越えた場合、いずれにしても ntpd は、実行終了します。

通常の状態では、 ntpd は、時刻が実質的に連続に推移し不連続が生じないように、時計を僅かな刻みで修正します。ネットワークの輻輳が著しい状態では、往復遅延時間の変動 (jitter) が 3 秒を越え、同期距離 (これは、往復遅延時間の半分と誤差量の項の和) が著しく大きくなる可能性があります。 128ms 以下のサンプルオフセットが存在しない時間間隔が 900 秒を越えないかぎり、 ntpd のアルゴリズムでは、128ms を越えるサンプルオフセットを捨てます。オフセットがどのような値であっても、その後最初に採取されるサンプルが示す値で時計を設定します。現実には、誤って時刻を設定し間違った警告を発生する率は、この処理によりほとんどなくなったと言ってもいいほどに減少されます。

この動作の結果として、一度時計が設定されると、ネットワーク経路の輻輳と遅延時間変動が極めて大きな場合であっても、 128ms を越えた変動は、極めてまれにしか生じません。ときどき、特に ntpd が最初に起動したときには、誤差が 128ms を越えることがあります。ローカル時計の時刻がサーバと比べ 128 秒以上先に進んでいる場合、これにより、逆向きの時計設定が生じることがあります。アプリケーションによっては、この動作に耐えられないものもあるかもしれません。コマンド行に -x オプションを含めている場合、時計の設定は、決して行なわれません。時刻の微調整のみを行ないます。

-x オプションを使うと決める前に、それによる問題を注意深く調査する必要があります。可能な最大微調整速度は、500 parts-per-million (PPM) に制限されています。これは、NTP プロトコル設計とアルゴリズム設計が根拠とする正しさの原理による結論です。結果として、ローカル時計が許容可能なオフセットに収束するまでに長い時間を必要とする可能性があります。時計が許容可能な範囲外にある場合、1 秒につき約 2,000 秒が必要となります。その間は、ローカル時計は、他のネットワーク時計のどれとも一貫性はなく、このシステムは、正しく同期したネットワーク時間を必要とする分散アプリケーションに利用することができません。

上記の予防策にも関わらず、大きな周波数誤差が存在する場合に、ときどき、結果として時間オフセットは、128ms の範囲を逸脱し、その際に、時刻設定または時刻の微調整が必要となります。そのような時刻修正のあと、最初のサンプルも受理可能な範囲外となるほど周波数誤差が大きいならば、 ntpd は、 ntp.drift ファイルが存在しない場合と同じ状態に入ります。この動作の意図は、周波数を素早く補正し、通常の追跡モードに動作を戻すことにあります。最も極端な場合 ( time.ien.it のことを思い出しますが) として、時刻設定/微調整による時刻補正と、その後周波数補正とが生じることもあります。この動作は、このような場合に、サーバを設定する際にキーワード burst を使う助けになります。

周波数の修正

起動時の ntpd の動作は、周波数ファイル (普通は、 ntp.drift) が存在するかどうかに依存します。このファイルは、時計の周波数誤差の最新の予測値が含まれます。 ntpd が起動され、このファイルが存在しないとき、 ntpd は、システムクロック発振器の時刻誤差と周波数誤差に急速に適合するために特に設計された特殊モードに入ります。このモードには、約 15 分を必要とします。その後、時刻と周波数は、公称値に設定され、 ntpd は、通常のモードに入ります。このモードでは、時刻と周波数は、連続的にサーバに対し追従します。 1 時間後、周波数ファイルが生成され、現在の周波数オフセットが書き込まれます。 ntpd が起動され、このファイルが存在するとき、 ntpd の周波数は、このファイルの値から初期化され、直ちに通常のモードに入ります。その後、1 時間間隔で、その時点の周波数オフセットがこのファイルに書き込まれます。

動作モード

ntpd ユーティリティは、いくつかのモードのいずれかで動作します。それらのモードとしては、“アソシエーション管理”のページ ( /usr/share/doc/ntp に提供された HTML 文書の一部として利用可能です) で示したように、対称的アクティブ/パッシブ、クライアント/サーバ、ブロードキャスト/マルチキャスト、メニーキャストがあります。本プログラムは、普通は、連続的に動作します。その間、小さな周波数変化を監視し、時計を究極の精度に向けて調整します。しかしながら、単発モード (one-time mode) で動作することもあります。このモードでは、時刻が外部サーバから設定され、周波数は、以前に記録しておいた周波数ファイルから設定されます。ブロードキャスト/マルチキャスト、もしくはメニーキャストクライアントは、リモートサーバを発見し、サーバクライアント間の伝播遅延補正係数を計算し、自分自身を自動的に設定することができます。このモードにより、その環境固有の設定を詳細にわたり指定することなしに、多数のワークステーションを配備することができます。

デフォルトでは、 ntpd は、連続モードで動作します。このモードでは、複雑な状態機械により決定される時間間隔で、いくつかある外部サーバのそれぞれに対しポーリングを掛けます。状態機械は、それに付随して往復遅延時間の変動と発振器周波数の逸脱 (wander) を測定し、ヒューリスティックなアルゴリズムを用いて最適なポーリング間隔を決定します。通常は、ほとんどのオペレーティングシステム環境で、この状態機械は、 64 秒の時間間隔で開始し、状況に応じ、1024 秒まで段階的に増加させます。サーバへのアクセス集中を避けるため、微小なランダム偏差も入れてあります。加えて、しばらくの間サーバが到達できない状態になる場合には、ネットワークのオーバヘッドを減らすために、ポーリング間隔を 1024 秒まで段階的に増加させます。

いくつかの場合では、 ntpd が連続モードで動作することが現実的でないことがあります。この場合、これまでは、普通の対応方法として、 cron(8) ジョブから ntpdate(8) プログラムを指定した時刻に実行させていましたが、このプログラムは、 ntpd が持つ信号処理、誤差チェック、緩和アルゴリズムに関する練り込みを持っていません。 -q オプションは、この目的のためにあります。このオプションを設定することにより ntpd は、時計を 1 回設定した直後に実行終了します。時計の初期設定の手順は、連続モードと同じものです。ほとんどの応用では、 server 設定コマンドで、 iburst キーワードを指定しようとすることになると思います。このキーワードで、データを調整するために一斉にメッセージ交換し、クロックは、およそ 10 秒に設定します。適当な期間、喪に服した後に、 ntpdate(8) プログラムは、引退ということになると思います。

純正の Solaris, Tru64, Linux と FreeBSD の場合がそうですが、時計周波数修正についてカーネルサポートが利用可能な場合には、時計周波数の修正という有益な機能が利用可能です。まず、 ntpd は、選択されたサーバに対し連続モードで動作し、固有の時計周波数オフセットを測定し、周波数ファイルに記録します。周波数とオフセットが定常状態になるまでに数時間掛かることもあります。そのあと、 ntpd は、停止し、必要に応じ単発モードで動作します。プログラム開始時には、周波数は、ファイルから読み込みカーネル内周波数を初期化します。

ポーリング間隔制御

このバージョンの NTP は、測定された時間変動と逸脱とに合致したレベルの同期の質を維持するため、複雑な状態機械を含んでいます。精度を増大させる処理には、時間間隔を減少させる目的や、ネットワークのオーバヘッドを減らすために時間間隔を増大させる目的の方法がいくつかあります。しかし、デフォルト最小値の 64 秒からデフォルト最大値の 1024 秒の間のポーリング調整範囲の変更の結果について注意深く考慮することを、ユーザには、推奨します。デフォルト最小値は、 tinker minpoll コマンドを用いて 16 秒以上の範囲で変更することができます。設定コマンドの minpoll オプションで上書き設定されない限り、設定されたアソシエーションのすべてでこの値が使用されます。注意: ポーリング間隔が 64 秒より小さい場合、ほとんどのデバイスドライバは、正しく動作しません。また、ブロードキャストサーバとメニーキャストクライアントのアソシエーションも、上書き設定しない限りデフォルト値を使用します。

ダイヤルアップサービスや従量性課金サービスなどの場合、最小間隔を数 10 分にし、最大間隔を 1 日程度に増やすと便利かもしれません。通常の動作条件では、時計修正ループがひとたび安定化すると、時間間隔は、最小値から最大値まで段階的に増えてゆきます。しかし、これは、修正ループが誤差を修正できる程度まで固有時計周波数誤差が小さいことが前提です。ループの誤差補足可能範囲は、64 秒の間隔において 500 PPM で、間隔を 2 倍にするごとに 2 の因数で減少します。例えば、最小値 1,024 秒では、誤差補足可能範囲は、31 PPM にしか過ぎません。固有誤差がこの値より大きい場合、ドリフトファイル (drift file) ntp.drift は、この制限以下の剰余誤差を減少させるため特別扱いせねばなりません。この状態が一度生じると、ドリフトファイルは、自動的に 1 時間に 1 回更新され、それ以後のデーモンの再起動の際に周波数を初期化できるようになります。

スーハーフィルタ (huff-n'-puff Filter)

電話線モデム経由で相当量のデータをダウンロード/アップロードするような使い方では、時刻維持の品質が著しく低下する可能性があります。これは、2 方向の送信における遅延の差が極めて大きくなる可能性があるからです。多くの場合、時刻誤差が明らかに大きくなり、設定修正の閾値を越え、データ転送の後もしくは途中に設定による補正が生じます。

スーハーフィルタは、これらの場合に目立つ時間オフセットを補正するために設計されました。これは、他のトラフィックが存在しないときの伝播遅延の知識に依存します。普通の状況でこれが生じるのは業務以外の時間です。このフィルタは、最近の時間間隔で通常は、数時間測定した中で最小遅延を記憶するシフトレジスタを保持します。遅延が厳しい状況では、このフィルタは、問題の遅延と最小遅延の差と、オフセットの符号とを用いて問題のオフセットを補正します。このフィルタの名前は、オフセットの符号に依存した、負の補正 (ハーと吹く) と正の補正 (プーと吹く) を表しています。

このフィルタは、 tinker コマンドと huffpuff キーワードにより有効にされます。これは、 ntp.conf(5) に詳しい説明があります。

関連ファイル

/etc/ntp.conf
デフォルトの設定ファイル名
/etc/ntp.drift
デフォルトのドリフトファイル名
/etc/ntp.keys
デフォルトのキーファイル名

関連項目

ntp.conf(5), ntpdate(8), ntpdc(8), ntpq(8)

提供されているマニュアルページに加えて、包括的なドキュメントが world wide web 上の http://www.ntp.org/ にあります。このドキュメントのスナップショットが HTML 形式で /usr/share/doc/ntp にあります。 David L. Mills, Network Time Protocol (Version 1), RFC1059. David L. Mills, Network Time Protocol (Version 2), RFC1119. David L. Mills, Network Time Protocol (Version 3), RFC1305.

バグ

ntpd ユーティリティは、かなり大きくなってしまいました。巨大とは言いませんが、ワークステーションで高優先度で実行する ntpd として望ましい大きさを超えてしまいました。特に、階層数 (stratum) の大きいワークステーションよりは、高負荷のプライマリサーバにあわせて、かさばる凝った特徴の多くが設計されているからです。
May 18, 2010 FreeBSD