网络上所有节点的 IPv6 多播地址

Sve*_*ven 8 multicast ipv6

我有一个带有 3 个节点(VM)的基本网络。

一个节点发布一个事件,其他节点监听它并在收到时打印一些东西。它曾经是一对一的(因此节点将事件分别提供给其他节点),但我想实现多播。

作为一个快速实验,我想在网络上进行基本的“广播”,但一直无法找出正确的 IPv6 地址。使用IPv4广播地址工作,两个节点都打印一些东西然后节点1的地址是:inet addr:192.168.56.101 Bcast:192.168.56.255 Mask:255.255.255.0 inet6 addr:fe80::a00:27ff:fef7:30 64 范围:链接

节点2:inet addr:192.168.56.102 Bcast:192.168.56.255 Mask:255.255.255.0 inet6 addr:fe80::a00:27ff:fe56:a2f7/64 Scope:Link

节点3:inet addr:192.168.56.103 Bcast:192.168.56.255 Mask:255.255.255.0 inet6 addr: fe80::a00:27ff:fe82:ae4a/64 Scope:Link

因此 IPv6 没有广播,而是使用多播。这些多播地址总是以 ff 开头。然后你得到了标志,默认情况下,分配的 mlc 为 0,瞬态的为 1。然后是范围。想要做一个基本的广播等效,我尝试了 ff01::1 它应该到达所有节点和 ff01::2 所有路由器。但这不起作用。我也试过 ff02、ff05 和 ff0e。我在这里误解了一些东西,当节点 1 发布事件时,到达节点 2 和节点 3 的正确多播/广播 ipv6 地址是什么?

编辑:

经过一些实验,我发现我什至无法 ping 通 inet6 地址,但可以 ping 通 ipv4 地址!有什么线索吗?

Mic*_*ton 10

向链路上所有节点多播的正确地址是ff02::1%<interface>。您可能忘记了接口 ID,这是链接范围地址必需的

例如:

# ping6 ff02::1%br0
PING ff02::1%br0(ff02::1) 56 data bytes
64 bytes from fe80::6e62:6dff:fed1:dfad: icmp_seq=1 ttl=64 time=0.052 ms
64 bytes from fe80::5054:ff:fede:b69c: icmp_seq=1 ttl=64 time=0.455 ms (DUP!)
64 bytes from fe80::5054:ff:fe90:de19: icmp_seq=1 ttl=64 time=0.650 ms (DUP!)
64 bytes from fe80::6e62:6dff:fed1:dfad: icmp_seq=2 ttl=64 time=0.046 ms
64 bytes from fe80::5054:ff:fe90:de19: icmp_seq=2 ttl=64 time=0.203 ms (DUP!)
64 bytes from fe80::5054:ff:fede:b69c: icmp_seq=2 ttl=64 time=0.241 ms (DUP!)
64 bytes from fe80::6e62:6dff:fed1:dfad: icmp_seq=3 ttl=64 time=0.064 ms
64 bytes from fe80::5054:ff:fe90:de19: icmp_seq=3 ttl=64 time=0.237 ms (DUP!)
64 bytes from fe80::5054:ff:fede:b69c: icmp_seq=3 ttl=64 time=0.254 ms (DUP!)
^C
--- ff02::1%br0 ping statistics ---
3 packets transmitted, 3 received, +6 duplicates, 0% packet loss, time 2000ms
rtt min/avg/max/mdev = 0.046/0.244/0.650/0.189 ms
Run Code Online (Sandbox Code Playgroud)

中的地址ff01::/16用于接口-本地多播,这仅对向本地主机多播真正有用。

参考资料:RFC 4291