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:
Spieghiamo di cosa si tratta:
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