Beantwortung abschließend die Frage:
Wie funktioniert NTP implementiert FLL/PLL Disziplin Hybrid-Takt nur von Paket vom Server empfangen?
erfordert die 90 Seiten des Dokuments: Network Time Protocol Version 4, Reference and Implementation Guide. Ich werde versuchen, hier eine Antwort zusammenzufassen.
Kurz gesagt, der NTP-Client erhält Zeitstempel von einem oder mehreren Servern und schätzt eine Phasenkorrektur ein. Dann wird die Korrektur allmählich angewendet, um Taktsprünge zu vermeiden.
Beide PLL oder FLL kann verwendet werden, aber das Dokument sagt
PLL in der Regel besser funktioniert, wenn Netzwerk-Jitter dominiert, während ein FLL besser funktioniert, wenn Oszillator schweifen dominiert.
Im Gegensatz zu NTPv3 werden in NTPv4 PLL und FLL simultan verwendet und kombiniert.
Feedback-Steuersystem
Die Uhr Disziplin als das Rückkopplungssteuerungssystem in der Figur 1.
gezeigt implementiert ist 1: Clock Disziplin Rückkopplungsschleife
theta_R darstellt die Referenzphase, die durch den Kombinationsalgorithmus erzeugt wird und die beste Schätzung des Systemtaktversatzes relativ zu dem Satz von Servern darstellt.
theta_c stellt die Steuerphase des Systemtakts dar, der als variabler Frequenzoszillator (VFO) modelliert wurde.
V_d ist die Phasendifferenz theta_R - theta_c
V_S wird die Ausgabe des Taktfilter-Algorithmus, der die beste Offset Proben auszuwählen.
V_c ist das vom Loop-Filter erzeugte Signal, das die PLL und die FLL wie in der zweiten Abbildung kombiniert.
Abbildung 2: Clock Disziplin Schleifenfilter
=== aktualisieren ===
die Details Phase Um zu verstehen, Offset und Frequenz-Offset-Berechnung, müssen Sie in die Referenzimplementierung tauchen . Ein guter Punkt zu beginnen, ist die Funktion packet()
/*
* packet() - process packet and compute offset, delay and
* dispersion.
*/
im Broadcast-Server-Modus, ist die Berechnung wie folgt
offset = LFP2D(r->xmt - r->dst);
delay = BDELAY;
disp = LOG2D(r->precision) + LOG2D(s.precision) + PHI * 2 * BDELAY;
wo r
die empfangene Paketzeiger ist und das System s
strucure. Dann wird die clock_filter
Funktion
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.
*/
Die clock_filter selbst invocke die clock_select
Funktion, und erst danach die clock_update
Funktion aufgerufen wird.
Was zu beachten ist, ist, dass diese Algorithmen mit mehreren Uhren und nicht mit nur einem Server-Takt synchronisieren. Dies führt zu einer Komplexitätsebene und der Frage Wie man mit einem Server synchronisiert? hat keine direkte Antwort, da Algorithmen zur Synchronisation mit mehreren Uhren erstellt werden.
Das SNTP-Protokoll (Simple NTP) verwendet nur eine Serveruhr, aber es gibt keine offizielle Referenzimplementierung.
Read [Adaptive Hybrid Clock Disziplin Algorithmus für das Network Time Protocol] (http://www.eecis.udel.edu/~mills/database/papers/allan.pdf) oder [NTP Uhr Disziplin Principles] (http://www.eecis.udel.edu/~mills/database/brief/clock/clock.pdf) von David L. Mills. – Arno
Ich habe versucht, beide vor dem Stellen der Frage zu lesen, aber ich konnte den Mechanismus von FLL/PLL nicht verstehen, der auf diesen Referenzen beschrieben wird. Ich denke, RFC ist einfacher zu verdauen als das Papier und die Präsentation. Hauptsächlich, weil es "Leser-wissen-warum-es-ist-dort" Mathematik verwendet. Irgendwelche anderen Vorschläge? Vielen Dank. – fadedreamz
Haben Sie das Buch von Prof. Mills versucht? – dfc