Aller au contenu principal

Qu'est-ce que RTPS ?

RTPS (Real-Time Publish Subscribe) est le protocole filaire qui permet aux implémentations DDS de communiquer entre elles. Défini par l'OMG, il spécifié exactement comment les messages sont formatés et échangés sur le réseau.

Pourquoi RTPS est important

RTPS est ce qui rend DDS interopérable. Toute implémentation DDS conforme -- que ce soit HDDS, FastDDS, CycloneDDS ou RTI Connext -- peut communiquer si elles parlent la même version RTPS.

Versions de RTPS

VersionAnnéeNouveautés
2.02008Spécification originale
2.12010Extensions sécurité
2.22014Améliorations de performance
2.32019Writer liveliness, content filters
2.52022Large data, redundance Participant

HDDS implémente RTPS 2.5 avec rétrocompatibilité jusqu'à la version 2.3.

Architecture du protocole

Structure des messages

Chaque message RTPS est composé 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-messageFonction
DATATransporte les échantillons de données utilisateur
DATA_FRAGDonnées fragmentees pour les gros échantillons
HEARTBEATAnnonce les numéros de sequence disponibles
ACKNACKAccuse réception / demande de données
GAPIndique des numéros de sequence manquants
INFO_TSFournit des informations d'horodatage
INFO_DSTSpécifié le Participant de destination
INFO_SRCSpécifié le Participant source

Protocole de découverte

RTPS definit deux protocoles de découverte :

SPDP (Simple Participant Discovery Protocol)

Découvre les autres Participants dans le Domain :

  1. Chaque Participant envoie des annonces périodiques à une adresse multicast bien connue
  2. Les annonces incluent le GUID du Participant, les endpoints et les locators
  3. Les autres Participants apprennent l'existence des nouveaux arrivants

SEDP (Simple Endpoint Discovery Protocol)

Découvre les endpoints (Writers et Readers) :

  1. Apres la découverte de Participants, SEDP commence
  2. Les Participants échangent les informations d'endpoints via unicast
  3. Chaque côté apprend les Writers et Readers distants

Mappage des ports

RTPS utilise un mappage de ports déterministe basé 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 portNuméro de port
Discovery Multicast7400
Discovery Unicast7410
User Multicast7401
User Unicast7411
Configuration du pare-feu

Assurez-vous que les ports 7400-7500 (et au-dela pour le multi-domain) sont ouverts pour le trafic DDS.

Sérialisation des données (CDR)

RTPS utilise CDR2 (Common Data Representation) pour la sérialisation :

  • Indépendant de la plateforme - Fonctionne entre différentes architectures CPU
  • Auto-descriptif - Informations de type optionnelles incluses
  • Efficace - Overhead minimal comparé à 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 fiabilité

RTPS implémente la fiabilité via :

Best-Effort

  • Envoyer et oublier
  • Pas d'accusés de réception
  • Latence la plus basse

Reliable

  • HEARTBEAT annonce les échantillons disponibles
  • ACKNACK demande les échantillons manquants
  • La retransmission garantit la livraison

RTPS vs autres protocoles

CaractéristiqueRTPSMQTTAMQPZeroMQ
BrokerAucunRequisRequisOptionnel
MulticastOuiNonNonOui
QoSRiche (22 politiques)3 niveauxBasiqueAucun
DiscoveryAutomatiqueManuelManuelManuel
Temps réelOuiNonNonPartiel
StandardOMGOASISOASISAucun

Déboguer RTPS

Avec Wireshark

Wireshark dispose d'un dissecteur RTPS intégré :

  1. Capturez le trafic sur les ports UDP 7400-7500
  2. Filtre : rtps
  3. Inspectez les sous-messages individuels

Avec hdds_viewer

Notre outil hdds_viewer fournit :

  • Capture du trafic RTPS en temps réel
  • Decodage des messages avec informations de type
  • Visualisation de la topologie
  • Analyse de latence

Prochaines étapes

Maintenant vous comprenez comment DDS fonctionne sous le capot. Installons HDDS :