システムが2038年以降の日付を設定すると、ntpdateは失敗します。

システムが2038年以降の日付を設定すると、ntpdateは失敗します。

現在の正確な日付は2016年5月25日金曜日12:11:07 CSTです。

日付を「2018/01/01」に変更すると、ntpdateが正常に動作します。

日付を「に変更すると2099/01/01"、ntpdateが正しく動作しません。

いいね:

[root@oldboylinux ~]# date -s "2018/01/01"
Mon Jan  1 00:00:00 CST 2018

[root@oldboylinux ~]# /usr/sbin/ntpdate time.nist.gov
25 Mar 12:06:22 ntpdate[7187]: step time server 216.229.0.179 offset -55857225.378947 sec

悪い:

[root@oldboylinux ~]#date -s "2099/01/01"
Thu Jan  1 00:00:00 CST 2099

[root@oldboylinux ~]# /usr/sbin/ntpdate time.nist.gov
 1 May 18:36:59 ntpdate[7189]: step time server 216.229.0.179 offset 1682966210.024232 sec

5月1日月曜日18:41:18 CST 2152が無効な日付です。

ntpdate有効な範囲はありますか?

ベストアンサー1

まず、いくつかの注意:

  • NTPの現在のバージョン(v4)時代を使って働きます。

  • エポックは136年(符号なしの32ビット整数で表される秒数)です。それとも

      60 * 60 * 24 * 365 * 136 = 4288896000 
                          2^32 = 4294967296
    
      4294967296 − 4288896000 = 6071296
       6071296 / 60 / 60 ∕ 24 ≈ 70 (days, not accounting for leaps)
    
  • 0時代:これ黄金時代または基準日「0時代」、これは1900年1月1日00:00 UTC時間です。

  • 時代1:2036年初めから始まります。 (UNIX-2038 2年前)

  • 時代2:物語は2172年初めに始まります。

  • など。 (他の例については、以下を確認してください。RFC 5905 14ページ.)

  • ntpdate64ビットNTPタイムスタンプを使用します。秒は32ビット、分数は32ビットです。

  • おそらく少し混乱する可能性があります。 NTP-dateは128ビットを使用し、時代を含みます。これは、宇宙の年齢にわたって遠い未来まで広がります。

で述べたようにNTP部分の"2038年の問題" - ウィキペディアページ君は絶対的な限界がある68歳2つのNTPタイムスタンプの間。 (136 / 2 = 68)。ただし、あいまいさを排除するには、より狭い周波数帯域を使用する必要があります。

NTPタイムスタンプは、絶対時間ではなく相対時間に基づいて機能します。サーバーは、独自の時間の相対オフセットを介してクライアントに修正を提供します。つまり、次のようには言いません。

—2016年3月26日付

代わりに(NTPが動作するように単純化されている):

- あなたは+123412512.918秒遅れています、または:
— あなたは-2652221.3466秒遅れています、等。

またはRFCから引用してください。

タイムスタンプは符号なし値であり、これに対するアクションは同じまたは隣接するエポックの結果を生成します。 Epoch 0には、2036年の特定の時点までの日付が含まれています。メインタイムからタイムスタンプフィールドが循環され、Epoch 1のデフォルト日付を設定します。

あなたの年が2099年の場合、あなたはすでに68年以上、つまり約15年後です。あなたは2152年に終わり、私たちが得るものは次のとおりです。

 2152 - 2016 = 136 (One era)

または別の言葉で表現すると:

                    2099 - 2036 = 63          (years into era 1)
        63 * 365 * 24 * 60 * 60 = 1986768000  (approx NTP time stamp for 2099)
       116 * 365 * 24 * 60 * 60 = 3658176000  (approx NTP time stamp for 2016)
       3658176000 - 1986768000  = 1671408000  (approx diff)
1671408000 / 60 / 60 / 24 / 365 = 53          (approx years)

1986768000 < 3658176000 thus add 1671408000

2099 + 53 = 2152 (the year your system was corrected to)

はい、あなたの質問に答えると、次のようになります。

——ntpdate有効範囲がありますか?

はい。 ±68歳、でも最大有効範囲少し狭いです。

NTP自体は無制限です。

見るRFC 5905興味があれば。さらに、古い RFC には興味深い情報を含めることができます。付録 E. NTP 時間スケールとタイミング方法 RFC 1305から


(取り付け: UNIXタイムスタンプと比較すると1970 + 68 = 2038.)

おすすめ記事