30代からの再勉強日記(ビジネス系/IT系の一般論の理屈を考えてみる)

徐々に、新たなタスクを起こし任せる側になりました。将来検討のためにも、一般論やセオリーを勉強・考察し外部へ共有する事で学びを深めたいと思います。皆さんにも役立つ所があれば幸いです。※最近ミッション変更となり、更新頻度落が落ちます。

【IT勉強】 システムに時刻情報が必要な理由とその実現プロトコルNTP(小平にあるNICTが日本の時刻情報の母)

 最近、スマホ/PCの時計を見れば時刻がわかるので、腕時計をする人が減っているみたいですね。腕時計の流行は一旦脇に置き、正確な時刻をどのように通信しているのか、いい機会なので調べてみたので記しておきます。

  

システムに正確な時刻情報が必要な背景(後に正確なに順番や追跡をするため)

 ある特定の作業や事象がいつ、どんな順番で発生したか把握するためです。

例えば、何かエラー発生した時にログから原因解析を行う事があります。サーバA/サーバB/ネットワーク機器C等々、関連する装置の時刻がズレていると最初に事象を発生させたのはどのサーバだったのか、どんなサーバやネットワーク機器を通って通信できていて、最後に途絶えさせたのはどこか、把握できなくなります。

 また、ある不正事項が起きた時に、その時刻にアクセスした人物や端末を特定させようとした場合にも、やはり時刻がずれていると、誰が触っていたのか、どの装置が最初に侵入されたのか追跡が難しくなります。

 そうならないためにも、起きた事実を後々正しい順番で整理するために、正確な時刻情報をシステムに持たせておく事が求められております。

 

実現方法(NTPプロトコル

 コンピュータは、NTPと呼ばれるプロトコルで時刻情報を得ております。WindowsLinuxなど、たいていのOSや通信機器は、電源が入れば自動的にNTPで時刻情報の取得が開始されます。通信する際は、 NTPはUDPプロトコル(ポート番号は123番)を使用します。

 コンピュータの時刻情報の取得に使われるNTPには、大きな特徴は3つあります。

  1. 階層的構造
  2. 遅延時間を考慮した時刻あわせ
  3. 高い可用性
 1.階層的構造

 時刻情報を要請する側と通達する側が存在し、下に下に情報を流していくイメージです。そのため、最初に通達する側は自分で時刻情報をえる必要があり、それは公的機関であるNICTが担当しているようです。そこから、時刻情報をもらって分配していく事が多いようです。※例外はGPS等から電波で時刻情報を取得する装置もある。

 なあ、NTPの接続としては、階層0(0と1は組織内直結なので事実上は1)から始まり、16階層までであり、16階層から17階層への通達はできないようです。

 ※16階層は時刻情報を通達する側にはなれない。

f:id:study-on:20200920181632j:plain

NTP構成 引用:日経クロステック 完全図解、ITの世界で時刻を合わせるNTP
 2.遅延を考慮した時刻あわせ

 自分が時刻同期を要請してから返事がくるまでの時間、相手サーバ内の処理時間を考慮すると事で、自分と相手の間の通信時間を計算できます。

 通信時間がわかれば、自分が「今の時間おしえて」と通達したタイミング「t1」が相手に届くタイミングもわかるので、通信時間を引くことでかなり正確な時間を得る事ができます。

※インターネットや通信機器の処理関係で通信時間が変動するので、はズレますが。

 また、取得した情報を元に、時刻修正する方法も2つあるみたいです。

単純に今の取得時刻にあわせてしまうのが方法が一つ。

もう一つが徐々に時刻をあわせていく方法。というのも、もし時刻が大きくズレていた際にいきなり時刻情報をあわせると、コンピュータやソフトがエラーを起こす可能性もあるため、徐々にずらしていく事もあるようです。

 ただし実運用としては、徐々にずらしていく手法は、1秒間に0.5ミリ秒の補正となるので丸1日でも43秒の補正が限度になるので、一気に時刻情報を変えるやり方との組み合わせて補正をかけていくようです。

 

 3.高い可用性(複数台から情報えられる)

 NTPは時刻情報を要請する際に、複数向けに発信する事も可能です。そのため、1台の自分より上位のNTPサーバが故障しても別のNTP通信しているサーバがあればそこから情報を得る事ができるため、故障に強く可用性も高いです。

 その際に、複数台のNTPで情報をもらう際に採用する時刻として、選択肢はいろいろあるようで、「階層数が低い方(※低いほど仲介役のサーバが少ない)」、「通信遅延時間がすくないNTPからの情報」、「返って来た情報からの平均」などいろいろあるようです。 

 

単純な時刻把握だけしたいならSNTPという手段

 NTPは可用性や遅延時間等を考慮したプロトコルでありますが、もっと簡易な方法で時刻だけ単純に知りたいニーズもあるため、SNTPというプロトコルもあります。

 こちらもNTPにぶらさがって時刻要請ができますが、他の装置に時刻を伝える事はしません。

 

NICTが日本の時刻情報を発信(東京の小平が中心、腕時計の時刻も含む)

 東京小平市にあるNICTが、時刻を決めているようですね。電波時計の時刻(福島と九州の発信局の大本)、NTPの階層0(と1)を持ち、他にも時刻につかさどるサービスの大本にもなってるようです。

xtech.nikkei.com

 

まとめ

 何かトラブル時に起きた事象を正確に把握していくために、コンピュータに時刻情報が必要な事がわかりました。方法としてNTPと呼ばれるプロトコルがあり、冗長性と遅延まで考慮した設計がされているため、正確な時刻把握を可能としてます。

 またNICTによって日本の標準時間が決定・通信されており、いろいろな時間をつかさどるサービスが提供されている事もわかりました。

※私の腕時計も東京→福島→所在地と福島の前にワンステップある事がわかってトリビア的な知識もわかってよかったです。