Network Time Protocol

Network Time Protocol
通信プロトコル
目的 時刻同期
開発者 デイヴィッド・L・ミルズ
ポート 123
RFC RFC 1305

Network Time Protocol(ネットワーク・タイム・プロトコル、NTP)は、パケット交換による遅延時間が変動するネットワーク上のコンピュータシステム間で時刻同期させるための通信プロトコルである。1985年以前から運用されており、現在使用されている中で最も古いインターネットプロトコルの1つである。NTPは、デラウェア大学デイヴィッド・L・ミルズによって設計された。NTPによって提供される数ミリ秒以下の誤差時刻同期情報システムにおいて時刻で管理される様々なデータ処理整合性を保つために必要であり、NTPが利用できなくなり時刻同期が行えなくなった場合には直ちにシステム障害が発生するため非常に重要な通信プロトコルであると言える。

概要[編集]

NTPは、全ての参加コンピュータを協定世界時(UTC)の数ミリ秒以内の時刻に同期させることを目的としている[1]:3

ネットワークに接続され、互いにデータの交換を行う機器において、各機器が持つ時計(以下、各機器が持つ時計を「RTC」として説明する)の時刻が機器間で異なると、時刻に依存した機器間のデータ交換、例えば電子メールやファイルの送受信、ログの配信などに異常をきたすおそれがある。よって、RTCの時刻は機器間で互いに同期していることが望ましい。ネットワークに接続される機器のRTCを正しい時刻に合わせる古典的な方法としてTime Protocolがある。Time Protocolは正しい時刻を提供するサーバから各機器が時刻値を取得する方法を定めている。しかし Time Protocol を用いて取得した時刻値にはサーバから機器に時刻値が到達するまでの通信時間が含まれない。よって、取得した時刻値には通信時間に起因する遅れの誤差が含まれてしまいRTCを正しい時刻に同期できない。NTPは通信時間による時刻値の誤差を小さくする工夫がなされた時刻同期のためのプロトコルである。

正確なタイムサーバ英語版を選択するために、マルズーロのアルゴリズム英語版の修正版である交差アルゴリズム英語版を使用し、ネットワーク遅延英語版の変化の影響を軽減するように設計されている。NTPは通常、インターネット上で数十ミリ秒以内の時間を維持することができ、理想的な条件の下ではLAN上で1ミリ秒以下に誤差を抑えることができる。非対称なルートやネットワークの輻輳により、100ミリ秒以上のエラーが発生することがある[2][3]。更に後に追加されたオプション仕様ではNTPインターリーブモードで約5マイクロ秒[4]、ハードウェアタイムスタンプで約100ナノ秒[5]の誤差に抑えることも可能になっている。

このプロトコルは通常、クライアントサーバモデルで記述されるが、相手側をタイムサーバとみなすことでピアツーピアネットワークにおいても使用することができる[1]:20。実装としては、UDPポート番号123を使用する[4][5][注釈 1]。また、ブロードキャストマルチキャストを使用することもでき、この場合、クライアントは最初に時刻同期のためにサーバと通信した後、時間の更新を受動的に受信することができる[3]。NTPは、直近の閏秒の情報は送信するが、タイムゾーン夏時間に関する情報は送信しない[2][3]

最新のプロトコルバージョンはバージョン4(NTP v4)で、RFC 5905で文書化されている。これはRFC 1305で規定されているバージョン3との後方互換性があり RFC 4330 (SNTP v4) の置き換えでもある。その後もRFC 7822, 8573, 9109 が発行されているが NTP v4 の拡張フィールドとメッセージ認証コードについての補足、認証コードの推奨アルゴリズム変更、ソースポートのランダマイゼーションの推奨と実質的な変更はない。(SNTP v4 については全く触れられていない)

歴史[編集]

NTPを開発したデイヴィッド・L・ミルズ
NTP関連のRFCの履歴
1975 —
1980 —
1985 —
1990 —
1995 —
2000 —
2005 —
2010 —
2015 —
2020 —
RFC 958[6]
RFC 1059[7]
RFC 1119[8]
RFC 1305[9]
RFC 5905[10]
RFC 7822[11]
RFC 1361[12]
RFC 1769[13]
RFC 2030[14]
RFC 4330[15]
RFC 5905 [10]
NTP RFCs
SNTP RFCs
DCNET Internet Clock Service[16]
SNTP

1979年、ニューヨークで開催された全米コンピュータ会議において、大西洋横断衛星ネットワーク上で動作するインターネットサービスの最初の公開デモンストレーションが行われ、ここでネットワーク時刻同期技術が使用された。この技術は後に1981年のInternet Experiment Note (IEN) 173[17]に記述され、公開プロトコルが開発され、RFC 778で文書化された。この技術は最初、Helloルーティングプロトコルの一部としてLANに展開され、ネットワークプロトタイピングに使用される実験的なオペレーティングシステムであるファズボールルータ英語版に実装され、長年にわたって使用された。

その他の関連するネットワークプロトコルは、現在でも使用可能である。その中には、イベントの時刻を記録するためのDAYTIMEプロトコルTIMEプロトコルや、ICMPタイムスタンプRFC 781に規定されるIPタイムスタンプがある。より完全な同期システムとしては、UNIXデーモンのtimedがあり、これはリーダー選出アルゴリズムを使って全てのクライアントのためのサーバを指定する[18]。デジタル時刻同期サービス(DTSS)は、NTPの階層モデルに似たサーバの階層を使用している。

