導入
Network Time Protocol (NTP) は、コンピュータのローカル クロックをコンピュータ ネットワーク経由で時刻基準に同期できるようにするプロトコルです。
NTP はかなり古いプロトコルです。 RFC 958 で正式化された最初のバージョン v0 は 1985 年 9 月に作成されました。最初から、このプロトコルは1 秒未満の同期精度を提供するように設計されていました。インフラストラクチャを提供せずに時刻サービスを提供する「 Time Protocol 」サービスと比較して、NTPプロジェクトは、世界中で使用できるグローバルかつユニバーサルな同期ソリューションを提供します。
NTP のバージョン 3 は、これまでで最も普及しています。これは RFC 1305 によって形式化されており、「ドラフト標準(en) 」、つまり「最終仕様」というステータスを持ち、いくつかの側面を指定しています。
- ネットワークプロトコルの説明。
- 動作モード。
- マシンに実装されるアルゴリズム。
このプロトコルとアルゴリズムの開発は、これらの仕様に準拠したソフトウェアの開発と併せて行われました。結果として、この実績は現場での参考となり、他のソリューションが存在する場合でも「NTP ソフトウェア」と呼ばれています。この研究の多くは、デビッド L. ミルズ教授と大規模なボランティア チームのおかげでデラウェア大学で実施されました。
NTP バージョン 4 は、2010 年 6 月に RFC 5905 で公開された重要な改訂版です。
NTP バージョン 3 の公開直後に、「 Simple Network Time Protocol 」(SNTP) と呼ばれる簡易バージョンが登場しました。これは、いくつかの RFC の主題でもありました。 NTP と比較すると、このバージョンは、マシンに実装されるアルゴリズムを指定しないという意味で簡素化されています。

NTP の一般的なプレゼンテーション
NTP は、コンピュータの時計を参照サーバーの時計と同期させるためのプロトコルです。 NTP は UDP に基づくプロトコルであり、ポート 123 を使用します。
NTP プロトコルには次のものが含まれます。
- アーキテクチャ部分。
- メッセージング部分。
- そしてアルゴリズム部分。
アーキテクチャ部分
NTPネットワークアーキテクチャ
NTP アーキテクチャは以下を提供します。

黄色の矢印は、高精度クロック (原子時計専用のページを参照) とマスター ブロードキャスト コンピュータ サーバー間の専用の直接接続を示します。赤い矢印は、コンピュータ ネットワーク経由の接続を示します。
この図は、非常に幅広く、非常に柔軟な方法で理解する必要があります。たとえば、ストラタム 2 ノードは、数千人の学生の PC (またはパーソナル コンピュータ) を同期する大学のサーバーになる可能性が十分にあります。この場合、学生が自分の PC (またはパーソナル コンピュータ) をペアで同期したいとは考えにくいですが、大学のサーバーがクラッシュした場合でも学生が古いデータの交換を継続できるようにしたいという特殊な場合は別です。無効になっているか、いつでもアクセスできません。
- 1 つ以上のルート マシンからの基準時間のツリーベースの垂直拡散により、高精度が保証されます。このツリーでは、各ノードは親ノードから最高の品質保証を提供するノードを選択し、その子孫に送信する層と呼ばれる属性を継承します。階層1 のマシンはルート マシンであり、ノードを通過するたびに、この数値は1 ずつ増加します。この層は、ルート マシンからノードまでの距離の尺度であり、特定のマシンがその子孫に提供できる同期の品質の指標と見なされます。
- 一般的な時代のマシンにも横方向に拡散。この放送は前回の放送を補完するものです。これにより、これらのマシンが共通の時間基準を共有できるようになります。この拡散により、ルート マシンへの接続におけるローカル/一時的な欠陥を補うことが可能になるという意味で、この NTP アーキテクチャの回復力が向上します。また、マシンのグループが、同じ相対参照をマシン間で維持できるようになります。ルートマシンが存在しない。
- NTP 用語では、ストラタム1 のサーバーはプライマリ サーバーと呼ばれ、その他のサーバーはセカンダリ サーバーと呼ばれます。
- このアーキテクチャの各ノードは、少なくともその親サーバーおよび/または補助サーバーがどれであるかを示すことによって構成する必要があります。この構成をローカルで実行するのは各ユーザーの責任です。この構成の集合体によって、段階的に NTP ネットワークが作成されます。これは、既存のものではなく、一元的に構成されたものでもありません。このアーキテクチャは柔軟で拡張可能で堅牢ですが、それに貢献できるかどうかはユーザー次第です。
放送時間の設定方法
放送時間は次の基準に基づいています。
- 垂直分散の「クライアント/サーバー」タイプのパラダイム:
- 「サーバー」ノードは、「クライアント」ノードによって発行された時間要求に応答します。
- 親はサーバー、子は顧客です。
- 「サーバー」モードで動作することにより、ノードは同期したいことを通知します。
- 「クライアント」モードで動作することにより、ノードは同期を希望することを通知します。
- 「ユニキャスト」アドレッシング モードは、要求メッセージと応答メッセージの転送に使用されます。
- 垂直分散の「クライアント/サーバー」タイプのパラダイム:
- 横方向拡散の「対称アクティブ/パッシブ」タイプのパラダイムについて:
- 「パッシブ対称」ノードは、「アクティブ対称」ノードによって送信された時間要求に応答します。
- このパラダイムは前のパラダイムに似ていますが、次の違いがあります。最初のリクエストが発行されると、「サーバー」と「クライアント」が順番に役割を交換し、一方の応答が他方のリクエストになります。
- パッシブとアクティブの両方の「対称」モードで動作することにより、ノードは同期したいことと同期されることを通知します。
- 以前と同様に、要求メッセージと応答メッセージの転送には「ユニキャスト」アドレッシング モードが使用されます。
- 横方向拡散の「対称アクティブ/パッシブ」タイプのパラダイムについて:
- ローカル放送の「ブロードキャスト」タイプのパラダイム:
- ノードは、時間情報が使用されるかどうかを気にすることなく、話す時計のように、自発的かつ定期的に現在の時刻のメッセージを機会の近くにあるノードに送信します。
- このモードで動作することにより、ノードは近隣ノードと同期したいことを通知します。
- 「ブロードキャスト」アドレッシング モードは、これらの時刻メッセージの転送に使用されます。この理由と、デフォルトのルーターは「ブロードキャスト」メッセージをルーティングしないため、この時間ブロードキャスト方法は、同じローカル ネットワーク上のマシンのみに関係します。
- ローカル放送の「ブロードキャスト」タイプのパラダイム:
メッセージング部分
NTP メッセージングは以下を提供します。
- メッセージを使用して、クライアントがサーバーにクエリを実行し、サーバーが現在時刻を返すようにします。
- サービス メッセージを使用して、特定のクライアントにその内部状態を問い合わせます。
新しいバージョンの NTP がリリースされると、新しいメッセージの構造は、以前のバージョンのメッセージの構造に続いて新しい情報を集約することによって形成されます。この方法により、異なるバージョンの相互運用性が可能になり、古いバージョンから新しいバージョンへのマシン群全体の移行が容易になります。

アルゴリズム部分
NTP アルゴリズムは、各クライアントに次のメソッドを提供します。
- サーバーのポーリング期間を計算するため。
- ローカル時間と特定のサーバーのローカル時間の差を計算します。
- ネットワーク上のメッセージの送信時間を計算するため。
- 最高の品質保証を提供するサーバーを選択し、そのローカル層を計算します。
- 偏差をフィルタリングし、ローカル クロックに適用する時間/周波数補正を計算します。
- うるう秒を管理します。
