Windows OSは、複数のコンピュータ間でそれぞれの持っている時刻情報を同期させる機能を持っている。本連載ではWindowsシステム/ネットワークの管理者を対象に、この時刻同期機能の基本原理やWindows OSにおける設定方法、トラブルシューティングなどの方法を全4回で解説する。
本連載では、主にWindows Vista/Windows 7/Windows Server 2008/Windows Server 2008 R2を対象としています。Windows XPやWindows 2000 Server/Windows Server 2003については、以下の旧記事を参照してください。
Windows OSでは、「NTP(Network Time Protocol)」を使って複数のコンピュータ間で時刻情報を同期させている。NTPとは、ネットワークを使って、コンピュータ同士の時刻を同期させるプロトコルのことを指す。
NTPでは、ネットワーク機器やOSプラットフォームには依存せずに相互運用性を持つよう、IPプロトコルによる通信を前提として定義されている。RFC 1305などで勧告されているインターネット標準のプロトコルであり、通信にはUDPのポート123番が利用される。ちなみに通常はソース・ポート(発信元ポート)もディスティネーション・ポート(あて先ポート)も、どちらもUDPのポート123番を利用するように規定されている。
コンピュータの時刻同期については、一般にはあまり気にされていないが、業務用のシステムであれば、コンピュータのログの時刻を適切に管理したり、利用しているメールやファイルのタイム・スタンプ情報(作成や更新の時刻)の整合性を担保したりするために必要である。また一般の家庭向けのコンピュータであっても、時間単位での課金サービスを利用している場合、サーバとクライアントで時刻が違っているとトラブルになりかねない。このような背景から、時刻同期はきちんと行う必要があるだろう。
NTPの規格には、長らく使われてきたRFC 1305で勧告されたVer.3と、最近よく利用されている、RFC 5905で勧告されたVer.4がある。Ver.4はVer.3の改善版であり、同期の精度向上のためのアルゴリズム改善やセキュリティ機能、ダイヤルアップ接続に対するサポートや自動的にNTPサーバを見つける仕組みなどが追加実装された拡張版である。現在ではNTP Ver.4が主流となっているが、Ver.3と完全に互換性があるため、NTPのVer.4とVer.3が混在しているのが実情と思われる。RFC 1305およびRFC 5905の詳細については以下を参照してほしい。
なお、参照先とするNTPサーバについてだが、「不特定な利用者の参照を許可している」ことをアナウンスしている研究機関やサービス、あるいは自分が契約しているプロバイダが用意したサーバを使うべきであり、それ以外のサーバは使うべきではないだろう。「参照を許可している」研究機関としては、例えば次のような組織がある。
なお、Windowsの参照先NTPサーバには「time.windows.com」が最初から指定されているのでこれを利用してもよいが、ネットワーク的に近い距離にある国内のNTPサーバを利用した方がよいだろう。
NTPの基本動作には、「相手先の時刻情報を正確に取得する」と「その時刻情報が正確かどうかを評価する」の2つがある。
NTPクライアントはネットワークを経由してNTPサーバの時刻情報を取得するが、ネットワークを経由すると、その遅延のために必ずいくらかの時間がかかる。その分を考慮しなければ、正確な時刻情報にはならない。そのためNTPプロトコルでは、クライアントからNTPサーバに対するクエリの送受信時刻や、サーバ側での受信および応答送信時刻を使って、正確な時刻情報を受け渡すようにしている。具体的には、次の4つの時刻情報をNTPパケットを使ってやり取りする。
t1 =[クライアントがクエリを発信した時刻]
t2 =[サーバがクエリを受信した時刻]
t3 =[サーバが応答を発信した時刻]
t4 =[クライアントが応答を受信した時刻]
図にすると、次のようになる。
サーバとクライアントはそれぞれ自分自身の時計(クロック)を持っているが、2つの時計の間には「ずれ(時刻差)」があるとする。NTPプロトコルでは、次のような時刻情報のやり取りを行う。
このようにNTPでクエリの送信と応答の受信を行うと、t1/t2/t3/t4の4つの時刻情報が得られるが、この4つの時刻情報を使って次の2つの値を計算する。
往復にかかった時間(Roundtrip Time)=(t2−t1)+(t4−t3)
クライアントの時刻差(Offset)=((t2−t1)−(t4−t3))÷2
「往復にかかった時間(Roundtrip Time)」は、クライアントからサーバへの所要時間と、サーバからクライアントへの所要時間を加えたものである。これは「往復遅延時間(Roundtrip Delay Time)」とも呼ばれ、サーバとクライアント間のネットワーク的な距離を示す。この値が小さいほど当然誤差は小さくなる。上の例では「2」なので、往復に要する時間は2秒ということになる。
「クライアントの時刻差(Offset)」は、サーバから見て、クライアントの時刻がどれだけずれているかを表す。0なら両者の時計は同じ時刻になっている、正ならクライアントの方が遅れている、負ならクライアントの方が進んでいることを表す。上の例では「1」なので、クライアントの時計は1秒遅れていることになる。
なお、NTPでは相互運用性をうたっているので、参照するNTPサーバがどのくらい信頼できるものなのかはクライアントからは事前に分からない。また、NTPの時刻同期は1/1000秒(1ms)といったレベルで考慮されるが、NTPサーバ自身の内部クロックの精度やネットワーク負荷の状況によっては、いつでも正確な時刻を提供できるとは限らない。
NTPでは、基準となる時刻を保持するStratum 1のNTPサーバを頂点に、複数のサーバがそれぞれに階層(Stratum)を構成することで、実質上のフォールト・トレラント(耐障害性)を確保したり、参照するNTPサーバが基準に対してどのくらい近いのかを判定したりする(次の図参照)。同期元NTPサーバの階層はStratum、同期先NTPのIPアドレスなどはReference Identifierといった情報で表現される(関連記事参照)。
また、NTPサーバがどのくらい正確なのかを示す指標として、「分散(dispersion)」がある。分散は、NTPサーバがどのくらい正確な時刻を提供できているのかといった“揺らぎ”を統計学的に表現したもので、値が小さいほど正確とされる。別名「ジッタ(jitter)」とも呼ばれる。
実際のNTPでは、「同期距離(Synchronization Distance:Rootからの往復遅延時間)」および「同期分散(Synchronization Dispersion:Rootからの分散*1の合計)」が計算により算出され、今まで記した要素を含め、これらが判定基準に使われている。
*1 分散とは、数値がどの程度散らばっているかを表す指標。算術平均値と値の差(偏差)を二乗し、それらを算術平均すると得られる。この値の平方根が標準偏差。
NTPにはいくつかの「同期モード(アソシエーション)」があるが、よく使われるモードは次の2つである。
これは、NTPクライアントがNTPサーバに対して一方的に同期を行うモードで、シンプルなため、どのような構成のNTPサーバに対しても動作する。一般に極めてよく使われるモードである。
これは相互同期(peer)を行うもので、主に同じ階層に属するNTPサーバ同士の場合に使われる。同期メンバをグループ化し、NTPサーバ間で基準サーバを動的に決定するといった連携に優れている。ただし、あらかじめこのモードで同期するよう構成されたNTPサーバでなければ正常に動作しないことがある。
Copyright© Digital Advantage Corp. All Rights Reserved.