我正在尝试在我的 Linux 机器上接收来自不同子网上的主机的多播帧。为了进行实验,并且仅针对此实验,我有两台通过网络交换机连接的机器:
- 机器 A(192.168.10.1/24)运行一个简单的应用程序,该应用程序有一个监听 UDP 套接字(端口 10000)并加入到多播组(例如 226.0.0.1);
- 机器 B(192.168.20.1/24)向多播组 226.0.0.1 发送 UDP 数据报(目标端口 10000)。
在机器 AI 上运行tcpdump
可以看到机器 B 发送的数据包,但数据包不会传送到应用层。只有当机器 B 与机器 A 位于同一子网时,数据包才会传送到应用层。哪种方法可以接收来自不同子网的多播帧?
答案1
在子网之间路由流量的路由器需要支持多播转发。IGMP 就是这样一种协议,它允许在不同的 IP 子网之间路由多播流量,并且受到 Linux 和大多数 Cisco 路由器的支持。
答案2
我估计您有多宿主服务器。尝试在每台本地计算机上为远程子网添加静态路由。
在 192.168.10.1/24 上:route add -net 192.168.20.0/24 <eth#>
在 192.168.20.1/24 上:route add -net 192.168.10.0/24 <eth#>