通信用語の基礎知識 戻る
アスカネットワークサービス

NTP

読み:エンティーピー
外語:NTP: Network Time Protocol
品詞:名詞
1999/12/27 作成
2008/03/31 更新

ネットワークを利用して時刻情報を受け渡す通信プロトコルで、代表的なもの。ポートは123/udpを使用する。

コンピュータ内蔵の時計は、精度はさほど高くない。このため使用しているうちに必ず時刻がずれてくる。従って定期的に時刻合わせを行なう必要があるが、人手で行なうと手間が掛かり、また誤差も出る。

そこでネットワークを利用し、自動的に時刻合わせを行なう仕組みを提供するプロトコルが様々に作られ、そのうちの一つがNTPである。

NTPバージョン3がRFC 1305外部リンクで規定される。

旧プロトコルとの差異

単にネットワーク上のシステムから時刻情報を取得するプロトコルとしては、TIMEプロトコル(RFC 868外部リンク)などがある。

これは、1900年1月1日 00:00:00(UTC)からの経過秒数を返す。

NTPは更に工夫が施されており、リクエストや応答の送受信時のタイムスタンプなどが存在しており、ネットワークの遅延を計算し、より正確な時刻の補正が行なえる。

仕様

NTPも同様に、1900年1月1日 00:00:00(UTC)からの経過秒数を32ビットで返す。加えて、32ビットで小数点以下の秒情報を32ビットで返す。

その他に、誤差情報などのソースの性能情報や、サーバ・クライアント間のネットワーク時間を吸収するための機構などが備わっている。

NTPは必要と思われるあらゆる機能を含んでいる関係から、大変複雑怪奇な仕様と化している。そこで、機能を普段必要なものだけに制限した簡易版のSNTP(Simple Network Time Protocol)もRFC 2030外部リンクとしてINFORMATIONAL(情報提供)扱いになっている。

西暦2036年問題

問題

NTPは、基点である1900年1月1日 00:00:00(UTC)からの経過秒数を32ビットで返す。これはつまり、232−1秒、すなわち4,294,967,295秒までしか数えることができない。これを超えた場合、経過秒数は0に戻ってしまう。

NTPで表現可能な日時は、2036年2月6日 06:28:15(UTC)、つまり2036(平成48)年2月6日15:28:15(日本時間)(@311)であり、これより後を表現できない。これが、いわゆる2036年問題である。

対応

そこで、現在ではSNTPv4などのRFCにより対応案が提案されている。

秒数は32ビット無符号の数値であるので、この最上位ビットを見て判断する。これを著している現時点の日時を表わすには最上位ビットが立った状態である。

最上位ビットが0つまり立っていない最後の年は1968(昭和43)年である。

さて、NTPが送信するのは「現在日時」であるので、これ以前が表現できなくても何の問題もない。そこで、次のようにする。

  • 0x80000000〜0xffffffff: 1968年〜2036年 (2036(平成48)年2月6日15:28:15(日本時間)(@311)まで)
  • 0x00000000〜0x7fffffff: 2036年〜2104年 (2036(平成48)年2月6日15:28:16(日本時間)(@311)から)

今のうちから、このように実装を改めれば、特段大きな問題にはならないと考えられる。

この解決方法は同時に2104年問題を含むことになるが、この年が近付いた頃に同様の対応をすることで、問題なくクリアできるものと考えられている。

セキュリティ

NTPは便利なものだが、外部から123/udpに侵入され不正な時刻が設定されるというセキュリティ上の問題もある。

例えばKerberos等の時刻を基準としたチャレンジ&レスポンス型のパスワードを利用する機構の場合、時刻を変更されることで同じチャレンジが再び使われる可能性がある。