Il funzionamento di NTP

Finora abbiamo detto come il principale compito di NTP sia di sincronizzare l'orologio con uno più preciso, ma non abbiamo ancora descritto come è in grado di svolgere questo compito: cercheremo di vederlo adesso.

Un client, quando vuole sincronizzare il proprio orologio manda un pacchetto NTP visto sopra con tutti i campi a 0 tranne VN, Mode e Transmit Timestamp che imposta rispettivamente a 4 (la versione attualmente disponibile), 3 (modalità client) e l'ora in cui il pacchetto è stato spedito; da notare come non sia necessario che il suo orologio sia corretto. Impostare il valore del campo Transmit Timestamp è importante sia come semplice metodo per verificare che la risposta del server sia legittima sia per i calcoli che vedremo in seguito.

Il server, quando riceve un pacchetto di richiesta di sincronizzazione, copia dalla richiesta il campo Transmit Timestamp nel campo del messagio di risposta Originate Timestamp e riempie i restanti campi in modo opportuno, con particolare attenzione per i campi timestamp. Quando la risposta del server è ricevuta, il client determina il Destination Timestamp come il tempo di arrivo in accordo col proprio orologio nel formato NTP.

Chiamando i timestamp in maniera abbreviata nel seguente modo

Timestamp ID quando viene generato
Originate Timestamp T1 richiesta inviata dal client
Receive Timestamp T2 richiesta ricevuta dal server
Transmit Timestmap T3 risposta inviata dal server
Destination Timestamp T4 risposta ricevuta dal client

possiamo definire due quantità molto importanti: il roundtrip delay d e l'offset t dell'orologio:


\begin{displaymath}
d \: = \: (\mbox{T4} - \mbox{T1}) - (\mbox{T3} - \mbox{T2}) ...
...\: \frac{(\mbox{T2} - \mbox{T1}) + (\mbox{T3} - \mbox{T4})}{2}
\end{displaymath}

Spieghiamo di cosa si tratta:

Delay d
Rappresenta il tempo che una richiesta impiega per raggiungere il server sommato al tempo che la risposta impiega per tornare indietro; la prima quantità della relazione rappresenta il tempo, relativo al client, tra la trasmissione della richiesta e la ricezione della risposta, mentre il secondo addendo rappresenta il tempo di elaborazione sul server della richiesta, prima che spedisca la relativa risposta.

Offset t
Rappresenta la differenza di tempo tra due orologi e, in questo frangente, è l'ammontare di tempo da sommare al proprio orologio per sincronizzarlo con quello della sorgente di riferimento. Questo valore è il risultato più importante del protocollo NTP, poichè consente di ottenere la sincronizzazione del proprio orologio.

Si noti come entrambi questi valori siano con segno: però, mentre l'offset può normalmente avere segno negativo (l'orologio locale è in anticipo rispetto all'orologio di riferimento), un delay negativo è possibile soltanto nelle modalità simmetriche.

Una proprietà molto importante di questi due valori è che il loro calcolo non è influenzato dal cambiamento di era NTP: se l'era è la stessa per tutti i timestamp, allora verrà cancellata nelle equazioni; anche se il cambio di era avviene tra la richiesta e la risposta non si verificano problemi, in quanto la differenza tra T4 e T1 sarà molto elevata, ma si andrà a cancellare in entrambe le equazioni.

La sincronizzazione, per sua natura, necessita di lunghi periodi e molteplici comparazioni per ottenere e mantenere un orario accurato: l'accuratezza raggiunta è proporzionale al tempo speso per raggiungerla. In effetti, il calcolo proposto qui si riferisce al protocollo SNTP, mentre NTP presenta una suite di algoritmi per la selezione della sorgente di riferimento e per la correzione degli errori molto raffinata, ma che non vedremo (per una trattazione completa si veda  [RFC 1305], mentre per una breve discussione si legga la sezione seguente).

2004-01-08