スポンサーリンク

NTPD(8) FreeBSD システム管理者マニュアル NTPD(8)

名称

ntpd − Network Time Protocol (NTP) デーモン

書式

ntpd [−aAbdgLmnPqx] [−c conffile] [−D level] [−f driftfile] [−k keyfile] [−l logfile] [−N high] [−p pidfile] [−r broadcastdelay] [−s statsdir] [−t key] [−v variable] [−V variable]

解説

ntpd ユーティリティは、インターネットの標準時間サーバと同期をとって、シス テム時刻 (time of day) を設定し維持するオペレーティングシステムデーモンで す。 ntpd は、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 ならば、 umask(2) を 022 に設定します。

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

       −a

認証モードを有効にします (デフォルト)。

−A
認証モード無効にします。

−b
NTP のブロードキャストメッセージを使って同期します。

−c conffile
設定ファイルの名前とパスを指定します。 (netinfo を無効にする?)

−d
デバッグモードを指定します。このフラグは何回指定してもかまいませ んが、回数が多いほど表示がより詳細になります。

−D level
デバッグレベルを直接指定します。

−f driftfile
ドリフトファイルの名前とパスを指定します。

−g
通常、 ntpd はオフセットが正気限界 (sanity limit) を越えている場 合は終了します。この値のデフォルトは 1000 秒です。正気限界を 0 に 設定した場合、正気限界のチェックを行なわず、オフセットがどのよう な値でも受理します。このオプションはこの制限を無視し、どの時刻に も制限なく設定できるようにします。しかしこれは一度のみ起り得ま す。この後は、制限を超過すると、 ntpd は終了します。このオプショ ンは、 −q オプションとともに使用することができます。

−k keyfile
NTP の認証鍵を含むファイルの名前とパスを指定します。

−l logfile
ログファイルの名前とパスを指定します。デフォルトはシステムログ機 能です。

−L
仮想 IP を待ち受けます。

−m
224.0.1.1 の IP マルチキャストグループアドレス上の NTP マルチキャ ストメッセージを利用して同期します (マルチキャストカーネルが必要 になります)。

−n
フォークしません。

−N priority
オペレーティングシステムの許容範囲で、 ntpd を高優先度で実行させ ます。

−p pidfile
ntpd
のプロセス ID を記録するためのファイル名とパスを指定します。

−P
オペレーティングシステムによって設定される優先度制限を無視しま す。意気地なしには使用を推奨しません。

−q
最初に時刻を設定した直後に ntpd の実行を終了します。この挙動は、 引退させるべきプログラム ntpdate(8) の挙動を真似したものです。こ のオプションといっしょに、 −g オプションと −x オプションとを指定 することができます。

−r broadcastdelay
ブロードキャスト/マルチキャストサーバからこのコンピュータ間のデ フォルト伝播遅延を指定します。このオプションはプロトコルによって 自動的に遅延を計算できない場合にのみ必要となります。

−s statsdir
統計機能によって作成されるファイルのディレクトリパスを指定しま す。

−t key
鍵番号を信頼できる鍵 (trusted key) のリストに付け加えます。

−v variable

−V variable
デフォルトでリストされるシステム変数を追加します。

−x
通常は、オフセットが設定閾値 (デフォルトは 128 ms) より小さい場 合、時刻は徐々に微調整 (slew) されます。設定閾値より大きい場合 に、単に時刻設定 (step) されます。このオプションは全ての場合にお いて微調整するように強制します。設定閾値を 0 に設定した場合、 −x オプションの有無に関わらず、また、値に関わらず、全てのオフセット で時刻設定します。大きな時刻誤差や周波数誤差を扱うために設計され た時計状態機械を通さずに時刻合わせするため、一般には、これはうま いやり方ではありません。注意: 微調整の速度は 0.5 ms/s までに制限 されていますので、1 秒調節するのに 2000 秒の償却期間が必要です。 このため、たくさんの秒数を調節するには、償却に数時間や数日を要す ることもあります。このオプションは −q オプションといっしょに使用 することができます。

NTP はどのように動作するか
ntpd
ユーティリティは、設定した 1 個以上のサーバと、指定したポーリング間 隔でメッセージ交換を行ないます。実行を開始する際に、最初の起動か何度目か の起動かによって、このプログラムはこれらのサーバの多数といくつかのメッ セージの交換を必要とします。その結果、信号処理と緩和アルゴリズムにより データを蓄積し、データを整え、時刻設定を行ないます。バーストからネット ワークを守るため、各サーバに対する初期ポーリング間隔は 0 から 16 秒の間の ランダムな値で遅らされます。デフォルトの初期ポーリング間隔は 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 キーワードを指定しようとすることになると思 います。このキーワードにより、メッセージが連続して矢継ぎ早に交換され、 データが整えられ、時計はおよそ 1 分間で設定されます。適当な期間、喪に服し た後に、 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) の大きいワークステーションより は、高負荷のプライマリサーバにあわせて、かさばる凝った特徴の多くが設計さ れているからです。

FreeBSD 10.0 August 2, 2001 FreeBSD 10.0

スポンサーリンク