Broadcasting on 0.0.0.0

2

Eu tenho um serviço dizendo que está "transmitindo em 0.0.0.0 " usando a interface eth0 com sendto() .

No entanto, ao verificar o tráfego com tcpdump , parece que está transmitindo na interface lo e não na rede. Por exemplo, vejo mensagens como essa na interface lo e nada na interface eth0 :

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

Na mesma máquina que está executando o serviço, posso ver o tráfego com o netcat executando:

$ netcat -l -u -p 14540

Mas não vejo esse tráfego de outra máquina (na verdade, estou usando contêineres docker).

Para verificar se a transmissão funciona entre os contêineres, corro:

$ netcat -l -u -p 54321

no primeiro contêiner e:

$ echo "foobar" | netcat -ub 255.255.255.255 54321

Eu recebo "foobar" aparecendo no terminal do primeiro container. Tanto quanto eu entendo, isso significa que estou transmitindo "foobar" sobre a rede zero ( 0.0.0.0 , o mesmo que o reivindicado pelo meu serviço acima).

Por que minha transmissão "foobar" vai para a rede (interface eth0) e as mensagens de difusão de serviço permanecem locais (interface lo )?

    
por JonesV 28.10.2017 / 20:23

1 resposta

1

Conforme RFC 1122, seção 3.2.1.3 (a) :

{ 0, 0 }

This host on this network. MUST NOT be sent, except as a source address as part of an initialization procedure by which the host learns its own IP address.

Não se deve transmitir para 0.0.0.0.

Então, acho que isso é um comportamento indefinido e deve ser corrigido no serviço. O fato de que ele transmite em lo aqui é específico para essa configuração, mas não deve ser generalizado.

    
por 03.11.2017 / 10:07

Tags