3. Protocol Modes (Modes de protocole)
Il existe trois variantes du protocole NTP : symétrique (symmetric), client/serveur (client/server) et diffusion (broadcast). Chacune est associée à un mode d'association (association mode, description de la relation entre deux interlocuteurs NTP) comme illustré dans la figure 1. De plus, les associations persistantes (persistent associations) sont mobilisées au démarrage et ne sont jamais démobilisées. Les associations éphémères (ephemeral associations) sont mobilisées à l'arrivée d'un paquet et sont démobilisées en cas d'erreur ou de délai d'attente.
+-------------------+-------------------+------------------+
| Association Mode | Assoc. Mode Value | Packet Mode Value|
+-------------------+-------------------+------------------+
| Symmetric Active | 1 | 1 or 2 |
| Symmetric Passive | 2 | 1 |
| Client | 3 | 4 |
| Server | 4 | 3 |
| Broadcast Server | 5 | 5 |
| Broadcast Client | 6 | N/A |
+-------------------+-------------------+------------------+
Figure 1 : Modes d'association et de paquet
Dans la variante client/serveur, un client persistant envoie des paquets en mode 4 à un serveur, qui renvoie des paquets en mode 3. Les serveurs fournissent la synchronisation à un ou plusieurs clients, mais n'acceptent pas de synchronisation de leur part. Un serveur peut également être un pilote d'horloge de référence (reference clock driver) qui obtient l'heure directement d'une source standard telle qu'un récepteur GPS ou un service de modem téléphonique. Dans cette variante, les clients tirent (pull) la synchronisation des serveurs.
Dans la variante symétrique, un pair (peer) fonctionne à la fois comme serveur et client en utilisant soit une association symétrique active (symmetric active) soit une association symétrique passive (symmetric passive). Une association symétrique active persistante envoie des paquets symétriques actifs (mode 1) à une association de pairs symétriques actifs. Alternativement, une association symétrique passive éphémère peut être mobilisée à l'arrivée d'un paquet symétrique actif sans association correspondante. Cette association envoie des paquets symétriques passifs (mode 2) et persiste jusqu'à une erreur ou un délai d'attente. Les pairs poussent et tirent la synchronisation les uns vers les autres. Aux fins de ce document, un pair fonctionne comme un client, donc les références au client impliquent également le pair.
Dans la variante de diffusion, une association de serveur de diffusion persistante envoie des paquets périodiques de serveur de diffusion (mode 5) qui peuvent être reçus par plusieurs clients. À la réception d'un paquet de serveur de diffusion sans association correspondante, une association de client de diffusion éphémère (mode 6) est mobilisée et persiste jusqu'à une erreur ou un délai d'attente. Il est utile de fournir une salve initiale (initial volley) où le client fonctionnant en mode client échange plusieurs paquets avec le serveur, afin de calibrer le délai de propagation (propagation delay) et d'exécuter le protocole de sécurité Autokey, après quoi le client revient au mode client de diffusion. Un serveur de diffusion pousse la synchronisation vers les clients et d'autres serveurs.
En suivant librement les conventions établies par l'industrie des télécommunications, le niveau de chaque serveur dans la hiérarchie est défini par un numéro de strate (stratum number). Les serveurs primaires se voient attribuer la strate un ; les serveurs secondaires à chaque niveau inférieur se voient attribuer des numéros de strate supérieurs d'une unité au niveau précédent. À mesure que le numéro de strate augmente, sa précision se dégrade en fonction du chemin réseau particulier et de la stabilité de l'horloge système. Les erreurs moyennes, mesurées par les distances de synchronisation (synchronization distances), augmentent approximativement proportionnellement aux numéros de strate et au délai aller-retour (round-trip delay) mesuré.
En pratique standard, la topologie du réseau de timing doit être organisée pour éviter les boucles de timing (timing loops) et minimiser la distance de synchronisation. Dans NTP, la topologie du sous-réseau est déterminée à l'aide d'une variante de l'algorithme de routage distribué Bellman-Ford (Bellman-Ford distributed routing algorithm), qui calcule l'arbre couvrant de chemin le plus court (shortest-path spanning tree) enraciné sur les serveurs primaires. En raison de cette conception, l'algorithme réorganise automatiquement le sous-réseau afin de produire l'heure la plus précise et la plus fiable, même en cas de défaillances dans le réseau de timing.
3.1. Dynamic Server Discovery (Découverte dynamique de serveurs)
Il existe deux associations spéciales, le client manycast (manycast client) et le serveur manycast (manycast server), qui fournissent une fonction de découverte dynamique de serveurs (dynamic server discovery function). Il existe deux types d'associations de clients manycast : persistantes et éphémères. Le client manycast persistant envoie des paquets client (mode 3) à une adresse de groupe de diffusion ou de multidiffusion IPv4 ou IPv6 désignée. Les serveurs manycast désignés dans la plage du champ TTL (time-to-live, durée de vie) dans l'en-tête de paquet écoutent les paquets avec cette adresse. Si un serveur est approprié pour la synchronisation, il renvoie un paquet de serveur ordinaire (mode 4) en utilisant l'adresse unicast du client. À la réception de ce paquet, le client mobilise une association de client éphémère (mode 3). L'association de client éphémère persiste jusqu'à une erreur ou un délai d'attente.
Un client manycast continue d'envoyer des paquets pour rechercher un nombre minimum d'associations. Il commence avec un TTL égal à un et continue d'y ajouter un jusqu'à ce que le nombre minimum d'associations soit établi ou que le TTL atteigne une valeur maximale. Si le TTL atteint sa valeur maximale et que suffisamment d'associations ne sont pas encore mobilisées, le client arrête la transmission pendant une période de délai d'attente pour effacer toutes les associations, puis répète le cycle de recherche. Si un nombre minimum d'associations a été mobilisé, le client commence alors à transmettre un paquet par période de délai d'attente pour maintenir les associations. Les contraintes de champ limitent la valeur minimale à 1 et la valeur maximale à 255. Ces limites peuvent être ajustées en fonction des besoins d'application individuels.
Les associations éphémères se font concurrence entre elles. Au fur et à mesure que de nouvelles associations éphémères sont mobilisées, le client exécute les algorithmes d'atténuation (mitigation algorithms) décrits dans les sections 10 et 11.2 pour les meilleurs candidats de la population, les associations éphémères restantes expirent et sont démobilisées. De cette façon, la population ne comprend que les meilleurs candidats qui ont récemment répondu avec un paquet NTP pour discipliner l'horloge système.