1985年、NTPバージョン0(NTPv0)がファズボールとUNIXの両方に実装され、NTPパケットヘッダとラウンドトリップ遅延とオフセットの計算がRFC 958で文書化された。当時は比較的遅いコンピュータとネットワークしか利用できなかったにもかかわらず、大西洋のスパニングリンクでは通常100ミリ秒以上、イーサネットネットワークでは数十ミリ秒の精度が得られた。

1988年、NTPv1プロトコルのより完全な仕様と関連アルゴリズムがRFC 1059で公開された。この仕様は、実験結果とRFC 956で文書化されたクロックフィルタアルゴリズムに基づいており、クライアントサーバモードとピアツーピアモードを記述した最初のバージョンだった。1991年、NTPv1のアーキテクチャ、プロトコル、アルゴリズムについてのデイヴィッド・L・ミルズの論文[19]IEEE Transactions on Communications英語版に掲載され、エンジニアのコミュニティ内で広く注目を集めた。

1989年にRFC 1119が発行された。このRFCでは、状態機械を用いてNTPv2を定義し、その動作を記述するための疑似コードが含まれている。これは、管理プロトコルと暗号化認証スキームを導入し、アルゴリズムの大部分とともに NTPv4にも引き継がれている。しかし、NTPv2の設計はDTSSのコミュニティから正当性を欠いていると批判され、クロック選択手順はNTPv3以降でマルズーロのアルゴリズム英語版を組み込むように修正された[20]

1992年にRFC 1305でNTPv3が定義された。このRFCでは、参照クロックから最終的なクライアントに至るまでの全てのエラー発生源の分析が含まれており、これにより、複数の候補の間で一致しないように見える場合に、最適なサーバを選択するのに役立つメトリックの計算が可能になった。また、ブロードキャストモードが導入された。

その後、新しい機能が追加されたり、アルゴリズムが改良されたことにより、新しいプロトコルのバージョンが必要であることが明らかになった[21] 。2010年には、RFC 5905でNTPv4の仕様案が提示された。その後、プロトコルは大きく前進しているが、2014年現在、更新されたRFCはまだ公開されていない[22]。ミルズが大学教授を引退したのに伴い、Harlan Stennが率いるオープンソースプロジェクトとしてリファレンス実装が維持されている[23][24]

時刻同期の仕組み[編集]

処理の概略[編集]

NTPプロトコル上では協定世界時 (UTC) を使って時刻を送受信する。

NTPサーバプログラムが他のNTPサーバに接続すると、上位NTPサーバとのネットワーク通信の遅延を継続的に計測し、受け取った時刻情報を補正して自動的にミリ秒単位の精度で自機・OSの時計を校正する。このほか後述するように自機・OSの時計の進み遅れ度合いも校正したり、他のNTPサーバからの問い合わせに応えて時刻も提供する機能が実装されることがある。

クロック階層[編集]

NTPの階層構造の概略図。黄色の矢印は直接接続を示し、赤の矢印はネットワーク接続を示す。

NTPでは、時間源の階層的システムを使用している。階層の各レベルはstratumと呼ばれる。最上位の基準クロックをstratum 0とし、stratum 0に同期しているサーバをstratum 1とする。以降、stratum nに同期しているサーバをstratum n+1とする。この番号は、基準クロックからの距離を表し、階層内での依存関係のループを防ぐために使用される。stratumの値は必ずしも品質や信頼性を示すものではなく、あるstratum 2サーバとstratum 3サーバを比較して、stratum 3サーバの方が高品質ということもあり得る。

以下に、stratum0、1、2、3について簡単に説明する。

stratum 0
これは一般に原子時計やGPS、電波時計などの高精度の計時装置である。これらのデバイスは、接続されたコンピュータに対し割り込みやタイムスタンプをトリガする非常に正確な毎秒1回のパルスを生成する。stratum 0のデバイスは、リファレンスクロックともいう。
Stratum 1
接続されているstratum 0デバイスの数マイクロ秒以内にシステム時刻が同期されているコンピュータである。stratum 1サーバは、サニティーチェックやバックアップのために、他のstratum 1サーバとピアすることができる[25]。プライマリ・タイムサーバとも呼ばれる[2][3]
Stratum 2
ネットワークを介してstratum 1サーバに同期しているコンピュータである。多くの場合、stratum 2コンピュータは複数のstratum 1サーバに問い合わせを行う。また、stratum 2コンピュータは、ピアグループ内の他のデバイスに対してより安定したロバストな時間を提供するために、他のstratum 2コンピュータとピアすることもある。
Stratum 3
stratum 2のサーバに同期しているコンピュータである。これらのコンピュータは、ピアリングやデータサンプリングにstratum 2と同じアルゴリズムを採用しており、stratum 4のコンピュータのサーバとして機能することができる。

Stratumの上限は15で、stratum 16はデバイスが非同期であることを示すために使用される。各コンピュータ上のNTPアルゴリズムは、ベルマン・フォード最短経路スパニングツリーを構築するために相互に作用し、全てのクライアントからstratum 1サーバへの累積ラウンドトリップ遅延を最小化する[1]:20

NTPプロトコルは、stratumのほか、参照識別子(refid、4オクテット)を使用して、各サーバの同期化元を特定することができる。Stratum 1のサーバは、同期しているstratum 0サーバの具体的な実装を最長4文字のASCIIコードにて表現する。以下はRFC5905に定められているもの。

