广播在0.0.0.0

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

但是,使用tcpdump检查stream量时,似乎是在lo接口上广播,而不是在networking上广播。 例如,我在lo界面上看到这样的消息, eth0接口上没有任何消息:

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

在运行服务的同一台机器上,我可以通过运行netcat来查看stream量:

 $ netcat -l -u -p 14540 

但我没有看到来自另一台机器的stream量(实际上我使用的是docker集装箱)。

为了validation容器之间的广播是否正常工作,我运行:

 $ netcat -l -u -p 54321 

在第一个容器上,和:

 $ echo "foobar" | netcat -ub 255.255.255.255 54321 

我在第一个容器的terminal上出现“foobar”。 据我所知,这意味着我在零networking上播放“foobar”( 0.0.0.0 ,与我上面的服务声称的一样)。

为什么我的“foobar”广播在networking上(接口eth0)和服务广播消息保持本地(接口lo )?

根据RFC 1122,第3.2.1.3(a)节 :

{0,0}

这个networking上的主机。 除了源地址作为主机学习自己的IP地址的初始化过程的一部分之外,不得发送。

一个不能播出到0.0.0.0。

所以我想这是未定义的行为,它应该在服务中修复。 它在这里广播的事实是特定于这个设置,但不应该被概括。