それが何であり、どのようなトラブルがそれを引き起こす可能性があるかに興味があるなら、猫へようこそ。
うるう秒
残念ながら、私たちの世界は、地球の自転の角速度が一定ではないように設計されています。 さらに悪いことに、この速度の導関数は一定ではありません。 これから2つの不快な結論が続きます。
- 1秒の標準として選択された時間の長さに関係なく、しばらくすると、時間スケールと調整する必要がある太陽時の差が明らかになります。
- 定期的に調整を行うことはできません。
UTCと太陽平均(UT1 )の差を補正するためにうるう秒が導入されています。 UTC時間がUT1と±0.9秒を超えて変わらないように、6月30日または12月31日の世界時に従って、1日の終わりに調整秒が入力されます。 そのような日には、23:59:59の後、23:59:60になるか、23:59:58の後、次の秒は00:00:00になると考えられています。
調整を定期的に実行することはできないため、自律時間の調整は手動で実行されます。 外部同期のある時計の場合、外部ソースから受信したデータに基づいて、調整を自動的に実行できます。
今後の第2調整の普及
ほとんどのローカルタイムサービスおよびネットワークは、GPSなどの今後の調整に関する情報を提供します。 NTPもこの情報を提供します。 これについて詳しく説明します。
NTPサーバーは、次の3つの同期について次の3つの方法で学習できます。
- 情報は手動で設定できます(ntpdの場合、これはleapfileファイルを使用して行われます。このファイルには、同期のすべての秒に関する情報とleapfileディレクティブが含まれています)。
- 参照タイムソースのドライバーからの情報を介して。
- NTPプロトコル経由。
これらの方法のいずれかによる調整の次の秒に関する情報を受信し、この秒が参照する日の始まりとともに、サーバーは内部変数の対応する値を設定し、OSカーネルに通知し、それに応じてクライアントへの通知を開始します。
NTPプロトコルデータグラムは、2番目の調整のアナウンスに2ビットフィールドを提供します。 通常、両方のビットはゼロに設定されます。 ビットの1つを1に設定すると、1日の終わりに調整の正または負の秒が入力されます(場合によっては両方のビットを1に設定できます。これは、何らかの理由でサーバーが正確な時間を提供できないことを意味します)。
NTPサーバーの調査結果によると、投票が行われ、それに基づいてクライアントが内部変数の対応する値を設定し、OSカーネルに今後の調整について通知し、それに応じてクライアントに通知し始めます。
それは完全に論理的で実行可能なスキームのように思えますが、レーキは可能です。
すくい
レーキは通常、プライマリサーバーの誤った構成が原因で発生します。サーバーは、次の2番目の調整について何も知らず、事実を知った後でそれについて学習します。 これの例は、2009年1月1日のVNIIIFTRI(ロシア国立計量研究所)のntpサーバーの動作です 。 また、NTPを完全にサポートしていないサーバー、またはパケットを誤ってクリーンアップするファイアウォールが同期チェーンに組み込まれている場合もあります。
Stratum 1サーバーエラーは、NMEAプロトコルを搭載したGPSまたはGLONACCレシーバーが参照ソースとして使用されている場合に最もよく発生します。 そのため、Stratum 1サーバーの所有者であり、参照ソースのドライバーが必要な情報を転送できるかどうかわからない場合は、 leapfileサーバーを「フィード」してください。
ntpdのサーバー構成の確認は非常に簡単です。 ntpq -c rvコマンドを実行します。 次のようなものが得られます。
associd = 0 status = 0419 leap_none、sync_uhf_radio、1イベント、leap_armed、 version = "ntpd 4.2.6p5@1.2349-o Wed Jun 13 10:36:21 UTC 2012(1)"、 プロセッサ= "x86_64"、システム= "Linux / 3.2.20"、リープ= 00、ストラタム= 1 精度= -22、rootdelay = 0.000、rootdisp = 0.002、refid = GPS、 reftime = d3856e94.2052bbf0金、2012年6月15日15:19:32.126、 クロック= d3856e97.6bdc8f80金、2012年6月15日15:19:35.421、ピア= 48525、tc = 3 mintc = 3、オフセット= 0.001、周波数= 23.641、sys_jitter = 0.000、 clk_jitter = 0.000、clk_wander = 0.001、tai = 34、leapsec = 201207010000、 有効期限= 201212280000
leapsec = 201207010000が表示される場合、サーバーは正しく構成されており、適切なleapfileを使用しています。 6月30日に同じコマンドを実行すると、最初の行のleap_noneはleap_add_secに変更されます 。 6月30日にNTPトラフィックを分析することにより、すべてが正常であることを確認できます。 たとえば、 -vオプションを指定したtcpdumpは、NTPパケットを正常に解析し、上記のアナウンスメントビットを読み取り可能な形式で表示します。
オペレーティングシステムの動作にも注意してください。 Linux、FreeBSD、および最新のUNIXライクなオペレーティングシステムが2番目の調整を正しく処理する場合、Windowsの場合、これは驚くべきことです。 ある時点で、WindowsタイムサービスはOSの時間が約1秒異なることを検出します。 Windowsがこの差を徐々に補正するか、システムクロックを遅くする(高速化する)か、またはぎこちなくMaxAllowedPhaseOffsetパラメーターに依存します。 この場合、管理者にどの補償シナリオが最も損傷が少ないかを判断し、それに応じてこのパラメーターを設定することを推奨できます。