NTP — qué es, protocolo de tiempo y sincronización en aplicaciones

Autor: IT Sectr Publicado: 2026-07-14 Tiempo de lectura: 9 min

NTP (Network Time Protocol) es un protocolo de red de sincronización horaria que proporciona precisión de milisegundos en redes locales y de decenas de milisegundos en la red global. Desarrollado por David Mills en 1985, el protocolo se utiliza en todos los sistemas operativos modernos, dispositivos móviles y equipos de red para sincronizar los relojes internos con la hora de referencia UTC. Según el NTP Pool Project (2026), más de 4 mil millones de dispositivos realizan solicitudes NTP diariamente para sincronización.

Puntos clave

  • NTP es un protocolo de sincronización horaria a través de la red, precisión de 1 ms (LAN) a 50 ms (WAN)
  • Jerarquía de estratos — un sistema de niveles (stratum 0–16), donde stratum 0 son los relojes atómicos de referencia
  • Corrección de deriva — NTP no solo ajusta la hora, sino que adapta la frecuencia del reloj para una precisión continua
  • SNTP — una versión simplificada de NTP para dispositivos con recursos limitados, utilizada en IoT y Android
  • Seguridad — NTPv4 admite autenticación mediante claves simétricas y NTS (Network Time Security)

¿Qué es NTP?

NTP (Network Time Protocol) es un protocolo de red diseñado para la sincronización precisa del reloj interno de una computadora con una fuente de referencia horaria a través de una red de conmutación de paquetes. Descrito en RFC 5905 (NTPv4), el protocolo utiliza un sistema jerárquico de servidores, donde cada nivel se denomina estrato. Un cliente NTP envía solicitudes a un servidor, mide el tiempo de ida y vuelta del paquete (RTT) y calcula el desfase de su propio reloj respecto a la hora de referencia. El algoritmo de corrección tiene en cuenta no solo un desfase único, sino también la deriva del generador de reloj, lo que permite mantener la precisión durante largos períodos sin solicitudes repetidas.

Historia del desarrollo de NTP

El protocolo fue desarrollado por David Mills en 1985 para la red ARPANET. La primera especificación (RFC 958) describía un algoritmo simple de sincronización con precisión de hasta 100 ms. NTPv3 (RFC 1305, 1992) añadió un algoritmo de filtrado y mejoró el procesamiento de retardos. NTPv4 (RFC 5905, 2010), la versión actual, incluye soporte para IPv6, configuración automática de servidores y protección contra ataques mediante Network Time Security (NTS). Durante 40 años, el protocolo ha pasado de ser un proyecto de investigación a un estándar de infraestructura sin el cual serían imposibles las transacciones financieras, las telecomunicaciones y las redes móviles.

Cómo funciona NTP

El principio de funcionamiento de NTP se basa en la medición del tiempo de viaje del paquete en la red. El cliente envía una solicitud con una marca de tiempo T1 (hora local de envío). El servidor recibe la solicitud en el momento T2 (hora del servidor), genera una respuesta con la marca T3 y la envía. El cliente recibe la respuesta en el momento T4. Con las cuatro marcas de tiempo, el cliente calcula el desfase = ((T2 - T1) + (T3 - T4)) / 2 y el retardo = (T4 - T1) - (T3 - T2). Si el retardo supera 1 segundo, el resultado se considera no fiable, lo que protege contra canales sobrecargados o inestables.

Corrección de la deriva del reloj

Simplemente ajustar la hora exacta no es suficiente: el oscilador de cuarzo de un dispositivo se desvía constantemente (adelanta o atrasa) debido a la temperatura, el envejecimiento y el voltaje. NTP resuelve este problema mediante el algoritmo PLL (Phase-Locked Loop): no ajusta la hora de forma forzada, sino que adapta la velocidad del reloj. Si el dispositivo se adelanta 0,1 segundos por hora, NTP ralentiza el reloj del sistema hasta compensar la deriva. Este enfoque permite sincronizar cada varias horas en redes estables, en lugar de cada 30 segundos.

cpp
// Simplified NTP algorithm schema
struct NTPPacket {
    uint8_t flags;      // LI, VN, Mode
    uint8_t stratum;    // server stratum level
    uint32_t refTimestamp;  // reference timestamp
    uint32_t originTimestamp; // T1
    uint32_t recvTimestamp;   // T2
    uint32_t xmitTimestamp;   // T3
};

// Calculate offset and delay
double offset = ((t2 - t1) + (t3 - t4)) / 2.0;
double delay = (t4 - t1) - (t3 - t2);

Estratos — jerarquía de NTP

