Zenoh
Auteur: Nicolas Huchet
Zenoh - Zero Network Overhead Protocol
Introduction
Zenoh est un protocole de communication visant à minimiser l'overhead inclut avec les autres protocoles. De plus, il a été pensé pour tourner sur des appareils possédant une faible capacité de calcul ou nécessitant de réduire au minimum les calculs (par exemple dans le cadre d'un appareil fonctionnant sur batterie).
Points:
- Très faible empreinte (faible mémoire, temps CPU)
- Protocol efficace (peu d'overhead)
- Support des appareils qui ont des cycles de sommeil aggressifs
Fonctionnement
Ressources
Zenoh utilise le concept de ressources pour pouvoir identifier les informations à échanger. Par exemple:
- zenoh://myhouse/**/bedroom/*/LightStatus
- zenoh://myhouse/floor/1/musicroom/LightStatus
- zenoh://myhouse/floor/2/bedroom/erik/LightStatus
Ces chemins permettent d'accéder à une/des ressources en particulier de manière asynchrone. Les wildcards supportées sont:
- *: remplacé par n'importe quel caractères (à part le /)
- **: remplacé par n'importe quel caractères
- ?: remplacé par n'importe quel caractère (à part le /)
Messages
Les messages sont composés d'un seul octet de header et du corps. Le header est composé de flags (3 bits) et du messageId (5 bits). Un certain nombre de messageId ainsi que de body types sont définis, ils sont listés dans le fichier de spécifications.
Les flags permettent d'indiquer une particularité dans le message. Les flags disponibles sont:
- S, I, M, P, O, L = flag 5
- C, R, H, N = flag 6
- F, U, G, A, Z = flag 7
Les définitions des flags sont eux aussi disponibles dans la spec.
Fonctionnalités
Ce protocole propose certaines fonctionnalités assez utiles pour le discovery. Par exemple, un système de découverte permet de trouver les services ou clients qui correspondent à une certaine description. Pour cela, on envoie un message "Scout" avec la description des noeuds qui nous intéressent et les noeuds qui correspondent répondent avec un message "Hello" contenant les informations les concernant.
De plus, un système de session permet de configurer des données entre plusieurs noeuds lors d'une communication pendant plusieurs échanges. La session s'établit après avoir reçu un message Open et envoyé un message Accept entre les machines, et se ferme sur quelques conditions (reçu un message Close, expiration de connexion...).