Simple
Network Time Protocol(SNTP)は、
Network Time Protocol(NTP)を簡略化した時刻同期プロトコルです。NTPと同様の
パケット構造を使用しますが、より実装が簡単でリソース消費を抑えることができます。
処理概要
SNTPは、RFC1305で定義されたNTP
パケットを基に、RFC 1361, RFC 1769, RFC 2030 で再定義された
パケットを使用します。上位の時計
サーバーとの通信を通じて、クライアントと
サーバー間の
オフセットを計算し、時刻を同期させます。
時刻の反映方法については、NTPもSNTPも具体的な定義はなく、実装に依存します。これは、システムによって時刻を直接反映させるか、徐々に近づけていくかを選択する必要があるためです。
時計精度と上限
SNTPとNTPは同じ
パケットを使用しているため、内部精度はNTPタイムスタンプ形式に準じます。これにより、200ピコ秒までの精度で時刻を処理できます。
2036年問題
NTP
パケットのタイムスタンプは、
協定世界時(UTC)の
1900年1月1日午前0時からの経過秒数で表現されます。この値は4バイトの符号なし整数で表現されるため、最大で4294967295秒までしか表現できません。これは、UTCの2036年2月7日午前6時28分16秒(日本時間では同日午後3時28分16秒)に到達します。この日時を超えると、値がオーバーフローし、時刻同期が正常に行えなくなる「2036年問題」が発生します。
この問題に対処するため、RFC 4330では、最上位ビットが0の場合、時刻が2036年から2104年の間であるとみなして計算する方法が定義されています。これにより、2036年2月7日6時28分16秒(UTC)を起点として計算することで、2036年問題を回避できます。
時計サーバーとの伝送モードと同期
伝送モード
SNTPとNTPには、いくつかの伝送モードがあります。NTP
パケットには、3ビットの「Mode」フィールドがあり、これにより
サーバーモード、クライアントモード、ブロードキャストモードなどが識別されます。多くのSNTPソフトウェアは、
サーバー・クライアントモードを使用して同期処理を行います。
NTPは基本的にすべてのモードをサポートする必要がありますが、SNTPには必須の規定がないため、いずれかのモードをサポートすればSNTPとみなされます。
同期
SNTPでは、1回の通信で時刻を反映できます。一般的な実装では、stratum値(
サーバーの階層を示す値)が正常であること、および閏秒指示子(Leap Indicator値)が正常であることを確認して時刻を信頼します。ただし、時刻校正の具体的な条件はRFCには記述されていません。
関連RFC
- - RFC 1361 SNTP
- - RFC 1769 SNTP
- - RFC 2030 SNTP Version 4 for IPv4, IPv6 and OSI
- - RFC 4330 SNTP Version 4 for IPv4, IPv6 and OSI
関連項目
SNTPは、NTPと比較してシンプルで実装が容易なため、リソースが限られた環境や、より簡単な時刻同期を必要とする場面で広く利用されています。