
通常、マシンが完全に接続を失うと、ntpd はいくつかのポーリングを逃し、すべてのソースを正常性障害としてマークします。これは非常に論理的に思えます。しかし、リーチが 0 になったにもかかわらず、サーバーが現在の時刻ソースとしてマークされたままになる状況に遭遇したことがあります。
サーバーは、非常に低い遅延、オフセット、ジッターを提供するターゲット マシンと同じサブネットに展開されます。この状況は、接続を物理的にシャットダウンすることによってモデル化されました。つまり、クライアント マシンからコードを抜くだけです。これを再現しようとしましたが、それ以来、同じマシンは 5 ~ 6 回のポーリング失敗後に常に同期ステータスを失います。
本当の疑問は、接続が失われたときに同期ステータスを正確に決定するものは何なのかということです。
答え1
RFC-1305 には、reach レジスタに関する明確な説明があります。
到達可能性レジスタは 1 つ左にシフトされ、空いたビットはゼロに置き換えられます。このレジスタのすべてのビットがゼロの場合、クリア手順が呼び出され、クロック フィルターが消去され、必要に応じて同期ソースが再選択されます。関連付けが初期化手順によって構成されていない場合、関連付けは解除されます。
ただし、RFC-1305 は RFC-5905 によって廃止されていますが、これはそれほど特徴的ではありません。
次に、セクション 13 で説明したポーリング プロセスの 8 ビット p.reach シフト レジスタを使用して、サーバーが到達可能かどうか、およびデータが最新かどうかを判断します。パケットが送信されると、レジスタは 1 ビット左にシフトされ、右端のビットは 0 に設定されます。有効なパケットが到着すると、右端のビットは 1 に設定されます。レジスタに 0 以外のビットが含まれている場合、サーバーは到達可能と見なされ、それ以外の場合は到達不可能と見なされます。
セクション 13 には明確な手順は記載されていません。しかし、それでも、到達不可能なピアは、ある時点で同期ステータスを失うことになるようです。
リーチ 0 の状況で同期ステータスを再現して、それがまれであり、永続的ではないことを確認することができました。サーバー構成で「バースト」を無効にし、同期直後に接続を切断する必要がありました。
remote refid st t when poll reach delay offset jitter
==============================================================================
91.198.10.4 194.190.168.1 2 u 20 64 177 51.137 -2.192 11.049
192.168.1.1 193.67.79.202 2 u 65 64 77 0.459 -1.818 0.922
remote refid st t when poll reach delay offset jitter
==============================================================================
*91.198.10.4 194.190.168.1 2 u 21 64 177 51.137 -2.192 11.049
+192.168.1.1 193.67.79.202 2 u - 64 177 0.449 -3.192 1.828
到達範囲は 177 で、これは 2 進数では 01111111 です。したがって、同期を確立するには 7 回のポーリングが必要でした。
次の位置で同期が失われました:
remote refid st t when poll reach delay offset jitter
==============================================================================
+91.198.10.4 194.190.168.1 2 u 574 64 0 63.846 -9.652 0.756
*192.168.1.1 193.67.79.202 2 u 553 64 0 0.449 -3.192 0.505
remote refid st t when poll reach delay offset jitter
==============================================================================
91.198.10.4 194.190.168.1 2 u 575 64 0 69.871 -10.409 0.002
192.168.1.1 193.67.79.202 2 u 554 64 0 0.449 -3.192 0.505
数字が少し変な場合、64*9 = 576 であって 575 ではないのですが、おそらく、表現は 1 秒不正確である可能性があります。これを考慮すると、同期ステータスが解除されるまでに 9 回の失敗したポーリングが必要でした。
したがって、理論と実践の両方を考慮すると、リーチが 0 のソースが現在の時間ソースと見なされる状態は可能ですが、まれで一時的なものであるように見えます。