time - servidor - ¿Cómo funciona el protocolo de tiempo de red?
qué comando se debe ejecutar en un router cisco que operará como un servidor ntp autoritario (4)
La entrada de Wikipedia no proporciona detalles y el RFC es demasiado denso. ¿Alguien de aquí sabe, de manera muy general, cómo funciona el NTP?
Estoy buscando una visión general que explique cómo se emplea el algoritmo de Marzullo (o una modificación de él) para traducir una marca de tiempo en un servidor en una marca de tiempo en un cliente. Específicamente, qué mecanismo se utiliza para producir precisión, que es, en promedio, dentro de los 10 ms cuando esa comunicación tiene lugar a través de una red con una latencia muy variable que frecuentemente es varias veces mayor.
- El cliente NTP pregunta a todos sus servidores NTP qué hora es.
- Los diferentes servidores darán respuestas diferentes, con diferentes niveles de confianza porque las solicitudes tomarán diferentes cantidades de tiempo para viajar desde el cliente al servidor y viceversa.
- El algoritmo de Marzullo encontrará el rango más pequeño de valores de tiempo consistentes con todas las respuestas proporcionadas.
- Puede tener más confianza en la precisión de la respuesta de este algoritmo que en la de cualquier servidor de tiempo único, ya que la intersección de varios conjuntos probablemente contenga menos elementos que cualquier conjunto individual.
- Cuantos más servidores consulte, más restricciones tendrá en la respuesta posible y más preciso será su reloj.
(Este no es el algoritmo de Marzullo. Eso solo lo usan los servidores de alto nivel para obtener tiempo realmente preciso usando varias fuentes. Así es como un cliente ordinario obtiene el tiempo, usando solo un servidor)
En primer lugar, las marcas de tiempo de NTP se almacenan como segundos desde el 1 de enero de 1900. 32 bits para el número de segundos y 32 bits para las fracciones de segundo.
La sincronización es difícil. El cliente almacena la marca de tiempo (por ejemplo, A) (todos estos valores están en segundos) cuando envía la solicitud. El servidor envía una respuesta que consiste en el tiempo "verdadero" cuando recibió el paquete (llame a esa X) y el tiempo "verdadero" transmitirá el paquete (Y). El cliente recibirá ese paquete y registrará la hora en que lo recibió (B).
NTP supone que el tiempo que se pasa en la red es el mismo para enviar y recibir. En intervalos suficientes sobre redes sanas, debería ser promedio. Sabemos que el tiempo total de tránsito desde el envío de la solicitud hasta la recepción de la respuesta fue de BA segundos. Queremos eliminar el tiempo que el servidor pasó procesando la solicitud (YX), dejando solo el tiempo de cruce de la red, por lo que es BA- (YX). Dado que suponemos que el tiempo de recorrido de la red es simétrico, la cantidad de tiempo que tardó la respuesta para llegar del servidor al cliente es [BA- (YX)] / 2. Así que sabemos que el servidor envió su respuesta en el momento Y, y nos llevó [BA- (YX)] / 2 segundos obtener esa respuesta.
Entonces, el momento verdadero en que recibimos la respuesta es Y + [BA- (YX)] / 2 segundos. Y así es como funciona NTP.
Ejemplo (en segundos completos para facilitar las matemáticas):
- El cliente envía la solicitud a la hora "incorrecta" 100. A = 100.
- El servidor recibe la solicitud en el tiempo "verdadero" 150. X = 150.
- El servidor es lento, por lo que no envía la respuesta hasta el tiempo "verdadero" 160. Y = 160.
- El cliente recibe la solicitud en el momento "equivocado" 120. B = 120.
- El cliente determina que el tiempo empleado en la red es BA- (YX) = 120-100- (160-150) = 10 segundos
- El cliente asume que la cantidad de tiempo que tardó en llegar la respuesta del servidor al cliente es 10/2 = 5 segundos.
- El cliente agrega ese tiempo al tiempo "verdadero" cuando el servidor envió la respuesta para estimar que recibió la respuesta en un tiempo "verdadero" de 165 segundos.
- El cliente ahora sabe que necesita agregar 45 segundos a su reloj.
En una implementación adecuada, el cliente se ejecuta como daemon, todo el tiempo. Durante un largo período de tiempo con muchas muestras, NTP puede determinar si el reloj de la computadora es lento o rápido, y ajustarlo automáticamente de manera correspondiente, lo que le permite mantener un tiempo razonablemente bueno, incluso si más tarde se desconecta de la red. Junto con promediar las respuestas del servidor y la aplicación de pensamientos más complicados, puede obtener tiempos increíblemente precisos.
Hay más, por supuesto, para una implementación adecuada que eso, pero esa es la esencia de eso.
El truco es que algunos paquetes son rápidos, y los paquetes rápidos le dan restricciones estrictas en el tiempo.
SI está usando marcas de tiempo para decidir ordenar, es posible que los tiempos específicos no sean necesarios. En su lugar, podría usar los relojes lamport , que son menos dolorosos que la sincronización de red. Puede decirle qué vino "primero", pero no la diferencia exacta en veces. No le importa lo que dice realmente el reloj de la computadora.