gpt4 book ai didi

multicast - 在 Linux 上进行多播时选择接口(interface)

转载 作者:行者123 更新时间:2023-12-03 22:00:56 26 4
gpt4 key购买 nike

我正在使用一个由大约 40 个节点组成的集群运行 Debian 4。每个节点都运行一个守护进程,该守护进程位于并监听多播 IP。

我编写了一些客户端软件,通过 LAN 发送多播,客户端计算机与集群位于同一交换机上,这样集群中的每个节点都会收到数据包并做出响应。

效果很好,除非我在同时具有 LAN 和 WAN 接口(interface)的计算机上运行客户端软件。如果有 WAN 接口(interface),则多播不起作用。很明显,我认为多播错误地通过 WAN 接口(interface) (eth0),而不是 LAN (eth1)。所以,我使用 SO_BINDTODEVICE 套接字选项强制多播套接字使用 eth1,一切都很好。

但我认为内核的路由表应该确定 LAN (eth1) 显然是多播成本较低的目的地。是否有某些原因我必须明确强制套接字使用 eth1?而且,是否有某种方式(可能是 ioctl 调用)可以让应用程序自动确定特定接口(interface)是 LAN 还是 WAN?

最佳答案

If you don't explicitly bind to an interface, I believe Linux uses the interface for the default unicast route for multicast sending.

Linux 需要多播路由,如果不存在,您将收到 EHOSTUNREACH 或 ENETUNREACH 错误。 LCM project记录这个可能的问题。如果您使用套接字选项 IP_MULTICAST_IF 或 IPV6_MULTICAST_IF,路由将被覆盖。您应该可以通过 scope-id field 指定接口(interface)在 IPv6 地址中,但并非所有平台都正确支持它。正如 dameiss 所指出的,Stevens 的 Unix Network Programming 书籍涵盖了这些细节,您可以通过 Google Books 免费浏览大部分关于多播的章节。

关于multicast - 在 Linux 上进行多播时选择接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/784657/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com