Il formato dati di NTP

NTP utilizza UDP per trasmettere i propri messaggi, utilizzando la porta 123. In figura 3 possiamo vedere il formato del pacchetto:

Figura 3: Il pacchetto di NTP
\begin{figure}\begin{center}
\begin{bytefield}{32}
\bitheader{0-31}\\
\bitbox{2...
...mp} \\
\wordbox{2}{Transmit Timestamp}
\end{bytefield}\end{center}
\end{figure}

in questa figura non sono stati rappresentati i campi relativi all'autenticazione, in quanto NTPv3 utilizza un formato diverso da quello del futuro NTPv4. Diamo dunque una descrizione dei campi presenti nel messaggio NTP:

Leap Indicator (LI)
Codice a due bit di avviso per un leap second da inserire o cancellare dall'ultimo minuto del corrente giorno. Si possono avere i seguenti casi:

00   nessun avviso
01   l'ultimo minuto ha 61 secondi
10   l'ultimo minuto ha 59 secondi
11   condizione di allarme (orologio non sincronizzato)

Version Number (VN)
Un intero a tre bit che indica il numero di versione di NTP/SNTP. Un valore pari a 3 indica NTPv3, 4 indica NTPv4.

Mode
Un intero a tre bit che indica la modalità della comunicazione, i cui valori sono definiti come segue:

0   riservato
1   attiva simmetrica
2   passiva simmetrica
3   client
4   server
5   broadcast
6   riservato per i messaggi di controllo NTP
7   riservato per usi provati

Stratum
Un intero di otto bit che indica lo stratum dell'orologio locale, i cui valori sono definiti come segue:

0   non specificato o non disponibile
1   riferimento primario
2-15   riferimento secondario (via NTP/SNTP)
16-255   riservato

Nella versione 4 del protocollo, lo stratum 0 è un particolare messaggio inviato dal server al client chiamato Kiss-of-Death, utilizzato per informare il client che qualcosa non è andato come doveva; dal momento che NTPv4 è ancora in fase di bozza, questo messaggio verrà solo menzionato brevemente nella descrizione del pacchetto ed in nessun'altra parte.

Poll Interval
Un intero di otto bit senza segno che indica il massimo intervallo tra due successivi messaggi in secondi come esponente del 2; indicando con PI il valore di questo campo, allora l'intervallo verrà calcolato come $2^{PI}$.

Precision
Un intero di otto bit con segno che indica la precisione dell'orologio locale in secondi come esponente del 2; indicando con PR il valore di questo campo, la precisione verrà calcolato come $2^{PR}$.

Root Delay
Un numero in virgola fissa a 32 bit con segno che indica il ritardo di roundtrip dalla sorgente di riferimento primario in secondi, con punto decimale fra i bit 15 e 16.

Root Dispersion
Un numero in virgola fissa a 32 bit senza segno che indica l'errore nominale relativo alla sorgente di riferimento primario, in secondi, con punto decimale tra i bit 15 e 16.

Reference Identifier
Una stringa di 32 bit che identifica la particolare sorgente di riferimento. In NTPv4, nel caso di stratum 1 è una stringa di quattro caratteri ASCII che identifica la fonte di sincronizzazione esterna (in stratum 0 rappresenta il messaggio spedito al client) mentre per stratum superiori è l'indirizzo IPv4 della sorgente di sincronizzazione.

Reference Timestamp
L'ora in cui è stato impostato o corretto per l'ultima volta l'orologio locale, nel formato NTP.

Originate Timestamp
L'ora in cui la richiesta ha lasciato il client per il server, nel formato NTP.

Receive Timestamp
L'ora in cui la richiesta è arrivata al server, nel formato NTP.

Transimit Timestamp
L'ora in cui la risposta ha lasciato il server per il client, nel formato NTP.

2004-01-08