共通時間参照識別子(refid)コード
参照識別子 (refid)[26] 時間源
GOES Geosynchronous Orbit Environment Satellite(アメリカの気象衛星)
GPS グローバル・ポジショニング・システム
GAL ガリレオ(ヨーロッパの測位システム)
PPS 毎秒1パルス(pps)の時間源を表す汎用コード
IRIG 射程間計装グループ英語版(IRIG)
WWVB 長波標準電波 WWVB(アメリカ合衆国・コロラド州フォートコリンズ 60 kHz)
DCF 長波標準電波 DCF77(ドイツ・マインフリンゲンドイツ語版 77.5 kHz)
HBG 長波標準電波 HGB英語版(スイス・プランジャン英語版 75 kHz(運用中止))
MSF 長波標準電波 MSF(イギリス・アンソーン英語版 60 kHz)
JJY 長波標準電波 JJY(日本・福島県田村市 40 kHz、佐賀県佐賀市 60 kHz)
LORC ロランC英語版 100 kHz
TDF 中波標準電波 TDF英語版(フランス・アルイ英語版 162 kHz)
CHU 短波標準電波 CHU英語版(カナダ・オンタリオ州オタワ
WWV 短波標準電波 WWV(アメリカ合衆国・コロラド州フォートコリンズ)
WWVH 短波標準電波 WWVH(アメリカ合衆国・ハワイ州カウアイ)
NIST アメリカ国立標準技術研究所(NIST)電話報時サービス
ACTS NIST電話報時サービス
USNO アメリカ海軍天文台(USNO)電話報時サービス
PTB ドイツ物理工学研究所英語版(PTB)電話報時サービス
MRS 複数の参照源
XFAC インターフェイス連携の変更(IPアドレスの変更または喪失)
STEP ステップ時間の変更(オフセットはステップ閾値(125ミリ秒)以上、パニック閾値(1000秒)以下)

Stratum 2以上(階層としては下層)のサーバは、同期先のNTPサーバのIPアドレスをrefidに記述する。この情報は、NTPサーバ同士で同期先がループするのを防ぐ目的で使用される。IPv4アドレスはそのまま記述するが、IPv6アドレスの場合はそのmd5ハッシュを計算した上で、ハッシュ値の最初の4オクテットを使用する。

タイムスタンプ[編集]

NTPで使用される64ビットのタイムスタンプは、秒を表す32ビット部分と、秒未満の時間を表す32ビット部分で構成されている。秒未満の時間は、2-32秒(233ピコ秒)の理論的な分解能を持っている。秒を表す部分は32ビット符号なし整数であり、起点(エポック)としている1900年1月1日 0時0分0秒(UTC)からの経過秒数を表す。この値は、起点からから232-1秒、すなわち42億9496万7295秒(約136年)で桁あふれする。最初の桁あふれは2036年2月7日 6時28分15秒の次の秒に発生し[27][28][29]、起点と認識されてNTPが誤動作すると予想されている。これを2036年問題という。UNIX[注釈 2]にはこの問題が複数の箇所で今後顕在化するとみられるが(例: 2038年問題)、このNTPについても該当する。

RFC 4330には、最上位ビットが0の場合は時刻が2036年から2104年の間であるとみなして、2036年2月7日6時28分16秒(UTC)を起点として計算することで2036年問題を回避する方法が書かれている[27]

NTPv4では128ビットのタイムスタンプが導入されており、秒と秒未満にそれぞれ64ビットを割り当てている。秒を表す64ビットのうち、半分の32ビットは現行のNTPと同じであり、残りの32ビットは、桁あふれの回数を表すEra Number(時代番号)である[30][31]。ミルズによれば、「秒未満の64ビット値は、光子が光速で電子を通過するのにかかる時間を見分けるのに十分な分解能である。もう1つの64ビットの値は、宇宙が薄暗くなる(宇宙の終焉)までの時間を明確に表現するのに十分である。」[32][注釈 3]

クロック同期アルゴリズム[編集]

ラウンドトリップタイム δ

一般的なNTPクライアントは、1つ以上のNTPサーバに対してポーリングを行う。クライアントは、タイムオフセットとラウンドトリップタイムを計算する。

タイムオフセット θ は、クライアントとサーバのクロック間の絶対時間の差であり、次式で計算される。

ラウンドトリップタイム δ は、パケットの往復時間からサーバの処理時間を引いたものであり、次式で計算される。

ここで、

t0 は、クライアントがサーバへリクエストを送信した時刻
t1 は、サーバがクライアントのリクエストを受信した時刻
t2 は、サーバがクライアントへレスポンスを送信した時刻
t3 は、クライアントがサーバのレスポンスを受信した時刻

である[1]:19

θδの値はフィルタを通過し、統計的分析が行われる。外れ値は破棄され、残りの候補の中で最も優れた3つの候補から時間オフセットの推定値が導出される。その後、オフセットが徐々に減少するようにクロック周波数が調整され、フィードバックループを形成する[1]:20

正確な同期化は、往路と復路の通信時間がほぼ等しい場合に達成される。両者に差がある場合は、その差の2分の1が誤差になる可能性がある[33]。極端な例では、通信の往復に合計10秒掛かった場合に最大で約5秒の誤差が発生する。

運用[編集]

NTPサーバを設定する際は、サーバのIPアドレスを直接指定するのではなく、ホスト名を用いて指定すべき、とされている(RFC4330による)[34]

LAN内部にクライアント台数がそれなりにある場合には、外部へのトラフィックおよび外部NTPサーバの負荷を最小限にするため、LAN内にNTPサーバとして稼動できる機器[注釈 4]を用意し、この機器(内部NTPサーバ)をプロバイダなどの外部NTPサーバに接続し、各クライアントはこの内部NTPサーバに接続する設定を行うと良い。

ルーターやクライアントパソコンなどのネットワーク上の各機器では、前述のようなNTPサーバにアクセスして、機器内部の時計の時刻をNTPサーバの時刻に合わせることで内部時計の誤差が少なくなる。

ドリフトの修正[編集]

NTPサーバの実装の多くでは、時刻の校正のみならず、時計の進み遅れの度合いの校正も行う。一般的にコンピュータ内部の時計は、ハードウェアの時計が提供する時刻をそのまま利用する場合と、割り込みなどによりソフトウェア的に時計を進める場合がある。いずれの場合も、設計状態での時計は数ppm以上(1ppmは百万分の一、およそ10日で1秒程度の精度)の狂いがあるため、他のNTPサーバからの時刻と自機の時計を数回比較した後、時計の進み遅れの度合い(ドリフト)も修正する必要がある。さらに気温変動など外乱要因による2次以上のドリフト(上述した進み遅れ度合いの変化)も存在するが、多くのNTPサーバでは一次補正(直線的なドリフトの補正)を行う実装にとどまる。

なおNTPサーバプログラムを用いてコンピュータの時刻の校正を行う場合、突然『もっともらしい時刻』に校正するのは危険である。サーバ機能を提供しているコンピュータでは、時刻が飛ぶことにより、定時に実行されるサービス(UNIXのcron・atなど)が実行されなくなったり(時計を進める場合)同じサービスが2回実行される(時計を遅らせる場合)ことがあるからである。したがって、ドリフトを調整して時刻を目的の時刻に徐々に近づけていく実装が正しい。

閏秒の扱い[編集]

NTPプロトコルでは、電波時計の時刻送信フォーマットのように閏秒の扱いも規定されている。閏秒の挿入または削除が行われるという通知は、設定ファイル、参照クロック、リモートサーバのいずれかから受け取る。参照クロックやリモートサーバから受け取る場合は、NTPパケット内の閏秒の警告情報のフィールドが使用される。

警告情報を受け取った側がどう処理するかは、コンピュータプログラムの実装に任される。しかし、削除された1秒に自動起動するサービスがあるかもしれなかったり、外部要因で日付が変わると無効になるライセンスがありえたりするため注意が必要である[35]

leap smearingと呼ばれる実装では、一秒挿入するのではなく、閏秒の前後20時間をかけて、ゆっくり一秒分の時間を伸ばすことで問題を回避している[36]。この実装は、Google(内部的にも公開NTPサーバー上でも)とAmazon AWSによって使用されている[37]

実装[編集]

NTP管理プロトコルユーティリティ ntpqで、stratum 2サーバの状態を照会している様子。

下位プロトコル[編集]

通常、NTPはUDP上で動作する。UDPのポートは123番を使用する。ルータのパケットフィルタの設定でポート123番を通さないようにしている場合は、外部のNTPサーバにアクセスできなくなるので、通すように設定する必要がある

リファレンス実装[編集]

NTPのリファレンス実装は、プロトコルとともに20年以上にわたって継続的に開発されてきた。新しい機能が追加されても、後方互換性が維持されてきた。これには、特にクロックを規律するためのいくつかの繊細なアルゴリズムが含まれており、異なるアルゴリズムを使用しているサーバに同期させると誤動作する可能性がある。このソフトウェアは、パーソナルコンピュータを含むほぼ全てのプラットフォームに移植されている。UNIXではntpd英語版というデーモンとして、Windowsではサービスとして動作する。基準クロックにも対応しており、そのオフセットはリモートサーバと同じようにフィルタリングされ、分析されるが、通常はより頻繁にポーリングされる[1]:15–19。この実装は2017年に検査され、多数の潜在的なセキュリティ問題が発見された[38]

SNTP[編集]

Simple Network Time Protocol (SNTP)は、NTPと同じプロトコルを使用するが、長時間の状態の保存を必要としない、NTPのサブセットの実装である[39]組み込みシステムや、完全なNTP機能が必要とされないアプリケーションで使用される[40]

Windows[編集]

Windows NTではSMBプロトコルを使ったnet timeコマンドによる時刻同期が可能であったが、これはNTPではなかった。またそれ以前のWindowsでは、サードパーティーのソフトウェアを使用する必要があり、日本では、Windowsが本格的にインターネット対応を開始した1990年代後半に「桜時計」と呼ばれる、サードパーティーによるNTPの実装が有名になった。

Windows 2000以降のWindowsには、コンピュータの時計をNTP サーバに同期させる機能を持つWindows Timeサービス (W32Time)が含まれている[41]。W32Timeは元々ケルベロス認証バージョン5のために実装されたものである。ケルベロス認証では、反射攻撃への対抗として、タイムスタンプに含まれる時間が正確な時間から5分以内である必要があった。

Windows 2000Windows XPではSNTPのみを実装しており、NTPバージョン3に対してはいくつかの規約に違反している[42]Windows Server 2003Windows Vistaからは、フルセットのNTPに準拠した実装となり[43]、GUIで時刻同期を設定することができるようになった。また、有志によってビルドされたWindows向けのntpd/ntpdateも公開されている[44]

マイクロソフトは、W32Timeは1秒の精度でしか時刻同期を確実に維持できないと声明している[45]。より高い精度が必要な場合は、Windowsの新しいバージョンを使用するか、別のNTP実装を使用することを勧めている[46]Windows 10Windows Server 2016では、特定の動作条件の下で1ミリ秒の時間精度の同期に対応している[47][45]

UNIXなど[編集]

OpenNTPD[編集]

2004年、Henning Brauerは、セキュリティに焦点を当てて特権分離設計としたNTPの実装であるOpenNTPDを発表した。これは、OpenBSDユーザのニーズに密着したものである一方で、 既存のNTPサーバとの互換性を保ちつつ、いくつかのプロトコルセキュリティの改善も含まれている。移植版は、Linuxのパッケージリポジトリで入手可能である。

ntimed[編集]

新しいNTPクライアントであるntimedが、ポール=ヘニング・カンプ英語版によって2014年に開始された[48]。この実装は、リファレンス実装の代替としてLinux Foundationがスポンサーとなっている。リファレンス実装を元にするより、新しい実装をゼロから書いた方が簡単であると判断されたためである。公式にはリリースされていないが、ntimedは確実にクロックを同期させることができる[49]

NTPsec[編集]

NTPsecは、リファレンス実装をフォークし、体系的にセキュリティを強化した実装である。フォークポイントは2015年6月で、2014年に発生した危殆化した脆弱性への対応が行われた。最初の正式版は2017年10月にリリースされた[50]。安全ではない機能の削除、時代遅れのハードウェアやUNIXバリアントへの対応の削除により、元のソースコードの75%を削除し、残りの部分を検査を受けやすくした[51]。2017年のコードの検査では、リファレンス実装にはなかった2つを含む8つのセキュリティ問題が検出されたが、元のリファレンス実装に残っていた他の8つの問題の影響を受けることがなかった[52]

chrony[編集]

chronyc, user license and command line help. Terminal window under Ubuntu 16.04.

chronyは、Red Hatのディストリビューション[53]にデフォルトで搭載されており、ubuntuのリポジトリでも利用可能である[54]。chronyは、不安定でスリープモードになったり、インターネットに断続的に接続したりするような一般的なコンピュータを対象としている[55]。また、より不安定な環境である仮想マシン用にも設計されている。リソース消費量(コスト)が少ないのが特徴で、NTPだけでなく、Precision Time Protocol(PTP)にも対応している。主なコンポーネントは、コンピュータの起動時に実行されるデーモンであるchronydと、その設定のためのコマンドラインインターフェースであるchronycの2つである。

chronycは非常に安全で、数件の事故があっただけだが[56]、その利点は、不必要な複雑さを避けるためにゼロから書かれたコードの汎用性にある[57]

chronyはGNU General Public License version 2で利用可能である。1997年にRichard Curnowによって作成され、現在はMiroslav Lichvarによってメンテナンスされている[58]

Mac[編集]

macOS においても、標準でntpd/ntpdateが使用されていて、コマンドを意識せずGUIから設定できる。以前のMac OS 9でもNTPクライアントは標準で組み込まれていた。

その他[編集]

また、ルータースイッチングハブなどのネットワーク機器にNTPサーバが搭載される場合がある。もともとは高級なネットワーク機器[注釈 5]に搭載される機能であったが、ネットワーク普及に伴う機器の低価格化により、2000年代後半には民生用のネットワーク機器においてもNTPサーバが搭載されている。

運用と諸問題[編集]

前述の通りNTPは階層構造を採用しているため、負荷分散が行えるように工夫されている。しかし、NTPと同じく階層構造を採用するDNSではDHCPPPPによるDNSサーバアドレス配信の仕組みが普及しているのに対し、NTPではDHCPではオプション42として[59][60]、DHCPv6ではオプション56として[61][62]NTPサーバアドレス配信の仕組みが定義されているものの、2024年3月現在ほとんど利用されていない。よって、エンドユーザーは自ネットワーク内のNTPサーバの存在を知ることができず、エンドユーザーが stratum 1 の公開 NTP サーバを使用する傾向がある。結果的に、一つのNTPサーバにアクセスが集中するためサーバの応答性を下げ、配信される時刻の正確性が失われる。

この問題に対する国際的なプロジェクトとして、NTP pool project が存在する。これは、世界全体、あるいは国単位でまとめられたNTPサーバーのリストを用意し、DNSラウンドロビンによってNTPクライアントからのアクセスを振り分けるようにする公開DNSサーバーであり、サーバー名として 0.pool.ntp.org, 1.pool.ntp.org などのように指定すると全世界にあるNTPサーバーからランダムに選ばれたどれかのIPアドレスが返される。大陸別、あるいは国別の地域割りもなされており、たとえば 0.jp.pool.ntp.org や 1.jp.pool.ntp.org を指定すれば、日本国内にあるNTPサーバーのIPアドレスがランダムに返される。0.asia.pool.ntp.org ならアジア地区のNTPサーバーのどれかがランダムに選ばれる。プールされているサーバーのアドレスは、2022年10月現在、全世界で4665、日本国内については44である。なお、このプロジェクトはエンドユーザーからのアクセスを分散することを主目的としているため、プールされているNTPサーバーには、stratum 3や4も含まれている。

Windows や macOS の初期設定サーバは混雑しているため、ISP提供のサーバや、上記のNTPプール、あるいは後述の公開NTPサーバ等に変更すると、より正確な時刻取得が可能になる。

日本では情報通信研究機構 (NICT) が世界最高性能のNTPサーバ (ntp.nict.jp) を2006年6月より一般公開したので、負荷に起因する問題は解決の方向へ向かうと思われる。NICTによれば、世界中のNTPリクエストを合計しても数万リクエスト/秒程度なので、100万リクエスト/秒を扱える新しいシステムでは負荷の問題ではなく知名度の低さが問題としている[63]

clock.nc.fukuoka-u.ac.jp問題[編集]

日本では、福岡大学1993年平成5年)からNTPサーバを公開しているが、ここを参照するように設定された機器や組み込まれたソフトウェアが非常に多いため[注釈 6]、アクセス集中による過負荷に悩まされていることが、2005年に報告された[64]。契約しているインターネットサービスプロバイダ (ISP) の公開するサーバを利用することで、この問題は解消するので、ISPや研究機関等が加入者向けにサービスするNTPサーバや公開NTPサーバに、今すぐ設定を変更することである。

