Part1では,インターネットで使われる時刻合わせ用のプロトコル「NTP」について説明する。パソコンOSやUNIX系OSに標準搭載されている技術だ。

 NTPは,UDPの123番ポートを使ってやりとりする,アプリケーション・プロトコル。その考え方は難しくないが,奥の深いプロトコルといえる。NTPを理解すれば,NTPの上手な使い方が見えてくる。そのうえでパソコンの時刻合わせ機能をきちんと設定すれば,テレビ・ラジオ放送や電話の時報と比べてもほとんど差がわからないレベルで時刻が合わせられるようになる。

上位から下位へ時刻情報を転送

 NTPは,時刻を合わせたいNTPクライアント(パソコン)が,正確な時刻を持つNTPサーバーから時刻情報を取得するのが基本だ。ただし,それだけでは少数のNTPサーバーに多数のNTPクライアントからのアクセスが殺到してしまう。そこで,1台のNTPサーバーがほかのNTPサーバーに時刻を配信できるようになっている。上位階層のNTPサーバーから下位のNTPサーバーに時刻情報が配信されていくわけだ(図1-1)。

図1-1●NTPサーバーは階層化されている<br>上の階層のNTPサーバーから下の階層のNTPサーバーに時刻情報が送られる。
図1-1●NTPサーバーは階層化されている
上の階層のNTPサーバーから下の階層のNTPサーバーに時刻情報が送られる。
[画像のクリックで拡大表示]

 NTPサーバーのうち,最上位の階層のものをStratum1(ストレイタム・ワン),次の階層をStratum2というように呼ぶ。Stratum1は,外部の時計に同期し,Stratum2は,Stratum1のNTPサーバーに同期する。仕様上はStratum15まで存在できるが,ネットワーク上で公開されているNTPサーバーの多くは,Stratum1かStratum2だ。

 NTPサーバー間で時刻を配信するときに使うプロトコルは,NTPクライアントとNTPサーバーの間と同じ。下位のNTPサーバーが,NTPクライアントとして上位のNTPサーバーにアクセスするのが基本だ。

遅延を測定して補正する

 では,NTPがどのように時刻情報を転送しているか,ネットワーク上のやりとりを見ていこう。NTPパケットには,時刻情報が書き込まれている。ただし,NTPサーバーの時刻情報だけが書き込まれているわけではない。NTPパケットを受け取ったNTPクライアントが,NTPサーバーの時刻情報をそのまま使うと,クライアントの時計はネットワークの遅延時間分だけずれてしまうからだ(図1-2のA)。

図1-2●NTPは往復遅延時間を測定して時刻を補正する<br>NTPサーバーの時刻をそのまま使うと遅延時間分だけずれてしまう。そこでNTPクライアントは,往復遅延時間を測定して時刻を補正する。
図1-2●NTPは往復遅延時間を測定して時刻を補正する
NTPサーバーの時刻をそのまま使うと遅延時間分だけずれてしまう。そこでNTPクライアントは,往復遅延時間を測定して時刻を補正する。
[画像のクリックで拡大表示]

 そこでNTPは,時刻情報を配信するたびに変わるネットワークの伝送遅延をうまく補正するしくみを備える(同B)。

 NTPクライアントは時刻情報を要求するときに,自分の時計の時刻を書き込んで送る。NTPクライアントからの要求を受け取ったNTPサーバーは,まず受け取ったときの時刻を記録し,応答パケットができたら,受け取ったときの時刻と送信するときの時刻を刻印してNTPクライアントに返信する。

 こうすれば受け取ったNTPクライアントは,パケットを受け取った時刻と,パケットに書き込まれた時刻情報から,往復の遅延時間を計算できる。往復の遅延時間の2分の1が片道の遅延時間と考えれば,受け取ったときの時刻が,NTPサーバーの時刻のどこに当たるかを計算できるわけである。