1. Introduction (Introduzione)
Questo documento definisce il Network Time Protocol versione 4 (NTPv4), che è ampiamente utilizzato per sincronizzare gli orologi di sistema tra un insieme di server temporali e client distribuiti. Descrive l'architettura di base (architecture), il protocollo (protocol), le macchine a stati (state machines), le strutture dati (data structures) e gli algoritmi (algorithms). NTPv4 introduce nuove funzionalità in NTPv3, come descritto in [RFC1305], e funzionalità estese dal Simple NTP versione 4 (SNTPv4) come descritto in [RFC4330] (SNTPv4 è un sottoinsieme di NTPv4). Questo documento rende obsoleti [RFC1305] e [RFC4330]. Sebbene siano state apportate alcune modifiche minori ad alcuni campi di intestazione del protocollo, queste non influenzano l'interoperabilità tra NTPv4 e le versioni precedenti di NTP e SNTP.
Il modello di sottorete NTP (subnet model) include un numero di server temporali primari (primary time servers) ampiamente accessibili, sincronizzati via cavo o radio agli standard nazionali. Lo scopo del protocollo NTP è quello di trasmettere informazioni di cronometraggio da questi server primari ai server temporali secondari (secondary time servers) e ai client tramite reti private e Internet pubblico. Algoritmi precisamente calibrati mitigano gli errori che possono derivare da interruzioni di rete, guasti del server e possibili azioni ostili. Server e client sono configurati in modo tale che i valori fluiscano verso i client dai server primari alla radice tramite server secondari ramificati.
Il design di NTPv4 supera significative lacune nel design di NTPv3, corregge alcuni bug e incorpora nuove funzionalità. In particolare, le definizioni estese di timestamp (timestamp) NTP incoraggiano l'uso del tipo di dato a virgola mobile doppia (floating double) in tutta l'implementazione. Di conseguenza, la risoluzione temporale (time resolution) è migliore di un nanosecondo e la risoluzione in frequenza (frequency resolution) è inferiore a un nanosecondo al secondo. Ulteriori miglioramenti includono un nuovo algoritmo di disciplina dell'orologio (clock discipline algorithm) che è più reattivo alle fluttuazioni di frequenza hardware dell'orologio di sistema. I server primari tipici che utilizzano macchine moderne sono precisi entro poche decine di microsecondi. I server secondari tipici e i client su LAN veloci sono entro poche centinaia di microsecondi con intervalli di polling (poll intervals) fino a 1024 secondi, che era il massimo con NTPv3. Con NTPv4, i server e i client sono precisi entro poche decine di millisecondi con intervalli di polling fino a 36 ore.
Il corpo principale di questo documento descrive il protocollo di base e le strutture dati necessarie per l'interoperabilità tra implementazioni conformi. L'appendice A contiene un esempio completo sotto forma di programma scheletro (skeleton program), che include strutture dati e segmenti di codice per gli algoritmi di base e gli algoritmi di mitigazione (mitigation algorithms) utilizzati per migliorare l'affidabilità e la precisione. Mentre il programma scheletro e altre descrizioni in questo documento si applicano a una particolare implementazione, non sono intesi come l'unico modo per implementare le funzioni richieste. Il contenuto dell'appendice A è un esempio non normativo progettato per illustrare il funzionamento del protocollo e non è un requisito per un'implementazione conforme. Mentre lo schema di autenticazione a chiave simmetrica (symmetric key authentication scheme) NTPv3 descritto in questo documento è stato ripreso da NTPv3, lo schema di autenticazione a chiave pubblica (public key authentication scheme) Autokey nuovo in NTPv4 è descritto in [RFC5906].
Il protocollo NTP include modalità di funzionamento (modes of operation) descritte nella sezione 2 utilizzando tipi di dati (data types) descritti nella sezione 6 e strutture dati (data structures) descritte nella sezione 7. Il modello di implementazione (implementation model) descritto nella sezione 5 è basato su un'architettura multithread e multiprocesso (threaded, multi-process architecture), sebbene potrebbero essere utilizzate anche altre architetture. Il protocollo on-wire (on-wire protocol) descritto nella sezione 8 è basato su un design a tempo restituibile (returnable-time) che dipende solo dagli offset dell'orologio (clock offsets) misurati, ma non richiede una consegna affidabile dei messaggi. La consegna affidabile dei messaggi come TCP [RFC0793] può effettivamente rendere il pacchetto NTP consegnato meno affidabile poiché i tentativi aumenterebbero il valore del ritardo e altri errori. La sottorete di sincronizzazione (synchronization subnet) è una rete gerarchica master-slave auto-organizzante (hierarchical, master-slave network) con percorsi di sincronizzazione determinati da un albero di copertura del percorso più breve (shortest-path spanning tree) e una metrica definita. Sebbene possano esistere più master (server primari), non vi è alcun requisito per un protocollo di elezione (election protocol).
Questo documento include materiale da [ref9], che contiene diagrammi di flusso ed equazioni non adatti al formato RFC. Ci sono molte informazioni aggiuntive in [ref7], tra cui un'analisi tecnica approfondita e una valutazione delle prestazioni del protocollo e degli algoritmi in questo documento. L'implementazione di riferimento è disponibile su www.ntp.org.
Il resto di questo documento contiene numerose variabili ed espressioni matematiche. Alcune variabili assumono la forma di caratteri greci, che sono scritti per esteso con il loro nome completo sensibile alle maiuscole. Ad esempio, DELTA si riferisce al carattere greco maiuscolo, mentre delta si riferisce al carattere minuscolo. Inoltre, gli indici sono indicati con '_'; ad esempio, theta_i si riferisce al carattere greco minuscolo theta con indice i, o foneticamente theta sub i. In questo documento, tutti i valori temporali sono in secondi (s), e tutte le frequenze saranno specificate come offset di frequenza frazionari (Fractional Frequency Offsets, FFO) (numero puro). È spesso conveniente esprimere questi FFO in parti per milione (parts per million, ppm).
1.1. Requirements Notation (Notazione dei requisiti)
Le parole chiave "MUST" (deve), "MUST NOT" (non deve), "REQUIRED" (richiesto), "SHALL" (deve), "SHALL NOT" (non deve), "SHOULD" (dovrebbe), "SHOULD NOT" (non dovrebbe), "RECOMMENDED" (raccomandato), "MAY" (può), e "OPTIONAL" (opzionale) in questo documento devono essere interpretate come descritto in [RFC2119].