我有一个服务,说它是“使用接口eth0与sendto()在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。
所以我想这是未定义的行为,它应该在服务中修复。 它在这里广播的事实是特定于这个设置,但不应该被概括。