# Precision Time Protocol

Le Precision Time Protocol (PTP) est un protocole utilisé pour synchroniser les signaux d'horloge des différents éléments d'un réseau, par exemple un réseau Ethernet. Il a été normalisé par l'Internet Engineering Task Force sous le nom d'IEEE-1588 en 2002 et a été modifié en juin 2008 (version 2) et en novembre 2019 (version 3). La Commission électrotechnique internationale lui donne le nom d'IEC 61588.
Le PTP n'a pas vocation à déterminer un horodatage, mais à le transmettre. Tout système PTP doit donc intégrer ou se baser sur une source de temps, par exemple une horloge GPS, et s'y recaler régulièrement. La synchronisation est obtenue avec une précision typiquement inférieure à la microseconde, la limite théorique étant d'une nanoseconde.
Il a été développé afin de fournir une alternative au protocole Network Time Protocol (NTP) et au transfert d'informations temporelles par satellite (par exemple par Global Positioning System (GPS)). Le protocole NTP n'est pas assez précis pour de nombreuses applications. Quant au GPS, il est difficile à mettre en place sur un réseau, chaque élément de réseau devant être équipé d'un récepteur ayant accès à des signaux de bonne qualité.

## Principe et définitions

Le PTP est un système hiérarchique maître-esclave, où l'horodatage (en anglais timestamp) est distribué successivement d'horloge maître à horloge esclave. L'horloge maître au sommet de la hiérarchie, servant de référence temporelle à toutes les autres, est appelée « horloge de référence » ou grandmaster. Son heure est synchronisée à une source la plus précise possible, par exemple sur l'UTC via une synchronisation GPS.

### Messages

Le PTP envoie des messages de différents types :
* Sync, Follow_Up, Delay_Req et Delay_Resp sont utilisés pour communiquer l'information temporelle nécessaire pour synchroniser les horloges.
* Pdelay_Req, Pdelay_Resp et Pdelay_Resp_Follow_Up ont été définis à partir de la version 2 du protocole pour prendre en compte les mécanismes de correction de délai.
* Announce, Management et Signaling (à partir de la version 2) sont utilisés pour construire la hiérarchie et contrôler le réseau.
Les messages transitent typiquement sur la couche UDP (ports 319 et 320) portée par IPv4 ou IPv6. Il est également possible de les transmettre directement sur la couche Ethernet IEEE 802.3 (avec l'EtherType 0x88F7). Le réseau doit être capable de gérer le multicast et l'unicast.

### Horloges

Plusieurs types d'horloges sont définies par le protocole :
* Une Ordinary Clock est une horloge qui peut être maître ou esclave. Cette horloge peut devenir la Grandmaster Clock si elle est l'horloge maître au sommet de la hiérarchie. On détermine qui est la meilleure horloge susceptible d'être grandmaster grâce à un algorithme appelé Best master clock algorithm.
* Une Boundary Clock est une horloge connectée à plusieurs segments de réseau et qui permet de les synchroniser entre eux.
* Une Transparent Clock (à partir de la version 2 du protocole) permet de corriger des délais de propagation du message à travers l'élément de réseau et ainsi d'avoir une meilleure précision dans l'horodatage.
Enfin, il peut exister sur le réseau des équipements qui ne prennent pas en compte le PTP.

## Mécanismes de correction

Dans sa version basique, le PTP échange des messages entre horloges de la façon suivante :
* L'horloge maître envoie un message Sync à l'horloge esclave et note le temps t$_1$ où il a été envoyé.
* L'horloge esclave reçoit le message Sync et note le temps de réception t$_2$.
* L'horloge maître envoie l'horodatage t$_1$,
** Soit en incluant t$_1$ dans le message Sync, auquel cas le matériel utilisé doit avoir une bonne précision et un traitement rapide du message. Cette solution est le mode 1-step.
** Soit en incluant t$_1$ dans le message Follow_Up. Cette solution est le mode 2-step.
* L'horloge esclave envoie un message Delay_Req à l'horloge maître et note le temps t$_3$ où il a été envoyé.
* L'horloge maître reçoit le message Delay_Req et note le temps de réception t$_4$.
* L'horloge maître envoie l'horodatage t$_4$ en l'incluant dans le message Delay_Resp.
Cet échange recommence après un intervalle de temps de l'ordre qui peut varier de la fraction de seconde à plusieurs secondes.
À la fin de l'échange, l'horloge esclave possède les quatre horodatages. Ils peuvent être alors utilisés pour connaître :
* le délai moyen de propagation du signal entre les deux horloges, d =(t$_2$ - t$_1$) + (t$_4$ - t$_3$)/2.
* Le décalage temporel (offset) de l'horloge esclave par rapport à l'horloge maître Off =(t$_2$ - t$_1$) - (t$_4$ - t$_3$)/2.
On suppose que le temps de l'échange est suffisamment court pour que le décalage soit considéré comme constant sur cette période. On suppose aussi qu'il n'y a pas de différence de temps de propagation selon la direction de l'échange (on parle dans le cas contraire d'asymétrie). Enfin, on suppose que les horloges sont capable d'horodater précisément leur messages. Dans ce dernier cas, on établit des classes d'horloges selon leur précision.
Délai moyen et décalage sont ensuite pris en compte par l'horloge esclave qui ajuste l'horodatage et transmet ainsi la bonne information temporelle à la prochaine horloge.