我有一项服务,说它正在使用接口“广播0.0.0.0
” 。eth0
sendto()
但是,使用 检查流量时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
{ 0, 0 }
此网络上的此主机。不得发送,除非作为主机获知其自身 IP 地址的初始化过程的一部分作为源地址。
绝不能广播到 0.0.0.0。
所以我猜这是未定义的行为,应该在服务中修复。它在lo
这里广播的事实是此设置所特有的,但不应该具有普遍性。