1. Introduction (はじめに)
本文書は、分散型タイムサーバーとクライアント群の間でシステムクロックを同期するために広く使用されているネットワークタイムプロトコルバージョン4 (Network Time Protocol version 4, NTPv4) を定義します。本文書は、コアアーキテクチャ (architecture)、プロトコル (protocol)、ステートマシン (state machines)、データ構造 (data structures)、およびアルゴリズム (algorithms) を記述します。NTPv4は、[RFC1305] で記述されているNTPv3に新しい機能を導入し、[RFC4330] で記述されている簡易NTPバージョン4 (Simple NTP version 4, SNTPv4) から拡張された機能を含みます (SNTPv4はNTPv4のサブセットです)。本文書は [RFC1305] と [RFC4330] を廃止します。一部のプロトコルヘッダーフィールドに若干の変更が加えられていますが、これらはNTPv4と以前のバージョンのNTPおよびSNTPとの相互運用性には影響しません。
NTPサブネットモデル (subnet model) には、国家標準に有線または無線で同期された、広くアクセス可能な多数の主タイムサーバー (primary time servers) が含まれます。NTPプロトコルの目的は、これらの主サーバーから副タイムサーバー (secondary time servers) とクライアントへ、プライベートネットワークと公共インターネットの両方を介してタイムキーピング情報を伝達することです。精密に調整されたアルゴリズムは、ネットワーク障害、サーバー障害、および潜在的な敵対的行為から生じる可能性のあるエラーを軽減します。サーバーとクライアントは、ルートの主サーバーから分岐する副サーバーを介してクライアントへ値が流れるように構成されています。
NTPv4設計は、NTPv3設計における重大な欠点を克服し、特定のバグを修正し、新機能を組み込みます。特に、拡張されたNTPタイムスタンプ (timestamp) 定義は、実装全体で浮動小数点倍精度 (floating double) データ型の使用を推奨します。その結果、時間分解能 (time resolution) は1ナノ秒より優れ、周波数分解能 (frequency resolution) は1秒あたり1ナノ秒未満です。追加の改善には、システムクロックハードウェアの周波数変動により敏感に反応する新しいクロック調整アルゴリズム (clock discipline algorithm) が含まれます。現代的な機器を使用する典型的な主サーバーは、数十マイクロ秒以内の精度です。高速LAN上の典型的な副サーバーとクライアントは、ポーリング間隔 (poll intervals) が最大1024秒の場合、数百マイクロ秒以内です (これはNTPv3での最大値でした)。NTPv4では、サーバーとクライアントは、ポーリング間隔が最大36時間の場合、数十ミリ秒以内の精度です。
本文書の主要部分は、準拠した実装間で相互運用するために必要なコアプロトコルとデータ構造を記述します。付録Aには、スケルトンプログラム (skeleton program) の形式で完全機能の例が含まれており、コアアルゴリズムのデータ構造とコードセグメント、および信頼性と精度を向上させるために使用される緩和アルゴリズム (mitigation algorithms) が含まれています。スケルトンプログラムや本文書内の他の記述は特定の実装に適用されますが、必要な機能を実装する唯一の方法として意図されていません。付録Aの内容は、プロトコルの動作を説明するために設計された非規範的な例であり、準拠した実装の要件ではありません。本文書で記述されているNTPv3対称鍵認証スキーム (symmetric key authentication scheme) はNTPv3から引き継がれていますが、NTPv4に新しく追加されたAutokey公開鍵認証スキーム (public key authentication scheme) は [RFC5906] で記述されています。
NTPプロトコルには、第2節で記述されている動作モード (modes of operation) が含まれ、第6節で記述されているデータ型 (data types) と第7節で記述されているデータ構造 (data structures) を使用します。第5節で記述されている実装モデル (implementation model) は、スレッド化されたマルチプロセスアーキテクチャ (threaded, multi-process architecture) に基づいていますが、他のアーキテクチャも使用できます。第8節で記述されているオンワイヤプロトコル (on-wire protocol) は、測定されたクロックオフセット (clock offsets) のみに依存する返却可能時間 (returnable-time) 設計に基づいていますが、信頼性の高いメッセージ配信を必要としません。TCP [RFC0793] などの信頼性の高いメッセージ配信は、実際には配信されたNTPパケットの信頼性を低下させる可能性があります。なぜなら、再試行により遅延値やその他のエラーが増加するためです。同期サブネット (synchronization subnet) は、最短パススパニングツリー (shortest-path spanning tree) と定義されたメトリック (metric) によって決定される同期パスを持つ、自己組織化された階層的なマスタースレーブネットワーク (hierarchical, master-slave network) です。複数のマスター (主サーバー) が存在する可能性がありますが、選挙プロトコル (election protocol) の要件はありません。
本文書には [ref9] からの資料が含まれており、RFC形式には不適切なフローチャートと方程式が含まれています。[ref7] には、本文書のプロトコルとアルゴリズムの広範な技術分析とパフォーマンス評価を含む、多くの追加情報があります。リファレンス実装は www.ntp.org で入手できます。
本文書の残りの部分には、多数の変数と数式が含まれています。一部の変数はギリシャ文字の形式をとり、大文字小文字を区別する完全な名前で綴られます。たとえば、DELTAは大文字のギリシャ文字を指し、deltaは小文字の文字を指します。さらに、下付き文字は '_' で示されます。たとえば、theta_iは、下付き文字iを持つ小文字のギリシャ文字theta、または音声的にはtheta sub iを指します。本文書では、すべての時間値は秒 (s) 単位であり、すべての周波数は分数周波数オフセット (Fractional Frequency Offsets, FFOs) (純粋な数値) として指定されます。これらのFFOを百万分率 (parts per million, ppm) で表現することがしばしば便利です。
1.1. Requirements Notation (要件表記法)
本文書のキーワード "MUST" (しなければならない)、"MUST NOT" (してはならない)、"REQUIRED" (必須である)、"SHALL" (しなければならない)、"SHALL NOT" (してはならない)、"SHOULD" (すべきである)、"SHOULD NOT" (すべきでない)、"RECOMMENDED" (推奨される)、"MAY" (してもよい)、および "OPTIONAL" (任意である) は、[RFC2119] に記述されているように解釈されるものとします。