パソコンの時計はどうやって合う?NTPと通信の遅れのしくみ

ラボでイトとピコが、データをやり取りするパソコンの時計を見つめるイラスト

30秒でわかる答え

NTPは、送受信の時刻から通信にかかった時間と時計のずれを見積もり、ネットワークを通じて時計を合わせる仕組みです。行き帰りの遅れが違うと誤差は残ります。

ネットの相手から「いま12時ちょうどです」と返事が届いたとします。でも、届くまでにも時間はかかるはず。その瞬間に自分の時計を12時にしたら、少し遅れてしまいそうです。

NTPは、ネットワークを通じてコンピューターの時計を合わせるための通信の決まりです。 相手の時刻を受け取るだけでなく、送った時刻と受け取った時刻を使い、通信にかかった時間と時計のずれを見積もります。

パソコンなどの時刻合わせで使われるこの仕組みを、一往復のやり取りで見てみましょう。

NTPは「返事に書かれた時刻」をそのまま使わない

時刻を知らせる相手を、NTPサーバーと呼びます。自分のパソコンから問い合わせを送り、サーバーが返事をし、その返事がパソコンへ戻ります。サーバーは、基準となる時計や別の時刻サーバーを参照して時刻を保っています。

返事に書かれているのは、サーバー側で記録した時刻です。返事のデータが届くまでにも時計は進むので、受け取った瞬間の時刻とは少し違います。

そこで必要なのが、「何時と書いてあるか」に加えて、どれくらい遅れて届いたかを考えることです。

イト

返事が来るまでの時間も、時計に足せばいいの?

ピコ

そう考えたいね。でも、行きと帰りがあるし、相手が返事を用意する時間もあるよ。

送る・受け取る、4つの時刻を残す

NTPの基本となる問い合わせと返事では、次の4つの時刻を使います。自分が送った時刻と戻ってきた時刻は自分の時計で、相手が受け取った時刻と返した時刻は相手の時計で記録します。

下の数字は、計算を追うために作った例です。まだ時計を合わせていないので、パソコンとサーバーの表示にはずれがあります。小数点以下は秒の端数で、.100 は100ミリ秒、つまり0.1秒です。

順番起きたことその機器の時計
①パソコンが送る10:00:00.000
②サーバーが受け取る10:00:02.040
③サーバーが返す10:00:02.060
④パソコンが受け取る10:00:00.100
上から下へ時間が進みます。時刻は表と同じで、共通する「10:00:」を省いています。左右の時計はまだ合っていません。縦の間隔は時間の長さに比例しない模式図です。
左のパソコンが送って右のサーバーが返す一往復。送信・受信の4時刻を、それぞれの時計で記録する図

②から③まではサーバーの時計で20ミリ秒。①から④まではパソコンの時計で100ミリ秒です。同じ時計の中で差を取るので、表示が2秒ほどずれていても、この短いやり取りにかかった時間を比べられます。ここでは、やり取りの間の時計の進み方は同じとします。

往復100ミリ秒から、サーバー内の20ミリ秒を引く

パソコンが返事を待った100ミリ秒には、通信だけでなく、サーバーが受け取ってから返すまでの20ミリ秒も含まれています。まず、それを引きます。

100 − 20 = 80ミリ秒。これが、この例で通信の往復にかかった時間です。

次に、行きと帰りに同じ時間がかかったと仮定します。この場合、帰り道は80ミリ秒の半分、40ミリ秒と見積もれます。

サーバーが返事を出したのは10:00:02.060。その40ミリ秒後に届いたと考えると、受信した瞬間のサーバー側の時刻は10:00:02.100です。一方、パソコンの表示は10:00:00.100でした。

この二つの時刻を比べると、パソコンの時計は2秒遅れていると見積もれます。返事に書かれた時刻を丸写しするのではなく、届くまでに進んだ分を考えてから、自分の時計と比べるわけです。

4つの時刻を使う計算式も見る

表の①〜④をT1〜T4とすると、通信の往復時間は「(T4 − T1) − (T3 − T2)」。サーバーの時計が自分よりどれだけ進んでいるかの推定値は「((T2 − T1) + (T3 − T4)) ÷ 2」で求めます。

この例では、後者は「(2.040秒 + 1.960秒) ÷ 2 = 2秒」です。行きと帰りに同じ時間がかかるという仮定で計算しています。

行きと帰りの遅れが違えば、誤差は残る

80ミリ秒という往復の合計が分かっても、行きが40、帰りが40だったとは限りません。行きが60、帰りが20ということも考えられます。通る経路や混み具合が違えば、かかる時間も変わるからです。

帰りに本当は20ミリ秒しかかかっていないのに40ミリ秒を足せば、20ミリ秒進めすぎた推定になります。往復を半分にする計算は、片道の時間を直接測ったものではありません。

NICTの公開NTPサービスも、利用者側の時刻精度はネットワークの状況に左右されると説明しています。基準となるサーバーが高精度でも、遠くのパソコンまで同じ精度になるとは限りません。

実際の時刻合わせでは、こうした計測を繰り返し、得られた結果を選んだり、時計の進み方を調整したりします。たとえばWindowsの時刻サービスでは、ずれに応じて時計の進み方を調整し、設定された範囲を超えるずれなら時刻を直接設定します。具体的な動作は、使う仕組みや設定で変わります。

自動で合う時計の裏に、往復の計測がある

最初の「いま12時です」という返事に戻ると、足りなかったのは、届くまでに過ぎた時間でした。NTPは送受信の時刻を持ち寄り、その遅れと時計のずれを見積もっています。

パソコンの時計が自動で合っているのを見たら、「遠くの時刻を受け取って、通信の時間も考えている」と思い出してみてください。ネットは一瞬で届くから時計を合わせられるのではなく、届くまでの時間を見積もることで、ずれを小さくしているのです。

では、その通信の遅れはどこで生まれるのでしょう。レイテンシの片道・往復と、待ち時間が増える理由を読むと、時計合わせで残った疑問もつながります。

この記事について

LAB WHITEBOARD

NTPの時刻合わせを一文で説明してみよう

「4つの送受信時刻から通信の遅れを見積もり、時計を合わせる考え方と限界を説明できる。」を、いまの自分の言葉で一文にしてみてください。途中の説明でも大丈夫です。