連載
» 2012年03月15日 05時00分 公開

Windowsネットワーク時刻同期の基礎とノウハウ(改訂版):第1回 NTPとWindows時刻同期サービス (2/2)

[小鮒通成,マイクロソフトMVP]
前のページへ 1|2       

NTPにおける時刻の修正方法

 NTPで時刻を修正する方法には、次の2つがある。

  • Step方式――時刻のずれを即座に修正する方法
  • Slew方式――時刻の進み具合をずらしていくことで、少しずつ時刻を合わせていく方式

 Slew方式の動作では、時刻が進みすぎている場合に、すぐに正しい時刻に修正するのではなく、例えば1秒時刻が経過するところを0.5秒しか進めない、といった「時刻の進み具合を遅らせる」ことで、「時刻の後戻り」が発生しないようにする(遅れている場合はその逆を行う)。データベースのトランザクションを記録したログのように、各要素の前後関係をタイム・スタンプで確認する仕組みにとっては、「時刻の後戻り」が発生すると致命的な問題になるため、このように少しずつ合わせていく方式が利用される。

StepモードとSlewモード StepモードとSlewモード

 Windows OSでは、状況に応じてこの2つの方法を使い分けている。

Windows OSにおける時刻同期機能

 Windows OSにおける時刻同期メカニズムでは、最初からNTPが使われていたわけではない。Windows NTではnet timeコマンドによるSMBプロトコルを使った時刻同期が行われていたが、これはシステムの必要条件ではなかった(別途提供されたntp.exeコマンドがあるが、これは例外的な使われ方である)。

 Active Directoryが初めて実装されたWindows 2000ではSNTP(NTPのサブセット版)が採用された。Active DirectoryではKerberos認証が利用されているが、Kerberos認証ではサーバとクライアント間の時刻が一致している必要があるので、そのために時刻同期が必須の機能となったからだ。

 NTPが使われるようになったのはWindows Server 2003からである。

 一般にNTPによる時刻のずれは1/1000秒(1ms)以下のレベルで考慮されており、UNIX系のNTPサーバ(ntpd:NTPデーモン)ではこういった背景に基づいてプログラムが実装されている。つまり、いったん正確な時刻を合わせたら、あとは少しずつ微調整することで、正確さを維持しようとする。例えばslewモードで動作する際、どんなに多くても1秒間に0.5msしか時刻のずれを調整しない(だから1日に最大でも43秒しか時刻をずらすことができない)。こうすることで、前述のように、時刻がずれすぎることでサーバとして信頼性を損なうことを防止している。

 これに対してWindows OSのNTPサーバ(w32time:Windows Timeサービス)では、できるだけ早く正確な時刻に合わせるということが重視され、正確さの維持についてはUNIX系のntpdほど考慮されていない。slewモードで動作する際、大きく時刻がずれていると、できるだけ早く時刻を合わせるため、時刻を一気にずらして調整する。その結果、NTPサーバとしての信頼性が損なわれることがある。

 このように同じNTPプロトコルに準拠したプログラムでも、ものによって動作が違う、という背景は理解しておく必要があるだろう。

時刻同期における時間のずれの例 時刻同期における時間のずれの例
これはWindows Server 2008 R2におけるslew方式での時刻同期の観測例。「w32tm /stripchart」コマンドで時刻のずれを1秒ごとに計測してグラフにしている。「o:(offset:の略。指定したサーバとのずれ)」の値を見ると、1秒ごとに、約30msずつOffsetが減少しており、30ms程度でslewしている様子が分かる。このようにかなりずれたままである。

 マイクロソフトではNTPによる時刻同期の機能を、Kerberos認証が適切に行えるといった、「Active Directory認証に必要な範囲で、問題なく使える」程度を目標として実装している。UNIXのntpdのような、高精度なNTPサーバを構築することは目標としていない。このことは次のドキュメントにもはっきりと書かれている。

 これによるとw32timeサービスの設計目標は次のようなものである。

  • Kerberos認証が適切に行える程度の時刻同期機能の提供――Active DirectoryのKerberos認証*2では、サーバとクライアント間の時刻のずれは最大で5分間まで許されるが、これを満たす程度の時刻同期を実現する
  • クライアントに対する“ルーズな”時刻同期機能の提供――1〜2秒以下の精度での時刻同期を保証するものではない

 Windows OSでは、tick(タイマー割り込み間隔)が10msで固定されており、UNIX系のようにカーネル・オプションでタイマー割り込みの周期を短く調整して精度を高める、といったことができない。このように、「きわめて細かい精度での時刻の同期ができない」ことを考慮して、マイクロソフトはNTPの時刻同期の正確性について、“および腰”(とも受け取れるサポート方針)なのかもしれない。とはいえ、(たとえサポート技術情報に書いてあるにしても)何秒間も時刻がずれたままでも問題はない、とマイクロソフトが考えているはずはないので、このサポート技術情報の意図としては、「Windows Timeサービスはntpdとは違う思想で設計されている」というメッセージと理解するべきだろう。

*2 Kerberos認証とは、Active Directoryで利用されている認証方式。RFC 1510「The Kerberos Network Authentication Service (V5)」で規定されている。サーバとクライアント間でやり取りされる認証用のデータには時刻情報が付与されており、ある一定の時間内(仕様では5分以内)に生成されたデータでなければ受け付けないようになっている。これは、古い認証情報を使ってシステムにログオンすることなどを防ぐためである。Active Directoryに参加しているサーバやクライアントは、この要件を満たすように、時刻をある程度一致させておく必要がある。Kerberos認証については、キーワード解説「Kerberos」や用語辞典「Kerberos」も参照のこと。



 次回以降では、Windows Server 2008 R2をベースにして、ドメイン環境やワークグループの時刻同期について解説する。


「Windowsネットワーク時刻同期の基礎とノウハウ」のインデックス

Windowsネットワーク時刻同期の基礎とノウハウ(改訂版)

前のページへ 1|2       

Copyright© Digital Advantage Corp. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。