JGroups : 为傻瓜解释 mcast_addr

JGroups : explain mcast_addr for dummies

使用以下命令侦听 MCast 消息。

java -cp $CLASSPATH:./jgroups-all.jar org.jgroups.tests.McastReceiverTest -mcast_addr 228.1.1.1 -port 55555

根据此图像,228.1.1.1 应该是用于多播的有效 IP。

现在问题...

1 - 通俗地说,这个 mcast_addr 到底是什么? mcast_addr 本质上是一个虚拟名称(设置为 IP 地址格式) 对于相互发送消息 to/from 的组机器?所以,我称它为“228.1.1.1”而不是 mcast_addr 之类的 "MyConferenceRoom1"?

2 - 如果 3 台机器使用相同的 mcast_addr,它们都可以使用不同的端口选项吗?

3 - 有点夸张,但如果我要编写一个遍历所有 mcast_addr 288.x.x.x 的程序,我是否真的在窃听别人的消息?

  1. 通俗地说,mcast_addr 就像一个无线电频率,只是您需要先加入它才能收听(在没有路由器跃点的网络中并非如此)。大多数情况下,还使用端口,但您可以将其视为频率的一部分。

So, instead of mcast_addr being something like "MyConferenceRoom1" I call it "228.1.1.1"?

是的,完全正确。

  1. 是的,但是对于超大容量,不需要的邮件过滤将发生在 IP 堆栈的更高层,这会降低性能。由于下面解释的原因,您通常希望在多播组上分离 类 流量。

  2. 是的,没有 permissioning 内置 IP 级别。您可能 运行 进入路由器不配合,这是您需要在收听之前加入多播组的原因之一:

+--------+    +--------+    +----------+
| Sender | -> | Router | -> | Listener |
+--------+    +--------+    +----------+

作为侦听器,当您加入 多播组时,一条消息将发送到路由器,根据其配置,路由器将开始将消息路由到侦听器。

现在,想象一下有一个子网网络,其中发送方和接收方之间可能有 2 个路由器:

+--------+    +----------+    +------------+
| Sender | -> | Router A | -> | Listener 1 |
+--------+    +----------+    +------------+
                    |
                    V
              +----------+    +------------+
              | Router B | -> | Listener 2 |
              +----------+    +------------+

如果 Listener 1 加入 224.1.2.3 并且 Listener 2 加入 228.1.1.1 他们将看不到彼此的流量。这种机制可以防止网络中充斥着很少有人感兴趣的多播消息。Listener 2 当然可以尝试加入 224.1.2.3 但它是路由器决定是否应该允许这样做。

在企业环境中,路由器通常配置为阻止子网以外的多播流量,因为路由器通常不涉及。

如前所述,如果您在端口上分离 类 流量,路由器将无法高效地执行它们的工作,因为它们通常不关心端口。