NTPの次期バージョンv5の標準化が始まる

NTPの次期バージョンとなるv5のドラフト(草案)が出たので目を通す。

はじめに

2010年にRFC 5905としてNTPv4が標準化されています。それから10年たち、IETFのNTP WGではNTPv4の問題点を整理ながら、NTPv5をどのようにするか議論してきました。

そして11月23日にRed HatのMiroslav Lichvar氏から最初の草案となる「Network Time Protocol Version 5」が提出されました。

下記の4つのタイムスタンプを元に時刻同期を行うというところは大きく変わってはいません

  • クライアントがパケットを送った時間
  • サーバがパケットを受信した時間
  • サーバがパケットを送信した時間
  • クライアントがパケットを受信した時間

一方細かい改善で高精度化や、うるう秒対策で使われるleap smearの対応などがあります。そういったNTPv4との違いについてかんたんに眺めていきます。

ただし、最初期案のため、ここから変更が入ると思われます。

NTPv5

Clientモード/Serverモードのみサポート

NTPv4はAssociation Modeとして6つが定義されていました

  • Symmetric Active
  • Symmetric Passive
  • Client
  • Server
  • Broadcast Server
  • Broadcast Client

NTPv5では、ClientとServerのみのサポートになりました

UTC以外のtimescaleに対応 (leap smearもあるよ!)

NTPではUTCで時刻を指定していましたが、v5では下記の4つが選択できるようになりました

  • UTC
  • TAI
  • UT1
  • Leap-smeared UTC

特に、昨今よくつかわれているLeap-smeared(うるう秒を1日かけて調整する方式)を指定できるようになっています。こうすることで実装同士がLeap-smearedされていることを認識できるようになりますね。

アルゴリズムの記述を削除

NTPv4の仕様は「Network Time Protocol Version 4: Protocol and Algorithms Specification」でしたが、v5では「Network Time Protocol Version 5」となっています。

この通り、サーバと同期するのに適切化フィルタするアルゴリズム(Clock Filter Algorithm)らへんの記述はなくなりました

NTPv4では、ユーザランドでパケット送信処理を行ったあとに、低レイヤ(OS/ハードウェア)から得られるより正確な時刻情報を同期に使えるようにする「NTP Interleaved Modes」という仕様が存在しています。

これをNTPv5では、これを行うためのフラグ及びCookieを持ちます

Reference IDsの改善

NTPサーバは上位のサーバを示すために、32bitReference IDフィールドに上位サーバのIPアドレスを格納します。

この値はループ防止に使用されていましたが、アドレス変換などがあると適切に扱えていませんでした。

そのためReference IDsも改善される予定です

32-bit 秒フィールドの高精度化

NTPには、Root Delayといった32-bitで秒を示すフィールドがあります。

NTPv4では16bitを整数部・16bitを小数部として秒を表現していましたが、この場合15ミリ秒の精度になってしまいます。

NTPv5では4bitを整数部・28bitを小数部として秒を表現することで、約3.7ナノ秒の精度で表現可能となっています。

拡張

MACなどが拡張フィールドとなっていたりしている。現在NTPv5で定義されている拡張フィールドは下記の通り

  • Padding Extension Field
  • MAC Extension Field
  • Reference IDs Extension Field
  • Correction Extension Field
  • Reference timestamp
  • Monotonic Timestamp Extension Field

また、拡張フィールドは任意長になった (NTPv4だと4オクテットの倍数)

パケットフォーマット

f:id:ASnoKaze:20201115231335p:plain

(拡張フィールドは任意長かつ、任意回繰り返し)

eraもパケットに入るため、タイムスタンプ32bit整数部で表現できる136年✕256(8bit)で約35000年の範囲を表すことができます。

おわりに

まだたたき台が出てきたところで、これからどんどん変わると思われるので注意。

ひとまず、来週あるIETF109でどのような議論が行われるか注目していきたい。