Qu'est-ce que RTPS ?
RTPS (Real-Time Publish Subscribe) est le protocole filaire qui permet aux implementations DDS de communiquer entre elles. Defini par l'OMG, il specifie exactement comment les messages sont formates et echanges sur le reseau.
Pourquoi RTPS est important
RTPS est ce qui rend DDS interoperable. Toute implementation DDS conforme -- que ce soit HDDS, FastDDS, CycloneDDS ou RTI Connext -- peut communiquer si elles parlent la meme version RTPS.
Versions de RTPS
| Version | Annee | Nouveautes |
|---|---|---|
| 2.0 | 2008 | Specification originale |
| 2.1 | 2010 | Extensions securite |
| 2.2 | 2014 | Ameliorations de performance |
| 2.3 | 2019 | Writer liveliness, content filters |
| 2.5 | 2022 | Large data, redundance Participant |
HDDS implemente RTPS 2.5 avec retrocompatibilite jusqu'a la version 2.3.
Architecture du protocole
Structure des messages
Chaque message RTPS est compose de :
+--------------------------------------------------------+
| En-tete RTPS |
| +----------+----------+----------+-----------------+ |
| | Protocol | Version | Vendor | GuidPrefix | |
| | "RTPS" | 2.5 | HDDS | 12 octets | |
| +----------+----------+----------+-----------------+ |
+--------------------------------------------------------+
| Sous-messages |
| +------------------------------------------------+ |
| | Sous-message 1 (ex. DATA) | |
| +------------------------------------------------+ |
| +------------------------------------------------+ |
| | Sous-message 2 (ex. HEARTBEAT) | |
| +------------------------------------------------+ |
| ... |
+--------------------------------------------------------+
Types de sous-messages
| Sous-message | Fonction |
|---|---|
| DATA | Transporte les echantillons de donnees utilisateur |
| DATA_FRAG | Donnees fragmentees pour les gros echantillons |
| HEARTBEAT | Annonce les numeros de sequence disponibles |
| ACKNACK | Accuse reception / demande de donnees |
| GAP | Indique des numeros de sequence manquants |
| INFO_TS | Fournit des informations d'horodatage |
| INFO_DST | Specifie le Participant de destination |
| INFO_SRC | Specifie le Participant source |
Protocole de decouverte
RTPS definit deux protocoles de decouverte :
SPDP (Simple Participant Discovery Protocol)
Decouvre les autres Participants dans le Domain :
- Chaque Participant envoie des annonces periodiques a une adresse multicast bien connue
- Les annonces incluent le GUID du Participant, les endpoints et les locators
- Les autres Participants apprennent l'existence des nouveaux arrivants
SEDP (Simple Endpoint Discovery Protocol)
Decouvre les endpoints (Writers et Readers) :
- Apres la decouverte de Participants, SEDP commence
- Les Participants echangent les informations d'endpoints via unicast
- Chaque cote apprend les Writers et Readers distants
Mappage des ports
RTPS utilise un mappage de ports deterministe base sur le Domain ID :
Port Discovery Multicast = 7400 + (250 x domainId)
Port Discovery Unicast = 7410 + (250 x domainId) + (2 x participantId)
Port User Multicast = 7401 + (250 x domainId)
Port User Unicast = 7411 + (250 x domainId) + (2 x participantId)
Exemple pour Domain 0, Participant 0 :
| Type de port | Numero de port |
|---|---|
| Discovery Multicast | 7400 |
| Discovery Unicast | 7410 |
| User Multicast | 7401 |
| User Unicast | 7411 |
Assurez-vous que les ports 7400-7500 (et au-dela pour le multi-domain) sont ouverts pour le trafic DDS.
Serialisation des donnees (CDR)
RTPS utilise CDR2 (Common Data Representation) pour la serialisation :
- Independant de la plateforme - Fonctionne entre differentes architectures CPU
- Auto-descriptif - Informations de type optionnelles incluses
- Efficace - Overhead minimal compare a JSON/XML
CDR2 Serialization of Temperature { sensor_id: "room1", value: 23.5 }
+-----+-----+-----+-----+-----+-----+-----+-----+
| 0x00| 0x01| 0x00| 0x00| 'r' | 'o' | 'o' | 'm' |
+-----+-----+-----+-----+-----+-----+-----+-----+
| '1' | 0x00| pad | pad | 0x41| 0xBC| 0x00| 0x00|
+-----+-----+-----+-----+-----+-----+-----+-----+
-- string length -- -- "room1" + null -- -- 23.5 as f32 (LE) --
Protocole de fiabilite
RTPS implemente la fiabilite via :
Best-Effort
- Envoyer et oublier
- Pas d'accuses de reception
- Latence la plus basse
Reliable
- HEARTBEAT annonce les echantillons disponibles
- ACKNACK demande les echantillons manquants
- La retransmission garantit la livraison
RTPS vs autres protocoles
| Caracteristique | RTPS | MQTT | AMQP | ZeroMQ |
|---|---|---|---|---|
| Broker | Aucun | Requis | Requis | Optionnel |
| Multicast | Oui | Non | Non | Oui |
| QoS | Riche (22 politiques) | 3 niveaux | Basique | Aucun |
| Discovery | Automatique | Manuel | Manuel | Manuel |
| Temps reel | Oui | Non | Non | Partiel |
| Standard | OMG | OASIS | OASIS | Aucun |
Deboguer RTPS
Avec Wireshark
Wireshark dispose d'un dissecteur RTPS integre :
- Capturez le trafic sur les ports UDP 7400-7500
- Filtre :
rtps - Inspectez les sous-messages individuels
Avec hdds_viewer
Notre outil hdds_viewer fournit :
- Capture du trafic RTPS en temps reel
- Decodage des messages avec informations de type
- Visualisation de la topologie
- Analyse de latence
Prochaines etapes
Maintenant vous comprenez comment DDS fonctionne sous le capot. Installons HDDS :
- Guide d'installation - Installer HDDS sur votre systeme