- 05/31/2018
- 2 minuti per leggere
-
- s
- v
- m
Questa sezione descrive le migliori pratiche per portare un’applicazione IPv6 broadcast alle capacità multicast disponibili con Windows Sockets.
Confronto tra IPv4 e IPv6
La considerazione più importante quando si prepara il porting di un’applicazione broadcast IPv4 su IPv6 è questa: IPv6 non ha implementato il concetto di broadcast. Invece, IPv6 usa il multicast.
Multicast per IPv6 può emulare le tradizionali capacità di broadcast che si trovano in IPv4. Impostare l’opzione socket IPV6_ADD_MEMBERSHIP con l’indirizzo IPv6 impostato sull’indirizzo link-local scope all nodes (FF02::1) è equivalente al broadcasting su indirizzi broadcast IPv4 utilizzando l’opzione socket SO_BROADCAST. Questo indirizzo è talvolta chiamato il gruppo multicast di tutti i nodi. Per le applicazioni che vogliono semplicemente l’emulazione del broadcast per IPv6, questo approccio è operativamente equivalente. Una differenza notevole con IPv6, tuttavia, è che i multicast sull’indirizzo del gruppo multicast all-nodes non sono ricevuti per default (i broadcast IPv4 sono ricevuti per default). I programmatori di applicazioni devono usare l’opzione socket IPV6_ADD_MEMBERSHIP per abilitare la ricezione multicast da qualsiasi fonte, incluso l’indirizzo di gruppo multicast all-nodes.
Nota
In IPv6, la selezione dell’interfaccia è specificata nella struttura dell’argomento passato all’opzione socket multicast o IOCTL.
Ma per trasmissioni più ricche, più robuste, più selettive e più gestibili a più host, gli sviluppatori di applicazioni dovrebbero considerare di passare a un modello multicast.
Passare al multicast
Con il multicast, i programmatori di applicazioni possono scegliere selettivamente una particolare coppia sorgente/gruppo, permettendo un modello di ricezione selettiva. Il Multicast Listener Discovery (MLD) su IPv6 e la versione 3 dell’Internet Group Management Protocol (IGMPv3) su IPv4 supportano la programmazione multicasting. Inoltre, il multicast permette alle applicazioni di bloccare (o sbloccare) specificamente i mittenti all’interno di un gruppo, proteggendo ulteriormente le applicazioni dai rogue broadcaster. Questa capacità è disponibile sia per IPv4 (richiede IGMPv3) che per IPv6 (richiede MLDv2).
Ci sono due scenari principali per i programmatori di applicazioni che usano il multicast: quelli che fanno il porting da applicazioni broadcast (o multicast) IPv4 a IPv6, e quelli che creano nuove applicazioni multicast IPv6.
Per il porting di applicazioni esistenti, ci sono due opzioni per passare al multicast IPv6: usare le opzioni socket e usare le IOCTL.
- L’uso delle opzioni socket è un approccio basato sul cambiamento, che permette agli sviluppatori di cambiare le proprietà socket come richiesto (come bloccare o sbloccare un mittente, aggiungere una nuova sorgente, e così via). Questo approccio è più intuitivo ed è quello raccomandato. Per maggiori informazioni sull’approccio basato sul cambiamento alla programmazione multicast, vedere MLD e IGMP utilizzando Windows Sockets.
- Utilizzare le IOCTL è un approccio basato sullo stato finale, perché consente agli sviluppatori di fornire uno stato del socket completamente configurato, comprese le liste di inclusione ed esclusione, con una sola chiamata. Per maggiori informazioni sull’approccio basato sullo stato finale, vedere Programmazione multicast basata sullo stato finale.
Per coloro che creano nuove applicazioni multicast IPv6, la pratica raccomandata è quella di usare le opzioni socket, piuttosto che usare le IOCTL.
C’è un altro approccio per creare applicazioni multicast con IPv6, e questo comporta l’uso della funzione WSAJoinLeaf. Mentre l’uso della funzione WSAJoinLeaf non è la pratica raccomandata, ci sono situazioni che possono imporre il suo uso. Per esempio, uno svantaggio nell’usare le opzioni socket su Windows Server 2003 e precedenti è che sono specifiche della versione IP. Su queste vecchie versioni di Windows, le opzioni socket devono essere diverse per IPv6 e IPv4. Su Windows Vista e successivi, sono supportate nuove opzioni socket che possono essere utilizzate sia con IPv4 che con IPv6. La funzione WSAJoinLeaf, al contrario, è agnostica alla versione IP e al protocollo, e quindi può essere un approccio utile per costruire un’applicazione che deve lavorare con più versioni IP su Windows Server 2003 e precedenti. L’uso della funzione WSAJoinLeaf può essere più appropriato in certe situazioni in cui è richiesto l’agnosticismo del protocollo e della versione IP.