On 2 August 2012 07:20, Pierre Ynard <linkfa...@yahoo.fr> wrote:

> To be clear, if I understand correctly, OpenPGM binds a UDP socket
> to the port given with the multicast address, using SO_REUSEADDR.
> Then it uses this socket to both receive the multicast stream (hence
> SO_REUSEADDR) and the unicast NAKs. This is why if a sender and a
> receiver run on the same host, the socket of only one of them will
> receive unicast NAKs, breaking it for the other one. Right?
>


Correct.

So NAKs are sent back upstream with the same destination port as packets
> flowing downstream (the multicasting port). To an outsider like me, this
> feels confusing and counter-intuitive, and looks like a weird quirk.
> I tried to gather the reason from the RFC but I got very confused by
> ยง8.3: is this really what is described there? Keeping in mind that the
> UDP encapsulation mode is not described by the RFC? Anyway, I don't
> grasp the whole implications of this in the protocol, but it would make
> more sense to me if the NAKs were sent back to the source address and
> port of the sender, back from an address they came from. Also it might
> avoid this problem in the first place.
>
>
The protocol is independent of multicast address and IP port.  IBM's UDP
encapsulation makes use of two fixed ports, one for unicast and one for
multicast: this doesn't help the situation at all.


> But more importantly for ZeroMQ; if that's what it is, the problem
> is not really related to multicast loopback, just to running several
> instances on the same host. Then, running several senders (to the same
> group-port) on the same host is a problem too as it breaks reliability
> for all but one of them. And that wasn't solved by removing the
> ZMQ_MCAST_LOOP option.


You have to remember Windows and POSIX platforms have to apply
ZMQ_MCAST_LOOP on different directions:  Windows requires it on the sender,
POSIX requires it on the receiver.



> To be thorough, there would also be some kind of
> security issue on multi-user hosts: a malicious user could open a UDP
> socket on that same port, and would at best DoS the ZeroMQ application
> without it noticing, or at worst spy on leaked information about the PGM
> network topology.
>

It's reliable multicast: the entire architecture by definition is insecure
and ripe for DoS.  This is not without precedence.


Isn't the problem a bit more complicated than just removing the loopback
> option because it shouldn't be used?


It's been removed because of discussions like this and that 0MQ makes a
host broker trivial to implement: the method other middleware systems
resolve this issue:  TIBCO's Rendezvous Daemon for example.


> This option fits my use case so of
> course I'd welcome its return :) But I'm worried by the rest too because
> regardless of receivers and loopback, I plan on running several senders
> in parallel on the same host.
>

As long as they are on different ports it is fine, it's an OS multiplexing
issue with a single port.

Look back at the protocol, the options to support multiple senders on a
host are a bit limited:

1)  Only use multicast NAKs.
2)  Include IP source port in the protocol.
3)  Redefine UDP encapsulation for senders to bind to both data-destination
and data-source ports: thus each application on the host has a unique
data-source port to bind to for NAK receipt.

#3 belies the important fact that UDP loopback is terrible and easily
suffers 50%+ packet loss on Linux as normal people use TCP or Unix sockets.
 This is an outstanding issue with the Linux kernel and no one is bothered
enough to fix it.

-- 
Steve-o
_______________________________________________
zeromq-dev mailing list
zeromq-dev@lists.zeromq.org
http://lists.zeromq.org/mailman/listinfo/zeromq-dev

Reply via email to