Todo el sistema NTP está organizado en una jerarquía, donde cada nivel se denomina estrato. El estrato 0 son los relojes de referencia: relojes atómicos, receptores GPS o señales de radio WWVB. Estos dispositivos no están conectados directamente a la red. El estrato 1 son servidores conectados directamente a los relojes de referencia. El estrato 2 recibe la hora del estrato 1, el estrato 3 del estrato 2, y así sucesivamente hasta el estrato 15. Cuanto mayor es el número de estrato, potencialmente menor es la precisión, ya que cada nivel añade un pequeño retardo y error. El estrato 16 significa que la hora no está disponible (no sincronizada).

EstratoDescripciónPrecisión
Stratum 0Relojes atómicos, GPS, señales de radioNanosegundos
Stratum 1Servidores conectados a la referenciaMicrosegundos
Stratum 2Servidores NTP públicos1–10 ms
Stratum 3Servidores locales de organizaciones10–50 ms
Stratum 4+Dispositivos clientehasta 100 ms

Cómo elegir un servidor por estrato

Para dispositivos móviles, los servidores de estrato 2 son óptimos: hay suficientes y ofrecen un buen equilibrio entre precisión y disponibilidad. Por ejemplo, pool.ntp.org es un conjunto de miles de servidores en todo el mundo que distribuye la carga automáticamente. Para aplicaciones Android, no se recomienda usar el estrato 1 directamente: en primer lugar, crea una carga excesiva en los servidores primarios, y en segundo lugar, un dispositivo móvil solo necesita una precisión de 10–50 ms, que proporciona el estrato 2. En redes corporativas, se instala un servidor local de estrato 3-4 que se sincroniza con un estrato 2 externo.

SNTP — versión simplificada de NTP

SNTP (Simple Network Time Protocol, RFC 4330) es una implementación simplificada de NTP para dispositivos con recursos limitados: microcontroladores, sensores IoT y aplicaciones móviles que no requieren alta precisión. A diferencia de NTP completo, SNTP no realiza filtrado de múltiples servidores, no analiza la deriva del reloj ni utiliza algoritmos PLL complejos. Un cliente SNTP envía una solicitud, recibe una respuesta y ajusta la hora una sola vez. La precisión de SNTP es de 10–100 ms según la red, suficiente para la gran mayoría de escenarios móviles, excepto las transacciones financieras.

Cuándo usar SNTP en lugar de NTP

SNTP es adecuado para aplicaciones Android que simplemente necesitan obtener la hora actual del servidor sin mantener una sincronización continua. Por ejemplo, una aplicación muestra la hora del servidor al iniciar sesión o se sincroniza una vez al día. Se requiere NTP completo para sistemas servidores, equipos de telecomunicaciones, plataformas financieras y bases de datos distribuidas donde la precisión constante y el monitoreo de la deriva son críticos. Para el desarrollo móvil, SNTP es suficiente: el servicio de hora integrado de Android lo utiliza para la sincronización periódica con los servidores de Google.

Implementación de NTP en Android

En aplicaciones Android, obtener la hora exacta mediante NTP es necesario cuando el usuario puede cambiar la hora del sistema o difiere de la hora real por falta de red. Android no tiene un cliente NTP público incorporado: los desarrolladores usan la biblioteca Apache Commons Net SntpClient o soluciones de terceros. En 2022, Google añadió una clase SntpClient interna a la API de Android (a través de Google Play Services), pero requiere configuración y no está documentada para uso general. Un enfoque alternativo es solicitar la hora a través de una API REST que devuelve la marca de tiempo del servidor en el cuerpo de la respuesta.

Ejemplo de implementación de cliente SNTP

Una implementación básica de SNTP en Android consiste en enviar un paquete UDP a un servidor NTP (por ejemplo, pool.ntp.org), analizar la respuesta y extraer la marca de tiempo de transmisión (T3). El código debe manejar los tiempos de espera de la red y los errores de análisis; en una aplicación real, esta operación se realiza en un hilo en segundo plano y el resultado se almacena en caché hasta la siguiente sincronización. La biblioteca Apache Commons Net proporciona una clase NTPUDPClient lista para usar que se puede utilizar en Android con modificaciones mínimas, añadiendo la dependencia en build.gradle.

kotlin
// Get NTP time via Apache Commons Net
fun getNtpTime(server: String = "pool.ntp.org"): Date? {
    return try {
        val client = NTPUDPClient()
        client.setDefaultTimeout(5000)
        val info = client.getTime(InetAddress.getByName(server))
        client.close()
        Date(info.getMessage().getTransmitTimeStamp().getTime())
    } catch (e: Exception) {
        null
    }
}

Precisión de NTP y factores de influencia

