NTP(Network Time Protocol)は、コンピュータ(クライアント)が管理している時計の時刻を、ネットワークを通じて別のコンピュータ(サーバー)と同期するための通信プロトコルである。クライアントはサーバーに時刻を問い合わせ、その応答を使って時刻を修正する。

 コンピュータには通常、ハードウエアとして内蔵された時計とソフトウエア(OS)が管理する時計がある。ハードウエアの時計は、例えばパソコンではマザーボード上にあるボタン電池で常に動いており、「システム時計」と呼ばれる。一方のOSが管理する時計は、画面上に時刻を表示したり、ユーザー権限の管理に使ったりする。OSの時計はコンピュータの電源をオフにすると動かなくなる。そこでOSの起動時にはシステム時計の時刻を使い、その後OSの時計をNTPサーバーと同期する仕掛けになっている。

 NTPで利用するサーバーは、インターネット上にある、「協定世界時」(UTC)を基にしたサーバーや、LAN内にあるサーバーだ。協定世界時とは、世界各国にある原子時計を基に算出した、世界中で基準となる時刻である。

 クライアントがなるべく正確に時刻を同期するには、ネットワーク遅延を考慮する必要がある。ネットワーク遅延とは、クライアントやサーバーが送信したパケットが、相手に届くまでの時間だ。特にインターネット上にあるNTPサーバーを利用する場合は、遅延が顕著になる。NTPは、ネットワーク遅延を計算して時刻を調整する。

 で流れを説明する。まず、クライアントは時刻の通知を要求するパケットをサーバーに送信し、その応答が届くまでの時間を算出する。応答パケットには、サーバーが要求パケットを受信した時刻と応答パケットを送信した時刻が記録されているので、ここからサーバーの処理にかかった時間を算出する。この2つの時間の差がサーバーとクライアントの往復にかかったネットワーク遅延だ。この半分(片道の時間)を、サーバーが応答パケットを送信した時刻に加えてクライアントの時計に設定すると、サーバーの時刻と同期できる。

図●パソコン側の時刻を調整するNTPの仕組み
図●パソコン側の時刻を調整するNTPの仕組み
[画像のクリックで拡大表示]