Aller au contenu principal

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

VersionAnneeNouveautes
2.02008Specification originale
2.12010Extensions securite
2.22014Ameliorations de performance
2.32019Writer liveliness, content filters
2.52022Large 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-messageFonction
DATATransporte les echantillons de donnees utilisateur
DATA_FRAGDonnees fragmentees pour les gros echantillons
HEARTBEATAnnonce les numeros de sequence disponibles
ACKNACKAccuse reception / demande de donnees
GAPIndique des numeros de sequence manquants
INFO_TSFournit des informations d'horodatage
INFO_DSTSpecifie le Participant de destination
INFO_SRCSpecifie le Participant source

Protocole de decouverte

RTPS definit deux protocoles de decouverte :

SPDP (Simple Participant Discovery Protocol)

Decouvre les autres Participants dans le Domain :

  1. Chaque Participant envoie des annonces periodiques a 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)

Decouvre les endpoints (Writers et Readers) :

  1. Apres la decouverte de Participants, SEDP commence
  2. Les Participants echangent les informations d'endpoints via unicast
  3. 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 portNumero 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.

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

CaracteristiqueRTPSMQTTAMQPZeroMQ
BrokerAucunRequisRequisOptionnel
MulticastOuiNonNonOui
QoSRiche (22 politiques)3 niveauxBasiqueAucun
DiscoveryAutomatiqueManuelManuelManuel
Temps reelOuiNonNonPartiel
StandardOMGOASISOASISAucun

Deboguer RTPS

Avec Wireshark

Wireshark dispose d'un dissecteur RTPS integre :

  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 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 :