La precisión de NTP depende de varios factores: retardo de red (RTT), estabilidad del canal, carga del servidor y calidad del generador de reloj local. En una red local con retardo inferior a 1 ms, NTP alcanza una precisión de 0,1–1 ms. A través de internet con retardo de 10–50 ms, la precisión disminuye a 10–50 ms. Más importante que la precisión puntual es la estabilidad: si el retardo varía (jitter), NTP necesita más tiempo para calcular un desfase fiable. Para dispositivos móviles, el principal factor de inestabilidad es el cambio entre Wi-Fi y redes móviles, donde el retardo puede variar en un orden de magnitud.

Recomendaciones para el desarrollo móvil

Para aplicaciones Android sensibles a la hora exacta, se recomienda: usar varios servidores NTP y seleccionar el de menor retardo; evitar sincronizar durante los cambios de red; almacenar en caché la última hora obtenida y ajustarla mediante System.currentTimeMillis. Para juegos y aplicaciones en tiempo real (NTP no es adecuado aquí debido a la latencia de red), use la hora del servidor transmitida en cada solicitud. En aplicaciones financieras, verifique siempre la discrepancia con el servidor: si la diferencia supera los 5 segundos, bloquee la operación como potencialmente insegura.

Preguntas frecuentes

¿Qué es NTP y para qué sirve?

NTP (Network Time Protocol) es un protocolo de sincronización horaria a través de internet. Sirve para alinear la hora de los dispositivos con la referencia UTC. Sin NTP, los relojes de las computadoras se desvían segundos por día debido a la deriva del oscilador de cuarzo, lo que es crítico para transacciones financieras, registros y seguridad.

¿Cómo está estructurada la jerarquía de NTP?

El sistema NTP utiliza niveles — estratos: stratum 0 (relojes atómicos y GPS), stratum 1 (servidores conectados a la referencia), stratum 2 (servidores NTP públicos), stratum 3–4 (servidores locales), stratum 5–15 (clientes). Cuanto mayor es el estrato, mayor es el error potencial. El estrato 16 significa que la hora no está sincronizada.

¿En qué se diferencia NTP de SNTP?

SNTP es una versión simplificada de NTP para dispositivos con recursos limitados. No filtra servidores, no analiza la deriva del reloj ni usa PLL. SNTP es adecuado para aplicaciones móviles donde la precisión de 10–100 ms es suficiente. Se necesita NTP completo para servidores, equipos de telecomunicaciones y sistemas fintech.

¿Cómo obtener la hora exacta mediante NTP en Android?

Use la biblioteca Apache Commons Net con la clase NTPUDPClient. Envíe una solicitud a pool.ntp.org, obtenga la respuesta y extraiga la marca de tiempo de transmisión. Alternativamente, use la API REST de su servidor, que devuelve la hora del servidor en el encabezado Date o en el cuerpo de la respuesta como una marca de tiempo Unix.

¿Por qué es importante la sincronización horaria en dispositivos móviles?

Sin la sincronización NTP, la hora del sistema en un dispositivo puede diferir en minutos u horas. Esto afecta las notificaciones push, la validación de certificados SSL, los registros, los programadores de tareas y los protocolos criptográficos. En aplicaciones financieras, una discrepancia de más de 5 segundos se considera una amenaza de seguridad.

Resumen

  • NTP es un protocolo de sincronización horaria en red que proporciona precisión de 1 ms (LAN) a 50 ms (WAN) mediante una jerarquía de estratos 0–16
  • Corrección de deriva — NTP no solo ajusta la hora, sino que adapta la frecuencia del reloj mediante PLL, manteniendo la precisión durante horas entre sincronizaciones
  • Jerarquía de estratos — cada nivel (estrato) añade error potencial; para dispositivos móviles, los servidores de estrato 2 como pool.ntp.org son óptimos
  • SNTP — una versión simplificada de NTP para IoT y Android, sin filtrado ni PLL; la precisión de 10–100 ms es suficiente para la mayoría de escenarios
  • Implementación en Android — mediante Apache Commons Net (NTPUDPClient) o API REST con marca de tiempo del servidor; no existe un cliente NTP público integrado en la plataforma
  • Seguridad — NTPv4 admite Network Time Security (NTS) para protegerse contra la suplantación de respuestas; crítico para aplicaciones financieras y empresariales
  • Factores de precisión — RTT, jitter, cambio de red; las aplicaciones móviles necesitan 10–50 ms de precisión, pero las operaciones críticas requieren verificar la discrepancia con el servidor

Desarrollaremos una aplicación móvil llave en mano

IT Sectr crea aplicaciones para iOS y Android para startups y empresas desde 2017. Le asesoraremos y le propondremos la mejor solución.

Discutir el proyecto

Lea también