应用程序从不同子网接收广播

应用程序从不同子网接收广播

我有 2 个 Linux 机器,描述如下

框 A:内核:Linux 2.6 IP:172.19.1.99/24

框 B:内核:Linux 3.14 IP:192.168.200.100/24

与二层交换机连接

两个盒子都运行 UDP 广播服务和 UDP 接收器服务。广播发送的任何内容都由接收服务接收。这些服务共同构成了在这些盒子上运行的 Web 应用使用的自定义发现协议。

问题:

当盒子 A 移动到 192.168.200.0/24 子网,然后移回 172.19.1.0/24 子网时,盒子 B 上的接收器服务仍将接收来自盒子 A 的广播,但从技术上讲,它应该停止接收来自 A 的广播。现在,在盒子 A 上运行的相同服务此时不会接收来自盒子 B 的广播。

只是为了确认我将 strace 连接到 Box B 上的接收服务,并且我可以看到recvfrom系统调用确实正在接收 Box A 发送到地址 192.168.200.255 的广播。

现在,如果我终止 Box B 上的接收服务并重新启动它,那么它将停止接收从 Box A 发送的广播。

简而言之,仅当在同一子网中运行的盒子迁移到不同的子网时才会出现此问题,并且仅在盒子 B 上看到。

知道为什么会发生这种情况吗?

更新:只是为了添加更多信息,B​​ox B 也使用带有 conntrack 模块的 iptables,这会如何影响这种行为?

相关内容