NTP、SNTP のフォーマット
詳細についてRFC-1305、RFC-2030 を参照して下さい。
宛先MACアドレス | 48ビット |
送信元MACアドレス | 48ビット |
ETYPE | 16ビット |
Version | 4ビット |
ヘッダ長 | 4ビット |
サービスタイプ | 8ビット |
パケット長 | 16ビット |
識別子 | 16ビット |
フラグ | 3ビット |
フラグメント・オフ・セット | 13ビット |
TTL | 8ビット |
プロトコル | 8ビット |
ヘッダ・チェック・サム | 16ビット |
送信元IPアドレス | 32ビット |
宛先IPアドレス | 32ビット |
オプション | 可変長 |
パッティング | 32ビット |
00 (00)d : 警告無し (通常時はこれ)
01 (01)d : 最後の1分が61秒
10 (02)d : 最後の1分が59秒
11 (03)d : 警告
バージョン番号(VN : Version Number) :
000 (00)d :
001 (01)d : バージョン 1
010 (02)d : バージョン 2
011 (03)d : バージョン 3 (通常のNTPサーバ)
100 (04)d : バージョン 4 (通常のSNTPサーバ)
モード(Mode) : 動作モードを表す
000 (00)d : 予約
001 (01)d : 対称アクティブモード
010 (02)d : 対称パッシブモード
011 (03)d : クライアント
100 (04)d : サーバ
101 (05)d : ブロードキャスト
110 (06)d : NTP制御メッセージのため予約
111 (07)d : 私的使用のため予約
階層(Stratum) : 階層を表す。
00000000 (00)d : 不明または有効ではない
00000001 (01)d : 1次参照 (セシウム原子時計、GPS時計を参照している)
00000010 〜 00001111 (02)d〜(15)d : 2〜15次参照 (NTP、SNTPを経由して参照している)
00010000 〜 11111111 (16)d〜(255)d : 予約
ポーリング間隔(Poll Interval) : 8ビットの符号付き整数で、連続するメッセージの最大間隔を、秒単位で2のべき乗で表される。
00000000 : 0秒間隔
00000001 : 1秒間隔
00000010 : 2秒間隔
00000011 : 4秒間隔
00000100 : 8秒間隔
00000101 : 16秒間隔
00000110 : 32秒間隔
00000111 : 64秒間隔 ( 1分 4秒)
00001000 : 128秒間隔 ( 2分 8秒)
00001001 : 256秒間隔 ( 4分16秒)
00001010 : 512秒間隔 ( 8分32秒)
00001011 : 1024秒間隔 (17分 4秒)
00001100 : 2048秒間隔 (34分 8秒)
精度(Precision) : 8ビットの符号付き整数でローカル時計の精度を、秒単位で2のべき乗で表される。
ルート遅延(Root Delay) : 32ビット符号付き固定小数点で、1次参照源までの往復遅延の合計を表す。一般的な外部から参照されているStratum1のサーバは、−16〜−20程度となる。
(私の経験からですが、Windows NTで Stratum2を構成してみたところ−9程度だったが、Linux で構成したところ−16程度だった。この違いはどこから生まれるのかは調査不足のため不明です。)
32ビットのビット列で階層0,1のサーバでは4文字のアスキーで左寄せされている。残りは0で埋められている。
それ以外のサーバでは時刻源のIPv4のIPアドレスがセットされる。
参照タイムスタンプ(Reference Timestamp) : ローカル時計が最後に設定、修正された時刻を表す。
64ビットのタイムスタンプフォーマットで表される。
開始タイムスタンプ(Originate Timestamp) : クライアントからサーバへリクエストを発信した時間を表す。
受信タイムスタンプ(Receive Timestamp) : サーバへリクエストが到着した時間を表す。64ビットのタイムスタンプフォーマットで表される。
64ビットのタイムスタンプフォーマットで表される。
送信タイムスタンプ(Transmit Timestamp) : サーバからクライアントに応答が発信された時間を表す。
64ビットのタイムスタンプフォーマットで表される。
鍵識別子(Key Identifier)(任意)
メッセージダイジェスト(Message Digest)(任意)
● タイムスタンプフォーマット :
64ビットの符号無し固定小数点で表される。1900年1月1日0時を基準に相対的な差を秒単位で表す。上位32ビットは整数部を、下位32ビットは小数点以下を表す。
● SNTP メッセージのセット内容(サーバ・クライアント・モード)
クライアント リクエスト サーバ 応答 クライアント 処理 閏秒指示子 0 0 or 3 バージョン番号 1−4 リクエストからコピー モード 3 2 or 4 階層 0 1−14 ポーリング間隔 0 リクエストからコピー 無視 精度 0 精度(求め方は不明) 無視 ルート遅延 0 0 無視 ルート分散 0 0 無視 参照識別子 0 参照源識別コード 無視 参照タイムスタンプ 0 最後に時間を合わせた時間 無視 開始タイムスタンプ 0 送信タイムスタンプからコピー クライアントからのリクエスト送信時間がセットされている。 受信タイムスタンプ 0 日時 サーバの受信時間がセットされている。 送信タイムスタンプ 日時 日時 サーバの送信時間がセットされている。
●使用されるポート
NTP、SNTP共に UDP 123番ポートを使用