Search code examples
publish-subscribemulticastdata-distribution-serviceunicast

Can multicast be used with reliable messaging in OMG DDS standard, or is unicast required?


I am currently trying to figure something out about a DDS application I wrote.

My writer and reader currently have reliability on, so that if a reader misses a message the writer will republish the message. I am also using the default multi-cast and not using uni-cast for discovery of publishers and subscribers.

According to the multicast protocol I am using only ports 7000 and 7001 need to be open. However when I did a analysis using wireshark I saw that ports 7010 and 7011 (uni-cast) ports are open as well.

After some digging I came across this link and it seems that to use reliability for readers and writers you need to have uni-cast enabled and this why the uni-cast ports are also open and being used.

Does uni-cast have to really be enabled for having messages delivered reliably and if so why is this needed, as well as why can't multicast do this function?


Solution

  • In this case what is happening is that the majority of the traffic will go out via MC. Occasionally, the reliability protocol will send a message that says, in effect, "I have sequence numbers N through M available."

    Each reader will (and this is heavily tunable in the different implementations) respond with something (via unicast!) "ok" or "I didn't get x or z".

    If only one reader did not get x, it makes no sense to MC a repair sample x, because only one reader needs it. So the writer will unicast it to the squeaky reader.

    That's it in a nutshell, I could spent another 10 paragraphs talking about config options and tuning the behavior.

    But yeah tl;dr: expected behavior.