2017年現在も、福岡大学NTPサーバへのデータトラフィックは過大な状態が続いており、平均180Mbpsに達している[65]。アクセス過多の原因の一つとして、一部メーカーのネットワーク機器にNTPサーバのアドレスがハードコーティングされていることが挙げられている。

ネットワーク機器にアドレスがハードコーティングされた一例として、TP-Link製の無線LAN中継器がある。この機器は、本来の時刻同期の目的ではなくインターネット回線の接続状態を確認するため、福岡大学を含む複数のNTPサーバへ数秒間隔でアクセスする仕様になっていた。TP-Linkからは管理画面を開いている間のみNTPサーバへアクセスするよう、仕様を変更したファームウェアが公開されている[66]

2017年、福岡大学は同NTPサービスの提供を2018年4月以降に停止する事を発表した[67]。これは、データトラフィックが多すぎるため、大学ネットワーク運用に無駄な費用がかかっている事や、サービス開始当初の1993年はNTPで時刻同期することが研究対象であったが、現在では様々なアプライアンスが販売されているため、NTPの研究として役目を終えたと理由を挙げている。2019年3月12日に2台あるNTPサーバーのうちの1台を停止した[68]

ウィスコンシン大学-ネットギアNTP問題[編集]

ネットギア製のルーターウィスコンシン大学のNTPサーバを参照するようハードコードされていたため、負荷が極度に集中した。以下に問題の経緯を記す。

