Rispondere in modo esaustivo alla domanda:
Come funziona NTP implementa FLL/PLL orologio ibrido disciplina proprio dal pacchetto ricevuto dal server?
richiede le 90 pagine del documento: Network Time Protocol Version 4, Reference and Implementation Guide. Cercherò di riassumere una risposta qui.
In breve, il client NTP riceve i timestamp da uno o più server e stima una correzione di fase da applicare. Quindi la correzione viene applicata gradualmente per evitare salti di clock.
Sia PLL o FLL possono essere utilizzati, ma il documento dice
PLL di solito funziona meglio quando jitter rete domina, mentre un FLL funziona meglio quando oscillatore vagare domina.
Contrariamente a NTPv3, in NTPv4, PLL e FLL vengono utilizzati simultaneamente e combinati.
sistema di controllo di feedback
La disciplina orologio viene implementato come il sistema di controllo in retroazione mostrato in figura 1.
Figura 1: Orologio retroazione disciplina
theta_r rappresenta la fase di riferimento generata dall'algoritmo di combinazione e rappresenta la migliore stima dello sfasamento dell'orologio di sistema relativo all'insieme di server.
theta_c rappresenta la fase di controllo dell'orologio di sistema modellato come un oscillatore a frequenza variabile (VFO).
V_d è la differenza di fase theta_r - theta_c
V_s è l'uscita dell'algoritmo del filtro orologio che selezionare il miglior compensato campioni.
V_c è il segnale prodotto dal filtro di loop che combina il PLL e il FLL come descritto nella seconda figura.
Figura 2: Orologio filtro loop disciplina
Aggiorna === ===
Per comprendere i dettagli di spostamento di fase e calcolo offset di frequenza, è necessario immergersi nella implementazione di riferimento . Un buon punto di partenza è la funzione
/*
* packet() - process packet and compute offset, delay and
* dispersion.
*/
packet()
In modalità server broadcast, il calcolo è come seguono
offset = LFP2D(r->xmt - r->dst);
delay = BDELAY;
disp = LOG2D(r->precision) + LOG2D(s.precision) + PHI * 2 * BDELAY;
dove r
è il puntatore pacchetto ricevuto e s
lo strucure sistema. Quindi la funzione clock_filter
è invocked
/*
* The clock filter contents consist of eight tuples (offset,
* delay, dispersion, time). Shift each tuple to the left,
* discarding the leftmost one. As each tuple is shifted,
* increase the dispersion since the last filter update. At the
* same time, copy each tuple to a temporary list. After this,
* place the (offset, delay, disp, time) in the vacated
* rightmost tuple.
*/
La stessa clock_filter invocke la funzione clock_select
, e solo dopo questo si chiama la funzione clock_update
.
Ciò che è importante ricordare è che questi algoritmi si sincronizzano con più clock e non con un solo clock del server. Questo introduce uno strato di complessità e la domanda Come sincronizzarsi con un server? non ha una risposta diretta perché gli algoritmi sono costruiti per sincronizzarsi con più orologi.
Il protocollo SNTP (Simple NTP) utilizza solo un clock del server ma non esiste un'implementazione ufficiale di riferimento.
Leggere [Algoritmo Adaptive Clock Discipline ibrido per il Network Time Protocol] (http://www.eecis.udel.edu/~mills/database/papers/allan.pdf) o [NTP Clock Discipline Principles] (http://www.eecis.udel.edu/~mills/database/brief/clock/clock.pdf) di David L. Mills. – Arno
Ho provato a leggere entrambi prima di pubblicare la domanda, ma non ho potuto capire il meccanismo di FLL/PLL descritto su quei riferimenti. Penso che rfc sia più facile da digerire rispetto alla carta e alla presentazione. Soprattutto perché usa la parola 'lettore-sappia-perché-è-là'. Qualche altro suggerimento? Grazie. – fadedreamz
Hai provato il libro del Prof. Mills? – dfc