Perchè sincronizzarsi?

Pensiamo ad un appuntamento. Cosa succederebbe se gli orologi delle due persone segnassero orari diversi? Incontrarsi all'ora stabilita potrebbe essere problematico, in relazione alla differenza di orari ed alla pazienza del primo arrivato. Per alcune persone cinque minuti possono essere considerati ``fisiologici'' e quindi tollerati, ma per un computer, meno elastico di noi, questo ritardo potrebbe creare seri problemi.

La sincronizzazione temporale è di fondamentale importanza in modo particolare nell'interazione via rete: soltanto attraverso la condivisione del medesimo orario è possibile la coordinazione di eventi tra entità. È anche parte integrante di sistemi di sicurezza e crittografia: il logging richiede un preciso ordinamento temporale tra gli eventi in un sistema (in senso lato, si pensi per esempio ad un cluster), mentre per la crittografia, la sincronizzazione tra i comunicanti, consente l'uso e la validazione di messaggi temporizzati.

Vediamo in maggior dettaglio quali campi dell'informatica risultano maggiormente interessati, fino a risultarne vincolati, dalla sincronizzazione temporale:

Accuratezza dei log
I file di log sono utili, in modo particolare, in caso di guasti o intrusioni in sistemi informatici, sia perchè rivelano questi eventi sia perchè consentono di seguire l'evoluzione del problema. Molto spesso capita che un server centrale gestisca i log di molte applicazioni differenti eseguite su alcuni server: si capisce bene che, per seguire l'evoluzione degli eventi, è necessario che gli orologi dei vari server siano sincronizzati, così da poter ottenere una coerente successione temporale degli accadimenti.

Monitoraggio
In alcuni casi, gli amministratori di sistema utilizzano sistemi di monitoraggio remoti, come RMON, usualmente utilizzati per ricostruire le cause di un problema di rete. Dal momento che devono coordinare informazioni provenienti da una moltitudine di sorgenti, la sincronizzazione del tempo è di particolare importanza.

Calcolo distribuito
Nel caso in cui, oltre a mantenere un log comune, diversi server collaborino alla soluzione di uno stesso problema, ci troviamo di fronte a quello che viene detto calcolo distribuito. È ormai molto frequente l'installazione di cluster di calcolo anche in piccole e medie imprese e quindi il problema di dover sincronizzare i server che partecipano al cluster, per evitare comportamenti inconsistenti, diviene ancora più attuale.

Diagnosi e recupero di attacchi di rete
Con l'esplosione delle comunicazioni su Internet e con sempre più aziende che si affacciano sulla Grande Rete, aumentano i rischi di attacchi. All'aumentare della complessità della topologia della rete, aumenta anche l'esposizione a possibili attacchi. Si devono tenere sotto controllo diversi segmenti di rete, molti router, alcuni Access Point; si deve quindi centralizzare le informazioni provenienti da tutti questi punti in un unico nodo (sotto Linux si può utilizzare l'accoppiata snort-logsnorter) in modo da consentire un'analisi comparata delle informazioni, che dovranno essere quindi coerenti temporalmente.

Timestamp dei file
I moderni file system mantengono diverse informazioni sui file che gestiscono e, tra queste, sono presenti la data di creazione, di modifica e molte altre. Quando il file system non risiede su una sola macchina (file system distribuito) oppure risiede su un'altra macchia (file system remoto), la data di modifica riveste molta importanza: per esempio NFS scarta un'aggiornamento di un file se la copia inviata risulta precedente a quella memorizzata in locale. Si capisce bene che avere (in questo caso) il proprio orologio in ritardo rispetto a quello del server NFS porta alla possibile perdita di tutte le modifiche apportate.

Autenticazione
Windows 2000 utilizza come protocollo di autenticazione di default Kerberos, il quale utilizza anche parte dell'orario della workstation come parte del processo per generare il ticket di autenticazione. Se la differenza di tempo tra i domain controller supera la tolleranza concessa da Kerberos, potrebbe non essere possibile autenticarsi/collegarsi ad essi.
Inoltre, diversi protocolli prevedono l'utilizzo di un timestamp nei messaggi ed una finestra temporale di validità: se l'orario tra i due comunicanti differisce in misura considerevole, i messaggi potrebbero venir scartati anche se validi.

Operazioni programmate
Nei sistemi *nix cron e crontab svolgono il compito di eseguire determinati programmi ad un tempo specificato. Solitamente si tratta di operazioni lunghe e non interattive, come il backup dei dati che comunemente viene svolto in orari notturni. La sincronizzazione di un host è necessaria per garantire che le operazioni vengano svolte quando previsto. In caso di utilizzo di diverse macchine, la sincronizzazione diventa critica in quanto si deve garantire che le attività programmate siano coordinate correttamente.

Transazioni
La necessità di sincronizzazione nella gestione delle transazioni non è una novità: fin dagli anni '60 IBM ha riconosciuto la criticità di questo compito nell'ambito della gestione di un gran volume di transazioni. La necessità di precisione dell'ordine dei decimi di secondo (a volte anche inferiore) è data dal fatto che è necessario porle nel corretto ordine di esecuzione, soprattutto nel caso siano quasi simultanee. Un esempio di quanto sia importante questo aspetto è dato dalle transazioni borsistiche: oggi giorno tutte le operazioni in Borsa vengono svolte telematicamente e se tutti i terminali non fossero correttamente sincronizzati con il sistema di gestione delle transazioni, i risultati potrebbero essere inconsistenti, per non dire catastrofici.

Sviluppo software
Lo sviluppo software può essere un'attività altamente distribuita in quanto i team di sviluppo mantengono il codice su differenti server, spesso differenti anche geograficamente. I sistemi di controllo della versione (per esempio, CVS) vengono utilizzati per gestire la compilazione del codice; spesso, per decidere se ricompilare del codice, viene utilizzato il timestamp del file: nel caso non ci sia sincronia tra workstation e server CVS si potrebbero verificare delle incongruenze, in quanto la compilazione non utilizzerebbe la versione più aggiornata (di fatto verrebbe utilizzato il codice compilato in precedenza). Questo tipo di problema è difficilmente individuabile: infatti è spesso attribuito a problemi nel codice invece che alla cattiva amministrazione di questo.

E-Mail
Ormai, lo vediamo ogni giorno, l'e-mail è diventato uno strumento indispensabile per comunicare, una vera rivoluzione. Ogni e-mail contiene il timestamp di quando è stata spedita, relativo al mittente; se questo timestamp è evidentemente errato, ciò può creare confusione nel destinatario.

Questo lungo elenco di applicazioni critiche rispetto al tempo ci dovrebbe far capire come la gestione dell'orario e della sua sincronizzazione, rispetto ad una fonte ``sicura'', sia realmente una necessità.

Il protocollo NTP (Network Time Protocol) è stato sviluppato proprio per questo compito: sincronizzare un host utilizzando un server in grado di fornire un orario il più corretto possibile.

2004-01-08