Comportamento desejado
Quando um aplicativo envia um pacote para o endereço IP de broadcast global 255.255.255.255
, eu gostaria que o pacote fosse enviado para o endereço de broadcast global Ethernet ( ff:ff:ff:ff:ff:ff
), em todas as interfaces.
No Linux e provavelmente em outros sistemas operacionais, isso parece funcionar. O Windows XP e o Windows 7 exibem comportamentos diferentes sobre isso, e nenhum comportamento é desejável para a minha situação.
Comportamento do Windows XP
O pacote será enviado corretamente para a primeira interface de rede (a ordem da interface é especificada em "Conexões de rede / Configurações avançadas / avançadas"). Também será enviado para as outras interfaces.
Tudo está certo até agora. O problema é que, ao enviar para as outras interfaces, o endereço de origem do pacote de transmissão é o endereço IP da primeira interface. Por exemplo, imagine esta configuração de rede (a ordem é importante):
- Adaptador 1: Endereço IP
192.168.0.1
- Adaptador 2: endereço IP
10.0.0.1
- Adaptador 3: endereço IP
172.17.0.1
Agora, se eu enviar um pacote de broadcast, os seguintes pacotes serão enviados (com endereços IP de origem e de destino):
- No adaptador 1:
192.168.0.1
=>255.255.255.255
- No adaptador 2:
192.168.0.1
=>255.255.255.255
No adaptador 3:
192.168.0.1
=>255.255.255.255
Na prática, os aplicativos que usam pacotes de transmissão não funcionarão em nenhuma outra interface além do adaptador 1. Na minha opinião, esse é um bug flagrante na pilha TCP / IP do Windows XP.
Comportamento do Windows 7
Modificar a ordem da interface de rede não parece ter efeito no Windows 7. Em vez disso, a transmissão parece ser controlada pela tabela de rotas IP.
IPv4 Route Table
===========================================================================
Active Routes:
Network Destination Netmask Gateway Interface Metric
0.0.0.0 0.0.0.0 10.202.254.254 10.202.1.2 286
0.0.0.0 0.0.0.0 192.168.0.1 192.168.0.3 10
10.202.0.0 255.255.0.0 On-link 10.202.1.2 286
10.202.1.2 255.255.255.255 On-link 10.202.1.2 286
10.202.255.255 255.255.255.255 On-link 10.202.1.2 286
127.0.0.0 255.0.0.0 On-link 127.0.0.1 306
127.0.0.1 255.255.255.255 On-link 127.0.0.1 306
127.255.255.255 255.255.255.255 On-link 127.0.0.1 306
192.168.0.0 255.255.255.0 On-link 192.168.0.3 266
192.168.0.3 255.255.255.255 On-link 192.168.0.3 266
192.168.0.255 255.255.255.255 On-link 192.168.0.3 266
224.0.0.0 240.0.0.0 On-link 127.0.0.1 306
224.0.0.0 240.0.0.0 On-link 192.168.0.3 266
224.0.0.0 240.0.0.0 On-link 10.202.1.2 286
255.255.255.255 255.255.255.255 On-link 127.0.0.1 306
255.255.255.255 255.255.255.255 On-link 192.168.0.3 266
255.255.255.255 255.255.255.255 On-link 10.202.1.2 286
===========================================================================
Veja as 255.255.255.255
rotas? Sim, eles controlam pacotes de transmissão. Nesta situação, os pacotes de broadcast serão enviados via o 192.168.0.3
porque possui a métrica mais baixa ... mas não para as outras interfaces.
Você pode alterar a interface através da qual os pacotes de transmissão global serão enviados com muita facilidade (basta adicionar uma 255.255.255.255
rota persistente com uma métrica baixa). Mas não importa o quanto você tente, os pacotes de transmissão serão enviados apenas em uma única interface, nem todas, como eu gostaria.
Conclusão
- O Windows 7 envia apenas pacotes de transmissão para uma interface. Você pode escolher qual, mas esse não é o ponto aqui.
- O Windows XP envia pacotes de difusão para todas as interfaces, mas somente os envia conforme o esperado para uma interface, o que na prática é equivalente ao comportamento do Windows 7.
O objetivo
Quero alterar esse suporte global de transmissão de IP no Windows (de preferência no Windows 7) de uma vez por todas. É claro que a melhor maneira seria ter algum tipo de alteração de configuração suportada (corte de registro ou similar), mas estou aberto a todas as sugestões.
Alguma ideia?