2003年5月、ウィスコンシン大学に対して平均毎秒4万パケット[注釈 7]のNTPサービスへの接続が行われた。

これに対し大学側はNTP用に公開していたポートを閉じ、悪意あるアクセスは数時間のうちに収まるであろうと考えていた。しかしながら1か月後の2003年6月の時点において、大学側の予想に反するどころかさらに状況は悪化し平均毎秒25万パケットを記録。さらなる調査によって、多くの接続元が1秒毎に問い合わせを行っている事に不審を抱くこととなる。接続元となっている2つの大学に協力を要請。調査結果の中で双方ともにネットギア製のルーターを使用していた事が判明、型番もMR814であると特定された。

同年6月16日、大学側はネットギアのカスタマーサポート宛に電子メールにて状況の報告を行ったが返答がないため直接交渉を行い、19日にネットギアから「開発者によるデバッグ時の設定値の残骸が引き起こしたもの」との説明が大学側に報告され、協力体制が整備された。

2003年8月の時点において、影響を受けた生産台数70万台から行われる最大毎秒70万パケットに及ぶリスクに対して、大学側はルーター使用者に影響がでないよう配慮し、ネットギアからはファームウェアのバージョンアップが提供された。これによりウィスコンシン大学の転送量の増加傾向は弱くなり、同年11月からは減少傾向に転じることとなった。

