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?
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.