Passa al contenuto principale

3. Protocol Modes (Modalità del protocollo)

Esistono tre varianti del protocollo NTP: simmetrica (symmetric), client/server e broadcast. Ognuna è associata a una modalità di associazione (association mode, descrizione della relazione tra due parlanti NTP) come mostrato nella Figura 1. Inoltre, le associazioni persistenti (persistent associations) vengono mobilitate all'avvio e non vengono mai smobilitate. Le associazioni effimere (ephemeral associations) vengono mobilitate all'arrivo di un pacchetto e vengono smobilitate in caso di errore o timeout.

+-------------------+-------------------+------------------+
| Association Mode | Assoc. Mode Value | Packet Mode Value|
+-------------------+-------------------+------------------+
| Symmetric Active | 1 | 1 or 2 |
| Symmetric Passive | 2 | 1 |
| Client | 3 | 4 |
| Server | 4 | 3 |
| Broadcast Server | 5 | 5 |
| Broadcast Client | 6 | N/A |
+-------------------+-------------------+------------------+

Figura 1: Modalità di associazione e pacchetto

Nella variante client/server, un client persistente invia pacchetti in modalità 4 a un server, che restituisce pacchetti in modalità 3. I server forniscono la sincronizzazione a uno o più client, ma non accettano la sincronizzazione da essi. Un server può anche essere un driver di orologio di riferimento (reference clock driver) che ottiene il tempo direttamente da una fonte standard come un ricevitore GPS o un servizio modem telefonico. In questa variante, i client tirano (pull) la sincronizzazione dai server.

Nella variante simmetrica, un peer opera sia come server che come client utilizzando un'associazione simmetrica attiva (symmetric active) o simmetrica passiva (symmetric passive). Un'associazione simmetrica attiva persistente invia pacchetti simmetrici attivi (modalità 1) a un'associazione di peer simmetrica attiva. In alternativa, un'associazione simmetrica passiva effimera può essere mobilitata all'arrivo di un pacchetto simmetrico attivo senza un'associazione corrispondente. Quella associazione invia pacchetti simmetrici passivi (modalità 2) e persiste fino a un errore o timeout. I peer spingono e tirano entrambi la sincronizzazione da e verso l'altro. Ai fini di questo documento, un peer opera come un client, quindi i riferimenti al client implicano anche il peer.

Nella variante broadcast, un'associazione di server broadcast persistente invia pacchetti periodici del server broadcast (modalità 5) che possono essere ricevuti da più client. Alla ricezione di un pacchetto del server broadcast senza un'associazione corrispondente, viene mobilitata un'associazione di client broadcast effimera (modalità 6) e persiste fino a un errore o timeout. È utile fornire una raffica iniziale (initial volley) in cui il client che opera in modalità client scambia diversi pacchetti con il server, in modo da calibrare il ritardo di propagazione (propagation delay) e per eseguire il protocollo di sicurezza Autokey, dopo di che il client ritorna alla modalità client broadcast. Un server broadcast spinge la sincronizzazione ai client e ad altri server.

Seguendo liberamente le convenzioni stabilite dall'industria delle telecomunicazioni, il livello di ciascun server nella gerarchia è definito da un numero di strato (stratum number). Ai server primari viene assegnato lo strato uno; ai server secondari a ciascun livello inferiore vengono assegnati numeri di strato maggiori di uno rispetto al livello precedente. Man mano che il numero di strato aumenta, la sua precisione si degrada a seconda del particolare percorso di rete e della stabilità dell'orologio di sistema. Gli errori medi, misurati dalle distanze di sincronizzazione (synchronization distances), aumentano approssimativamente in proporzione ai numeri di strato e al ritardo di andata e ritorno (round-trip delay) misurato.

Come pratica standard, la topologia della rete temporale dovrebbe essere organizzata per evitare loop temporali (timing loops) e minimizzare la distanza di sincronizzazione. In NTP, la topologia della sottorete è determinata utilizzando una variante dell'algoritmo di routing distribuito Bellman-Ford (Bellman-Ford distributed routing algorithm), che calcola l'albero di copertura del percorso più breve (shortest-path spanning tree) radicato sui server primari. Come risultato di questo design, l'algoritmo riorganizza automaticamente la sottorete, in modo da produrre il tempo più accurato e affidabile, anche quando ci sono guasti nella rete temporale.

3.1. Dynamic Server Discovery (Scoperta dinamica del server)

Ci sono due associazioni speciali, il client manycast (manycast client) e il server manycast (manycast server), che forniscono una funzione di scoperta dinamica del server (dynamic server discovery function). Ci sono due tipi di associazioni client manycast: persistenti ed effimere. Il client manycast persistente invia pacchetti client (modalità 3) a un indirizzo di gruppo broadcast o multicast IPv4 o IPv6 designato. I server manycast designati entro il range del campo TTL (time-to-live, tempo di vita) nell'intestazione del pacchetto ascoltano i pacchetti con quell'indirizzo. Se un server è adatto per la sincronizzazione, restituisce un pacchetto server ordinario (modalità 4) utilizzando l'indirizzo unicast del client. Alla ricezione di questo pacchetto, il client mobilita un'associazione client effimera (modalità 3). L'associazione client effimera persiste fino a un errore o timeout.

Un client manycast continua a inviare pacchetti per cercare un numero minimo di associazioni. Inizia con un TTL uguale a uno e continua ad aggiungere uno fino a quando non viene stabilito il numero minimo di associazioni o quando il TTL raggiunge un valore massimo. Se il TTL raggiunge il suo valore massimo e tuttavia non vengono mobilitate abbastanza associazioni, il client interrompe la trasmissione per un periodo di timeout per cancellare tutte le associazioni, e quindi ripete il ciclo di ricerca. Se è stato mobilitato un numero minimo di associazioni, allora il client inizia a trasmettere un pacchetto per periodo di timeout per mantenere le associazioni. I vincoli di campo limitano il valore minimo a 1 e il massimo a 255. Questi limiti possono essere regolati per le esigenze delle singole applicazioni.

Le associazioni effimere competono tra loro. Man mano che vengono mobilitate nuove associazioni effimere, il client esegue gli algoritmi di mitigazione (mitigation algorithms) descritti nelle Sezioni 10 e 11.2 per i migliori candidati dalla popolazione, le restanti associazioni effimere scadono e vengono smobilitate. In questo modo, la popolazione include solo i migliori candidati che hanno risposto più di recente con un pacchetto NTP per disciplinare l'orologio di sistema.