なお、これらの事件の詳細は、2003年8月21日にウィスコンシン大学のDave Plonkaによりまとめられている[69]

他に、FreeBSDの有力開発者であるPoul-Henning Kamp(phk)が発見したD-link製ルータの問題や、ダブリンのTardis and Trinity Collegeの問題など、同様の問題が発生している。NTPサーバの誤用・不正使用問題英語版を参照のこと。

脚注[編集]

注釈[編集]

  1. ^ RFC1700のWELL KNOWN PORT NUMBERSではTCPとUDPの2つが指定されているが、NTPの規格を示したRFC1305ではUDPのみとなっている。
  2. ^ Linux, FreeBSD等UNIXライクなOSも含む
  3. ^ 2−64秒は約54ゼプト秒で、この時間に光が移動する距離は16.26ピコメートル、すなわちボーア半径の約0.31倍である。264秒は約5,850億年である。
  4. ^ もしルーターなどで提供できなければ、NTPサービス提供専用の古いパソコンをセットアップしても良いし、またサーバ的な存在になっている既存のパソコン等にNTPサーバをインストールしても良い
  5. ^ 特にルーターやゲートウェイ
  6. ^ 前述の「桜時計」もそのひとつである。
  7. ^ 異常値のようなピーク時で毎秒8万パケット

