Primeiro algumas notas:
- A versão atual do NTP (v4) opera usando eras.
-
Uma era é de 136 anos, (segundos apresentáveis por um inteiro de 32 bits sem sinal). Ou aproximadamente
60 * 60 * 24 * 365 * 136 = 4288896000 2^32 = 4294967296 4294967296 − 4288896000 = 6071296 6071296 / 60 / 60 ∕ 24 ≈ 70 (days, not accounting for leaps)
-
Era 0: A época principal , ou a data base de "era 0" , é 00:00 1 de janeiro de 1900 UTC.
- Era 1: começa no início do ano 2036. (Dois anos antes do UNIX-2038)
- Era 2: começa no início do ano 2172.
- etc. (Para alguns outros exemplos, consulte a página 14 do RFC 5905 .
-
ntpdate
usa carimbos de hora NTP que são 64 bits. 32 bits por segundo e 32 bits por frações. - Um pouco confuso, talvez; NTP-date usa 128 bits e inclui era. Isso abrange a idade do universo e no futuro.
Como declarado na seção NTP do " problema do ano 2038 "- página da Wikipedia você tem um limite absoluto de 68 anos entre dois timbres de tempo NTP. (%código%). Porém, para eliminar a ambiguidade, deve-se usar uma faixa mais estreita.
Os carimbos de tempo NTP operam referenciando o tempo relativo e não absoluto; O servidor fornece uma correção para o cliente por um deslocamento relativo ao seu próprio tempo. Ou seja: não diz:
- A data é 26 de março de 2016
mas sim (simplificado como funciona o NTP):
- Você está fora em +123412512.918 segundos , ou:
- Você está fora por -2652221.3466 segundos , etc.
Ou para citar o RFC:
Timestamps are unsigned values, and operations on them produce a result in the same or adjacent eras. Era 0 includes dates from the prime epoch to some time in 2036, when the timestamp field wraps around and the base date for era 1 is established.
No seu caso, quando você tem o ano de 2099, você tem mais de 68 anos no futuro - aproximadamente 15 anos. Você acaba no ano 2152 e o que temos é:
2152 - 2016 = 136 (One era)
Ou dito de outra forma:
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)
Então, sim, para responder à sua pergunta:
— Does
ntpdate
have an effective range?
Sim. ± 68 anos, embora o intervalo máximo efetivo seja um pouco mais estreito.
NTP em si mesmo é infinito.
Dê uma olhada em RFC 5905 se estiver interessado. Observe também que os RFCs obsoletos podem conter informações interessantes, como Apêndice E. A escala de tempo do NTP e sua cronometria no RFC 1305 .
(P.S: Em comparação com timestamps do UNIX, 136 / 2 = 68
.)