2. Systemarchitektur
Im NTP-Modell werden mehrere primäre Referenzquellen (primary reference sources), die über Kabel oder Funk mit nationalen Standards synchronisiert sind, mit weit zugänglichen Ressourcen wie Backbone-Gateways verbunden und als primäre Zeitserver betrieben. Der Zweck von NTP besteht darin, Zeitmessungsinformationen von diesen Servern über das Internet an andere Zeitserver zu übermitteln und auch Uhren zu überprüfen und Fehler aufgrund von Geräte- oder Ausbreitungsausfällen zu mindern. Eine Anzahl von lokalen Netzwerk-Hosts oder Gateways, die als sekundäre Zeitserver fungieren, führen NTP mit einem oder mehreren primären Servern aus. Um den Protokoll-Overhead zu reduzieren, verteilen die sekundären Server Zeit über NTP an die verbleibenden lokalen Netzwerk-Hosts. Im Interesse der Zuverlässigkeit können ausgewählte Hosts mit weniger genauen, aber kostengünstigeren Funkuhren ausgestattet werden und als Backup im Falle eines Ausfalls der primären und/oder sekundären Server oder Kommunikationspfade zwischen ihnen verwendet werden.
In diesem gesamten Dokument wurde eine Standardnomenklatur übernommen: Die Stabilität (stability) einer Uhr ist, wie gut sie eine konstante Frequenz beibehalten kann, die Genauigkeit (accuracy) ist, wie gut ihre Frequenz und Zeit im Vergleich zu nationalen Standards sind, und die Präzision (precision) ist, wie präzise diese Größen innerhalb eines bestimmten Zeitmesssystems aufrechterhalten werden können. Sofern nicht anders angegeben, ist der Versatz (offset) zweier Uhren die Zeitdifferenz zwischen ihnen, während der Schiefstand (skew) die Frequenzdifferenz (erste Ableitung des Versatzes nach der Zeit) zwischen ihnen ist. Echte Uhren zeigen eine gewisse Variation im Schiefstand (zweite Ableitung des Versatzes nach der Zeit), die als Drift (drift) bezeichnet wird; in dieser Version der Spezifikation wird jedoch angenommen, dass die Drift Null ist.
NTP ist so konzipiert, dass es drei Produkte erzeugt: Uhrenversatz (clock offset), Rundlaufverzögerung (roundtrip delay) und Dispersion (dispersion), alle relativ zu einer ausgewählten Referenzuhr. Der Uhrenversatz stellt die Menge dar, um die die lokale Uhr angepasst werden muss, um sie mit der Referenzuhr in Übereinstimmung zu bringen. Die Rundlaufverzögerung bietet die Fähigkeit, eine Nachricht zu starten, um zu einer bestimmten Zeit an der Referenzuhr anzukommen. Die Dispersion stellt den maximalen Fehler der lokalen Uhr relativ zur Referenzuhr dar. Da die meisten Host-Zeitserver über einen anderen Peer-Zeitserver synchronisieren, gibt es in jedem dieser drei Produkte zwei Komponenten: diejenigen, die vom Peer relativ zur primären Referenzquelle der Standardzeit bestimmt werden, und diejenigen, die vom Host relativ zum Peer gemessen werden. Jede dieser Komponenten wird im Protokoll separat verwaltet, um die Fehlerkontrolle und Verwaltung des Subnetzes selbst zu erleichtern. Sie bieten nicht nur präzise Messungen von Versatz und Verzögerung, sondern auch definitive maximale Fehlergrenzen, sodass die Benutzerschnittstelle nicht nur die Zeit, sondern auch die Qualität der Zeit bestimmen kann.
Es gibt keine Bestimmung für Peer-Erkennung (peer discovery) oder Verwaltung virtueller Schaltkreise (virtual-circuit management) in NTP. Die Datenintegrität wird durch die IP- und UDP-Prüfsummen bereitgestellt. Es werden keine Flusskontroll- oder Wiederübertragungseinrichtungen bereitgestellt oder sind erforderlich. Die Duplikaterkennung (duplicate detection) ist in den Verarbeitungsalgorithmen inhärent. Der Dienst kann im symmetrischen Modus (symmetric mode) arbeiten, in dem Server und Clients nicht zu unterscheiden sind, aber eine kleine Menge an Statusinformationen pflegen, oder im Client/Server-Modus (client/server mode), in dem Server keinen anderen Status als den in der Clientanforderung enthaltenen pflegen müssen. Eine leichtgewichtige Assoziationsverwaltungsfähigkeit (association-management), einschließlich dynamischer Erreichbarkeits- (dynamic reachability) und variabler Polling-Raten-Mechanismen (variable poll-rate), ist nur enthalten, um die Statusinformationen zu verwalten und den Ressourcenbedarf zu reduzieren. Da nur ein einziges NTP-Nachrichtenformat verwendet wird, ist das Protokoll leicht zu implementieren und kann in einer Vielzahl von angeforderten oder nicht angeforderten Polling-Mechanismen verwendet werden.
Es sollte erkannt werden, dass die Uhrensynchronisation von Natur aus lange Zeiträume und mehrfache Vergleiche erfordert, um eine genaue Zeitmessung aufrechtzuerhalten. Während normalerweise nur wenige Messungen ausreichen, um die lokale Zeit zuverlässig innerhalb einer Sekunde zu bestimmen, sind Zeiträume von vielen Stunden und Dutzende von Messungen erforderlich, um die Oszillator-Schiefe zu lösen und die lokale Zeit in der Größenordnung einer Millisekunde zu halten. Somit hängt die erreichte Genauigkeit direkt von der Zeit ab, die benötigt wird, um sie zu erreichen. Glücklicherweise kann die Häufigkeit der Messungen ziemlich niedrig sein und ist fast immer nicht aufdringlich für normale Netzoperationen.
2.1. Implementierungsmodell
Im möglicherweise häufigsten Client/Server-Modell sendet ein Client eine NTP-Nachricht an einen oder mehrere Server und verarbeitet die Antworten bei deren Empfang. Der Server tauscht Adressen und Ports aus, überschreibt bestimmte Felder in der Nachricht, berechnet die Prüfsumme neu und gibt die Nachricht sofort zurück. Die in der NTP-Nachricht enthaltenen Informationen ermöglichen es dem Client, die Serverzeit in Bezug auf die lokale Zeit zu bestimmen und die lokale Uhr entsprechend anzupassen. Darüber hinaus enthält die Nachricht Informationen zur Berechnung der erwarteten Zeitmessgenauigkeit und Zuverlässigkeit sowie zur Auswahl des besten aus möglicherweise mehreren Servern.
Während das Client/Server-Modell für die Verwendung in lokalen Netzwerken mit einem öffentlichen Server und möglicherweise vielen Workstation-Clients ausreichen kann, erfordert die volle Allgemeinheit von NTP die verteilte Teilnahme einer Anzahl von Client/Servern oder Peers, die in einer dynamisch neu konfigurierbaren, hierarchisch verteilten Konfiguration angeordnet sind. Es erfordert auch ausgefeilte Algorithmen für Assoziationsverwaltung, Datenmanipulation und lokale Uhrensteuerung. Im Rest dieses Dokuments bezieht sich der Begriff Host (host) auf eine Instanziierung des Protokolls auf einem lokalen Prozessor, während sich der Begriff Peer (peer) auf die Instanziierung des Protokolls auf einem entfernten Prozessor bezieht, der über einen Netzwerkpfad verbunden ist.
Abbildung 1 zeigt ein Implementierungsmodell für einen Host, der drei Prozesse umfasst, die eine partitionierte Datenbank teilen, wobei jeder Partition einem Peer gewidmet ist, und die durch ein Nachrichtenübermittlungssystem miteinander verbunden sind. Der Übertragungsprozess (transmit process), der von unabhängigen Timern für jeden Peer angetrieben wird, sammelt Informationen in der Datenbank und sendet NTP-Nachrichten an die Peers. Jede Nachricht enthält den lokalen Zeitstempel (local timestamp), wenn die Nachricht gesendet wird, zusammen mit zuvor empfangenen Zeitstempeln und anderen Informationen, die zur Bestimmung der Hierarchie und Verwaltung der Assoziation erforderlich sind. Die Nachrichtenübertragungsrate wird durch die erforderliche Genauigkeit der lokalen Uhr sowie die Genauigkeiten ihrer Peers bestimmt.
Der Empfangsprozess (receive process) empfängt NTP-Nachrichten und möglicherweise Nachrichten in anderen Protokollen sowie Informationen von direkt verbundenen Funkuhren. Wenn eine NTP-Nachricht empfangen wird, wird der Versatz zwischen der Peer-Uhr und der lokalen Uhr berechnet und zusammen mit anderen Informationen, die für die Fehlerbestimmung und Peer-Auswahl nützlich sind, in die Datenbank aufgenommen. Ein in Abschnitt 4 beschriebener Filteralgorithmus verbessert die Genauigkeit durch Verwerfen minderwertiger Daten.
Die Aktualisierungsprozedur (update procedure) wird beim Empfang einer Nachricht und zu anderen Zeiten initiiert. Sie verarbeitet die Versatzdaten von jedem Peer und wählt die besten unter Verwendung der Algorithmen von Abschnitt 4 aus. Dies kann viele Beobachtungen weniger Peers oder wenige Beobachtungen vieler Peers umfassen, abhängig von den erforderlichen Genauigkeiten.
Der lokale Uhrenprozess (local-clock process) arbeitet mit den von der Aktualisierungsprozedur erzeugten Versatzdaten und passt die Phase und Frequenz der lokalen Uhr unter Verwendung der in Abschnitt 5 beschriebenen Mechanismen an. Dies kann entweder zu einer Sprungänderung oder einer schrittweisen Phasenanpassung der lokalen Uhr führen, um den Versatz auf Null zu reduzieren. Die lokale Uhr bietet eine stabile Quelle für Zeitinformationen für andere Benutzer des Systems und für spätere Referenz durch NTP selbst.
2.2. Netzwerkkonfigurationen
Das Synchronisationssubnetz ist ein verbundenes Netzwerk aus primären und sekundären Zeitservern, Clients und verbindenden Übertragungspfaden. Ein primärer Zeitserver ist direkt mit einer primären Referenzquelle synchronisiert, normalerweise einer Funkuhr. Ein sekundärer Zeitserver leitet die Synchronisation, möglicherweise über andere sekundäre Server, von einem primären Server über Netzwerkpfade ab, die möglicherweise mit anderen Diensten geteilt werden. Unter normalen Umständen wird beabsichtigt, dass das Synchronisationssubnetz primärer und sekundärer Server eine hierarchische Master-Slave-Konfiguration annimmt, wobei die primären Server an der Wurzel und sekundäre Server abnehmender Genauigkeit auf aufeinanderfolgenden Ebenen zu den Blättern hin sind.
Gemäß den von der Telefonindustrie [BEL86] festgelegten Konventionen wird die Genauigkeit jedes Servers durch eine Zahl definiert, die Schicht (stratum) genannt wird, wobei die oberste Ebene (primäre Server) als eins zugewiesen wird und jede Ebene nach unten (sekundäre Server) in der Hierarchie als eins größer als die vorhergehende Ebene zugewiesen wird. Mit der aktuellen Technologie und verfügbaren Funkuhren können Einzelstichprobengenauigkeiten in der Größenordnung einer Millisekunde an der Netzwerkschnittstelle eines primären Servers erreicht werden. Genauigkeiten dieser Größenordnung erfordern besondere Sorgfalt beim Design und bei der Implementierung des Betriebssystems und des lokalen Uhrenmechanismus, wie in Abschnitt 5 beschrieben.
Wenn die Schicht von eins zunimmt, werden die erreichbaren Einzelstichprobengenauigkeiten je nach Netzwerkpfaden und lokalen Uhrenstabilitäten abnehmen. Um die mühsamen Berechnungen [BRA80] zu vermeiden, die zur Schätzung von Fehlern in jeder spezifischen Konfiguration erforderlich sind, ist es nützlich anzunehmen, dass die mittleren Messfehler ungefähr proportional zur gemessenen Verzögerung und Dispersion relativ zur Wurzel des Synchronisationssubnetzes akkumulieren. Anhang H enthält eine Fehleranalyse, einschließlich einer Ableitung des maximalen Fehlers als Funktion von Verzögerung und Dispersion, wobei die letztere Größe von der Präzision des Zeitmesssystems, der Frequenztoleranz der lokalen Uhr und verschiedenen Residuen abhängt. Unter der Annahme, dass die primären Server innerhalb bekannter Genauigkeiten mit der Standardzeit synchronisiert sind, bietet dies eine zuverlässige, deterministische Spezifikation der Zeitmessgenauigkeiten im gesamten Synchronisationssubnetz.
Wiederum aus der Erfahrung der Telefonindustrie schöpfend, die solche Lektionen zu erheblichen Kosten gelernt hat [ABA89], sollte die Synchronisationssubnetz-Topologie so organisiert werden, dass die höchste Genauigkeit erzeugt wird, aber niemals eine Schleife bilden darf. Ein zusätzlicher Faktor ist, dass jede Erhöhung der Schicht einen potenziell unzuverlässigen Zeitserver umfasst, der zusätzliche Messfehler einführt. Der in NTP verwendete Auswahlalgorithmus verwendet eine Variante des Bellman-Ford-Verteilten-Routing-Algorithmus, um die minimal gewichteten Spannbäume zu berechnen, die auf den primären Servern verwurzelt sind. Die vom Algorithmus verwendete Distanzmetrik besteht aus der (skalierten) Schicht plus der Synchronisationsdistanz, die selbst aus der Dispersion plus der Hälfte der absoluten Verzögerung besteht. Somit nimmt der Synchronisationspfad immer die minimale Anzahl von Servern zur Wurzel, wobei Gleichstände auf der Grundlage des maximalen Fehlers aufgelöst werden.
Als Ergebnis dieses Designs konfiguriert sich das Subnetz automatisch in einer hierarchischen Master-Slave-Konfiguration neu, um die genaueste und zuverlässigste Zeit zu erzeugen, selbst wenn einer oder mehrere primäre oder sekundäre Server oder die Netzwerkpfade zwischen ihnen ausfallen. Dies schließt den Fall ein, in dem alle normalen primären Server (z. B. hochgenaue WWVB-Funkuhr, die bei den niedrigsten Synchronisationsdistanzen arbeitet) in einem möglicherweise partitionierten Subnetz ausfallen, aber einer oder mehrere Backup-Primärserver (z. B. weniger genaue WWV-Funkuhr, die bei höheren Synchronisationsdistanzen arbeitet) den Betrieb fortsetzen. Sollten jedoch alle primären Server im gesamten Subnetz ausfallen, synchronisieren sich die verbleibenden sekundären Server untereinander, während die Distanzen aufgrund der bekannten Eigenschaften des Bellman-Ford-Algorithmus auf ein vorgewähltes Maximum "unendlich" hochschrauben. Beim Erreichen des Maximums auf allen Pfaden wird ein Server vom Subnetz abfallen und unter Verwendung seiner zuletzt bestimmten Zeit und Frequenz frei laufen. Da erwartet wird, dass diese Berechnungen sehr präzise sind, insbesondere in der Frequenz, können selbst längere Ausfallzeiten zu Zeitmessfehlern führen, die mit angemessen stabilisierten Oszillatoren nicht größer als einige Millisekunden pro Tag sind (siehe Abschnitt 5).
Im Falle mehrerer primärer Server wählt die Spannbaum-Berechnung normalerweise den Server mit der minimalen Synchronisationsdistanz aus. Wenn diese Server jedoch ungefähr die gleiche Distanz haben, kann die Berechnung aufgrund normaler dispersiver Verzögerungen zu zufälligen Auswahlen zwischen ihnen führen. Normalerweise verschlechtert dies die Genauigkeit nicht, solange jede Diskrepanz zwischen den primären Servern im Vergleich zur Synchronisationsdistanz klein ist. Wenn nicht, wählen die Filter- und Auswahlalgorithmen die besten der verfügbaren Server aus und werfen Ausreißer wie beabsichtigt aus.