SNTP

 NTPは、RFC1305で規定され、正確にはNTPバージョン3というものです。しかし、このNTPは、かなり複雑なプロトコルで、実際には、このNTPを簡略化したSNTP(Simple Network Time Protocol)が使われています。これは、RFC2030で規定され、現在バージョン4(SNTP4)となっています。

 SNTP/NTPでは、ウェルノウン・ポートとして123番を使います。ユニキャストだけでなく、マルチキャストで複数のクライアントに同時に時刻を提供することも可能です。

 ユニキャストでは、プロトコルを簡単にするのと、サーバーの負荷を軽減するためにUDPを使います。

 クライアントは、サーバーに対してUDPで要求パケットを送り、サーバーはこれに対して応答パケットを返すだけです。あとは、前述の式を用いて、クライアントがサーバーの時計との時差を計算し、時計を修正します。

 要求パケット、応答パケットともに構造は同じで、その構成は、図4のようになります。構造が同じなのは、サーバーが受け取ったパケットをそのまま加工して送り返せるようにしているからです。このようにすることで、サーバーの処理を簡略化できるのです。

図4 SNTP/NTPのパケットは、32bitをベースにしている。先頭の32bitは、6つのフィールドに分かれているが、以後は32ビットを単位とするフィールドが並ぶ。また、後ろにあるカギ識別子、メッセージ・ダイジェスト値はオプションで省略可能である。
図4 SNTP/NTPのパケットは、32bitをベースにしている。先頭の32bitは、6つのフィールドに分かれているが、以後は32ビットを単位とするフィールドが並ぶ。また、後ろにあるカギ識別子、メッセージ・ダイジェスト値はオプションで省略可能である。
[画像のクリックで拡大表示]

 SNTP/NTPパケットは、15個のフィールドから構成されています。このうち、最後の2つになるKey Identifier、Message Digestフィールドはオプションとなっており、省略可能です。

 このフィールドのうち、「開始時刻(Originate Timestamp)」が前述の式のTc1、「受信時刻(Receive Timestamp)」がTs1、「送信時刻(Transmit Timestamp)」がTs2に相当します。なお、Tc2は、クライアントが応答パケットを受信したときに測定するため、パケット中には記録されません。