Windows Time サービスにおける時刻同期の仕組み

適用対象: Microsoft Windows Server 2003 Standard Edition (32-bit x86)Microsoft Windows Server 2003 Standard x64 EditionMicrosoft Windows Server 2003 Enterprise Edition (32-bit x86) 詳細

概要


Windows Server 2003 以降では、NTP (Network Time Protocol) プロトコルを使用した時刻同期の機能を提供しています。
基本的な同期の仕組みについて説明します。


詳細




同期方法 / 同期先について
時刻同期方法、時刻同期先サーバーについての設定は、以下のレジストリに格納されています。

レジストリ キー : HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\Parameters
値 : type
設定値 :
Nt5DS = ドメインの階層に従い、時刻同期を行います。
                クライアント端末 - ログオン先のドメインコントローラと時刻同期を行います。
    各ドメイン コントローラー - ドメインの PDC エミュレータと時刻同期を行います。
    子ドメインの PDC エミュレータ - 親ドメインの PDC エミュレータ、またはドメインコントローラと時刻同期を行います。
NTP = 手動で設定された時刻同期サーバーと同期します。時刻同期先は同じレジストリ キー配下の NtpServer 値で設定されます。
NoSync = 時刻の同期を行いません。

同期間隔について
<TYPE = NT5DS の場合>
ドメイン階層に従い時刻同期を行っている (Type = NT5DS と設定されている) 場合、時刻同期は、以下のレジストリ値によって設定されている、同期間隔の最大値と、最小値の "範囲内" で行われます。

 同期間隔の最大値を設定するレジストリ
  レジストリ キー : HKEY_LOCAL_MACHINEの\SYSTEM\CurrentControlSet\Services\W32Time\Config
 値 : MaxPollInterval

 同期間隔の最小値を設定するレジストリ
  レジストリ キー : HKEY_LOCAL_MACHINEの\SYSTEM\CurrentControlSet\Services\W32Time\Config
 値 : MinPollInterval

設定されている実際の秒数は、レジストリに設定されている値の 2 のべき乗になります。

たとえば MaxPollInterval 15、MinPollInterval 10 の場合は以下のようになります。 
最大値 : 2 の 15 乗 = 32,768 秒
最小値 : 2 の 10 乗 = 1,024 秒

この場合、時刻同期間隔の最小値は、1024 秒 であり、最大値は 32,768 秒 に設定されていることになります。
時刻同期間隔は、この最大値と最小値の “範囲内” で、時刻同期先の時刻 (ターゲット時刻) とローカル時刻の差異に基づき動的に変化します。
ターゲット時刻とローカル時刻の差異が小さい場合、時刻同期間隔は大きくなり、ターゲット時刻との差異が大きい場合には、時刻同期間隔は短くなります。
時刻差異の、大小の判断基準については公開しておりません。

同期間隔を変化させる要素としては、他に PollAdjustFactor レジストリ値があります。
PollAdjustFactor の値を大きく設定すると、時刻差異に対して Windows Time サービスが、機敏に反応するため、時刻同期間隔がより頻繁に変化します。
なお、これらの時刻同期間隔は、レジストリの MinPollInterval で設定された値と MaxPollInterval で設定された値の間で変化するため、時刻同期間隔が過度に長くなることはありません。

時刻同期間隔の算出方法の詳細は RFC1305 の 3.4.9 Poll-Update Procedure (Poll Interval) にも記述されています。

<TYPE = NTP の場合>
時刻同期サーバーの設定方法により時刻同期の間隔を調整するレジストリの値が異なります。

レジストリ キー : HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\Parameters
値 : NtpServer

- NTPServer 値の末尾に 0x1 フラグがセットされている場合
この場合、以下の SpecialPollInterval にセットされる値で時刻同期が行われます。

 レジストリ キー : HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\TimeProviders\NtpClient
値 : SpecialPollInterval


- NTPServer 値の末尾に 0x1 がセットされていない場合
この場合、TYPE 値が NT5DS の時と同様に MaxPollInterval と MinPollInterval 値によって設定されている同期間隔の最大値と、最小値の "範囲内" で行われます。


時刻修正について
Windows Time サービスを使用し、NTP サーバと時刻同期を行う際は、以下のいずれかの方法で同期をします。

(a) 徐々に時刻を合わせる (Slew モード)
SetSystemTimeAdjustment APIをコールする事で、ターゲット時刻をローカル時刻に、徐々に時刻同期を行います。
このモードによる時刻同期が実施される場合には、RTC への更新は行われません。

(b) 即座に時刻を合わせる (Step モード)
SetSystemTime API をコールすることで、即時にターゲット時刻をローカル時刻に設定します。
この場合、RTC への更新も同時に行なわれます。


- 補足
以下 2 つの条件を満している場合、徐々に時刻を合わせる Slew モードになります。

条件 1. NTP クライアントと NTP サーバーの時刻の差が MaxAllowedPhaseOffset で設定されている時間より小さい
条件 2. AbsoluteValueOfCurrentTimeOffset/PhaseCorrectRate/UpdateInterval < SystemClockRate/2 の不等式が満たされる

AbsoluateValueOfCurrentTimeOffset : NTP クライアントが NTP サーバーに対して時刻同期要求を実施した際の NTP クライアントと NTP サーバーの時刻差のことです。
PhaseCorrectRate /  UpdateInterval : W32Time のレジストリで設定し、Slew モードにおける時刻同期設定間隔を決定するために使用されます。大きく設定した場合、NTP クライアントが NTP サーバーと同期するまでの間隔が長くなり、レジストリの値が小さい場合、早い間隔で同期いたします。
System Clock Rate : システムのクロックレートのことです。LastClockRate (W32Time のレジストリ値) とほぼ合致します。シングル プロセッサなら約 10ms 、マルチ プロセッサなら約 15ms となります。


Windows Time サービスの精度
Windows Time サービスは、Kerberos 認証が正常に動作する範囲で NTP Client と NTP Server の時刻を同期することを主な目的とした、ゆるやかな時刻同期を提供する設計となっています。このため、Windows Time サービスにおいては、常に時刻差異が僅少である (1 秒単位の誤差など) 状態を保証することはできません。
詳しくは以下の弊社技術情報をご参照ください。

939322 Support boundary to configure the Windows Time service for high accuracy environments
<http://support.microsoft.com/kb/939322/>


関連情報


How Windows Time Service Works
http://technet.microsoft.com/en-us/library/cc773013.aspx

Windows タイム サービスによる時刻の同期
http://support.microsoft.com/kb/307897

Windows Time Service Tools and Settings
http://technet.microsoft.com/en-us/library/cc773263(WS.10).aspx

Using Windows Server 2003 in a Managed Environment Windows Time Service
http://www.microsoft.com/technet/prodtechnol/windowsserver2003/technologies/security/ws03mngd/26_s3wts.mspx

Windows Time Service Tools and Settings
http://technet.microsoft.com/en-us/library/cc773263(WS.10).aspx

Windows Server 2003 で権限のあるタイム サーバを構成する方法
http://support.microsoft.com/kb/816042/ja