在 0.0.0.0 上广播

在 0.0.0.0 上广播

我有一项服务,说它正在使用接口“广播0.0.0.0” 。eth0sendto()

但是,使用 检查流量时tcpdump,似乎它在lo接口上广播,而不是在网络上广播。例如,我在lo接口上看到这样的消息,但在eth0接口上什么也没有:

22:38:17.814047 IP localhost.14557 > localhost.14540:UDP,长度 36

在运行该服务的同一台机器上,我可以通过运行以下命令查看 netcat 中的流量:

$ netcat -l -u -p 14540

但我没有看到来自另一台机器的流量(实际上我正在使用 docker 容器)。

为了验证容器之间的广播是否有效,我运行:

$ netcat -l -u -p 54321

在第一个容器上,并且:

$ echo "foobar" | netcat -ub 255.255.255.255 54321

我在第一个容器的终端上看到“foobar”。据我所知,这意味着我正在通过零网络0.0.0.0,与我上面服务所声称的相同)。

为什么我的“foobar”广播可以在网络上进行(接口 eth0),而服务广播消息却停留在本地(接口lo)?

答案1

按照RFC 1122,第 3.2.1.3(a)节

{ 0, 0 }

此网络上的此主机。不得发送,除非作为主机获知其自身 IP 地址的初始化过程的一部分作为源地址。

绝不能广播到 0.0.0.0。

所以我猜这是未定义的行为,应该在服务中修复。它在lo这里广播的事实是此设置所特有的,但不应该具有普遍性。

相关内容