ネットの相手から「いま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 |
②から③まではサーバーの時計で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つの送受信時刻から通信の遅れを見積もり、時計を合わせる考え方と限界を説明できる。」を、いまの自分の言葉で一文にしてみてください。途中の説明でも大丈夫です。




