1|2NTPにおける時刻の修正方法NTPで時刻を修正する方法には、次の2つがある。Step方式——時刻のずれを即座に修正する方法Slew方式——時刻の進み具合をずらしていくことで、少しずつ時刻を合わせていく方式Slew方式の動作では、時刻が進みすぎている場合に、すぐに正しい時刻に修正するのではなく、例えば1秒時刻が経過するところを0.5秒しか進めない、といった「時刻の進み具合を遅らせる」ことで、「時刻の後戻り」が発生しないようにする(遅れている場合はその逆を行う)。データベースのトランザクションを記録したログのように、各要素の前後関係をタイム・スタンプで確認する仕組みにとっては、「時刻の後戻り」が発生すると致命的な問題になるため、このように少しずつ合わせていく方式が利用される。OSでは、状況に応じてこの2つの方法を使い分けている。OSにおける時刻同期メカニズムでは、最初からNTPが使われていたわけではない。timeコマンドによるSMBプロトコルを使った時刻同期が行われていたが、これはシステムの必要条件ではなかった(別途提供されたntp.exeコマンドがあるが、これは例外的な使われ方である)。2000ではSNTP(NTPのサブセット版)が採用された。DirectoryではKerberos認証が利用されているが、Kerberos認証ではサーバとクライアント間の時刻が一致している必要があるので、そのために時刻同期が必須の機能となったからだ。一般にNTPによる時刻のずれは1/1000秒(1ms)以下のレベルで考慮されており、UNIX系のNTPサーバ(ntpd:NTPデーモン)ではこういった背景に基づいてプログラムが実装されている。正確な時刻を合わせたら、あとは少しずつ微調整することで、正確さを維持しようとする。slewモードで動作する際、どんなに多くても1秒間に0.5msしか時刻のずれを調整しない(だから1日に最大でも43秒しか時刻をずらすことができない)。することで、前述のように、時刻がずれすぎることでサーバとして信頼性を損なうことを防止している。Timeサービス)では、できるだけ早く正確な時刻に合わせるということが重視され、正確さの維持についてはUNIX系のntpdほど考慮されていない。slewモードで動作する際、大きく時刻がずれていると、できるだけ早く時刻を合わせるため、時刻を一気にずらして調整する。その結果、NTPサーバとしての信頼性が損なわれることがある。このように同じNTPプロトコルに準拠したプログラムでも、ものによって動作が違う、という背景は理解しておく必要があるだろう。R2におけるslew方式での時刻同期の観測例。/stripchart」コマンドで時刻のずれを1秒ごとに計測してグラフにしている。「o:(offset:の略。指定したサーバとのずれ)」の値を見ると、1秒ごとに、約30msずつOffsetが減少しており、30ms程度でslewしている様子が分かる。このようにかなりずれたままである。Directory認証に必要な範囲で、問題なく使える」程度を目標として実装している。UNIXのntpdのような、高精度なNTPサーバを構築することは目標としていない。このことは次のドキュメントにもはっきりと書かれている。サービスの構成を目的とするサポート範囲」(サポート技術情報)これによるとw32timeサービスの設計目標は次のようなものである。OSでは、tick(タイマー割り込み間隔)が10msで固定されており、UNIX系のようにカーネル・オプションでタイマー割り込みの周期を短く調整して精度を高める、といったことができない。このように、「きわめて細かい精度での時刻の同期ができない」ことを考慮して、マイクロソフトはNTPの時刻同期の正確性について、“および腰”(とも受け取れるサポート方針)なのかもしれない。Timeサービスはntpdとは違う思想で設計されている」というメッセージと理解するべきだろう。Directoryで利用されている認証方式。(V5)」で規定されている。サーバとクライアント間でやり取りされる認証用のデータには時刻情報が付与されており、ある一定の時間内(仕様では5分以内)に生成されたデータでなければ受け付けないようになっている。これは、古い認証情報を使ってシステムにログオンすることなどを防ぐためである。Directoryに参加しているサーバやクライアントは、この要件を満たすように、時刻をある程度一致させておく必要がある。Kerberos認証については、キーワード解説「Kerberos」や用語辞典「Kerberos」も参照のこと。R2をベースにして、ドメイン環境やワークグループの時刻同期について解説する。メールマガジンをご購読ください。申し込みページへITmediaはアイティメディア株式会社の登録商標です。