Comportamento desiderato
Quando un'applicazione invia un pacchetto all'indirizzo IP di trasmissione globale 255.255.255.255
, vorrei che il pacchetto fosse inviato all'indirizzo di trasmissione globale Ethernet ( ff:ff:ff:ff:ff:ff
), su tutte le interfacce.
Su Linux e probabilmente anche su altri sistemi operativi questo sembra funzionare. Windows XP e Windows 7 presentano comportamenti diversi a questo proposito, e nessuno dei due comportamenti è desiderabile per la mia situazione.
Comportamento di Windows XP
Il pacchetto verrà inviato correttamente alla prima interfaccia di rete (l'ordine delle interfacce è specificato in "Connessioni di rete / Impostazioni avanzate / avanzate"). Verrà inoltre inviato alle altre interfacce.
Finora è tutto a posto. Il problema è che, quando si invia ad altre interfacce, l'indirizzo di origine del pacchetto di trasmissione è l'indirizzo IP della prima interfaccia. Ad esempio, immagina questa configurazione di rete (l'ordine è importante):
- Adattatore 1: indirizzo IP
192.168.0.1
- Adattatore 2: indirizzo IP
10.0.0.1
- Adattatore 3: indirizzo IP
172.17.0.1
Ora, se invio un pacchetto di trasmissione, verranno inviati i seguenti pacchetti (con indirizzi IP di origine e destinazione):
- Sull'adattatore 1:
192.168.0.1
=>255.255.255.255
- Sull'adattatore 2:
192.168.0.1
=>255.255.255.255
Sull'adattatore 3:
192.168.0.1
=>255.255.255.255
In pratica, le applicazioni che utilizzano i pacchetti di trasmissione non funzionano su interfacce diverse dall'adattatore 1. A mio avviso, si tratta di un bug palese nello stack TCP / IP di Windows XP.
Comportamento di Windows 7
La modifica dell'ordine dell'interfaccia di rete non sembra avere alcun effetto su Windows 7. Al contrario, la trasmissione sembra essere controllata dalla tabella di instradamento 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
===========================================================================
Vedi i 255.255.255.255
percorsi? Sì, controllano i pacchetti di trasmissione. In questa situazione, i pacchetti di trasmissione verranno inviati tramite il 192.168.0.3
perché ha la metrica inferiore ... ma non alle altre interfacce.
È possibile modificare l'interfaccia attraverso la quale i pacchetti di trasmissione globali verranno inviati molto facilmente (basta aggiungere una 255.255.255.255
route persistente con una metrica bassa). Ma non importa quanto ci provi, i pacchetti di trasmissione verranno inviati su una sola interfaccia, non tutti come mi piacerebbe che facesse.
Conclusione
- Windows 7 invia solo pacchetti di trasmissione a un'unica interfaccia. Puoi scegliere quale, ma non è questo il punto.
- Windows XP invia pacchetti di trasmissione a tutte le interfacce, ma li invia come previsto a un'unica interfaccia, che in pratica equivale al comportamento di Windows 7.
L'obiettivo. il gol
Voglio cambiare questo supporto di trasmissione IP globale in Windows (preferibilmente Windows 7) una volta per tutte. Naturalmente il modo migliore sarebbe avere una sorta di modifica della configurazione supportata (hack del registro o simili), ma sono aperto a tutti i suggerimenti.
Qualche idea?