2013-10-14 10 views
5

Stavo leggendo NTPv4 rfc per capire meglio il meccanismo utilizzato da ntp. Quindi, l'idea di base sembra essere semplice. Ma sono un po 'confuso riguardo a come NTP Clock Discipline works.Come funziona NTP Clock Discipline?

In NTPv4 si dice che un PLL/FLL ibrido viene utilizzato per disciplinare l'orologio. Secondo la mia comprensione, PLL si blocca sulla fase server e regola l'orologio client all'intervallo di aggiornamento. FLL si blocca sulla frequenza di clock e regola l'orologio del client all'intervallo di aggiornamento.

lo dice anche il PLL funziona meglio se v'è più di rete jitter (picchi di latenza) dove FLL funziona meglio se l'orologio vagare è il problema (diverse frequenze di clock/drift)

posso capire l'uso del feedback controllo per regolarli e può anche capire come stanno lavorando dal diagramma incluso nel rfc NTP. Ma qualcuno può spiegare in che modo NTP implementa la disciplina di clock ibrido FLL/PLL solo dal pacchetto ricevuto dal server?

Sarebbe bello se qualcuno potesse solo spiegare la logica dietro anche.

+2

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

+0

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

+0

Hai provato il libro del Prof. Mills? – dfc

risposta

3

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.

enter image description here 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.

enter image description here 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.

+0

Il mio problema principale era come calcola il phase_offset e il frequency_offset rispetto ad un server. (Parte fase è ciò che hai scritto come V_d = (theata_r - theata_c) .Ma come viene calcolato il frequency_offset? Ho un'idea, ma non sono sicuro se sia giusto o sbagliato Comunque questa risposta aiuterà chiunque a cercare di capire NTP , quindi gj :) – fadedreamz

+0

@fadedreamz Ho aggiornato la mia risposta. –

+0

@OrtomalaLokni So che nella documentazione si dice che SNTP può sincronizzarsi solo con un server, ma quando ho configurato ntp su arch (installato questa settimana seguendo la guida all'installazione) mi ha portato a credere che stavo installando SNTP; eppure mi ha permesso di configurare più server.Forse perché, come dici tu, non esiste un'implementazione ufficiale di riferimento e l'implementazione di Linux sceglie di consentire più fonti? O forse vanno alla fonte successiva nell'elenco se c'è un guasto di qualche tipo? – Assimilater

Problemi correlati