出典[編集]

  1. ^ a b c d e f David L. Mills (12 December 2010). Computer Network Time Synchronization: The Network Time Protocol. Taylor & Francis. pp. 12–. ISBN 978-0-8493-5805-0. https://books.google.com/books?id=pdTcJBfnbq8C&pg=PA12 
  2. ^ a b c Executive Summary: Computer Network Time Synchronization”. 2011年11月21日閲覧。
  3. ^ a b c d NTP FAQ”. The NTP Project. 2011年8月27日閲覧。
  4. ^ a b Port Numbers”. The Internet Assigned Numbers Authority (IANA). 2020年6月24日閲覧。
  5. ^ a b Page 16
  6. ^ RFC 958 Network Time Protocol (NTP), september 1985.
  7. ^ RFC 1059 Network Time Protocol (Version 1) Specification and Implementation, july 1988.
  8. ^ RFC 1119 Network Time Protocol (Version 2) Specification and Implementation, september 1989.
  9. ^ RFC 1305 Network Time Protocol (Version 3) Specification, Implementation and Analysis, march 1992.
  10. ^ a b RFC 5905 Network Time Protocol Version 4: Protocol and Algorithms Specification, june 2010.
  11. ^ RFC 7822 Network Time Protocol Version 4 (NTPv4) Extension Fields, march 2016.
  12. ^ RFC 1361 Simple Network Time Protocol (SNTP), august 1992.
  13. ^ RFC 1769 Simple Network Time Protocol (SNTP), march 1995.
  14. ^ RFC 2030 Simple Network Time Protocol (SNTP) Version 4 for IPv4, IPv6 and OSI, october 1996.
  15. ^ RFC 4330 Simple Network Time Protocol (SNTP) Version 4 for IPv4, IPv6 and OSI, january 2006
  16. ^ RFC 778 DCNET Internet Clock Service, april 1981.
  17. ^ D.L. Mills (25 February 1981), Time Synchronization in DCNET Hosts, オリジナルの1996-12-30時点におけるアーカイブ。, https://web.archive.org/web/19961230073104/http://www.cis.ohio-state.edu/htbin/ien/ien173.html 
  18. ^ “TIMED(8)”, UNIX System Manager's Manual, http://www.skrenta.com/rt/man/timed.8.html 2017年9月12日閲覧。 
  19. ^ David L. Mills (October 1991). “Intern Time Synchronization: The Network Time Protocol”. IEEE Transactions on Communications 39 (10): 1482–1493. doi:10.1109/26.103043. http://www3.cs.stonybrook.edu/~jgao/CSE590-spring11/91-ntp.pdf. 
  20. ^ RFC 1305”. IETF: Internet Engineering Taskforce. IETF. 2019年12月6日閲覧。 “The clock-selection procedure was modified to remove the first of the two sorting/discarding steps and replace with an algorithm first proposed by Marzullo and later incorporated in the Digital Time Service. These changes do not significantly affect the ordinary operation of or compatibility with various versions of NTP, but they do provide the basis for formal statements of correctness.”
  21. ^ David L. Mills (15 November 2010). Computer Network Time Synchronization: The Network Time Protocol on Earth and in Space, Second Edition. CRC Press. pp. 377. ISBN 978-1-4398-1464-2. https://books.google.com/books?id=BxTOBQAAQBAJ&pg=PA377 
  22. ^ Network Time Synchronization Research Project, https://www.eecis.udel.edu/~mills/ntp.html 2014年12月24日閲覧。 
  23. ^ NTP Needs Money: Is A Foundation The Answer?”. InformationWeek (2015年3月23日). 2015年4月4日閲覧。
  24. ^ NTP's Fate Hinges On 'Father Time'”. InformationWeek (2015年3月11日). 2015年4月4日閲覧。
  25. ^ Network Time Protocol: Best Practices White Paper”. 2013年10月15日閲覧。
  26. ^ 'ntpq -p' output”. NLUG.ML1.co.uk. 2020年6月24日閲覧。
  27. ^ a b RFC 4330 3. NTP Timestamp Format
  28. ^ David L. Mills (2012年5月12日). “The NTP Era and Era Numbering”. 2016年9月24日閲覧。
  29. ^ W. Richard Stevens; Bill Fenner; Andrew M. Rudoff (2004). UNIX Network Programming. Addison-Wesley Professional. pp. 582–. ISBN 978-0-13-141155-5. https://books.google.com/books?id=ptSC4LpwGA0C&pg=PA582 
  30. ^ How NTP Represents the Time (Computer Network Time Synchronization)”. 2018年7月20日閲覧。
  31. ^ A look at the Year 2036/2038 problems and time proofness in various systems”. 2018年7月20日閲覧。
  32. ^ University of Delaware Digital Systems Seminar presentation by David Mills, 2006-04-26
  33. ^ Gotoh, T.; Imamura, K.; Kaneko, A. (2002). Improvement of NTP time offset under the asymmetric network with double packets method. Conference on Precision Electromagnetic Measurements. pp. 448–449. doi:10.1109/CPEM.2002.1034915. ISBN 0-7803-7242-5
  34. ^ 日本標準時プロジェクト 公開NTP FAQ [Q.1-2] ホスト名ではなく、IPアドレスで設定しても良いですか?
  35. ^ 安藤幸央のランダウン44 時を欠ける症状-うるう秒から考えるサステナビリティ アットマーク・アイティ 2011年10月4日閲覧
  36. ^ Making every (leap) second count with our new public NTP servers
  37. ^ Google Developers Leap Smear”. 2019年4月4日閲覧。
  38. ^ Pentest-Report NTP 01.2017”. Cure53 (2017年). 2019年7月3日閲覧。
  39. ^ Network Time Protocol Version 4: Protocol and Algorithms Specification”. p. 54 (2010年6月). 2012年8月26日閲覧。 “Primary servers and clients complying with a subset of NTP, called the Simple Network Time Protocol (SNTPv4) [...], do not need to implement the mitigation algorithms [...] The fully developed NTPv4 implementation is intended for [...] servers with multiple upstream servers and multiple downstream servers [...] Other than these considerations, NTP and SNTP servers and clients are completely interoperable and can be intermixed [...]”
  40. ^ Simple Network Time Protocol (SNTP) Version 4 for IPv4, IPv6 and OSI (英語). doi:10.17487/RFC4330. RFC 4330
  41. ^ Windows Time Service Technical Reference”. technet.microsoft.com (2011年8月17日). 2011年9月19日閲覧。
  42. ^ Windows Time Service page at NTP.org”. Support.NTP.org (2008年2月25日). 2017年5月1日閲覧。
  43. ^ How the Windows Time Service Works”. technet.microsoft.com (2010年3月12日). 2011年9月19日閲覧。
  44. ^ Meinberg NTP Software Downloads
  45. ^ a b Support boundary for high-accuracy time”. Microsoft (2018年10月17日). 2020年6月24日閲覧。
  46. ^ Ned Pyle (2007年10月23日). “High Accuracy W32time Requirements”. Microsoft. 2012年8月26日閲覧。
  47. ^ Windows Server 2016 の正確な時刻”. technet.microsoft.com. 2020年6月24日閲覧。
  48. ^ 20140926 – Playing with time again”. PHK's Bikeshed. 2015年6月4日閲覧。
  49. ^ Network time synchronization software, NTPD replacement.”. ntimed git repository README file. Github. 2015年6月4日閲覧。
  50. ^ The Secure Network Time Protocol (NTPsec) Distribution”. 2019年1月12日閲覧。
  51. ^ Liska, Allan (December 10, 2016). NTP Security: A Quick-Start Guide. Apress. pp. 80–. ISBN 978-1-4842-2412-0. https://books.google.com/books?id=AB-1DQAAQBAJ&pg=PA80 
  52. ^ Pentest-Report NTPsec 01.2017”. Cure53 (2017年). 2019年7月3日閲覧。
  53. ^ Lichvar, Miroslav (2016年7月20日). “Combining PTP with NTP to Get the Best of Both Worlds”. Red Hat Enterprise Linux Blog. Red Hat. 2016年7月30日時点のオリジナルよりアーカイブ。2017年11月19日閲覧。 “Starting with Red Hat Enterprise Linux 7.0 (and now in Red Hat Enterprise Linux 6.8) a more versatile NTP implementation is also provided via the chrony package”
  54. ^ Lichtenheld, Frank. “Package: chrony (2.1.1-1) [universe]”. Ubuntu Package. Ubuntu Package. 2017年11月19日時点のオリジナルよりアーカイブ。2017年11月19日閲覧。 “Versatile implementation of the Network Time Protocol”
  55. ^ Manage NTP with Chrony” (英語). Opensource.com. 2019年6月29日閲覧。
  56. ^ Heiderich, Mario (2017年8月). “Pentest-Report Chrony 08.2017” (english). Cure53.de Team. wiki.mozilla.org, AKA MozillaWiki or WikiMO. 2017年10月5日時点のオリジナルよりアーカイブ。2017年11月19日閲覧。 “Withstanding eleven full days of on-remote testing in August of 2017 means that Chrony is robust, strong, and developed with security in mind.”
  57. ^ Securing Network Time”. Core Infrastructure Initiative, a Linux Foundation Collaborative Project. Core Infrastructure Initiative (2017年9月27日). 2017年10月28日時点のオリジナルよりアーカイブ。2017年11月19日閲覧。 “In sum, the Chrony NTP software stands solid and can be seen as trustworthy”
  58. ^ chrony introduction”. TuxFamily, a non-profit organization.. chrony. 2009年12月9日時点のオリジナルよりアーカイブ。2017年11月19日閲覧。 “The software is supported on Linux, FreeBSD, NetBSD, macOS, and Solaris.”
  59. ^ Dynamic Host Configuration Protocol (DHCP) and Bootstrap Protocol (BOOTP) Parameters”. IANA. 2024年3月21日閲覧。
  60. ^ RFC 2132 - DHCP Options and BOOTP Vendor Extensions”. IETF. 2024年3月21日閲覧。
  61. ^ Dynamic Host Configuration Protocol for IPv6 (DHCPv6)”. IANA. 2024年3月21日閲覧。
  62. ^ RFC 5908 - Network Time Protocol (NTP) Server Option for DHCPv6”. IETF. 2024年3月21日閲覧。
  63. ^ 日経NETWORK 2006年8月号 「NICTの標準時刻配信サービス」p68
  64. ^ 福岡大のNTPサーバがアクセス集中で悲鳴 - ITmediaニュース 2005年01月21日(2014年4月20日閲覧)
  65. ^ 公開NTPサーバーの運用と課題 2017/12/27閲覧
  66. ^ <更新>TP-Link製無線LAN中継器によるNTPサーバーへのアクセスに関して 2017/12/27閲覧
  67. ^ 福岡大学における公開用NTPサービス䛾現状と課題”. 2018年1月30日閲覧。
  68. ^ 公開NTPサービス | 福岡大学情報基盤センター”. www.ipc.fukuoka-u.ac.jp. 2019年3月27日閲覧。
  69. ^ Flawed Routers Flood University of Wisconsin Internet Time Server”. 2020年5月7日閲覧。

参考文献[編集]

関連項目[編集]

外部リンク[編集]

公開NTPサーバ[編集]

日本国内[編集]