2. システムアーキテクチャ
NTPモデルでは、ワイヤーまたは無線によって国家標準に同期された複数のプライマリ参照ソース(primary reference sources)が、バックボーンゲートウェイなどの広くアクセス可能なリソースに接続され、プライマリタイムサーバーとして動作します。NTPの目的は、これらのサーバーから他のタイムサーバーへインターネット経由で計時情報を伝達し、機器または伝播障害によるエラーを軽減するためにクロックをクロスチェックすることです。セカンダリタイムサーバーとして機能するいくつかのローカルネットホストまたはゲートウェイは、1つ以上のプライマリサーバーと一緒にNTPを実行します。プロトコルオーバーヘッドを削減するために、セカンダリサーバーはNTP経由で残りのローカルネットホストに時刻を配布します。信頼性のために、選択されたホストには、精度は低いがより安価な無線クロックを装備し、プライマリおよび/またはセカンダリサーバーまたはそれらの間の通信パスに障害が発生した場合のバックアップとして使用できます。
このドキュメント全体を通して標準的な用語法が採用されています。クロックの安定性(stability)は一定の周波数を維持できる能力であり、精度(accuracy)はその周波数と時刻が国家標準とどの程度比較されるかであり、正確さ(precision)は特定の計時システム内でこれらの量がどれだけ正確に維持されるかです。特に指定がない限り、2つのクロックのオフセット(offset)はそれらの間の時間差であり、スキュー(skew)はそれらの間の周波数差(時間に対するオフセットの1次導関数)です。実際のクロックはスキューにいくらかの変動(時間に対するオフセットの2次導関数)を示し、これはドリフト(drift)と呼ばれますが、この仕様のバージョンではドリフトはゼロと想定されています。
NTPは、選択された参照クロックに対して相対的な3つの製品、すなわちクロックオフセット(clock offset)、ラウンドトリップ遅延(roundtrip delay)、および分散(dispersion)を生成するように設計されています。クロックオフセットは、参照クロックと対応するようにローカルクロックを調整する量を表します。ラウンドトリップ遅延は、指定された時刻に参照クロックに到着するようにメッセージを起動する機能を提供します。分散は、参照クロックに対するローカルクロックの最大エラーを表します。ほとんどのホストタイムサーバーは別のピアタイムサーバー経由で同期するため、これら3つの製品のそれぞれには2つのコンポーネントがあります。標準時刻のプライマリ参照ソースに対してピアによって決定されるコンポーネントと、ピアに対してホストによって測定されるコンポーネントです。これらのコンポーネントのそれぞれは、サブネット自体のエラー制御と管理を容易にするためにプロトコル内で個別に維持されます。これらは、オフセットと遅延の精密測定だけでなく、決定的な最大エラー境界も提供するため、ユーザーインターフェースは時刻だけでなく時刻の品質も決定できます。
NTPにはピア発見(peer discovery)または仮想回線管理(virtual-circuit management)の規定はありません。データ整合性はIPおよびUDPチェックサムによって提供されます。フロー制御または再送信機能は提供されておらず、必要ありません。重複検出(duplicate detection)は処理アルゴリズムに固有のものです。サービスは、サーバーとクライアントを区別できないが少量の状態情報を維持する対称モード(symmetric mode)で動作できます。または、サーバーがクライアント要求に含まれる状態以外の状態を維持する必要がないクライアント/サーバーモード(client/server mode)で動作できます。動的到達可能性(dynamic reachability)および可変ポーリングレート(variable poll-rate)メカニズムを含む軽量の関連管理(association-management)機能は、状態情報を管理しリソース要件を削減するためにのみ含まれています。単一のNTPメッセージ形式のみが使用されるため、プロトコルは容易に実装でき、さまざまな要請または非要請ポーリングメカニズムで使用できます。
クロック同期は本質的に、正確な計時を維持するために長期間と複数の比較を必要とすることを認識する必要があります。通常、ローカル時刻を1秒程度以内に確実に決定するには数回の測定で十分ですが、オシレーターのスキューを解決しローカル時刻をミリ秒の精度に維持するには、数時間と数十回の測定が必要です。したがって、達成される精度は、それを達成するのにかかった時間に直接依存します。幸いなことに、測定の頻度は非常に低くでき、ほとんどの場合、通常のネット操作を妨げません。
2.1. 実装モデル
最も一般的なクライアント/サーバーモデルでは、クライアントは1つ以上のサーバーにNTPメッセージを送信し、受信した応答を処理します。サーバーはアドレスとポートを交換し、メッセージ内の特定のフィールドを上書きし、チェックサムを再計算して、メッセージをすぐに返します。NTPメッセージに含まれる情報により、クライアントはローカル時刻に対してサーバー時刻を決定し、それに応じてローカルクロックを調整できます。さらに、メッセージには、期待される計時精度と信頼性を計算し、複数のサーバーから最良のものを選択するための情報が含まれています。
クライアント/サーバーモデルは、公開サーバーとおそらく多数のワークステーションクライアントを含むローカルネットでの使用には十分かもしれませんが、NTPの完全な汎用性には、動的に再構成可能な階層分散構成に配置された複数のクライアント/サーバーまたはピアの分散参加が必要です。また、関連管理、データ操作、およびローカルクロック制御のための洗練されたアルゴリズムも必要です。このドキュメントの残りの部分では、ホスト(host)という用語はローカルプロセッサ上のプロトコルのインスタンス化を指し、ピア(peer)という用語はネットワークパスで接続されたリモートプロセッサ上のプロトコルのインスタンス化を指します。
図1は、パーティション化されたデータベースを共有する3つのプロセスを含むホストの実装モデルを示しています。各ピアに専用のパーティションがあり、メッセージ配信システムによって相互接続されています。送信プロセス(transmit process)は、各ピアの独立したタイマーによって駆動され、データベース内の情報を収集してピアにNTPメッセージを送信します。各メッセージには、メッセージが送信されたときのローカルタイムスタンプ(local timestamp)と、階層を決定し関連を管理するために必要な以前に受信したタイムスタンプおよびその他の情報が含まれます。メッセージ送信レートは、ローカルクロックに必要な精度とそのピアの精度によって決まります。
受信プロセス(receive process)は、NTPメッセージと、おそらく他のプロトコルのメッセージ、および直接接続された無線クロックからの情報を受信します。NTPメッセージが受信されると、ピアクロックとローカルクロックの間のオフセットが計算され、エラー決定とピア選択に役立つ他の情報とともにデータベースに組み込まれます。セクション4で説明されているフィルタリングアルゴリズムは、劣ったデータを破棄することによって精度を向上させます。
更新手順(update procedure)は、メッセージの受信時および他の時間に開始されます。各ピアからのオフセットデータを処理し、セクション4のアルゴリズムを使用して最良のものを選択します。これには、必要な精度に応じて、少数のピアの多数の観測、または多数のピアの少数の観測が含まれる場合があります。
ローカルクロックプロセス(local-clock process)は、更新手順によって生成されたオフセットデータに対して動作し、セクション5で説明されているメカニズムを使用してローカルクロックの位相と周波数を調整します。これにより、オフセットをゼロに減らすために、ローカルクロックのステップ変更または段階的な位相調整が行われる場合があります。ローカルクロックは、システムの他のユーザーおよびNTP自体による後続の参照のための安定した時間情報源を提供します。
2.2. ネットワーク構成
同期サブネットは、プライマリおよびセカンダリタイムサーバー、クライアント、および相互接続する伝送パスの接続ネットワークです。プライマリタイムサーバーは、通常無線クロックであるプライマリ参照ソースに直接同期されます。セカンダリタイムサーバーは、おそらく他のサービスと共有されるネットワークパス上で、おそらく他のセカンダリサーバーを介してプライマリサーバーから同期を導出します。通常の状況下では、プライマリおよびセカンダリサーバーの同期サブネットは、ルートにプライマリサーバーがあり、葉に向かって連続するレベルで精度が低下するセカンダリサーバーがある階層マスタースレーブ構成を想定しています。
電話業界[BEL86]によって確立された慣例に従って、各サーバーの精度は、ストラタム(stratum)と呼ばれる数値によって定義されます。最上位レベル(プライマリサーバー)は1として割り当てられ、階層の下方向の各レベル(セカンダリサーバー)は前のレベルより1大きいものとして割り当てられます。現在の技術と利用可能な無線クロックでは、プライマリサーバーのネットワークインターフェースでミリ秒の単一サンプル精度を達成できます。このレベルの精度は、セクション5で説明されているように、オペレーティングシステムとローカルクロックメカニズムの設計と実装に特別な注意を必要とします。
ストラタムが1から増加するにつれて、達成可能な単一サンプル精度は、ネットワークパスとローカルクロックの安定性に応じて低下します。各特定の構成でエラーを推定するために必要な煩雑な計算[BRA80]を回避するために、平均測定エラーは同期サブネットのルートに対する測定遅延と分散にほぼ比例して累積すると仮定すると便利です。付録Hには、遅延と分散の関数としての最大エラーの導出を含むエラーの分析が含まれています。後者の量は、計時システムの精度、ローカルクロックの周波数許容差、およびさまざまな残差に依存します。プライマリサーバーが既知の精度内で標準時刻に同期されていると仮定すると、これは同期サブネット全体で計時精度に関する信頼性の高い決定論的仕様を提供します。
再び、相当なコストで教訓を学んだ電話業界[ABA89]の経験から引き出すと、同期サブネットトポロジーは最高の精度を生成するように編成されるべきですが、ループを形成することは決して許されません。追加の要因は、ストラタムの各増分には、追加の測定エラーを導入する潜在的に信頼性の低いタイムサーバーが含まれることです。NTPで使用される選択アルゴリズムは、Bellman-Ford分散ルーティングアルゴリズムのバリアントを使用して、プライマリサーバーにルートがある最小重み全域木を計算します。アルゴリズムによって使用される距離メトリックは、(スケールされた)ストラタムと同期距離で構成され、同期距離自体は分散と絶対遅延の半分で構成されます。したがって、同期パスは常にルートへの最小サーバー数を取り、最大エラーに基づいて同点を解決します。
この設計の結果、サブネットは、1つ以上のプライマリまたはセカンダリサーバーまたはそれらの間のネットワークパスが故障した場合でも、最も正確で信頼性の高い時刻を生成するために階層マスタースレーブ構成で自動的に再構成されます。これには、おそらくパーティション化されたサブネット上のすべての通常のプライマリサーバー(例えば、最低の同期距離で動作する高精度WWVB無線クロック)が故障したが、1つ以上のバックアッププライマリサーバー(例えば、より高い同期距離で動作するあまり正確でないWWV無線クロック)が動作を続けるケースが含まれます。ただし、サブネット全体のすべてのプライマリサーバーが故障した場合、Bellman-Fordアルゴリズムのよく知られた特性により、残りのセカンダリサーバーは互いに同期し、距離は事前選択された最大「無限大」にラチェットアップします。すべてのパスで最大値に達すると、サーバーはサブネットから脱落し、最後に決定された時刻と周波数を使用して自由に動作します。これらの計算は、特に周波数において非常に正確であると予想されるため、適切に安定化されたオシレーターを使用すれば、長期間の停止でも1日あたり数ミリ秒を超えない計時エラーをもたらすことができます(セクション5を参照)。
複数のプライマリサーバーの場合、全域木計算は通常、同期距離が最小のサーバーを選択します。ただし、これらのサーバーがほぼ同じ距離にある場合、通常の分散遅延の結果として、計算はそれらの間でランダム選択をもたらす可能性があります。通常、プライマリサーバー間の不一致が同期距離と比較して小さい限り、これは精度を低下させません。そうでない場合、フィルターと選択アルゴリズムは利用可能なサーバーの中から最良のものを選択し、意図したとおりに外れ値を排除します。